From 26efd550df63b22a370531db1b70a099851c0015 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Thu, 24 Aug 2023 23:13:02 -0600 Subject: [PATCH] Added animation factory, fixed ub on wriggler, skyboxes and cake are loaded from otr, and fixed audio corruption --- CMakeLists.txt | 69 +- include/animation_table.h | 844 +++++++++++++------------ include/level_headers.h | 31 + include/types.h | 1 - levels/ending/leveldata.c | 2 - levels/scripts.c | 2 +- libultraship | 2 +- src/game/behaviors/wiggler.inc.c | 2 - src/game/game_init.c | 4 - src/game/game_init.h | 6 - src/game/mario.c | 22 +- src/game/rendering_graph_node.c | 6 +- src/port/Engine.cpp | 2 + src/port/Engine.h | 11 +- src/port/Game.cpp | 2 +- src/port/importer/AnimationFactory.cpp | 52 ++ src/port/importer/AnimationFactory.h | 16 + src/port/importer/types/Animation.cpp | 11 + src/port/importer/types/Animation.h | 34 + 19 files changed, 605 insertions(+), 514 deletions(-) create mode 100644 include/level_headers.h create mode 100644 src/port/importer/AnimationFactory.cpp create mode 100644 src/port/importer/AnimationFactory.h create mode 100644 src/port/importer/types/Animation.cpp create mode 100644 src/port/importer/types/Animation.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c984ede4..8c929f7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,6 +135,8 @@ file(GLOB_RECURSE ALL_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/port/*.h" "src/port/*.c" "src/port/*.cpp" + "src/port/importer/*.cpp" + "src/port/importer/types/*.cpp" "text/*.c" "textures/*.h" "textures/*.c" @@ -146,33 +148,11 @@ list(FILTER ALL_FILES EXCLUDE REGEX "bin/eu/.*.c") list(FILTER ALL_FILES EXCLUDE REGEX "src/game/main.c") list(FILTER ALL_FILES EXCLUDE REGEX "src/pc/dlmalloc.c") -add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/level_headers.tmp - COMMAND ${CPP} -I${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/levels/level_headers.h.in > ${CMAKE_CURRENT_BINARY_DIR}/include/level_headers.tmp - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} -) - -add_custom_command( - OUTPUT include/level_headers.h - COMMAND ${Python3_EXECUTABLE} tools/wrapinclude.py ${CMAKE_CURRENT_BINARY_DIR}/include/level_headers.tmp > ${CMAKE_CURRENT_BINARY_DIR}/include/level_headers.h - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/include/level_headers.tmp -) - -list(APPEND ALL_FILES ${CMAKE_CURRENT_BINARY_DIR}/include/level_headers.h) - #==============================================================================# # Generated Source Code Files # #==============================================================================# -add_custom_command( - OUTPUT assets/mario_anim_data.c - COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/mario_anims_converter.py > ${CMAKE_CURRENT_BINARY_DIR}/assets/mario_anim_data.c - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} -) -list(APPEND ALL_FILES ${CMAKE_CURRENT_BINARY_DIR}/assets/mario_anim_data.c) - add_custom_command( OUTPUT include/text_strings.h COMMAND $ charmap.txt ${CMAKE_CURRENT_SOURCE_DIR}/include/text_strings.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/text_strings.h @@ -270,51 +250,6 @@ if(APPLE) target_link_libraries(${PROJECT_NAME} PRIVATE SDL2::SDL2) endif() -#==============================================================================# -# Texture Generation # -#==============================================================================# - -set (TEXTURE_ENCODING u8) -set(INC_C_FILES "") - -file(GLOB_RECURSE ORGFILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "actors/*.png") -file(GLOB_RECURSE ORGFILES2 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "levels/*.png") -file(GLOB_RECURSE ORGFILES3 RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "textures/*.png") -list (APPEND ORGFILES ${ORGFILES2}) -list (APPEND ORGFILES ${ORGFILES3}) -list(FILTER ORGFILES EXCLUDE REGEX "textures/ipl3_raw/.*.png") -list(FILTER ORGFILES EXCLUDE REGEX "textures/skyboxes/.*.png") -foreach(orgfile ${ORGFILES}) - get_filename_component(OUTPUT_FILE_WLE ${orgfile} NAME_WLE) - get_filename_component(OUTPUT_DIR ${orgfile} DIRECTORY) - set(OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_DIR}/${OUTPUT_FILE_WLE}.inc.c) - string(REPLACE "." ";" FORMAT ${OUTPUT_FILE_WLE}) - list(POP_BACK FORMAT FORMAT2) - add_custom_command( - OUTPUT ${OUTPUT_FILE} - COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR} - VERBATIM COMMAND $ -s ${TEXTURE_ENCODING} -i ${OUTPUT_FILE} -g ${CMAKE_CURRENT_SOURCE_DIR}/${orgfile} -f ${FORMAT2} - DEPENDS n64graphics - ) - list(APPEND INC_C_FILES ${OUTPUT_FILE}) -endforeach(orgfile) - - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text-tmp - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/text/us - COMMAND ${CPP} -I${CMAKE_CURRENT_SOURCE_DIR}/text/us ${CMAKE_CURRENT_SOURCE_DIR}/text/define_text.inc.c > ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text-tmp - ) - - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text.inc.c - COMMAND $ ${CMAKE_CURRENT_SOURCE_DIR}/charmap.txt ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text-tmp ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text.inc.c - VERBATIM - DEPENDS textconv - DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text-tmp - ) - - list(APPEND INC_C_FILES ${CMAKE_CURRENT_BINARY_DIR}/text/us/define_text.inc.c) - #==============================================================================# # Sound File Generation # #==============================================================================# diff --git a/include/animation_table.h b/include/animation_table.h index 29587a14..41a95cd8 100644 --- a/include/animation_table.h +++ b/include/animation_table.h @@ -1,602 +1,634 @@ -// This file was generated by tools/anim_reorder.py #pragma once -#include "types.h" +#include "align_asset_macro.h" -#define BIND_MARIO_ANIMATION(id) anim_##id +#define BIND_MARIO_ANIMATION(id) gAnimation##id -// Animation declarations for anim_00.inc.c -extern const struct Animation anim_00[]; +#define dgAnimation00 "assets/anims/anim_00" +static const ALIGN_ASSET(2) char gAnimation00[] = dgAnimation00; -// Animation declarations for anim_01_02.inc.c -extern const struct Animation anim_01[]; -extern const struct Animation anim_02[]; +#define dgAnimation01 "assets/anims/anim_01" +static const ALIGN_ASSET(2) char gAnimation01[] = dgAnimation01; -// Animation declarations for anim_03.inc.c -extern const struct Animation anim_03[]; +#define dgAnimation02 "assets/anims/anim_02" +static const ALIGN_ASSET(2) char gAnimation02[] = dgAnimation02; -// Animation declarations for anim_04.inc.c -extern const struct Animation anim_04[]; +#define dgAnimation03 "assets/anims/anim_03" +static const ALIGN_ASSET(2) char gAnimation03[] = dgAnimation03; -// Animation declarations for anim_05.inc.c -extern const struct Animation anim_05[]; +#define dgAnimation04 "assets/anims/anim_04" +static const ALIGN_ASSET(2) char gAnimation04[] = dgAnimation04; -// Animation declarations for anim_06.inc.c -extern const struct Animation anim_06[]; +#define dgAnimation05 "assets/anims/anim_05" +static const ALIGN_ASSET(2) char gAnimation05[] = dgAnimation05; -// Animation declarations for anim_07_08.inc.c -extern const struct Animation anim_07[]; -extern const struct Animation anim_08[]; +#define dgAnimation06 "assets/anims/anim_06" +static const ALIGN_ASSET(2) char gAnimation06[] = dgAnimation06; -// Animation declarations for anim_09.inc.c -extern const struct Animation anim_09[]; +#define dgAnimation07 "assets/anims/anim_07" +static const ALIGN_ASSET(2) char gAnimation07[] = dgAnimation07; -// Animation declarations for anim_0A.inc.c -extern const struct Animation anim_0A[]; +#define dgAnimation08 "assets/anims/anim_08" +static const ALIGN_ASSET(2) char gAnimation08[] = dgAnimation08; -// Animation declarations for anim_0B_0C.inc.c -extern const struct Animation anim_0B[]; -extern const struct Animation anim_0C[]; +#define dgAnimation09 "assets/anims/anim_09" +static const ALIGN_ASSET(2) char gAnimation09[] = dgAnimation09; -// Animation declarations for anim_0D.inc.c -extern const struct Animation anim_0D[]; +#define dgAnimation0A "assets/anims/anim_0A" +static const ALIGN_ASSET(2) char gAnimation0A[] = dgAnimation0A; -// Animation declarations for anim_0E.inc.c -extern const struct Animation anim_0E[]; +#define dgAnimation0B "assets/anims/anim_0B" +static const ALIGN_ASSET(2) char gAnimation0B[] = dgAnimation0B; -// Animation declarations for anim_0F_10.inc.c -extern const struct Animation anim_0F[]; -extern const struct Animation anim_10[]; +#define dgAnimation0C "assets/anims/anim_0C" +static const ALIGN_ASSET(2) char gAnimation0C[] = dgAnimation0C; -// Animation declarations for anim_11.inc.c -extern const struct Animation anim_11[]; +#define dgAnimation0D "assets/anims/anim_0D" +static const ALIGN_ASSET(2) char gAnimation0D[] = dgAnimation0D; -// Animation declarations for anim_12.inc.c -extern const struct Animation anim_12[]; +#define dgAnimation0E "assets/anims/anim_0E" +static const ALIGN_ASSET(2) char gAnimation0E[] = dgAnimation0E; -// Animation declarations for anim_13.inc.c -extern const struct Animation anim_13[]; +#define dgAnimation0F "assets/anims/anim_0F" +static const ALIGN_ASSET(2) char gAnimation0F[] = dgAnimation0F; -// Animation declarations for anim_14.inc.c -extern const struct Animation anim_14[]; +#define dgAnimation10 "assets/anims/anim_10" +static const ALIGN_ASSET(2) char gAnimation10[] = dgAnimation10; -// Animation declarations for anim_15.inc.c -extern const struct Animation anim_15[]; +#define dgAnimation11 "assets/anims/anim_11" +static const ALIGN_ASSET(2) char gAnimation11[] = dgAnimation11; -// Animation declarations for anim_16.inc.c -extern const struct Animation anim_16[]; +#define dgAnimation12 "assets/anims/anim_12" +static const ALIGN_ASSET(2) char gAnimation12[] = dgAnimation12; -// Animation declarations for anim_17.inc.c -extern const struct Animation anim_17[]; +#define dgAnimation13 "assets/anims/anim_13" +static const ALIGN_ASSET(2) char gAnimation13[] = dgAnimation13; -// Animation declarations for anim_18.inc.c -extern const struct Animation anim_18[]; +#define dgAnimation14 "assets/anims/anim_14" +static const ALIGN_ASSET(2) char gAnimation14[] = dgAnimation14; -// Animation declarations for anim_19.inc.c -extern const struct Animation anim_19[]; +#define dgAnimation15 "assets/anims/anim_15" +static const ALIGN_ASSET(2) char gAnimation15[] = dgAnimation15; -// Animation declarations for anim_1A.inc.c -extern const struct Animation anim_1A[]; +#define dgAnimation16 "assets/anims/anim_16" +static const ALIGN_ASSET(2) char gAnimation16[] = dgAnimation16; -// Animation declarations for anim_1B.inc.c -extern const struct Animation anim_1B[]; +#define dgAnimation17 "assets/anims/anim_17" +static const ALIGN_ASSET(2) char gAnimation17[] = dgAnimation17; -// Animation declarations for anim_1C.inc.c -extern const struct Animation anim_1C[]; +#define dgAnimation18 "assets/anims/anim_18" +static const ALIGN_ASSET(2) char gAnimation18[] = dgAnimation18; -// Animation declarations for anim_1D.inc.c -extern const struct Animation anim_1D[]; +#define dgAnimation19 "assets/anims/anim_19" +static const ALIGN_ASSET(2) char gAnimation19[] = dgAnimation19; -// Animation declarations for anim_1E.inc.c -extern const struct Animation anim_1E[]; +#define dgAnimation1A "assets/anims/anim_1A" +static const ALIGN_ASSET(2) char gAnimation1A[] = dgAnimation1A; -// Animation declarations for anim_1F.inc.c -extern const struct Animation anim_1F[]; +#define dgAnimation1B "assets/anims/anim_1B" +static const ALIGN_ASSET(2) char gAnimation1B[] = dgAnimation1B; -// Animation declarations for anim_20.inc.c -extern const struct Animation anim_20[]; +#define dgAnimation1C "assets/anims/anim_1C" +static const ALIGN_ASSET(2) char gAnimation1C[] = dgAnimation1C; -// Animation declarations for anim_21.inc.c -extern const struct Animation anim_21[]; +#define dgAnimation1D "assets/anims/anim_1D" +static const ALIGN_ASSET(2) char gAnimation1D[] = dgAnimation1D; -// Animation declarations for anim_22.inc.c -extern const struct Animation anim_22[]; +#define dgAnimation1E "assets/anims/anim_1E" +static const ALIGN_ASSET(2) char gAnimation1E[] = dgAnimation1E; -// Animation declarations for anim_23.inc.c -extern const struct Animation anim_23[]; +#define dgAnimation1F "assets/anims/anim_1F" +static const ALIGN_ASSET(2) char gAnimation1F[] = dgAnimation1F; -// Animation declarations for anim_24.inc.c -extern const struct Animation anim_24[]; +#define dgAnimation20 "assets/anims/anim_20" +static const ALIGN_ASSET(2) char gAnimation20[] = dgAnimation20; -// Animation declarations for anim_25.inc.c -extern const struct Animation anim_25[]; +#define dgAnimation21 "assets/anims/anim_21" +static const ALIGN_ASSET(2) char gAnimation21[] = dgAnimation21; -// Animation declarations for anim_26.inc.c -extern const struct Animation anim_26[]; +#define dgAnimation22 "assets/anims/anim_22" +static const ALIGN_ASSET(2) char gAnimation22[] = dgAnimation22; -// Animation declarations for anim_27.inc.c -extern const struct Animation anim_27[]; +#define dgAnimation23 "assets/anims/anim_23" +static const ALIGN_ASSET(2) char gAnimation23[] = dgAnimation23; -// Animation declarations for anim_28.inc.c -extern const struct Animation anim_28[]; +#define dgAnimation24 "assets/anims/anim_24" +static const ALIGN_ASSET(2) char gAnimation24[] = dgAnimation24; -// Animation declarations for anim_29.inc.c -extern const struct Animation anim_29[]; +#define dgAnimation25 "assets/anims/anim_25" +static const ALIGN_ASSET(2) char gAnimation25[] = dgAnimation25; -// Animation declarations for anim_2A.inc.c -extern const struct Animation anim_2A[]; +#define dgAnimation26 "assets/anims/anim_26" +static const ALIGN_ASSET(2) char gAnimation26[] = dgAnimation26; -// Animation declarations for anim_2B.inc.c -extern const struct Animation anim_2B[]; +#define dgAnimation27 "assets/anims/anim_27" +static const ALIGN_ASSET(2) char gAnimation27[] = dgAnimation27; -// Animation declarations for anim_2C_2D.inc.c -extern const struct Animation anim_2C[]; -extern const struct Animation anim_2D[]; +#define dgAnimation28 "assets/anims/anim_28" +static const ALIGN_ASSET(2) char gAnimation28[] = dgAnimation28; -// Animation declarations for anim_2E.inc.c -extern const struct Animation anim_2E[]; +#define dgAnimation29 "assets/anims/anim_29" +static const ALIGN_ASSET(2) char gAnimation29[] = dgAnimation29; -// Animation declarations for anim_2F.inc.c -extern const struct Animation anim_2F[]; +#define dgAnimation2A "assets/anims/anim_2A" +static const ALIGN_ASSET(2) char gAnimation2A[] = dgAnimation2A; -// Animation declarations for anim_30.inc.c -extern const struct Animation anim_30[]; +#define dgAnimation2B "assets/anims/anim_2B" +static const ALIGN_ASSET(2) char gAnimation2B[] = dgAnimation2B; -// Animation declarations for anim_31.inc.c -extern const struct Animation anim_31[]; +#define dgAnimation2C "assets/anims/anim_2C" +static const ALIGN_ASSET(2) char gAnimation2C[] = dgAnimation2C; -// Animation declarations for anim_32.inc.c -extern const struct Animation anim_32[]; +#define dgAnimation2D "assets/anims/anim_2D" +static const ALIGN_ASSET(2) char gAnimation2D[] = dgAnimation2D; -// Animation declarations for anim_33.inc.c -extern const struct Animation anim_33[]; +#define dgAnimation2E "assets/anims/anim_2E" +static const ALIGN_ASSET(2) char gAnimation2E[] = dgAnimation2E; -// Animation declarations for anim_34.inc.c -extern const struct Animation anim_34[]; +#define dgAnimation2F "assets/anims/anim_2F" +static const ALIGN_ASSET(2) char gAnimation2F[] = dgAnimation2F; -// Animation declarations for anim_35.inc.c -extern const struct Animation anim_35[]; +#define dgAnimation30 "assets/anims/anim_30" +static const ALIGN_ASSET(2) char gAnimation30[] = dgAnimation30; -// Animation declarations for anim_36.inc.c -extern const struct Animation anim_36[]; +#define dgAnimation31 "assets/anims/anim_31" +static const ALIGN_ASSET(2) char gAnimation31[] = dgAnimation31; -// Animation declarations for anim_37.inc.c -extern const struct Animation anim_37[]; +#define dgAnimation32 "assets/anims/anim_32" +static const ALIGN_ASSET(2) char gAnimation32[] = dgAnimation32; -// Animation declarations for anim_38.inc.c -extern const struct Animation anim_38[]; +#define dgAnimation33 "assets/anims/anim_33" +static const ALIGN_ASSET(2) char gAnimation33[] = dgAnimation33; -// Animation declarations for anim_39.inc.c -extern const struct Animation anim_39[]; +#define dgAnimation34 "assets/anims/anim_34" +static const ALIGN_ASSET(2) char gAnimation34[] = dgAnimation34; -// Animation declarations for anim_3A.inc.c -extern const struct Animation anim_3A[]; +#define dgAnimation35 "assets/anims/anim_35" +static const ALIGN_ASSET(2) char gAnimation35[] = dgAnimation35; -// Animation declarations for anim_3B.inc.c -extern const struct Animation anim_3B[]; +#define dgAnimation36 "assets/anims/anim_36" +static const ALIGN_ASSET(2) char gAnimation36[] = dgAnimation36; -// Animation declarations for anim_3C_3D.inc.c -extern const struct Animation anim_3C[]; -extern const struct Animation anim_3D[]; +#define dgAnimation37 "assets/anims/anim_37" +static const ALIGN_ASSET(2) char gAnimation37[] = dgAnimation37; -// Animation declarations for anim_3E.inc.c -extern const struct Animation anim_3E[]; +#define dgAnimation38 "assets/anims/anim_38" +static const ALIGN_ASSET(2) char gAnimation38[] = dgAnimation38; -// Animation declarations for anim_3F.inc.c -extern const struct Animation anim_3F[]; +#define dgAnimation39 "assets/anims/anim_39" +static const ALIGN_ASSET(2) char gAnimation39[] = dgAnimation39; -// Animation declarations for anim_40.inc.c -extern const struct Animation anim_40[]; +#define dgAnimation3A "assets/anims/anim_3A" +static const ALIGN_ASSET(2) char gAnimation3A[] = dgAnimation3A; -// Animation declarations for anim_41.inc.c -extern const struct Animation anim_41[]; +#define dgAnimation3B "assets/anims/anim_3B" +static const ALIGN_ASSET(2) char gAnimation3B[] = dgAnimation3B; -// Animation declarations for anim_42.inc.c -extern const struct Animation anim_42[]; +#define dgAnimation3C "assets/anims/anim_3C" +static const ALIGN_ASSET(2) char gAnimation3C[] = dgAnimation3C; -// Animation declarations for anim_43.inc.c -extern const struct Animation anim_43[]; +#define dgAnimation3D "assets/anims/anim_3D" +static const ALIGN_ASSET(2) char gAnimation3D[] = dgAnimation3D; -// Animation declarations for anim_44.inc.c -extern const struct Animation anim_44[]; +#define dgAnimation3E "assets/anims/anim_3E" +static const ALIGN_ASSET(2) char gAnimation3E[] = dgAnimation3E; -// Animation declarations for anim_45_46.inc.c -extern const struct Animation anim_45[]; -extern const struct Animation anim_46[]; +#define dgAnimation3F "assets/anims/anim_3F" +static const ALIGN_ASSET(2) char gAnimation3F[] = dgAnimation3F; -// Animation declarations for anim_47.inc.c -extern const struct Animation anim_47[]; +#define dgAnimation40 "assets/anims/anim_40" +static const ALIGN_ASSET(2) char gAnimation40[] = dgAnimation40; -// Animation declarations for anim_48.inc.c -extern const struct Animation anim_48[]; +#define dgAnimation41 "assets/anims/anim_41" +static const ALIGN_ASSET(2) char gAnimation41[] = dgAnimation41; -// Animation declarations for anim_49.inc.c -extern const struct Animation anim_49[]; +#define dgAnimation42 "assets/anims/anim_42" +static const ALIGN_ASSET(2) char gAnimation42[] = dgAnimation42; -// Animation declarations for anim_4A.inc.c -extern const struct Animation anim_4A[]; +#define dgAnimation43 "assets/anims/anim_43" +static const ALIGN_ASSET(2) char gAnimation43[] = dgAnimation43; -// Animation declarations for anim_4B.inc.c -extern const struct Animation anim_4B[]; +#define dgAnimation44 "assets/anims/anim_44" +static const ALIGN_ASSET(2) char gAnimation44[] = dgAnimation44; -// Animation declarations for anim_4C.inc.c -extern const struct Animation anim_4C[]; +#define dgAnimation45 "assets/anims/anim_45" +static const ALIGN_ASSET(2) char gAnimation45[] = dgAnimation45; -// Animation declarations for anim_4D_4E.inc.c -extern const struct Animation anim_4D[]; -extern const struct Animation anim_4E[]; +#define dgAnimation46 "assets/anims/anim_46" +static const ALIGN_ASSET(2) char gAnimation46[] = dgAnimation46; -// Animation declarations for anim_4F.inc.c -extern const struct Animation anim_4F[]; +#define dgAnimation47 "assets/anims/anim_47" +static const ALIGN_ASSET(2) char gAnimation47[] = dgAnimation47; -// Animation declarations for anim_50.inc.c -extern const struct Animation anim_50[]; +#define dgAnimation48 "assets/anims/anim_48" +static const ALIGN_ASSET(2) char gAnimation48[] = dgAnimation48; -// Animation declarations for anim_51.inc.c -extern const struct Animation anim_51[]; +#define dgAnimation49 "assets/anims/anim_49" +static const ALIGN_ASSET(2) char gAnimation49[] = dgAnimation49; -// Animation declarations for anim_52.inc.c -extern const struct Animation anim_52[]; +#define dgAnimation4A "assets/anims/anim_4A" +static const ALIGN_ASSET(2) char gAnimation4A[] = dgAnimation4A; -// Animation declarations for anim_53.inc.c -extern const struct Animation anim_53[]; +#define dgAnimation4B "assets/anims/anim_4B" +static const ALIGN_ASSET(2) char gAnimation4B[] = dgAnimation4B; -// Animation declarations for anim_54.inc.c -extern const struct Animation anim_54[]; +#define dgAnimation4C "assets/anims/anim_4C" +static const ALIGN_ASSET(2) char gAnimation4C[] = dgAnimation4C; -// Animation declarations for anim_55.inc.c -extern const struct Animation anim_55[]; +#define dgAnimation4D "assets/anims/anim_4D" +static const ALIGN_ASSET(2) char gAnimation4D[] = dgAnimation4D; -// Animation declarations for anim_56_57.inc.c -extern const struct Animation anim_56[]; -extern const struct Animation anim_57[]; +#define dgAnimation4E "assets/anims/anim_4E" +static const ALIGN_ASSET(2) char gAnimation4E[] = dgAnimation4E; -// Animation declarations for anim_58.inc.c -extern const struct Animation anim_58[]; +#define dgAnimation4F "assets/anims/anim_4F" +static const ALIGN_ASSET(2) char gAnimation4F[] = dgAnimation4F; -// Animation declarations for anim_59.inc.c -extern const struct Animation anim_59[]; +#define dgAnimation50 "assets/anims/anim_50" +static const ALIGN_ASSET(2) char gAnimation50[] = dgAnimation50; -// Animation declarations for anim_5A.inc.c -extern const struct Animation anim_5A[]; +#define dgAnimation51 "assets/anims/anim_51" +static const ALIGN_ASSET(2) char gAnimation51[] = dgAnimation51; -// Animation declarations for anim_5B.inc.c -extern const struct Animation anim_5B[]; +#define dgAnimation52 "assets/anims/anim_52" +static const ALIGN_ASSET(2) char gAnimation52[] = dgAnimation52; -// Animation declarations for anim_5C.inc.c -extern const struct Animation anim_5C[]; +#define dgAnimation53 "assets/anims/anim_53" +static const ALIGN_ASSET(2) char gAnimation53[] = dgAnimation53; -// Animation declarations for anim_5D.inc.c -extern const struct Animation anim_5D[]; +#define dgAnimation54 "assets/anims/anim_54" +static const ALIGN_ASSET(2) char gAnimation54[] = dgAnimation54; -// Animation declarations for anim_5E.inc.c -extern const struct Animation anim_5E[]; +#define dgAnimation55 "assets/anims/anim_55" +static const ALIGN_ASSET(2) char gAnimation55[] = dgAnimation55; -// Animation declarations for anim_5F.inc.c -extern const struct Animation anim_5F[]; +#define dgAnimation56 "assets/anims/anim_56" +static const ALIGN_ASSET(2) char gAnimation56[] = dgAnimation56; -// Animation declarations for anim_60.inc.c -extern const struct Animation anim_60[]; +#define dgAnimation57 "assets/anims/anim_57" +static const ALIGN_ASSET(2) char gAnimation57[] = dgAnimation57; -// Animation declarations for anim_61.inc.c -extern const struct Animation anim_61[]; +#define dgAnimation58 "assets/anims/anim_58" +static const ALIGN_ASSET(2) char gAnimation58[] = dgAnimation58; -// Animation declarations for anim_62.inc.c -extern const struct Animation anim_62[]; +#define dgAnimation59 "assets/anims/anim_59" +static const ALIGN_ASSET(2) char gAnimation59[] = dgAnimation59; -// Animation declarations for anim_63.inc.c -extern const struct Animation anim_63[]; +#define dgAnimation5A "assets/anims/anim_5A" +static const ALIGN_ASSET(2) char gAnimation5A[] = dgAnimation5A; -// Animation declarations for anim_64.inc.c -extern const struct Animation anim_64[]; +#define dgAnimation5B "assets/anims/anim_5B" +static const ALIGN_ASSET(2) char gAnimation5B[] = dgAnimation5B; -// Animation declarations for anim_65.inc.c -extern const struct Animation anim_65[]; +#define dgAnimation5C "assets/anims/anim_5C" +static const ALIGN_ASSET(2) char gAnimation5C[] = dgAnimation5C; -// Animation declarations for anim_66.inc.c -extern const struct Animation anim_66[]; +#define dgAnimation5D "assets/anims/anim_5D" +static const ALIGN_ASSET(2) char gAnimation5D[] = dgAnimation5D; -// Animation declarations for anim_67.inc.c -extern const struct Animation anim_67[]; +#define dgAnimation5E "assets/anims/anim_5E" +static const ALIGN_ASSET(2) char gAnimation5E[] = dgAnimation5E; -// Animation declarations for anim_68.inc.c -extern const struct Animation anim_68[]; +#define dgAnimation5F "assets/anims/anim_5F" +static const ALIGN_ASSET(2) char gAnimation5F[] = dgAnimation5F; -// Animation declarations for anim_69.inc.c -extern const struct Animation anim_69[]; +#define dgAnimation60 "assets/anims/anim_60" +static const ALIGN_ASSET(2) char gAnimation60[] = dgAnimation60; -// Animation declarations for anim_6A.inc.c -extern const struct Animation anim_6A[]; +#define dgAnimation61 "assets/anims/anim_61" +static const ALIGN_ASSET(2) char gAnimation61[] = dgAnimation61; -// Animation declarations for anim_6B.inc.c -extern const struct Animation anim_6B[]; +#define dgAnimation62 "assets/anims/anim_62" +static const ALIGN_ASSET(2) char gAnimation62[] = dgAnimation62; -// Animation declarations for anim_6C.inc.c -extern const struct Animation anim_6C[]; +#define dgAnimation63 "assets/anims/anim_63" +static const ALIGN_ASSET(2) char gAnimation63[] = dgAnimation63; -// Animation declarations for anim_6D.inc.c -extern const struct Animation anim_6D[]; +#define dgAnimation64 "assets/anims/anim_64" +static const ALIGN_ASSET(2) char gAnimation64[] = dgAnimation64; -// Animation declarations for anim_6E.inc.c -extern const struct Animation anim_6E[]; +#define dgAnimation65 "assets/anims/anim_65" +static const ALIGN_ASSET(2) char gAnimation65[] = dgAnimation65; -// Animation declarations for anim_6F_70.inc.c -extern const struct Animation anim_6F[]; -extern const struct Animation anim_70[]; +#define dgAnimation66 "assets/anims/anim_66" +static const ALIGN_ASSET(2) char gAnimation66[] = dgAnimation66; -// Animation declarations for anim_71.inc.c -extern const struct Animation anim_71[]; +#define dgAnimation67 "assets/anims/anim_67" +static const ALIGN_ASSET(2) char gAnimation67[] = dgAnimation67; -// Animation declarations for anim_72_73.inc.c -extern const struct Animation anim_72[]; -extern const struct Animation anim_73[]; +#define dgAnimation68 "assets/anims/anim_68" +static const ALIGN_ASSET(2) char gAnimation68[] = dgAnimation68; -// Animation declarations for anim_74.inc.c -extern const struct Animation anim_74[]; +#define dgAnimation69 "assets/anims/anim_69" +static const ALIGN_ASSET(2) char gAnimation69[] = dgAnimation69; -// Animation declarations for anim_75.inc.c -extern const struct Animation anim_75[]; +#define dgAnimation6A "assets/anims/anim_6A" +static const ALIGN_ASSET(2) char gAnimation6A[] = dgAnimation6A; -// Animation declarations for anim_76.inc.c -extern const struct Animation anim_76[]; +#define dgAnimation6B "assets/anims/anim_6B" +static const ALIGN_ASSET(2) char gAnimation6B[] = dgAnimation6B; -// Animation declarations for anim_77.inc.c -extern const struct Animation anim_77[]; +#define dgAnimation6C "assets/anims/anim_6C" +static const ALIGN_ASSET(2) char gAnimation6C[] = dgAnimation6C; -// Animation declarations for anim_78.inc.c -extern const struct Animation anim_78[]; +#define dgAnimation6D "assets/anims/anim_6D" +static const ALIGN_ASSET(2) char gAnimation6D[] = dgAnimation6D; -// Animation declarations for anim_79.inc.c -extern const struct Animation anim_79[]; +#define dgAnimation6E "assets/anims/anim_6E" +static const ALIGN_ASSET(2) char gAnimation6E[] = dgAnimation6E; -// Animation declarations for anim_7A.inc.c -extern const struct Animation anim_7A[]; +#define dgAnimation6F "assets/anims/anim_6F" +static const ALIGN_ASSET(2) char gAnimation6F[] = dgAnimation6F; -// Animation declarations for anim_7B.inc.c -extern const struct Animation anim_7B[]; +#define dgAnimation70 "assets/anims/anim_70" +static const ALIGN_ASSET(2) char gAnimation70[] = dgAnimation70; -// Animation declarations for anim_7C.inc.c -extern const struct Animation anim_7C[]; +#define dgAnimation71 "assets/anims/anim_71" +static const ALIGN_ASSET(2) char gAnimation71[] = dgAnimation71; -// Animation declarations for anim_7D.inc.c -extern const struct Animation anim_7D[]; +#define dgAnimation72 "assets/anims/anim_72" +static const ALIGN_ASSET(2) char gAnimation72[] = dgAnimation72; -// Animation declarations for anim_7E.inc.c -extern const struct Animation anim_7E[]; +#define dgAnimation73 "assets/anims/anim_73" +static const ALIGN_ASSET(2) char gAnimation73[] = dgAnimation73; -// Animation declarations for anim_7F.inc.c -extern const struct Animation anim_7F[]; +#define dgAnimation74 "assets/anims/anim_74" +static const ALIGN_ASSET(2) char gAnimation74[] = dgAnimation74; -// Animation declarations for anim_80.inc.c -extern const struct Animation anim_80[]; +#define dgAnimation75 "assets/anims/anim_75" +static const ALIGN_ASSET(2) char gAnimation75[] = dgAnimation75; -// Animation declarations for anim_81.inc.c -extern const struct Animation anim_81[]; +#define dgAnimation76 "assets/anims/anim_76" +static const ALIGN_ASSET(2) char gAnimation76[] = dgAnimation76; -// Animation declarations for anim_82.inc.c -extern const struct Animation anim_82[]; +#define dgAnimation77 "assets/anims/anim_77" +static const ALIGN_ASSET(2) char gAnimation77[] = dgAnimation77; -// Animation declarations for anim_83.inc.c -extern const struct Animation anim_83[]; +#define dgAnimation78 "assets/anims/anim_78" +static const ALIGN_ASSET(2) char gAnimation78[] = dgAnimation78; -// Animation declarations for anim_84.inc.c -extern const struct Animation anim_84[]; +#define dgAnimation79 "assets/anims/anim_79" +static const ALIGN_ASSET(2) char gAnimation79[] = dgAnimation79; -// Animation declarations for anim_85.inc.c -extern const struct Animation anim_85[]; +#define dgAnimation7A "assets/anims/anim_7A" +static const ALIGN_ASSET(2) char gAnimation7A[] = dgAnimation7A; -// Animation declarations for anim_86.inc.c -extern const struct Animation anim_86[]; +#define dgAnimation7B "assets/anims/anim_7B" +static const ALIGN_ASSET(2) char gAnimation7B[] = dgAnimation7B; -// Animation declarations for anim_87.inc.c -extern const struct Animation anim_87[]; +#define dgAnimation7C "assets/anims/anim_7C" +static const ALIGN_ASSET(2) char gAnimation7C[] = dgAnimation7C; -// Animation declarations for anim_88_89.inc.c -extern const struct Animation anim_88[]; -extern const struct Animation anim_89[]; +#define dgAnimation7D "assets/anims/anim_7D" +static const ALIGN_ASSET(2) char gAnimation7D[] = dgAnimation7D; -// Animation declarations for anim_8A.inc.c -extern const struct Animation anim_8A[]; +#define dgAnimation7E "assets/anims/anim_7E" +static const ALIGN_ASSET(2) char gAnimation7E[] = dgAnimation7E; -// Animation declarations for anim_8B.inc.c -extern const struct Animation anim_8B[]; +#define dgAnimation7F "assets/anims/anim_7F" +static const ALIGN_ASSET(2) char gAnimation7F[] = dgAnimation7F; -// Animation declarations for anim_8C.inc.c -extern const struct Animation anim_8C[]; +#define dgAnimation80 "assets/anims/anim_80" +static const ALIGN_ASSET(2) char gAnimation80[] = dgAnimation80; -// Animation declarations for anim_8D.inc.c -extern const struct Animation anim_8D[]; +#define dgAnimation81 "assets/anims/anim_81" +static const ALIGN_ASSET(2) char gAnimation81[] = dgAnimation81; -// Animation declarations for anim_8E_8F.inc.c -extern const struct Animation anim_8E[]; -extern const struct Animation anim_8F[]; +#define dgAnimation82 "assets/anims/anim_82" +static const ALIGN_ASSET(2) char gAnimation82[] = dgAnimation82; -// Animation declarations for anim_90.inc.c -extern const struct Animation anim_90[]; +#define dgAnimation83 "assets/anims/anim_83" +static const ALIGN_ASSET(2) char gAnimation83[] = dgAnimation83; -// Animation declarations for anim_91.inc.c -extern const struct Animation anim_91[]; +#define dgAnimation84 "assets/anims/anim_84" +static const ALIGN_ASSET(2) char gAnimation84[] = dgAnimation84; -// Animation declarations for anim_92.inc.c -extern const struct Animation anim_92[]; +#define dgAnimation85 "assets/anims/anim_85" +static const ALIGN_ASSET(2) char gAnimation85[] = dgAnimation85; -// Animation declarations for anim_93.inc.c -extern const struct Animation anim_93[]; +#define dgAnimation86 "assets/anims/anim_86" +static const ALIGN_ASSET(2) char gAnimation86[] = dgAnimation86; -// Animation declarations for anim_94.inc.c -extern const struct Animation anim_94[]; +#define dgAnimation87 "assets/anims/anim_87" +static const ALIGN_ASSET(2) char gAnimation87[] = dgAnimation87; -// Animation declarations for anim_95.inc.c -extern const struct Animation anim_95[]; +#define dgAnimation88 "assets/anims/anim_88" +static const ALIGN_ASSET(2) char gAnimation88[] = dgAnimation88; -// Animation declarations for anim_96.inc.c -extern const struct Animation anim_96[]; +#define dgAnimation89 "assets/anims/anim_89" +static const ALIGN_ASSET(2) char gAnimation89[] = dgAnimation89; -// Animation declarations for anim_97.inc.c -extern const struct Animation anim_97[]; +#define dgAnimation8A "assets/anims/anim_8A" +static const ALIGN_ASSET(2) char gAnimation8A[] = dgAnimation8A; -// Animation declarations for anim_98.inc.c -extern const struct Animation anim_98[]; +#define dgAnimation8B "assets/anims/anim_8B" +static const ALIGN_ASSET(2) char gAnimation8B[] = dgAnimation8B; -// Animation declarations for anim_99.inc.c -extern const struct Animation anim_99[]; +#define dgAnimation8C "assets/anims/anim_8C" +static const ALIGN_ASSET(2) char gAnimation8C[] = dgAnimation8C; -// Animation declarations for anim_9A.inc.c -extern const struct Animation anim_9A[]; +#define dgAnimation8D "assets/anims/anim_8D" +static const ALIGN_ASSET(2) char gAnimation8D[] = dgAnimation8D; -// Animation declarations for anim_9B.inc.c -extern const struct Animation anim_9B[]; +#define dgAnimation8E "assets/anims/anim_8E" +static const ALIGN_ASSET(2) char gAnimation8E[] = dgAnimation8E; -// Animation declarations for anim_9C.inc.c -extern const struct Animation anim_9C[]; +#define dgAnimation8F "assets/anims/anim_8F" +static const ALIGN_ASSET(2) char gAnimation8F[] = dgAnimation8F; -// Animation declarations for anim_9D.inc.c -extern const struct Animation anim_9D[]; +#define dgAnimation90 "assets/anims/anim_90" +static const ALIGN_ASSET(2) char gAnimation90[] = dgAnimation90; -// Animation declarations for anim_9E.inc.c -extern const struct Animation anim_9E[]; +#define dgAnimation91 "assets/anims/anim_91" +static const ALIGN_ASSET(2) char gAnimation91[] = dgAnimation91; -// Animation declarations for anim_9F.inc.c -extern const struct Animation anim_9F[]; +#define dgAnimation92 "assets/anims/anim_92" +static const ALIGN_ASSET(2) char gAnimation92[] = dgAnimation92; -// Animation declarations for anim_A0.inc.c -extern const struct Animation anim_A0[]; +#define dgAnimation93 "assets/anims/anim_93" +static const ALIGN_ASSET(2) char gAnimation93[] = dgAnimation93; -// Animation declarations for anim_A1.inc.c -extern const struct Animation anim_A1[]; +#define dgAnimation94 "assets/anims/anim_94" +static const ALIGN_ASSET(2) char gAnimation94[] = dgAnimation94; -// Animation declarations for anim_A2.inc.c -extern const struct Animation anim_A2[]; +#define dgAnimation95 "assets/anims/anim_95" +static const ALIGN_ASSET(2) char gAnimation95[] = dgAnimation95; -// Animation declarations for anim_A3.inc.c -extern const struct Animation anim_A3[]; +#define dgAnimation96 "assets/anims/anim_96" +static const ALIGN_ASSET(2) char gAnimation96[] = dgAnimation96; -// Animation declarations for anim_A4.inc.c -extern const struct Animation anim_A4[]; +#define dgAnimation97 "assets/anims/anim_97" +static const ALIGN_ASSET(2) char gAnimation97[] = dgAnimation97; -// Animation declarations for anim_A5.inc.c -extern const struct Animation anim_A5[]; +#define dgAnimation98 "assets/anims/anim_98" +static const ALIGN_ASSET(2) char gAnimation98[] = dgAnimation98; -// Animation declarations for anim_A6.inc.c -extern const struct Animation anim_A6[]; +#define dgAnimation99 "assets/anims/anim_99" +static const ALIGN_ASSET(2) char gAnimation99[] = dgAnimation99; -// Animation declarations for anim_A7.inc.c -extern const struct Animation anim_A7[]; +#define dgAnimation9A "assets/anims/anim_9A" +static const ALIGN_ASSET(2) char gAnimation9A[] = dgAnimation9A; -// Animation declarations for anim_A8.inc.c -extern const struct Animation anim_A8[]; +#define dgAnimation9B "assets/anims/anim_9B" +static const ALIGN_ASSET(2) char gAnimation9B[] = dgAnimation9B; -// Animation declarations for anim_A9.inc.c -extern const struct Animation anim_A9[]; +#define dgAnimation9C "assets/anims/anim_9C" +static const ALIGN_ASSET(2) char gAnimation9C[] = dgAnimation9C; -// Animation declarations for anim_AA.inc.c -extern const struct Animation anim_AA[]; +#define dgAnimation9D "assets/anims/anim_9D" +static const ALIGN_ASSET(2) char gAnimation9D[] = dgAnimation9D; -// Animation declarations for anim_AB.inc.c -extern const struct Animation anim_AB[]; +#define dgAnimation9E "assets/anims/anim_9E" +static const ALIGN_ASSET(2) char gAnimation9E[] = dgAnimation9E; -// Animation declarations for anim_AC.inc.c -extern const struct Animation anim_AC[]; +#define dgAnimation9F "assets/anims/anim_9F" +static const ALIGN_ASSET(2) char gAnimation9F[] = dgAnimation9F; -// Animation declarations for anim_AD.inc.c -extern const struct Animation anim_AD[]; +#define dgAnimationA0 "assets/anims/anim_A0" +static const ALIGN_ASSET(2) char gAnimationA0[] = dgAnimationA0; -// Animation declarations for anim_AE.inc.c -extern const struct Animation anim_AE[]; +#define dgAnimationA1 "assets/anims/anim_A1" +static const ALIGN_ASSET(2) char gAnimationA1[] = dgAnimationA1; -// Animation declarations for anim_AF.inc.c -extern const struct Animation anim_AF[]; +#define dgAnimationA2 "assets/anims/anim_A2" +static const ALIGN_ASSET(2) char gAnimationA2[] = dgAnimationA2; -// Animation declarations for anim_B0.inc.c -extern const struct Animation anim_B0[]; +#define dgAnimationA3 "assets/anims/anim_A3" +static const ALIGN_ASSET(2) char gAnimationA3[] = dgAnimationA3; -// Animation declarations for anim_B1.inc.c -extern const struct Animation anim_B1[]; +#define dgAnimationA4 "assets/anims/anim_A4" +static const ALIGN_ASSET(2) char gAnimationA4[] = dgAnimationA4; -// Animation declarations for anim_B2.inc.c -extern const struct Animation anim_B2[]; +#define dgAnimationA5 "assets/anims/anim_A5" +static const ALIGN_ASSET(2) char gAnimationA5[] = dgAnimationA5; -// Animation declarations for anim_B3.inc.c -extern const struct Animation anim_B3[]; +#define dgAnimationA6 "assets/anims/anim_A6" +static const ALIGN_ASSET(2) char gAnimationA6[] = dgAnimationA6; -// Animation declarations for anim_B4.inc.c -extern const struct Animation anim_B4[]; +#define dgAnimationA7 "assets/anims/anim_A7" +static const ALIGN_ASSET(2) char gAnimationA7[] = dgAnimationA7; -// Animation declarations for anim_B5_B6.inc.c -extern const struct Animation anim_B5[]; -extern const struct Animation anim_B6[]; +#define dgAnimationA8 "assets/anims/anim_A8" +static const ALIGN_ASSET(2) char gAnimationA8[] = dgAnimationA8; -// Animation declarations for anim_B7.inc.c -extern const struct Animation anim_B7[]; +#define dgAnimationA9 "assets/anims/anim_A9" +static const ALIGN_ASSET(2) char gAnimationA9[] = dgAnimationA9; -// Animation declarations for anim_B8.inc.c -extern const struct Animation anim_B8[]; +#define dgAnimationAA "assets/anims/anim_AA" +static const ALIGN_ASSET(2) char gAnimationAA[] = dgAnimationAA; -// Animation declarations for anim_B9.inc.c -extern const struct Animation anim_B9[]; +#define dgAnimationAB "assets/anims/anim_AB" +static const ALIGN_ASSET(2) char gAnimationAB[] = dgAnimationAB; -// Animation declarations for anim_BA.inc.c -extern const struct Animation anim_BA[]; +#define dgAnimationAC "assets/anims/anim_AC" +static const ALIGN_ASSET(2) char gAnimationAC[] = dgAnimationAC; -// Animation declarations for anim_BB.inc.c -extern const struct Animation anim_BB[]; +#define dgAnimationAD "assets/anims/anim_AD" +static const ALIGN_ASSET(2) char gAnimationAD[] = dgAnimationAD; -// Animation declarations for anim_BC_BD.inc.c -extern const struct Animation anim_BC[]; -extern const struct Animation anim_BD[]; +#define dgAnimationAE "assets/anims/anim_AE" +static const ALIGN_ASSET(2) char gAnimationAE[] = dgAnimationAE; -// Animation declarations for anim_BE.inc.c -extern const struct Animation anim_BE[]; +#define dgAnimationAF "assets/anims/anim_AF" +static const ALIGN_ASSET(2) char gAnimationAF[] = dgAnimationAF; -// Animation declarations for anim_BF.inc.c -extern const struct Animation anim_BF[]; +#define dgAnimationB0 "assets/anims/anim_B0" +static const ALIGN_ASSET(2) char gAnimationB0[] = dgAnimationB0; -// Animation declarations for anim_C0.inc.c -extern const struct Animation anim_C0[]; +#define dgAnimationB1 "assets/anims/anim_B1" +static const ALIGN_ASSET(2) char gAnimationB1[] = dgAnimationB1; -// Animation declarations for anim_C1.inc.c -extern const struct Animation anim_C1[]; +#define dgAnimationB2 "assets/anims/anim_B2" +static const ALIGN_ASSET(2) char gAnimationB2[] = dgAnimationB2; -// Animation declarations for anim_C2.inc.c -extern const struct Animation anim_C2[]; +#define dgAnimationB3 "assets/anims/anim_B3" +static const ALIGN_ASSET(2) char gAnimationB3[] = dgAnimationB3; -// Animation declarations for anim_C3.inc.c -extern const struct Animation anim_C3[]; +#define dgAnimationB4 "assets/anims/anim_B4" +static const ALIGN_ASSET(2) char gAnimationB4[] = dgAnimationB4; -// Animation declarations for anim_C4.inc.c -extern const struct Animation anim_C4[]; +#define dgAnimationB5 "assets/anims/anim_B5" +static const ALIGN_ASSET(2) char gAnimationB5[] = dgAnimationB5; -// Animation declarations for anim_C5.inc.c -extern const struct Animation anim_C5[]; +#define dgAnimationB6 "assets/anims/anim_B6" +static const ALIGN_ASSET(2) char gAnimationB6[] = dgAnimationB6; -// Animation declarations for anim_C6.inc.c -extern const struct Animation anim_C6[]; +#define dgAnimationB7 "assets/anims/anim_B7" +static const ALIGN_ASSET(2) char gAnimationB7[] = dgAnimationB7; -// Animation declarations for anim_C7.inc.c -extern const struct Animation anim_C7[]; +#define dgAnimationB8 "assets/anims/anim_B8" +static const ALIGN_ASSET(2) char gAnimationB8[] = dgAnimationB8; -// Animation declarations for anim_C8.inc.c -extern const struct Animation anim_C8[]; +#define dgAnimationB9 "assets/anims/anim_B9" +static const ALIGN_ASSET(2) char gAnimationB9[] = dgAnimationB9; -// Animation declarations for anim_C9.inc.c -extern const struct Animation anim_C9[]; +#define dgAnimationBA "assets/anims/anim_BA" +static const ALIGN_ASSET(2) char gAnimationBA[] = dgAnimationBA; -// Animation declarations for anim_CA.inc.c -extern const struct Animation anim_CA[]; +#define dgAnimationBB "assets/anims/anim_BB" +static const ALIGN_ASSET(2) char gAnimationBB[] = dgAnimationBB; -// Animation declarations for anim_CB_CC.inc.c -extern const struct Animation anim_CB[]; -extern const struct Animation anim_CC[]; +#define dgAnimationBC "assets/anims/anim_BC" +static const ALIGN_ASSET(2) char gAnimationBC[] = dgAnimationBC; -// Animation declarations for anim_CD.inc.c -extern const struct Animation anim_CD[]; +#define dgAnimationBD "assets/anims/anim_BD" +static const ALIGN_ASSET(2) char gAnimationBD[] = dgAnimationBD; -// Animation declarations for anim_CE.inc.c -extern const struct Animation anim_CE[]; +#define dgAnimationBE "assets/anims/anim_BE" +static const ALIGN_ASSET(2) char gAnimationBE[] = dgAnimationBE; -// Animation declarations for anim_CF.inc.c -extern const struct Animation anim_CF[]; +#define dgAnimationBF "assets/anims/anim_BF" +static const ALIGN_ASSET(2) char gAnimationBF[] = dgAnimationBF; -// Animation declarations for anim_D0.inc.c -extern const struct Animation anim_D0[]; +#define dgAnimationC0 "assets/anims/anim_C0" +static const ALIGN_ASSET(2) char gAnimationC0[] = dgAnimationC0; -extern struct Animation* anim_table[]; \ No newline at end of file +#define dgAnimationC1 "assets/anims/anim_C1" +static const ALIGN_ASSET(2) char gAnimationC1[] = dgAnimationC1; + +#define dgAnimationC2 "assets/anims/anim_C2" +static const ALIGN_ASSET(2) char gAnimationC2[] = dgAnimationC2; + +#define dgAnimationC3 "assets/anims/anim_C3" +static const ALIGN_ASSET(2) char gAnimationC3[] = dgAnimationC3; + +#define dgAnimationC4 "assets/anims/anim_C4" +static const ALIGN_ASSET(2) char gAnimationC4[] = dgAnimationC4; + +#define dgAnimationC5 "assets/anims/anim_C5" +static const ALIGN_ASSET(2) char gAnimationC5[] = dgAnimationC5; + +#define dgAnimationC6 "assets/anims/anim_C6" +static const ALIGN_ASSET(2) char gAnimationC6[] = dgAnimationC6; + +#define dgAnimationC7 "assets/anims/anim_C7" +static const ALIGN_ASSET(2) char gAnimationC7[] = dgAnimationC7; + +#define dgAnimationC8 "assets/anims/anim_C8" +static const ALIGN_ASSET(2) char gAnimationC8[] = dgAnimationC8; + +#define dgAnimationC9 "assets/anims/anim_C9" +static const ALIGN_ASSET(2) char gAnimationC9[] = dgAnimationC9; + +#define dgAnimationCA "assets/anims/anim_CA" +static const ALIGN_ASSET(2) char gAnimationCA[] = dgAnimationCA; + +#define dgAnimationCB "assets/anims/anim_CB" +static const ALIGN_ASSET(2) char gAnimationCB[] = dgAnimationCB; + +#define dgAnimationCC "assets/anims/anim_CC" +static const ALIGN_ASSET(2) char gAnimationCC[] = dgAnimationCC; + +#define dgAnimationCD "assets/anims/anim_CD" +static const ALIGN_ASSET(2) char gAnimationCD[] = dgAnimationCD; + +#define dgAnimationCE "assets/anims/anim_CE" +static const ALIGN_ASSET(2) char gAnimationCE[] = dgAnimationCE; + +#define dgAnimationCF "assets/anims/anim_CF" +static const ALIGN_ASSET(2) char gAnimationCF[] = dgAnimationCF; + +#define dgAnimationD0 "assets/anims/anim_D0" +static const ALIGN_ASSET(2) char gAnimationD0[] = dgAnimationD0; + +#define dgAnimationRoot "assets/anims/anim_%02X" +static const ALIGN_ASSET(2) char gAnimationRoot[] = dgAnimationRoot; \ No newline at end of file diff --git a/include/level_headers.h b/include/level_headers.h new file mode 100644 index 00000000..399a174f --- /dev/null +++ b/include/level_headers.h @@ -0,0 +1,31 @@ +#include "levels/bbh/header.h" +#include "levels/ccm/header.h" +#include "levels/castle_inside/header.h" +#include "levels/hmc/header.h" +#include "levels/ssl/header.h" +#include "levels/bob/header.h" +#include "levels/sl/header.h" +#include "levels/wdw/header.h" +#include "levels/jrb/header.h" +#include "levels/thi/header.h" +#include "levels/ttc/header.h" +#include "levels/rr/header.h" +#include "levels/castle_grounds/header.h" +#include "levels/bitdw/header.h" +#include "levels/vcutm/header.h" +#include "levels/bitfs/header.h" +#include "levels/sa/header.h" +#include "levels/bits/header.h" +#include "levels/lll/header.h" +#include "levels/ddd/header.h" +#include "levels/wf/header.h" +#include "levels/ending/header.h" +#include "levels/castle_courtyard/header.h" +#include "levels/pss/header.h" +#include "levels/cotmc/header.h" +#include "levels/totwc/header.h" +#include "levels/bowser_1/header.h" +#include "levels/wmotr/header.h" +#include "levels/bowser_2/header.h" +#include "levels/bowser_3/header.h" +#include "levels/ttm/header.h" \ No newline at end of file diff --git a/include/types.h b/include/types.h index 3f084158..bd088d5a 100644 --- a/include/types.h +++ b/include/types.h @@ -288,7 +288,6 @@ struct MarioState { /*0x94*/ struct PlayerCameraState *statusForCamera; /*0x98*/ struct MarioBodyState *marioBodyState; /*0x9C*/ struct Controller *controller; - /*0xA0*/ struct DmaHandlerList *animList; /*0xA4*/ u32 collidedObjInteractTypes; /*0xA8*/ s16 numCoins; /*0xAA*/ s16 numStars; diff --git a/levels/ending/leveldata.c b/levels/ending/leveldata.c index 0485d6bf..555eae04 100644 --- a/levels/ending/leveldata.c +++ b/levels/ending/leveldata.c @@ -233,8 +233,6 @@ const Gfx dl_cake_end_screen_eu_070297D8[] = { // VERSION_EU #else -#include "levels/ending/cake.inc.c" - // 0x07025800 - 0x07025840 static const Vtx cake_end_vertex_07025800[] = { {{{ 0, 220, -1}, 0, { 0, 608}, {0xff, 0xff, 0xff, 0xff}}}, diff --git a/levels/scripts.c b/levels/scripts.c index 22e899cf..2e2edeee 100644 --- a/levels/scripts.c +++ b/levels/scripts.c @@ -39,7 +39,7 @@ #define STUB_LEVEL(_0, _1, _2, _3, _4, _5, _6, _7, _8) #define DEFINE_LEVEL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) + 3 static const LevelScript script_exec_level_table[2 - #include "level_defines.h" + #include "levels/level_defines.h" ]; #undef DEFINE_LEVEL #undef STUB_LEVEL diff --git a/libultraship b/libultraship index 555869b6..6abea588 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit 555869b6c5324805f27f8a62dade9ab6609b3783 +Subproject commit 6abea588cd99ca2d4325fdae2147f521aba4f3e8 diff --git a/src/game/behaviors/wiggler.inc.c b/src/game/behaviors/wiggler.inc.c index 318373f0..7edd7cd5 100644 --- a/src/game/behaviors/wiggler.inc.c +++ b/src/game/behaviors/wiggler.inc.c @@ -150,9 +150,7 @@ void wiggler_init_segments(void) { cur_obj_unhide(); } -#if defined(VERSION_EU) o->oHealth = 4; // This fixes Wiggler reading UB on his first frame of his acceleration, as his health is not set. -#endif } /** diff --git a/src/game/game_init.c b/src/game/game_init.c index 646f6fbe..66ee93be 100644 --- a/src/game/game_init.c +++ b/src/game/game_init.c @@ -614,10 +614,6 @@ void setup_game_memory(void) { gPhysicalFramebuffers[0] = VIRTUAL_TO_PHYSICAL(gFramebuffer0); gPhysicalFramebuffers[1] = VIRTUAL_TO_PHYSICAL(gFramebuffer1); gPhysicalFramebuffers[2] = VIRTUAL_TO_PHYSICAL(gFramebuffer2); - // Setup Mario Animations - gMarioAnimsMemAlloc = main_pool_alloc(0x4000, MEMORY_POOL_LEFT); - set_segment_base_addr(17, (void *) gMarioAnimsMemAlloc); - setup_dma_table_list(&gMarioAnimsBuf, gMarioAnims, gMarioAnimsMemAlloc); // Setup Level Script Entry load_segment(0x10, _entrySegmentRomStart, _entrySegmentRomEnd, MEMORY_POOL_LEFT); // Setup Segment 2 (Fonts, Text, etc) diff --git a/src/game/game_init.h b/src/game/game_init.h index cfd360ab..6d29e56e 100644 --- a/src/game/game_init.h +++ b/src/game/game_init.h @@ -46,12 +46,6 @@ extern struct DemoInput *gCurrDemoInput; extern u16 gDemoInputListID; extern struct DemoInput gRecordedDemoInput; -// this area is the demo input + the header. when the demo is loaded in, there is a header the size -// of a single word next to the input list. this word is the current ID count. -extern struct DmaHandlerList gMarioAnimsBuf; - -extern u8 gMarioAnims[]; - extern u16 sRenderingFramebuffer; extern u32 gGlobalTimer; diff --git a/src/game/mario.c b/src/game/mario.c index aed623b3..e5c3c8de 100644 --- a/src/game/mario.c +++ b/src/game/mario.c @@ -1,4 +1,5 @@ -#include +#include +#include #include "sm64.h" #include "area.h" @@ -32,6 +33,7 @@ #include "save_file.h" #include "sound_init.h" #include "rumble_init.h" +#include "animation_table.h" u32 unused80339F10; u8 unused80339F1C[20]; @@ -63,12 +65,11 @@ s32 is_anim_past_end(struct MarioState *m) { */ s16 set_mario_animation(struct MarioState *m, s32 targetAnimID) { struct Object *o = m->marioObj; - struct Animation *targetAnim = m->animList->bufTarget; - if (load_patchable_table(m->animList, targetAnimID)) { - targetAnim->values = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->values); - targetAnim->index = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->index); - } + char gAnimationData[sizeof(gAnimationRoot) / sizeof(gAnimationRoot[0]) + 1]; + sprintf(gAnimationData, gAnimationRoot, targetAnimID); + + struct Animation *targetAnim = ResourceGetDataByName(gAnimationData); if (o->header.gfx.animInfo.animID != targetAnimID) { o->header.gfx.animInfo.animID = targetAnimID; @@ -96,12 +97,10 @@ s16 set_mario_animation(struct MarioState *m, s32 targetAnimID) { */ s16 set_mario_anim_with_accel(struct MarioState *m, s32 targetAnimID, s32 accel) { struct Object *o = m->marioObj; - struct Animation *targetAnim = m->animList->bufTarget; + char gAnimationData[sizeof(gAnimationRoot) / sizeof(gAnimationRoot[0]) + 1]; + sprintf(gAnimationData, gAnimationRoot, targetAnimID); - if (load_patchable_table(m->animList, targetAnimID)) { - targetAnim->values = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->values); - targetAnim->index = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->index); - } + struct Animation *targetAnim = ResourceGetDataByName(gAnimationData); if (o->header.gfx.animInfo.animID != targetAnimID) { o->header.gfx.animInfo.animID = targetAnimID; @@ -1876,7 +1875,6 @@ void init_mario_from_save_file(void) { gMarioState->statusForCamera = &gPlayerCameraState[0]; gMarioState->marioBodyState = &gBodyStates[0]; gMarioState->controller = &gControllers[0]; - gMarioState->animList = &gMarioAnimsBuf; gMarioState->numCoins = 0; gMarioState->numStars = diff --git a/src/game/rendering_graph_node.c b/src/game/rendering_graph_node.c index 67694b37..eea7246a 100644 --- a/src/game/rendering_graph_node.c +++ b/src/game/rendering_graph_node.c @@ -511,17 +511,13 @@ static void geo_process_background(struct GraphNodeBackground *node) { if (list != NULL) { geo_append_display_list((void *) VIRTUAL_TO_PHYSICAL(list), node->fnNode.node.flags >> 8); } else if (gCurGraphNodeMasterList != NULL) { -#ifndef F3DEX_GBI_2E - Gfx *gfxStart = alloc_display_list(sizeof(Gfx) * 7); -#else Gfx *gfxStart = alloc_display_list(sizeof(Gfx) * 8); -#endif Gfx *gfx = gfxStart; gDPPipeSync(gfx++); gDPSetCycleType(gfx++, G_CYC_FILL); gDPSetFillColor(gfx++, node->background); - gDPFillRectangle(gfx++, GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), BORDER_HEIGHT, + gDPFillWideRectangle(gfx++, GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), BORDER_HEIGHT, GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, SCREEN_HEIGHT - BORDER_HEIGHT - 1); gDPPipeSync(gfx++); gDPSetCycleType(gfx++, G_CYC_1CYCLE); diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp index 8c664a92..98665f1e 100644 --- a/src/port/Engine.cpp +++ b/src/port/Engine.cpp @@ -1,5 +1,6 @@ #include "Engine.h" #include "ImguiUI.h" +#include "port/importer/AnimationFactory.h" #include #include @@ -13,6 +14,7 @@ GameEngine::GameEngine(){ this->context = LUS::Context::CreateInstance("Ghostship", "sm64", "ghostship.cfg.json", { main, assets }, {}, 3); this->context->GetWindow()->SetTargetFps(30); this->context->GetWindow()->SetMaximumFrameLatency(1); + this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::Anim, "Animation", std::make_shared()); } void GameEngine::Create(){ diff --git a/src/port/Engine.h b/src/port/Engine.h index 28b27d48..3192b17e 100644 --- a/src/port/Engine.h +++ b/src/port/Engine.h @@ -4,8 +4,8 @@ #include #include -#define SAMPLES_HIGH 762 -#define SAMPLES_LOW 720 +#define SAMPLES_HIGH 544 +#define SAMPLES_LOW 528 #define AUDIO_FRAMES_PER_UPDATE 2 #define NUM_AUDIO_CHANNELS 2 @@ -16,11 +16,10 @@ class GameEngine { std::shared_ptr context; GameEngine(); - ~GameEngine(); - static void Create(void); - void StartFrame(void) const; + static void Create(); + void StartFrame() const; static void RunCommands(Gfx* Commands); - void ProcessFrame(void (*run_one_game_iter)(void)) const; + void ProcessFrame(void (*run_one_game_iter)()) const; }; #else uint32_t GameEngine_GetSampleRate(); diff --git a/src/port/Game.cpp b/src/port/Game.cpp index f20888f7..23c9c948 100644 --- a/src/port/Game.cpp +++ b/src/port/Game.cpp @@ -29,7 +29,7 @@ void push_frame() { int samples_left = AudioPlayerBuffered(); u32 num_audio_samples = samples_left < AudioPlayerGetDesiredBuffered() ? SAMPLES_HIGH : SAMPLES_LOW; - s16 audio_buffer[SAMPLES_HIGH * NUM_AUDIO_CHANNELS * 2]; + s16 audio_buffer[SAMPLES_HIGH * NUM_AUDIO_CHANNELS * 3]; for (int i = 0; i < AUDIO_FRAMES_PER_UPDATE; i++) { create_next_audio_buffer(audio_buffer + i * (num_audio_samples * 2), num_audio_samples); } diff --git a/src/port/importer/AnimationFactory.cpp b/src/port/importer/AnimationFactory.cpp new file mode 100644 index 00000000..a57cd3da --- /dev/null +++ b/src/port/importer/AnimationFactory.cpp @@ -0,0 +1,52 @@ +#include "AnimationFactory.h" +#include "port/importer/types/Animation.h" +#include "spdlog/spdlog.h" + +std::shared_ptr CubeOS::AnimationFactory::ReadResource(std::shared_ptr initData, std::shared_ptr reader) { + auto resource = std::make_shared(initData); + std::shared_ptr factory = nullptr; + + switch (resource->GetInitData()->ResourceVersion) { + case 0: + factory = std::make_shared(); + break; + } + + if (factory == nullptr) { + SPDLOG_ERROR("Failed to load Animation with version {}", resource->GetInitData()->ResourceVersion); + return nullptr; + } + + factory->ParseFileBinary(reader, resource); + + return resource; +} + +void CubeOS::AnimationFactoryV0::ParseFileBinary(std::shared_ptr reader, std::shared_ptr resource) { + std::shared_ptr animation = std::static_pointer_cast(resource); + + ResourceVersionFactory::ParseFileBinary(reader, animation); + + animation->mData.flags = reader->ReadInt16(); + animation->mData.animYTransDivisor = reader->ReadInt16(); + animation->mData.startFrame = reader->ReadInt16(); + animation->mData.loopStart = reader->ReadInt16(); + animation->mData.loopEnd = reader->ReadInt16(); + animation->mData.unusedBoneCount = reader->ReadInt16(); + animation->mData.length = reader->ReadUInt64(); + + uint32_t indexCount = reader->ReadUInt32(); + animation->indices.reserve(indexCount); + for (uint32_t i = 0; i < indexCount; i++) { + animation->indices.push_back(reader->ReadUInt16()); + } + + uint32_t valuesCount = reader->ReadUInt32(); + animation->values.reserve(valuesCount); + for (uint32_t i = 0; i < valuesCount; i++) { + animation->values.push_back(reader->ReadInt16()); + } + + animation->mData.index = (uint16_t*)animation->indices.data(); + animation->mData.values = (int16_t*)animation->values.data(); +} \ No newline at end of file diff --git a/src/port/importer/AnimationFactory.h b/src/port/importer/AnimationFactory.h new file mode 100644 index 00000000..4d56b61b --- /dev/null +++ b/src/port/importer/AnimationFactory.h @@ -0,0 +1,16 @@ +#pragma once + +#include "ResourceFactory.h" + +namespace CubeOS{ +class AnimationFactory : public LUS::ResourceFactory { + public: + std::shared_ptr + ReadResource(std::shared_ptr initData, std::shared_ptr reader) override; +}; + +class AnimationFactoryV0 : public LUS::ResourceVersionFactory { + public: + void ParseFileBinary(std::shared_ptr reader, std::shared_ptr resource) override; +}; +} diff --git a/src/port/importer/types/Animation.cpp b/src/port/importer/types/Animation.cpp new file mode 100644 index 00000000..ddf6b5d1 --- /dev/null +++ b/src/port/importer/types/Animation.cpp @@ -0,0 +1,11 @@ +#include "Animation.h" + +namespace CubeOS { +AnimationData* Animation::GetPointer() { + return &mData; +} + +size_t Animation::GetPointerSize() { + return sizeof(mData); +} +} \ No newline at end of file diff --git a/src/port/importer/types/Animation.h b/src/port/importer/types/Animation.h new file mode 100644 index 00000000..21c99480 --- /dev/null +++ b/src/port/importer/types/Animation.h @@ -0,0 +1,34 @@ +#pragma once + +#include +#include +#include + +namespace CubeOS { +struct AnimationData { + /*0x00*/ int16_t flags; + /*0x02*/ int16_t animYTransDivisor; + /*0x04*/ int16_t startFrame; + /*0x06*/ int16_t loopStart; + /*0x08*/ int16_t loopEnd; + /*0x0A*/ int16_t unusedBoneCount; + /*0x0C*/ const int16_t *values; + /*0x10*/ const uint16_t *index; + /*0x14*/ uint64_t length; // only used with Mario animations to determine how much to load. 0 otherwise. +}; + +class Animation : public LUS::Resource { + public: + using Resource::Resource; + + Animation() : Resource(std::shared_ptr()) {} + + AnimationData* GetPointer(); + size_t GetPointerSize(); + + AnimationData mData; + + std::vector indices; + std::vector values; +}; +} \ No newline at end of file