mirror of
https://github.com/zeldaret/mm.git
synced 2026-05-30 17:05:25 -04:00
dcf44596d2
* Progress on various files * gfxprint stuff * split some rodata, add iconv for rodata string parsing * z_std_dma rodata * 2 nonmatchings in gfxprint * mtxuty-cvt ok * more * match a function in idle.c * progress * Cleanup * Rename BgPolygon to CollisionPoly * progress * some effect stuff * more effect progress * updates * made suggested changes * z_effect_soft_sprite_old_init mostly ok * remove old effects enum * gamealloc.c OK * added more files * motor.c almost done * motor.c OK * updates * migration of two files * listalloc.c oK * z_fcurve_data_skelanime split * z_fcurve_data_skelanime.c decompiled * more files split * z_malloc.c OK * contpfs.c OK * fault.c rodata migrated * migrated fault_drawer rodata * update * update preprocess.py * renamed functions in z_skelanime * started z_skelanime cleanup * like halfway through fixing z_skelanime * animation system updated to meet oot standards * remove unused animation structs * rename matrix structs to fit oot * Add -woff 712 * fix diff_settings.py because i accidentally broke it before * fixed merge conflict, doesn't match though * It matches now * Updates * Fixed warnings...added gcc code syntax checking * Remove gcc check, added in Tharo's PR * warnings fixed (i think) * fixed all warnings i think * ok * not sure what to do * Fix all warnings i think (z_en_a_keep needs some file cleanup thouguh) * it matches if i do this * remove comment * accidentally put osPfsFreeBlocks in epilinkhandle.c * memcmp -> bcmp * change u32 size to size_t size, delete string.h because it caused unnecessary confusion with defining size_t twice * format.sh * MTXMODE_NEW and MTXMODE_APPLY to matrix functions * Made suggested changes * pragma sFaultDrawerFont instead of including in repo * add some functions to functions.h * Bss reordering fixed in z_collision_check...added hack to disasm.py * Updated z_en_a_keep.c * Missed suggestion in EnAObj_Destroy * . * update z_fcurve_Data_skelanime and z_skelanime with suggestions * devmgr.c ok * minor changes * Addressed comments * remove redundant file * gfxp -> dlist in game.c * updated actorfixer.py * fixed warnings in z_malloc * Change void* back to Actor* * format * Add the soft_sprit comments back * Rename SV->Flex * remove .common * run format * Update src/code/z_skelanime.c * u32 channel Co-authored-by: Lucas Shaw <lucas.shaw1123@gmail.com> Co-authored-by: angie <angheloalf95@gmail.com> Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>
121 lines
4.1 KiB
C
121 lines
4.1 KiB
C
#include "global.h"
|
|
|
|
void EffFootmark_Init(GlobalContext* globalCtx) {
|
|
EffFootmark* footmark;
|
|
s32 i;
|
|
|
|
for (footmark = globalCtx->footprintInfo, i = 0; i < 100; i++, footmark++) {
|
|
footmark->actor = NULL;
|
|
footmark->location.x = 0;
|
|
footmark->location.y = 0;
|
|
footmark->location.z = 0;
|
|
footmark->flags = 0;
|
|
footmark->id = 0;
|
|
footmark->alpha = 0;
|
|
footmark->alphaChange = 0;
|
|
}
|
|
}
|
|
|
|
void EffFootmark_Add(GlobalContext* globalCtx, MtxF* displayMatrix, Actor* actor, u8 id, Vec3f* location, u16 size,
|
|
u8 red, u8 green, u8 blue, u16 alpha, u16 alphaChange, u16 fadeoutDelay) {
|
|
s32 i;
|
|
EffFootmark* footmark;
|
|
EffFootmark* destination = NULL;
|
|
EffFootmark* oldest = NULL;
|
|
s32 isNew = 1;
|
|
|
|
for (footmark = globalCtx->footprintInfo, i = 0; i < 100; i++, footmark++) {
|
|
if (((actor == footmark->actor) && (footmark->id == id)) && ((footmark->flags & 1) == 0)) {
|
|
if (fabsf((footmark->location).x - location->x) <= 1) {
|
|
if (fabsf((footmark->location).z - location->z) <= 1) {
|
|
isNew = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// This footmark is being re-added at a new location. Let's mark this one to start fading out.
|
|
footmark->flags = 1;
|
|
}
|
|
|
|
if (footmark->actor == NULL) {
|
|
destination = footmark;
|
|
} else {
|
|
if (destination == NULL) {
|
|
if ((oldest != NULL && footmark->age > oldest->age) || (oldest == NULL)) {
|
|
oldest = footmark;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((isNew) && ((destination != NULL || (oldest != NULL)))) {
|
|
if (destination == NULL) {
|
|
destination = oldest;
|
|
}
|
|
Matrix_MtxFCopy(&destination->displayMatrix, displayMatrix);
|
|
destination->actor = actor;
|
|
destination->location.x = location->x;
|
|
destination->location.y = location->y;
|
|
destination->location.z = location->z;
|
|
destination->flags = 0;
|
|
destination->id = id;
|
|
destination->red = red;
|
|
destination->green = green;
|
|
destination->blue = blue;
|
|
destination->alpha = alpha;
|
|
destination->alphaChange = alphaChange;
|
|
destination->size = size;
|
|
destination->fadeoutDelay = fadeoutDelay;
|
|
destination->age = 0;
|
|
}
|
|
}
|
|
|
|
void EffFootmark_Update(GlobalContext* globalCtx) {
|
|
EffFootmark* footmark;
|
|
s32 i;
|
|
|
|
for (footmark = globalCtx->footprintInfo, i = 0; i < 100; i++, footmark++) {
|
|
if (footmark->actor != NULL) {
|
|
if ((footmark->flags & 1) == 1) {
|
|
if (footmark->age < 0xFFFFu) { // TODO replace with MAX_U16 or something
|
|
footmark->age++;
|
|
}
|
|
|
|
if (footmark->fadeoutDelay == 0) {
|
|
if (footmark->alpha >= footmark->alphaChange + 0x1000) {
|
|
footmark->alpha -= footmark->alphaChange;
|
|
} else {
|
|
footmark->actor = NULL;
|
|
}
|
|
} else if (footmark->fadeoutDelay > 0) {
|
|
footmark->fadeoutDelay--;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void EffFootmark_Draw(GlobalContext* globalCtx) {
|
|
EffFootmark* footmark;
|
|
s32 i;
|
|
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
|
|
|
|
func_8012C448(globalCtx->state.gfxCtx);
|
|
|
|
gSPDisplayList(gfxCtx->polyXlu.p++, D_801BC240);
|
|
|
|
for (footmark = globalCtx->footprintInfo, i = 0; i < 100; i++, footmark++) {
|
|
if (footmark->actor != NULL) {
|
|
Matrix_SetCurrentState(&footmark->displayMatrix);
|
|
Matrix_Scale(footmark->size * (1.0f / 0x100) * 0.7f, 1, footmark->size * (1.0f / 0x100), MTXMODE_APPLY);
|
|
|
|
gSPMatrix(gfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD);
|
|
|
|
gDPSetPrimColor(gfxCtx->polyXlu.p++, 0, 0, footmark->red, footmark->green, footmark->blue,
|
|
footmark->alpha >> 8);
|
|
|
|
gSPDisplayList(gfxCtx->polyXlu.p++, D_801BC288);
|
|
}
|
|
}
|
|
}
|