mirror of
https://github.com/zeldaret/tmc
synced 2026-07-09 14:55:35 -04:00
48 lines
1005 B
C
48 lines
1005 B
C
/**
|
|
* @file well.c
|
|
* @ingroup Objects
|
|
*
|
|
* @brief Well object
|
|
*/
|
|
#include "asm.h"
|
|
#include "entity.h"
|
|
#include "functions.h"
|
|
#include "player.h"
|
|
#include "room.h"
|
|
|
|
typedef struct {
|
|
/*0x00*/ Entity base;
|
|
/*0x68*/ u8 unused1[24];
|
|
/*0x80*/ u16 unk_80;
|
|
} WellEntity;
|
|
|
|
void Well_Init(WellEntity* this);
|
|
void Well_Action1(WellEntity* this);
|
|
|
|
void Well(WellEntity* this) {
|
|
static void (*const Well_Actions[])(WellEntity*) = {
|
|
Well_Init,
|
|
Well_Action1,
|
|
};
|
|
Well_Actions[super->action](this);
|
|
}
|
|
|
|
void Well_Init(WellEntity* this) {
|
|
u32 tilePos;
|
|
|
|
super->action = 1;
|
|
tilePos = COORD_TO_TILE(super);
|
|
this->unk_80 = tilePos;
|
|
SetBottomTile(16509, this->unk_80, 1);
|
|
}
|
|
|
|
void Well_Action1(WellEntity* this) {
|
|
u32 tileIndex = GetTileType(this->unk_80, 1);
|
|
if (tileIndex != 0x407D) {
|
|
PausePlayer();
|
|
gPlayerEntity.base.x.WORD = super->x.WORD;
|
|
gPlayerEntity.base.y.HALF.HI = super->y.HALF.HI + 4;
|
|
DeleteThisEntity();
|
|
}
|
|
}
|