mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 09:43:38 +00:00
sa1: reference entities manager from sa2
This commit is contained in:
1 parent
2b12d09439
commit
9543a9d793
23 files changed
+440
-1454
No files matched your search
@@ -19,6 +19,8 @@ typedef s32 CamCoord;
|
|||||||
#define TO_WORLD_POS(pos, region) ((pos)*TILE_WIDTH + (region)*CAM_REGION_WIDTH)
|
#define TO_WORLD_POS(pos, region) ((pos)*TILE_WIDTH + (region)*CAM_REGION_WIDTH)
|
||||||
#define TO_WORLD_POS_INV(pos, region) ((region)*CAM_REGION_WIDTH + (pos)*TILE_WIDTH)
|
#define TO_WORLD_POS_INV(pos, region) ((region)*CAM_REGION_WIDTH + (pos)*TILE_WIDTH)
|
||||||
|
|
||||||
|
#define TO_REGION(pos) ((pos) >> 8)
|
||||||
|
|
||||||
#define CAM_BOUND_X ((DISPLAY_WIDTH) + (CAM_REGION_WIDTH))
|
#define CAM_BOUND_X ((DISPLAY_WIDTH) + (CAM_REGION_WIDTH))
|
||||||
#define CAM_BOUND_Y ((DISPLAY_HEIGHT) + ((CAM_REGION_WIDTH) / 2))
|
#define CAM_BOUND_Y ((DISPLAY_HEIGHT) + ((CAM_REGION_WIDTH) / 2))
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ void CreateStageEntitiesManager(void);
|
|||||||
void CreateEnemyDefeatScoreAndManageLives(s16 x, s16 y);
|
void CreateEnemyDefeatScoreAndManageLives(s16 x, s16 y);
|
||||||
|
|
||||||
// TaskDestructor_SpriteEntity
|
// TaskDestructor_SpriteEntity
|
||||||
void TaskDestructor_80095E8(struct Task *);
|
void TaskDestructor_EntityShared(struct Task *);
|
||||||
// The same as above, should align the name
|
// The same as above, should align the name
|
||||||
void TaskDestructor_EntityShared(struct Task *);
|
void TaskDestructor_EntityShared(struct Task *);
|
||||||
|
|
||||||
|
|||||||
@@ -277,6 +277,7 @@ SA2_C_FILES := \
|
|||||||
src/game/shared/stage/camera.c \
|
src/game/shared/stage/camera.c \
|
||||||
src/game/shared/stage/stage.c \
|
src/game/shared/stage/stage.c \
|
||||||
src/game/shared/stage/rings_manager.c \
|
src/game/shared/stage/rings_manager.c \
|
||||||
|
src/game/shared/stage/entities_manager.c \
|
||||||
src/game/sa1/ui/game_2_0.c \
|
src/game/sa1/ui/game_2_0.c \
|
||||||
src/game/sa1/ui/game_2_1.c \
|
src/game/sa1/ui/game_2_1.c \
|
||||||
src/game/sa1/ui/stage_results.c \
|
src/game/sa1/ui/stage_results.c \
|
||||||
|
|||||||
+2
-2
@@ -27,7 +27,7 @@ SECTIONS {
|
|||||||
|
|
||||||
/* Game */
|
/* Game */
|
||||||
sa2/src/game/shared/stage/rings_manager.o(.text);
|
sa2/src/game/shared/stage/rings_manager.o(.text);
|
||||||
src/game/shared/stage/entities_manager.o(.text);
|
sa2/src/game/shared/stage/entities_manager.o(.text);
|
||||||
sa2/src/game/shared/stage/collision_1.o(.text);
|
sa2/src/game/shared/stage/collision_1.o(.text);
|
||||||
sa2/src/game/shared/stage/collision_3.o(.text);
|
sa2/src/game/shared/stage/collision_3.o(.text);
|
||||||
sa2/src/game/shared/stage/collision_2.o(.text);
|
sa2/src/game/shared/stage/collision_2.o(.text);
|
||||||
@@ -305,7 +305,7 @@ SECTIONS {
|
|||||||
sa2/src/game/sa1/save.o(.rodata);
|
sa2/src/game/sa1/save.o(.rodata);
|
||||||
data/sa1/chao_garden.o(.rodata);
|
data/sa1/chao_garden.o(.rodata);
|
||||||
src/data/sa1/entity_tables.o(.rodata);
|
src/data/sa1/entity_tables.o(.rodata);
|
||||||
src/game/shared/stage/entities_manager.o(.rodata);
|
sa2/src/game/shared/stage/entities_manager.o(.rodata);
|
||||||
sa2/src/game/sa1/stage/itembox.o(.rodata);
|
sa2/src/game/sa1/stage/itembox.o(.rodata);
|
||||||
sa2/src/game/sa1/menus/title_screen.o(.rodata);
|
sa2/src/game/sa1/menus/title_screen.o(.rodata);
|
||||||
sa2/src/game/shared/menus/unused_level_select.o(.rodata);
|
sa2/src/game/shared/menus/unused_level_select.o(.rodata);
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
@@ -53,7 +53,7 @@ void CreateEntity_Kiki(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 s
|
|||||||
const TaskDestructor dtor = TaskDestructor_EntityShared;
|
const TaskDestructor dtor = TaskDestructor_EntityShared;
|
||||||
#else
|
#else
|
||||||
const s32 taskPriority = 0x4020;
|
const s32 taskPriority = 0x4020;
|
||||||
const TaskDestructor dtor = TaskDestructor_80095E8;
|
const TaskDestructor dtor = TaskDestructor_EntityShared;
|
||||||
#endif
|
#endif
|
||||||
struct Task *t = TaskCreate(Task_KikiMain, sizeof(Sprite_Kiki), taskPriority, 0, dtor);
|
struct Task *t = TaskCreate(Task_KikiMain, sizeof(Sprite_Kiki), taskPriority, 0, dtor);
|
||||||
Sprite_Kiki *kiki = TASK_DATA(t);
|
Sprite_Kiki *kiki = TASK_DATA(t);
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ void Task_BalloonMain(void);
|
|||||||
void CreateEntity_Balloon(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Balloon(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
if (DIFFICULTY_LEVEL_IS_NOT_EASY) {
|
if (DIFFICULTY_LEVEL_IS_NOT_EASY) {
|
||||||
struct Task *t = TaskCreate(Task_BalloonMain, sizeof(Sprite_Balloon), 0x4040, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_BalloonMain, sizeof(Sprite_Balloon), 0x4040, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Balloon *balloon = TASK_DATA(t);
|
Sprite_Balloon *balloon = TASK_DATA(t);
|
||||||
Sprite *s = &balloon->s;
|
Sprite *s = &balloon->s;
|
||||||
balloon->base.regionX = spriteRegionX;
|
balloon->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ static void sub_8054D20(void);
|
|||||||
|
|
||||||
void CreateEntity_Bell(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Bell(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
struct Task *t = TaskCreate(Task_BellMain, sizeof(Sprite_Bell), 0x4080, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_BellMain, sizeof(Sprite_Bell), 0x4080, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Bell *bell = TASK_DATA(t);
|
Sprite_Bell *bell = TASK_DATA(t);
|
||||||
Sprite *s = &bell->s;
|
Sprite *s = &bell->s;
|
||||||
bell->unk4C = 120;
|
bell->unk4C = 120;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ void Task_BulletBuzzerMain(void);
|
|||||||
|
|
||||||
void CreateEntity_BulletBuzzer(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_BulletBuzzer(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
struct Task *t = TaskCreate(Task_BulletBuzzerMain, sizeof(Sprite_BulletBuzzer), 0x4040, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_BulletBuzzerMain, sizeof(Sprite_BulletBuzzer), 0x4040, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_BulletBuzzer *bbuzzer = TASK_DATA(t);
|
Sprite_BulletBuzzer *bbuzzer = TASK_DATA(t);
|
||||||
Sprite *s = &bbuzzer->s;
|
Sprite *s = &bbuzzer->s;
|
||||||
bbuzzer->base.regionX = spriteRegionX;
|
bbuzzer->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ static void TaskDestructor_KikiProj(struct Task *);
|
|||||||
|
|
||||||
void CreateEntity_Kiki(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Kiki(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
struct Task *t = TaskCreate(Task_KikiMain, sizeof(Sprite_Kiki), 0x4020, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_KikiMain, sizeof(Sprite_Kiki), 0x4020, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Kiki *kiki = TASK_DATA(t);
|
Sprite_Kiki *kiki = TASK_DATA(t);
|
||||||
Sprite *s = &kiki->s;
|
Sprite *s = &kiki->s;
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ static const u16 gUnknown_080D8F38[][2] = {
|
|||||||
void CreateEntity_Koura(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Koura(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
|
|
||||||
struct Task *t = TaskCreate(sub_8054224, sizeof(Sprite_Koura), 0x40B0, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(sub_8054224, sizeof(Sprite_Koura), 0x40B0, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Koura *koura = TASK_DATA(t);
|
Sprite_Koura *koura = TASK_DATA(t);
|
||||||
Sprite *s = &koura->s;
|
Sprite *s = &koura->s;
|
||||||
koura->base.regionX = spriteRegionX;
|
koura->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -29,12 +29,12 @@ typedef struct {
|
|||||||
} Sprite_Kyura; /* 0x5C*/
|
} Sprite_Kyura; /* 0x5C*/
|
||||||
|
|
||||||
void Task_KyuraMain(void);
|
void Task_KyuraMain(void);
|
||||||
void TaskDestructor_80095E8(struct Task *);
|
void TaskDestructor_EntityShared(struct Task *);
|
||||||
void Task_KyuraRecover(void);
|
void Task_KyuraRecover(void);
|
||||||
|
|
||||||
void CreateEntity_Kyura(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Kyura(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
struct Task *t = TaskCreate(Task_KyuraMain, sizeof(Sprite_Kyura), 0x4040, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_KyuraMain, sizeof(Sprite_Kyura), 0x4040, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Kyura *kyura = TASK_DATA(t);
|
Sprite_Kyura *kyura = TASK_DATA(t);
|
||||||
Sprite *s = &kyura->s;
|
Sprite *s = &kyura->s;
|
||||||
kyura->base.regionX = spriteRegionX;
|
kyura->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ static void Task_80564BC(void);
|
|||||||
|
|
||||||
void CreateEntity_Madillo(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Madillo(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
struct Task *t = TaskCreate(Task_MadilloMain, sizeof(Sprite_Madillo), 0x4040, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_MadilloMain, sizeof(Sprite_Madillo), 0x4040, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Madillo *madillo = TASK_DATA(t);
|
Sprite_Madillo *madillo = TASK_DATA(t);
|
||||||
Sprite *s = &madillo->s;
|
Sprite *s = &madillo->s;
|
||||||
madillo->base.regionX = spriteRegionX;
|
madillo->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ typedef struct {
|
|||||||
void CreateEntity_Mon(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Mon(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
u32 r2;
|
u32 r2;
|
||||||
struct Task *t = TaskCreate(Task_MonMain, sizeof(Sprite_Mon), 0x4010, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_MonMain, sizeof(Sprite_Mon), 0x4010, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Mon *mon = TASK_DATA(t);
|
Sprite_Mon *mon = TASK_DATA(t);
|
||||||
Sprite *s = &mon->s;
|
Sprite *s = &mon->s;
|
||||||
mon->base.regionX = spriteRegionX;
|
mon->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ static void sub_8057618(void);
|
|||||||
void CreateEntity_Mouse(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Mouse(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
if (gGameMode == GAME_MODE_TIME_ATTACK || gDifficultyLevel != 1) {
|
if (gGameMode == GAME_MODE_TIME_ATTACK || gDifficultyLevel != 1) {
|
||||||
struct Task *t = TaskCreate(sub_8057348, sizeof(Sprite_Mouse), 0x4040, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(sub_8057348, sizeof(Sprite_Mouse), 0x4040, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Mouse *mouse = TASK_DATA(t);
|
Sprite_Mouse *mouse = TASK_DATA(t);
|
||||||
Sprite *s = &mouse->s;
|
Sprite *s = &mouse->s;
|
||||||
mouse->base.regionX = spriteRegionX;
|
mouse->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ static void Task_PenTurn(void);
|
|||||||
|
|
||||||
void CreateEntity_Pen(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Pen(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
struct Task *t = TaskCreate(Task_PenMove, sizeof(Sprite_Pen), 0x4040, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_PenMove, sizeof(Sprite_Pen), 0x4040, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Pen *pen = TASK_DATA(t);
|
Sprite_Pen *pen = TASK_DATA(t);
|
||||||
Sprite *s = &pen->s;
|
Sprite *s = &pen->s;
|
||||||
pen->base.regionX = spriteRegionX;
|
pen->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ void Task_EnemySpinner(void);
|
|||||||
|
|
||||||
void CreateEntity_Spinner(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Spinner(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
struct Task *t = TaskCreate(Task_EnemySpinner, sizeof(Sprite_Spinner), 0x4040, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_EnemySpinner, sizeof(Sprite_Spinner), 0x4040, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Spinner *spinner = TASK_DATA(t);
|
Sprite_Spinner *spinner = TASK_DATA(t);
|
||||||
Sprite *s = &spinner->s;
|
Sprite *s = &spinner->s;
|
||||||
spinner->base.regionX = spriteRegionX;
|
spinner->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ static void Task_StarOpen(void);
|
|||||||
|
|
||||||
void CreateEntity_Star(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Star(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
struct Task *t = TaskCreate(Task_StarIdle, sizeof(Sprite_Star), 0x4050, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_StarIdle, sizeof(Sprite_Star), 0x4050, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Star *star = TASK_DATA(t);
|
Sprite_Star *star = TASK_DATA(t);
|
||||||
Sprite *s = &star->s;
|
Sprite *s = &star->s;
|
||||||
star->base.regionX = spriteRegionX;
|
star->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ void CreateEntity_Straw(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8
|
|||||||
{
|
{
|
||||||
if (DIFFICULTY_LEVEL_IS_NOT_EASY) {
|
if (DIFFICULTY_LEVEL_IS_NOT_EASY) {
|
||||||
s32 rand;
|
s32 rand;
|
||||||
struct Task *t = TaskCreate(Task_StrawMain, sizeof(Sprite_Straw), 0x4040, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_StrawMain, sizeof(Sprite_Straw), 0x4040, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Straw *straw = TASK_DATA(t);
|
Sprite_Straw *straw = TASK_DATA(t);
|
||||||
Sprite *s = &straw->s;
|
Sprite *s = &straw->s;
|
||||||
straw->base.regionX = spriteRegionX;
|
straw->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ const TileInfo sBoosterAnimationData[2][6] = {
|
|||||||
|
|
||||||
void CreateEntity_Booster(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_Booster(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
struct Task *t = TaskCreate(Task_Interactable_Booster, sizeof(Sprite_Booster), 0x2000, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_Interactable_Booster, sizeof(Sprite_Booster), 0x2000, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_Booster *booster = TASK_DATA(t);
|
Sprite_Booster *booster = TASK_DATA(t);
|
||||||
Sprite *s = &booster->s;
|
Sprite *s = &booster->s;
|
||||||
u32 value;
|
u32 value;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ static const s16 sBaseLaunchSpeed[] = { -Q(1.5), -Q(1.5), -Q(1.5) };
|
|||||||
void CreateEntity_BouncyBar(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_BouncyBar(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
Sprite *s;
|
Sprite *s;
|
||||||
struct Task *t = TaskCreate(Task_BouncyBarIdle, sizeof(BouncyBar), 0x2010, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_BouncyBarIdle, sizeof(BouncyBar), 0x2010, 0, TaskDestructor_EntityShared);
|
||||||
BouncyBar *bar = TASK_DATA(t);
|
BouncyBar *bar = TASK_DATA(t);
|
||||||
|
|
||||||
s = &bar->s;
|
s = &bar->s;
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ void Task_Rotating(void);
|
|||||||
void CreateEntity_RotatingHandle(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
void CreateEntity_RotatingHandle(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
|
||||||
{
|
{
|
||||||
if (me->d.sData[0] >= 0) {
|
if (me->d.sData[0] >= 0) {
|
||||||
struct Task *t = TaskCreate(Task_Idle, sizeof(Sprite_RotatingHandle), 0x2010, 0, TaskDestructor_80095E8);
|
struct Task *t = TaskCreate(Task_Idle, sizeof(Sprite_RotatingHandle), 0x2010, 0, TaskDestructor_EntityShared);
|
||||||
Sprite_RotatingHandle *rotatingHandle = TASK_DATA(t);
|
Sprite_RotatingHandle *rotatingHandle = TASK_DATA(t);
|
||||||
Sprite *s = &rotatingHandle->s;
|
Sprite *s = &rotatingHandle->s;
|
||||||
rotatingHandle->base.regionX = spriteRegionX;
|
rotatingHandle->base.regionX = spriteRegionX;
|
||||||
|
|||||||
@@ -8,10 +8,16 @@
|
|||||||
|
|
||||||
#include "game/shared/stage/camera.h"
|
#include "game/shared/stage/camera.h"
|
||||||
#include "game/shared/stage/entity.h"
|
#include "game/shared/stage/entity.h"
|
||||||
#include "game/sa2/stage/itembox.h"
|
|
||||||
#include "game/shared/stage/entities_manager.h"
|
#include "game/shared/stage/entities_manager.h"
|
||||||
#include "game/shared/stage/enemy_defeat_score.h"
|
#include "game/shared/stage/enemy_defeat_score.h"
|
||||||
|
|
||||||
|
#if (GAME == GAME_SA1)
|
||||||
|
#include "game/sa1/stage/itembox.h"
|
||||||
|
|
||||||
|
#include "constants/sa1/songs.h"
|
||||||
|
#include "constants/sa1/zones.h"
|
||||||
|
#elif (GAME == GAME_SA2)
|
||||||
|
#include "game/sa2/stage/itembox.h"
|
||||||
#include "game/sa2/stage/interactables/platform_thin.h"
|
#include "game/sa2/stage/interactables/platform_thin.h"
|
||||||
#include "game/sa2/stage/interactables/ceiling_slope.h"
|
#include "game/sa2/stage/interactables/ceiling_slope.h"
|
||||||
#include "game/sa2/stage/interactables/grind_rail.h"
|
#include "game/sa2/stage/interactables/grind_rail.h"
|
||||||
@@ -115,13 +121,15 @@
|
|||||||
#include "constants/sa2/zones.h"
|
#include "constants/sa2/zones.h"
|
||||||
#include "constants/sa2/songs.h"
|
#include "constants/sa2/songs.h"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#if (GAME == GAME_SA1)
|
#if (GAME == GAME_SA1)
|
||||||
#define RANGE_INIT(var) CamCoord(var)[4]
|
#define RANGE_INIT(var) CamCoord(var)[4]
|
||||||
#define RANGE_xLow(var) (var)[0]
|
#define RANGE_xLow(var) (var)[0]
|
||||||
#define RANGE_yLow(var) (var)[1]
|
#define RANGE_yLow(var) (var)[1]
|
||||||
#define RANGE_xHigh(var) (var)[2]
|
#define RANGE_xHigh(var) (var)[2]
|
||||||
#define RANGE_yHigh(var) (var)[3]
|
#define RANGE_yHigh(var) (var)[3]
|
||||||
typedef u16 region;
|
typedef u16 region_t;
|
||||||
#else
|
#else
|
||||||
typedef struct {
|
typedef struct {
|
||||||
CamCoord xLow, yLow;
|
CamCoord xLow, yLow;
|
||||||
@@ -133,11 +141,11 @@ typedef struct {
|
|||||||
#define RANGE_yLow(var) (var).yLow
|
#define RANGE_yLow(var) (var).yLow
|
||||||
#define RANGE_xHigh(var) (var).xHigh
|
#define RANGE_xHigh(var) (var).xHigh
|
||||||
#define RANGE_yHigh(var) (var).yHigh
|
#define RANGE_yHigh(var) (var).yHigh
|
||||||
typedef u32 region;
|
typedef u32 region_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NUM_ENEMY_DEFEAT_SCORES 5
|
|
||||||
#define READ_START_INDEX(p, hrc, rx, ry) (*((u32 *)((((u8 *)(p)) + (((hrc) * (ry)) * (sizeof(u32)))) + ((rx) * (sizeof(u32))))))
|
#define READ_START_INDEX(p, hrc, rx, ry) (*((u32 *)((((u8 *)(p)) + (((hrc) * (ry)) * (sizeof(u32)))) + ((rx) * (sizeof(u32))))))
|
||||||
|
#define NUM_ENEMY_DEFEAT_SCORES 5
|
||||||
|
|
||||||
typedef struct Task *(*StagePreInitFunc)(void);
|
typedef struct Task *(*StagePreInitFunc)(void);
|
||||||
typedef void (*MapEntityInit)(MapEntity *, u16, u16, u8);
|
typedef void (*MapEntityInit)(MapEntity *, u16, u16, u8);
|
||||||
@@ -146,7 +154,366 @@ static void SA2_LABEL(Task_8008DCC)(void);
|
|||||||
|
|
||||||
#ifndef COLLECT_RINGS_ROM
|
#ifndef COLLECT_RINGS_ROM
|
||||||
static void TaskDestructor_EntitiesManager(struct Task *);
|
static void TaskDestructor_EntitiesManager(struct Task *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (GAME == GAME_SA1)
|
||||||
|
// TODO: move to header files
|
||||||
|
extern const RLCompressed *const gSpritePosData_interactables[NUM_LEVEL_IDS];
|
||||||
|
extern const RLCompressed *const gSpritePosData_itemboxes[NUM_LEVEL_IDS];
|
||||||
|
extern const RLCompressed *const gSpritePosData_enemies[NUM_LEVEL_IDS];
|
||||||
|
|
||||||
|
extern void CreateEntity_StageGoal(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spikes_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spikes_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spikes_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spikes_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spikes_HidingUp(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spikes_HidingDown(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Checkpoint(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Normal_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Normal_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Big_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Big_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Small_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Small_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Decoration(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Toggle_PlayerLayer(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Toggle_PlayerLayer(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_GrindRail_Start(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_GrindRail_End(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_PlatformThin(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_PlatformThin_Falling(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Trampoline(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_PlatformCrumbling(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_BounceBlock(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_InclineRamp(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Waterfall(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_HalfPipeStart(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_HalfPipeEnd(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Shrubbery(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Booster(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Booster_SlightLeft(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Booster_SlightRight(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Interactable034(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MiniLoop_Base(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MiniLoop_StartBoost(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MiniLoop_Exit(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MiniLoop_Entrance(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Interactable039(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_WaterBridge(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_ToBeContinuedText(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_RedFlag(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_WaterBridgeSplash(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_WallPole_Left(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_WallPole_Right(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_ForcedSlide(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Booster_Wall(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_BumperHexagon(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_BumperRound_LinearMov(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_BumperRound_CircularMov(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_BumperTriHorizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_BumperTriVertical(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_BumperTriBig(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Flipper(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Platform_Square(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Flipper_Vertical(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_BarrelOfDoomMini(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_SegaSonicLetter(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_PartyBalloon(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_ShipSwing(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Platform_Spiked(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Bowl(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_PanelGate_Vertical(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_PanelGate_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MarbleTrack_Dir(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MarbleTrack_Pipe(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MarbleTrack_Entrance(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MarbleTrack_Exit(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_ConveyorBelt(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Toggle_PlayerVisibility(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_WallBumper(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_TeleportOrb(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Flipper_SmallBlue(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Carousel(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_HookRail(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_SwingingHook(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_SecurityGate(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_SwingRope(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_SteamExhaust(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_CraneClaw(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MovingSpring(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_IronBall(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_HangBar(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_SkatingStone(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Platform_SlowDescent(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_RunWheel(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Torch(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Lift(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Platform089(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Toggle_PlayerFloat(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_FerrisWheel(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_BoulderSpawner(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_SpikedBarrel(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_AirBubbles(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_IceBlock(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Interactable096(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Interactable097(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_UnderwaterLavaPlatform(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_ConveyorBeltObject(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Booster_Steep(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Booster_Steep2(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_SpecialSpring(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Propeller(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_SmallFallBlock(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Lava(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Track(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Interactable107(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Hiding(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_ToggleGravity(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_PipeEntrance(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_PipeExit(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_TrackAirCorner(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Interactable113(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_BreakableWall(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MysteryItemBox(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
|
||||||
|
const MapEntityInit gSpriteInits_Interactables[116] = {
|
||||||
|
/* 000 */ CreateEntity_StageGoal,
|
||||||
|
/* 001 */ CreateEntity_Spikes_Up,
|
||||||
|
/* 002 */ CreateEntity_Spikes_Down,
|
||||||
|
/* 003 */ CreateEntity_Spikes_Horizontal, // Left
|
||||||
|
/* 004 */ CreateEntity_Spikes_Horizontal, // Right
|
||||||
|
/* 005 */ CreateEntity_Spikes_HidingUp,
|
||||||
|
/* 006 */ CreateEntity_Spikes_HidingDown,
|
||||||
|
/* 007 */ CreateEntity_Checkpoint,
|
||||||
|
/* 008 */ CreateEntity_Spring_Normal_Up,
|
||||||
|
/* 009 */ CreateEntity_Spring_Normal_Down,
|
||||||
|
/* 010 */ CreateEntity_Spring_Horizontal, // Left
|
||||||
|
/* 011 */ CreateEntity_Spring_Horizontal, // Right
|
||||||
|
/* 012 */ CreateEntity_Spring_Big_Up, // Up-Left
|
||||||
|
/* 013 */ CreateEntity_Spring_Big_Up, // Up-Right
|
||||||
|
/* 014 */ CreateEntity_Spring_Small_Up, // Up-Left
|
||||||
|
/* 015 */ CreateEntity_Spring_Small_Up, // Up-Right
|
||||||
|
/* 016 */ CreateEntity_Decoration,
|
||||||
|
/* 017 */ CreateEntity_Toggle_PlayerLayer,
|
||||||
|
/* 018 */ CreateEntity_Toggle_PlayerLayer,
|
||||||
|
/* 019 */ CreateEntity_GrindRail_Start,
|
||||||
|
/* 020 */ CreateEntity_GrindRail_End,
|
||||||
|
/* 021 */ CreateEntity_PlatformThin,
|
||||||
|
/* 022 */ CreateEntity_PlatformThin_Falling,
|
||||||
|
/* 023 */ CreateEntity_Trampoline,
|
||||||
|
/* 024 */ CreateEntity_PlatformCrumbling,
|
||||||
|
/* 025 */ CreateEntity_BounceBlock,
|
||||||
|
/* 026 */ CreateEntity_InclineRamp,
|
||||||
|
/* 027 */ CreateEntity_Waterfall, // Only particles, used for "Sand Falls", too.
|
||||||
|
/* 028 */ CreateEntity_HalfPipeStart,
|
||||||
|
/* 029 */ CreateEntity_HalfPipeEnd,
|
||||||
|
/* 030 */ CreateEntity_Shrubbery,
|
||||||
|
/* 031 */ CreateEntity_Booster,
|
||||||
|
/* 032 */ CreateEntity_Booster_SlightLeft,
|
||||||
|
/* 033 */ CreateEntity_Booster_SlightRight,
|
||||||
|
/* 034 */ CreateEntity_Interactable034,
|
||||||
|
/* 035 */ CreateEntity_MiniLoop_Base,
|
||||||
|
/* 036 */ CreateEntity_MiniLoop_StartBoost,
|
||||||
|
/* 037 */ CreateEntity_MiniLoop_Exit,
|
||||||
|
/* 038 */ CreateEntity_MiniLoop_Entrance,
|
||||||
|
/* 039 */ CreateEntity_Interactable039,
|
||||||
|
/* 040 */ CreateEntity_WaterBridge,
|
||||||
|
/* 041 */ CreateEntity_ToBeContinuedText,
|
||||||
|
/* 042 */ CreateEntity_RedFlag,
|
||||||
|
/* 043 */ CreateEntity_WaterBridgeSplash,
|
||||||
|
/* 044 */ CreateEntity_WallPole_Left,
|
||||||
|
/* 045 */ CreateEntity_WallPole_Right,
|
||||||
|
/* 046 */ CreateEntity_ForcedSlide,
|
||||||
|
/* 047 */ CreateEntity_Booster_Wall,
|
||||||
|
/* 048 */ CreateEntity_BumperHexagon,
|
||||||
|
/* 049 */ CreateEntity_BumperRound_LinearMov,
|
||||||
|
/* 050 */ CreateEntity_BumperRound_CircularMov,
|
||||||
|
/* 051 */ CreateEntity_BumperTriHorizontal,
|
||||||
|
/* 052 */ CreateEntity_BumperTriVertical,
|
||||||
|
/* 053 */ CreateEntity_BumperTriBig,
|
||||||
|
/* 054 */ CreateEntity_Flipper,
|
||||||
|
/* 055 */ CreateEntity_Platform_Square,
|
||||||
|
/* 056 */ CreateEntity_Flipper_Vertical,
|
||||||
|
/* 057 */ CreateEntity_BarrelOfDoomMini,
|
||||||
|
/* 058 */ CreateEntity_SegaSonicLetter,
|
||||||
|
/* 059 */ CreateEntity_PartyBalloon,
|
||||||
|
/* 060 */ CreateEntity_ShipSwing,
|
||||||
|
/* 061 */ CreateEntity_Platform_Spiked,
|
||||||
|
/* 062 */ CreateEntity_Bowl,
|
||||||
|
/* 063 */ CreateEntity_PanelGate_Vertical,
|
||||||
|
/* 064 */ CreateEntity_PanelGate_Horizontal,
|
||||||
|
/* 065 */ CreateEntity_MarbleTrack_Dir,
|
||||||
|
/* 066 */ CreateEntity_MarbleTrack_Pipe,
|
||||||
|
/* 067 */ CreateEntity_MarbleTrack_Entrance,
|
||||||
|
/* 068 */ CreateEntity_MarbleTrack_Exit,
|
||||||
|
/* 069 */ CreateEntity_ConveyorBelt, // 069 Also used for snow in Ice Paradise
|
||||||
|
/* 070 */ CreateEntity_Toggle_PlayerVisibility, // data[0]: 0 = Visible, 1 = Invisible
|
||||||
|
/* 071 */ CreateEntity_WallBumper,
|
||||||
|
/* 072 */ CreateEntity_TeleportOrb, // Casino Paradise
|
||||||
|
/* 073 */ CreateEntity_Flipper_SmallBlue,
|
||||||
|
/* 074 */ CreateEntity_Carousel,
|
||||||
|
/* 075 */ CreateEntity_HookRail,
|
||||||
|
/* 076 */ CreateEntity_SwingingHook,
|
||||||
|
/* 077 */ CreateEntity_SecurityGate,
|
||||||
|
/* 078 */ CreateEntity_SwingRope,
|
||||||
|
/* 079 */ CreateEntity_SteamExhaust,
|
||||||
|
/* 080 */ CreateEntity_CraneClaw,
|
||||||
|
/* 081 */ CreateEntity_MovingSpring, // 081 Moving Spring
|
||||||
|
/* 082 */ CreateEntity_IronBall,
|
||||||
|
/* 083 */ CreateEntity_HangBar,
|
||||||
|
/* 084 */ CreateEntity_SkatingStone,
|
||||||
|
/* 085 */ CreateEntity_Platform_SlowDescent,
|
||||||
|
/* 086 */ CreateEntity_RunWheel,
|
||||||
|
/* 087 */ CreateEntity_Torch, // Cosmic Angel: Antigravity field elements
|
||||||
|
/* 088 */ CreateEntity_Lift,
|
||||||
|
/* 089 */ CreateEntity_Platform089,
|
||||||
|
/* 090 */ CreateEntity_Toggle_PlayerFloat, // data[0]: 0 = Whirlwind, 1 = Antigravity
|
||||||
|
/* 091 */ CreateEntity_FerrisWheel,
|
||||||
|
/* 092 */ CreateEntity_BoulderSpawner,
|
||||||
|
/* 093 */ CreateEntity_SpikedBarrel,
|
||||||
|
/* 094 */ CreateEntity_AirBubbles,
|
||||||
|
/* 095 */ CreateEntity_IceBlock,
|
||||||
|
/* 096 */ CreateEntity_Interactable096,
|
||||||
|
/* 097 */ CreateEntity_Interactable097,
|
||||||
|
/* 098 */ CreateEntity_UnderwaterLavaPlatform,
|
||||||
|
/* 099 */ CreateEntity_ConveyorBeltObject,
|
||||||
|
/* 100 */ CreateEntity_Booster_Steep,
|
||||||
|
/* 101 */ CreateEntity_Booster_Steep2,
|
||||||
|
/* 102 */ CreateEntity_SpecialSpring,
|
||||||
|
/* 103 */ CreateEntity_Propeller,
|
||||||
|
/* 104 */ CreateEntity_SmallFallBlock, // 104 (X-Zone)
|
||||||
|
/* 105 */ CreateEntity_Lava,
|
||||||
|
/* 106 */ CreateEntity_Track,
|
||||||
|
/* 107 */ CreateEntity_Interactable107,
|
||||||
|
/* 108 */ CreateEntity_Spring_Hiding,
|
||||||
|
/* 109 */ CreateEntity_ToggleGravity,
|
||||||
|
/* 110 */ CreateEntity_PipeEntrance,
|
||||||
|
/* 111 */ CreateEntity_PipeExit,
|
||||||
|
/* 112 */ CreateEntity_TrackAirCorner,
|
||||||
|
/* 113 */ CreateEntity_Interactable113,
|
||||||
|
/* 114 */ CreateEntity_BreakableWall,
|
||||||
|
/* 115 */ CreateEntity_MysteryItemBox,
|
||||||
|
};
|
||||||
|
|
||||||
|
extern void CreateEntity_Kiki(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Buzzer(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_GamiGami(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Rhinotank(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_KeroKero(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Senbon(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Tentou(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Fireball(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Hanabii(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Slot(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Pierrot(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Leon(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Mirror(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Wamu(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Oct(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Mole(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Yukimaru(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Yukimaru_Wall(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Drisame(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Kuraa(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_PenMk1(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_EggHammerTank_Intro(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_EggHammerTank(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_EggPress(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_EggBall(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_EggSpider(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MechaKnuckles(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_EggSnake(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_EggWrecker(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_EggDrillster(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_EggX(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_SuperEggRobot(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
|
||||||
|
const MapEntityInit gSpriteInits_Enemies[32] = {
|
||||||
|
/* 000 */ CreateEntity_Kiki,
|
||||||
|
/* 001 */ CreateEntity_Buzzer,
|
||||||
|
/* 002 */ CreateEntity_GamiGami,
|
||||||
|
/* 003 */ CreateEntity_Rhinotank,
|
||||||
|
/* 004 */ CreateEntity_KeroKero,
|
||||||
|
/* 005 */ CreateEntity_Senbon,
|
||||||
|
/* 006 */ CreateEntity_Tentou,
|
||||||
|
/* 007 */ CreateEntity_Fireball,
|
||||||
|
/* 008 */ CreateEntity_Hanabii,
|
||||||
|
/* 009 */ CreateEntity_Slot,
|
||||||
|
/* 010 */ CreateEntity_Pierrot,
|
||||||
|
/* 011 */ CreateEntity_Leon,
|
||||||
|
/* 012 */ CreateEntity_Mirror,
|
||||||
|
/* 013 */ CreateEntity_Wamu,
|
||||||
|
/* 014 */ CreateEntity_Oct,
|
||||||
|
/* 015 */ CreateEntity_Mole,
|
||||||
|
/* 016 */ CreateEntity_Yukimaru,
|
||||||
|
/* 017 */ CreateEntity_Yukimaru_Wall,
|
||||||
|
/* 018 */ CreateEntity_Drisame,
|
||||||
|
/* 019 */ CreateEntity_Kuraa,
|
||||||
|
/* 020 */ CreateEntity_PenMk1,
|
||||||
|
|
||||||
|
// Bosses
|
||||||
|
/* 021 */ CreateEntity_EggHammerTank_Intro,
|
||||||
|
/* 022 */ CreateEntity_EggHammerTank,
|
||||||
|
/* 023 */ CreateEntity_EggPress,
|
||||||
|
/* 024 */ CreateEntity_EggBall,
|
||||||
|
/* 025 */ CreateEntity_EggSpider,
|
||||||
|
/* 026 */ CreateEntity_MechaKnuckles,
|
||||||
|
/* 027 */ CreateEntity_EggSnake,
|
||||||
|
/* 028 */ CreateEntity_EggWrecker,
|
||||||
|
/* 029 */ CreateEntity_EggDrillster,
|
||||||
|
/* 030 */ CreateEntity_EggX,
|
||||||
|
/* 031 */ CreateEntity_SuperEggRobot,
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 enemyDefeatScores[NUM_ENEMY_DEFEAT_SCORES] = {
|
||||||
|
100, 200, 400, 800, 1000,
|
||||||
|
};
|
||||||
|
|
||||||
|
extern void CreateEntity_Spikes_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spikes_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spikes_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spikes_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spikes_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spikes_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Normal_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Normal_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Big_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Spring_Big_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Toggle_PlayerLayer(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_Toggle_PlayerLayer(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_PlatformThin(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_PlatformThin_Falling(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_WaterBridge(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
extern void CreateEntity_MysteryItemBox(MapEntity *me, u16 regionX, u16 regionY, u8 id);
|
||||||
|
|
||||||
|
// Used for the Single Pak, "Collect Rings" stage
|
||||||
|
const MapEntityInit gSpriteInits_CollectRingsInteractables[] = {
|
||||||
|
/* 000 */ CreateEntity_Spikes_Up,
|
||||||
|
/* 001 */ CreateEntity_Spikes_Down,
|
||||||
|
/* 002 */ CreateEntity_Spikes_Horizontal,
|
||||||
|
/* 003 */ CreateEntity_Spikes_Horizontal,
|
||||||
|
/* 004 */ CreateEntity_Spikes_Up,
|
||||||
|
/* 005 */ CreateEntity_Spikes_Down,
|
||||||
|
/* 006 */ CreateEntity_Spring_Normal_Up,
|
||||||
|
/* 007 */ CreateEntity_Spring_Normal_Down,
|
||||||
|
/* 008 */ CreateEntity_Spring_Horizontal,
|
||||||
|
/* 009 */ CreateEntity_Spring_Horizontal,
|
||||||
|
/* 010 */ CreateEntity_Spring_Big_Up,
|
||||||
|
/* 011 */ CreateEntity_Spring_Big_Up,
|
||||||
|
/* 012 */ CreateEntity_Toggle_PlayerLayer,
|
||||||
|
/* 013 */ CreateEntity_Toggle_PlayerLayer,
|
||||||
|
/* 014 */ CreateEntity_PlatformThin,
|
||||||
|
/* 015 */ CreateEntity_PlatformThin_Falling,
|
||||||
|
/* 016 */ CreateEntity_WaterBridge,
|
||||||
|
/* 017 */ CreateEntity_MysteryItemBox,
|
||||||
|
};
|
||||||
|
#elif (GAME == GAME_SA2)
|
||||||
|
#ifndef COLLECT_RINGS_ROM
|
||||||
const RLCompressed *const gSpritePosData_interactables[NUM_LEVEL_IDS] = {
|
const RLCompressed *const gSpritePosData_interactables[NUM_LEVEL_IDS] = {
|
||||||
(void *)&zone1_act1_interactables,
|
(void *)&zone1_act1_interactables,
|
||||||
(void *)&zone1_act2_interactables,
|
(void *)&zone1_act2_interactables,
|
||||||
@@ -444,7 +811,10 @@ const StagePreInitFunc gSpriteTileInits_PreStageEntry[] = {
|
|||||||
NULL, NULL, NULL, NULL, // Final Zone
|
NULL, NULL, NULL, NULL, // Final Zone
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef COLLECT_RINGS_ROM
|
||||||
void CreateStageEntitiesManager(void)
|
void CreateStageEntitiesManager(void)
|
||||||
{
|
{
|
||||||
void *decompBuf;
|
void *decompBuf;
|
||||||
@@ -471,11 +841,13 @@ void CreateStageEntitiesManager(void)
|
|||||||
RLUnCompWram(gSpritePosData_enemies[gCurrentLevel], decompBuf);
|
RLUnCompWram(gSpritePosData_enemies[gCurrentLevel], decompBuf);
|
||||||
em->enemies = decompBuf;
|
em->enemies = decompBuf;
|
||||||
|
|
||||||
|
#if (GAME == GAME_SA2)
|
||||||
em->preInit = NULL;
|
em->preInit = NULL;
|
||||||
|
|
||||||
if (gSpriteTileInits_PreStageEntry[gCurrentLevel]) {
|
if (gSpriteTileInits_PreStageEntry[gCurrentLevel]) {
|
||||||
em->preInit = gSpriteTileInits_PreStageEntry[gCurrentLevel]();
|
em->preInit = gSpriteTileInits_PreStageEntry[gCurrentLevel]();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
decompBuf = (void *)EWRAM_START + 0x3F000;
|
decompBuf = (void *)EWRAM_START + 0x3F000;
|
||||||
RLUnCompWram(*(void **)((void *)EWRAM_START + 0x3300C), decompBuf);
|
RLUnCompWram(*(void **)((void *)EWRAM_START + 0x3300C), decompBuf);
|
||||||
@@ -484,7 +856,7 @@ void CreateStageEntitiesManager(void)
|
|||||||
|
|
||||||
em->prevCamX = gCamera.x;
|
em->prevCamX = gCamera.x;
|
||||||
em->prevCamY = gCamera.y;
|
em->prevCamY = gCamera.y;
|
||||||
em->unk14 = 1;
|
em->SA2_LABEL(unk14) = 1;
|
||||||
gEntitiesManagerTask = t;
|
gEntitiesManagerTask = t;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -497,7 +869,7 @@ static void SpawnMapEntities()
|
|||||||
#endif
|
#endif
|
||||||
if ((gStageFlags & 2) == 0) {
|
if ((gStageFlags & 2) == 0) {
|
||||||
u32 i;
|
u32 i;
|
||||||
region regionX, regionY;
|
region_t regionX, regionY;
|
||||||
RANGE_INIT(range);
|
RANGE_INIT(range);
|
||||||
u32 h_regionCount, v_regionCount;
|
u32 h_regionCount, v_regionCount;
|
||||||
|
|
||||||
@@ -539,25 +911,25 @@ static void SpawnMapEntities()
|
|||||||
RANGE_yHigh(range) = 0;
|
RANGE_yHigh(range) = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((u32)RANGE_xLow(range) >= Q(h_regionCount)) {
|
if (RANGE_xLow(range) >= TO_WORLD_POS(0, h_regionCount)) {
|
||||||
RANGE_xLow(range) = Q(h_regionCount) - 1;
|
RANGE_xLow(range) = TO_WORLD_POS(0, h_regionCount) - 1;
|
||||||
}
|
}
|
||||||
if ((u32)RANGE_yLow(range) >= Q(v_regionCount)) {
|
if (RANGE_yLow(range) >= TO_WORLD_POS(0, v_regionCount)) {
|
||||||
RANGE_yLow(range) = Q(v_regionCount) - 1;
|
RANGE_yLow(range) = TO_WORLD_POS(0, v_regionCount) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((u32)RANGE_xHigh(range) >= Q(h_regionCount)) {
|
if (RANGE_xHigh(range) >= TO_WORLD_POS(0, h_regionCount)) {
|
||||||
RANGE_xHigh(range) = Q(h_regionCount) - 1;
|
RANGE_xHigh(range) = TO_WORLD_POS(0, h_regionCount) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((u32)RANGE_yHigh(range) >= Q(v_regionCount)) {
|
if (RANGE_yHigh(range) >= TO_WORLD_POS(0, v_regionCount)) {
|
||||||
RANGE_yHigh(range) = Q(v_regionCount) - 1;
|
RANGE_yHigh(range) = TO_WORLD_POS(0, v_regionCount) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
regionY = I(RANGE_yLow(range));
|
regionY = TO_REGION(RANGE_yLow(range));
|
||||||
while (Q(regionY) < (u32)RANGE_yHigh(range) && regionY < v_regionCount) {
|
while (TO_WORLD_POS(0, regionY) < RANGE_yHigh(range) && regionY < v_regionCount) {
|
||||||
regionX = I(RANGE_xLow(range));
|
regionX = TO_REGION(RANGE_xLow(range));
|
||||||
while (Q(regionX) < (u32)RANGE_xHigh(range) && regionX < h_regionCount) {
|
while (TO_WORLD_POS(0, regionX) < RANGE_xHigh(range) && regionX < h_regionCount) {
|
||||||
#ifndef COLLECT_RINGS_ROM
|
#ifndef COLLECT_RINGS_ROM
|
||||||
if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
||||||
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
||||||
@@ -565,8 +937,8 @@ static void SpawnMapEntities()
|
|||||||
MapEntity *me = ((void *)interactables + (i - 8));
|
MapEntity *me = ((void *)interactables + (i - 8));
|
||||||
for (i = 0; (s8)me->x != -1; me++, i++) {
|
for (i = 0; (s8)me->x != -1; me++, i++) {
|
||||||
if ((s8)me->x >= -2) {
|
if ((s8)me->x >= -2) {
|
||||||
s32 x = TO_WORLD_POS(me->x, regionX);
|
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
||||||
s32 y = TO_WORLD_POS(me->y, regionY);
|
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
||||||
if (x >= RANGE_xLow(range) && x <= RANGE_xHigh(range) && y >= RANGE_yLow(range)
|
if (x >= RANGE_xLow(range) && x <= RANGE_xHigh(range) && y >= RANGE_yLow(range)
|
||||||
&& y <= RANGE_yHigh(range)) {
|
&& y <= RANGE_yHigh(range)) {
|
||||||
gSpriteInits_Interactables[me->index](me, regionX, regionY, i);
|
gSpriteInits_Interactables[me->index](me, regionX, regionY, i);
|
||||||
@@ -580,8 +952,8 @@ static void SpawnMapEntities()
|
|||||||
MapEntity_Itembox *me = ((void *)itemBoxPositions + (i - 8));
|
MapEntity_Itembox *me = ((void *)itemBoxPositions + (i - 8));
|
||||||
for (i = 0; (s8)me->x != -1; me++, i++) {
|
for (i = 0; (s8)me->x != -1; me++, i++) {
|
||||||
if ((s8)me->x >= -2) {
|
if ((s8)me->x >= -2) {
|
||||||
s32 x = TO_WORLD_POS(me->x, regionX);
|
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
||||||
s32 y = TO_WORLD_POS(me->y, regionY);
|
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
||||||
if (x >= RANGE_xLow(range) && x <= RANGE_xHigh(range) && y >= RANGE_yLow(range)
|
if (x >= RANGE_xLow(range) && x <= RANGE_xHigh(range) && y >= RANGE_yLow(range)
|
||||||
&& y <= RANGE_yHigh(range)) {
|
&& y <= RANGE_yHigh(range)) {
|
||||||
CreateEntity_ItemBox((void *)me, regionX, regionY, i);
|
CreateEntity_ItemBox((void *)me, regionX, regionY, i);
|
||||||
@@ -596,8 +968,8 @@ static void SpawnMapEntities()
|
|||||||
for (i = 0; (s8)me->x != -1; me++, i++) {
|
for (i = 0; (s8)me->x != -1; me++, i++) {
|
||||||
|
|
||||||
if ((s8)me->x >= -2) {
|
if ((s8)me->x >= -2) {
|
||||||
s32 x = TO_WORLD_POS(me->x, regionX);
|
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
||||||
s32 y = TO_WORLD_POS(me->y, regionY);
|
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
||||||
if (x >= RANGE_xLow(range) && x <= RANGE_xHigh(range) && y >= RANGE_yLow(range)
|
if (x >= RANGE_xLow(range) && x <= RANGE_xHigh(range) && y >= RANGE_yLow(range)
|
||||||
&& y <= RANGE_yHigh(range)) {
|
&& y <= RANGE_yHigh(range)) {
|
||||||
gSpriteInits_Enemies[me->index](me, regionX, regionY, i);
|
gSpriteInits_Enemies[me->index](me, regionX, regionY, i);
|
||||||
@@ -619,8 +991,8 @@ static void SpawnMapEntities()
|
|||||||
MapEntity *me = ((void *)interactables + (i - 8));
|
MapEntity *me = ((void *)interactables + (i - 8));
|
||||||
for (i = 0; (s8)me->x != -1; me++, i++) {
|
for (i = 0; (s8)me->x != -1; me++, i++) {
|
||||||
if ((s8)me->x >= -2) {
|
if ((s8)me->x >= -2) {
|
||||||
s32 x = TO_WORLD_POS(me->x, regionX);
|
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
||||||
s32 y = TO_WORLD_POS(me->y, regionY);
|
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
||||||
if (x >= RANGE_xLow(range) && x <= RANGE_xHigh(range) && y >= RANGE_yLow(range)
|
if (x >= RANGE_xLow(range) && x <= RANGE_xHigh(range) && y >= RANGE_yLow(range)
|
||||||
&& y <= RANGE_yHigh(range)) {
|
&& y <= RANGE_yHigh(range)) {
|
||||||
gSpriteInits_CollectRingsInteractables[me->index](me, regionX, regionY, i);
|
gSpriteInits_CollectRingsInteractables[me->index](me, regionX, regionY, i);
|
||||||
@@ -771,18 +1143,18 @@ static void SA2_LABEL(Task_8008DCC)(void)
|
|||||||
RANGE_xHigh(range1) = 0;
|
RANGE_xHigh(range1) = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (range1.yHigh < 0) {
|
if (RANGE_yHigh(range1) < 0) {
|
||||||
RANGE_yHigh(range1) = 0;
|
RANGE_yHigh(range1) = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
temp2 = RANGE_xLow(range1);
|
temp2 = RANGE_xLow(range1);
|
||||||
temp = Q(h_regionCount);
|
temp = TO_WORLD_POS(0, h_regionCount);
|
||||||
if (temp2 >= temp) {
|
if (temp2 >= temp) {
|
||||||
RANGE_xLow(range1) = temp - 1;
|
RANGE_xLow(range1) = temp - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
temp3 = RANGE_yLow(range1);
|
temp3 = RANGE_yLow(range1);
|
||||||
temp4 = Q(v_regionCount);
|
temp4 = TO_WORLD_POS(0, v_regionCount);
|
||||||
|
|
||||||
if (temp3 >= temp4) {
|
if (temp3 >= temp4) {
|
||||||
RANGE_yLow(range1) = temp4 - 1;
|
RANGE_yLow(range1) = temp4 - 1;
|
||||||
@@ -792,7 +1164,7 @@ static void SA2_LABEL(Task_8008DCC)(void)
|
|||||||
RANGE_xHigh(range1) = temp - 1;
|
RANGE_xHigh(range1) = temp - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (range1.yHigh >= temp4) {
|
if (RANGE_yHigh(range1) >= temp4) {
|
||||||
RANGE_yHigh(range1) = temp4 - 1;
|
RANGE_yHigh(range1) = temp4 - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -828,12 +1200,12 @@ static void SA2_LABEL(Task_8008DCC)(void)
|
|||||||
RANGE_yHigh(range2) = temp4 - 1;
|
RANGE_yHigh(range2) = temp4 - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gCamera.x != em->prevCamX && RANGE_xLow(range1) != RANGE_xHigh(range1) && RANGE_yLow(range1) != range1.yHigh) {
|
if (gCamera.x != em->prevCamX && RANGE_xLow(range1) != RANGE_xHigh(range1) && RANGE_yLow(range1) != RANGE_yHigh(range1)) {
|
||||||
regionY = I(RANGE_yLow(range1));
|
regionY = TO_REGION(RANGE_yLow(range1));
|
||||||
|
|
||||||
while (Q(regionY) < range1.yHigh && regionY < v_regionCount) {
|
while (TO_WORLD_POS(0, regionY) < RANGE_yHigh(range1) && regionY < v_regionCount) {
|
||||||
regionX = I(RANGE_xLow(range1));
|
regionX = TO_REGION(RANGE_xLow(range1));
|
||||||
while (Q(regionX) < RANGE_xHigh(range1) && regionX < h_regionCount) {
|
while (TO_WORLD_POS(0, regionX) < RANGE_xHigh(range1) && regionX < h_regionCount) {
|
||||||
#ifndef COLLECT_RINGS_ROM
|
#ifndef COLLECT_RINGS_ROM
|
||||||
if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
||||||
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
||||||
@@ -844,7 +1216,7 @@ static void SA2_LABEL(Task_8008DCC)(void)
|
|||||||
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
||||||
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
||||||
if (x >= RANGE_xLow(range1) && x <= RANGE_xHigh(range1) && y >= RANGE_yLow(range1)
|
if (x >= RANGE_xLow(range1) && x <= RANGE_xHigh(range1) && y >= RANGE_yLow(range1)
|
||||||
&& y <= range1.yHigh) {
|
&& y <= RANGE_yHigh(range1)) {
|
||||||
gSpriteInits_Interactables[me->index](me, regionX, regionY, i);
|
gSpriteInits_Interactables[me->index](me, regionX, regionY, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -859,7 +1231,7 @@ static void SA2_LABEL(Task_8008DCC)(void)
|
|||||||
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
||||||
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
||||||
if (x >= RANGE_xLow(range1) && x <= RANGE_xHigh(range1) && y >= RANGE_yLow(range1)
|
if (x >= RANGE_xLow(range1) && x <= RANGE_xHigh(range1) && y >= RANGE_yLow(range1)
|
||||||
&& y <= range1.yHigh) {
|
&& y <= RANGE_yHigh(range1)) {
|
||||||
CreateEntity_ItemBox((MapEntity *)me, regionX, regionY, i);
|
CreateEntity_ItemBox((MapEntity *)me, regionX, regionY, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -874,7 +1246,7 @@ static void SA2_LABEL(Task_8008DCC)(void)
|
|||||||
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
||||||
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
||||||
if (x >= RANGE_xLow(range1) && x <= RANGE_xHigh(range1) && y >= RANGE_yLow(range1)
|
if (x >= RANGE_xLow(range1) && x <= RANGE_xHigh(range1) && y >= RANGE_yLow(range1)
|
||||||
&& y <= range1.yHigh) {
|
&& y <= RANGE_yHigh(range1)) {
|
||||||
gSpriteInits_Enemies[me->index](me, regionX, regionY, i);
|
gSpriteInits_Enemies[me->index](me, regionX, regionY, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -897,7 +1269,7 @@ static void SA2_LABEL(Task_8008DCC)(void)
|
|||||||
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
CamCoord x = TO_WORLD_POS(me->x, regionX);
|
||||||
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
CamCoord y = TO_WORLD_POS(me->y, regionY);
|
||||||
if (x >= RANGE_xLow(range1) && x <= RANGE_xHigh(range1) && y >= RANGE_yLow(range1)
|
if (x >= RANGE_xLow(range1) && x <= RANGE_xHigh(range1) && y >= RANGE_yLow(range1)
|
||||||
&& y <= range1.yHigh) {
|
&& y <= RANGE_yHigh(range1)) {
|
||||||
gSpriteInits_CollectRingsInteractables[me->index](me, regionX, regionY, i);
|
gSpriteInits_CollectRingsInteractables[me->index](me, regionX, regionY, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -911,10 +1283,10 @@ static void SA2_LABEL(Task_8008DCC)(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (((gCamera.y != em->prevCamY) && (RANGE_yLow(range2) != RANGE_yHigh(range2))) && (RANGE_xLow(range2) != RANGE_xHigh(range2))) {
|
if (((gCamera.y != em->prevCamY) && (RANGE_yLow(range2) != RANGE_yHigh(range2))) && (RANGE_xLow(range2) != RANGE_xHigh(range2))) {
|
||||||
regionY = I(RANGE_yLow(range2));
|
regionY = TO_REGION(RANGE_yLow(range2));
|
||||||
while (({ Q(regionY); }) < RANGE_yHigh(range2) && regionY < v_regionCount) {
|
while (({ TO_WORLD_POS(0, regionY); }) < RANGE_yHigh(range2) && regionY < v_regionCount) {
|
||||||
regionX = I(RANGE_xLow(range2));
|
regionX = TO_REGION(RANGE_xLow(range2));
|
||||||
while (Q(regionX) < RANGE_xHigh(range2) && regionX < h_regionCount) {
|
while (TO_WORLD_POS(0, regionX) < RANGE_xHigh(range2) && regionX < h_regionCount) {
|
||||||
#ifndef COLLECT_RINGS_ROM
|
#ifndef COLLECT_RINGS_ROM
|
||||||
if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) {
|
||||||
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY);
|
||||||
@@ -1033,7 +1405,7 @@ void CreateEnemyDefeatScoreAndManageLives(s16 x, s16 y)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TaskDestructor_80095E8(struct Task *t)
|
void TaskDestructor_EntityShared(struct Task *t)
|
||||||
{
|
{
|
||||||
Sprite_Entity *s = TASK_DATA(t);
|
Sprite_Entity *s = TASK_DATA(t);
|
||||||
VramFree(s->displayed.graphics.dest);
|
VramFree(s->displayed.graphics.dest);
|
||||||
@@ -1047,5 +1419,4 @@ static void TaskDestructor_EntitiesManager(struct Task *t)
|
|||||||
EwramFree(em->enemies);
|
EwramFree(em->enemies);
|
||||||
gEntitiesManagerTask = NULL;
|
gEntitiesManagerTask = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
Reference in new issue
Block a user