diff --git a/include/PR/gu.h b/include/PR/gu.h index f4bb1cadad..972918c707 100755 --- a/include/PR/gu.h +++ b/include/PR/gu.h @@ -1,269 +1,269 @@ -#ifndef _GU_H_ -#define _GU_H_ - -/************************************************************************** - * * - * Copyright (C) 1994, Silicon Graphics, Inc. * - * * - * These coded instructions, statements, and computer programs contain * - * unpublished proprietary information of Silicon Graphics, Inc., and * - * are protected by Federal copyright law. They may not be disclosed * - * to third parties or copied or duplicated in any form, in whole or * - * in part, without the prior written consent of Silicon Graphics, Inc. * - * * - **************************************************************************/ - -/************************************************************************** - * - * $Revision: 1.48 $ - * $Date: 1999/07/13 08:00:20 $ - * $Source: /hosts/gate3/exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/gu.h,v $ - * - **************************************************************************/ - -#include -#include -#include - -#ifndef MAX -#define MAX(a,b) (((a)>(b))?(a):(b)) -#endif -#ifndef MIN -#define MIN(a,b) (((a)<(b))?(a):(b)) -#endif - -#define M_PI 3.14159265358979323846 -#define M_DTOR (3.14159265358979323846/180.0) - -#define FTOFIX32(x) (long)((x) * (float)0x00010000) -#define FIX32TOF(x) ((float)(x) * (1.0f / (float)0x00010000)) -#define FTOFRAC8(x) ((int) MIN(((x) * (128.0f)), 127.0f) & 0xff) - -#define FILTER_WRAP 0 -#define FILTER_CLAMP 1 - -#define RAND(x) (guRandom()%x) /* random number between 0 to x */ - -/* - * Data Structures - */ -typedef struct { - unsigned char *base; - int fmt, siz; - int xsize, ysize; - int lsize; - /* current tile info */ - int addr; - int w, h; - int s, t; -} Image; - -typedef struct { - float col[3]; - float pos[3]; - float a1, a2; /* actual color = col/(a1*dist + a2) */ -} PositionalLight; - - -/* - * Function Prototypes - */ - -extern int guLoadTextureBlockMipMap(Gfx **glist, unsigned char *tbuf, Image *im, - unsigned char startTile, unsigned char pal, unsigned char cms, - unsigned char cmt, unsigned char masks, unsigned char maskt, - unsigned char shifts, unsigned char shiftt, unsigned char cfs, - unsigned char cft); - -extern int guGetDPLoadTextureTileSz (int ult, int lrt); -extern void guDPLoadTextureTile (Gfx *glistp, void *timg, - int texl_fmt, int texl_size, - int img_width, int img_height, - int uls, int ult, int lrs, int lrt, - int palette, - int cms, int cmt, - int masks, int maskt, - int shifts, int shiftt); - - -/* - * matrix operations: - * - * The 'F' version is floating point, in case the application wants - * to do matrix manipulations and convert to fixed-point at the last - * minute. - */ -extern void guMtxIdent(Mtx *m); -extern void guMtxIdentF(float mf[4][4]); -/*extern void guOrtho(Mtx *m, float l, float r, float b, float t, - float n, float f, float scale); -extern void guOrthoF(float mf[4][4], float l, float r, float b, float t, - float n, float f, float scale);*/ -extern void guFrustum(Mtx *m, float l, float r, float b, float t, - float n, float f, float scale); -extern void guFrustumF(float mf[4][4], float l, float r, float b, float t, - float n, float f, float scale); -extern void guPerspective(Mtx *m, u16 *perspNorm, float fovy, - float aspect, float near, float far, float scale); -extern void guPerspectiveF(float mf[4][4], u16 *perspNorm, float fovy, - float aspect, float near, float far, float scale); -extern void guLookAt(Mtx *m, - float xEye, float yEye, float zEye, - float xAt, float yAt, float zAt, - float xUp, float yUp, float zUp); -extern void guLookAtF(float mf[4][4], float xEye, float yEye, float zEye, - float xAt, float yAt, float zAt, - float xUp, float yUp, float zUp); -extern void guLookAtReflect(Mtx *m, LookAt *l, - float xEye, float yEye, float zEye, - float xAt, float yAt, float zAt, - float xUp, float yUp, float zUp); -extern void guLookAtReflectF(float mf[4][4], LookAt *l, - float xEye, float yEye, float zEye, - float xAt, float yAt, float zAt, - float xUp, float yUp, float zUp); -extern void guLookAtHilite(Mtx *m, LookAt *l, Hilite *h, - float xEye, float yEye, float zEye, - float xAt, float yAt, float zAt, - float xUp, float yUp, float zUp, - float xl1, float yl1, float zl1, - float xl2, float yl2, float zl2, - int twidth, int theight); -extern void guLookAtHiliteF(float mf[4][4], LookAt *l, Hilite *h, - float xEye, float yEye, float zEye, - float xAt, float yAt, float zAt, - float xUp, float yUp, float zUp, - float xl1, float yl1, float zl1, - float xl2, float yl2, float zl2, - int twidth, int theight); -extern void guLookAtStereo(Mtx *m, - float xEye, float yEye, float zEye, - float xAt, float yAt, float zAt, - float xUp, float yUp, float zUp, - float eyedist); -extern void guLookAtStereoF(float mf[4][4], - float xEye, float yEye, float zEye, - float xAt, float yAt, float zAt, - float xUp, float yUp, float zUp, - float eyedist); -extern void guRotate(Mtx *m, float a, float x, float y, float z); -extern void guRotateF(float mf[4][4], float a, float x, float y, float z); -extern void guRotateRPY(Mtx *m, float r, float p, float y); -extern void guRotateRPYF(float mf[4][4], float r, float p, float h); -extern void guAlign(Mtx *m, float a, float x, float y, float z); -extern void guAlignF(float mf[4][4], float a, float x, float y, float z); -extern void guScale(Mtx *m, float x, float y, float z); -extern void guScaleF(float mf[4][4], float x, float y, float z); -extern void guTranslate(Mtx *m, float x, float y, float z); -extern void guTranslateF(float mf[4][4], float x, float y, float z); -extern void guPosition(Mtx *m, float r, float p, float h, float s, - float x, float y, float z); -extern void guPositionF(float mf[4][4], float r, float p, float h, float s, - float x, float y, float z); -extern void guMtxF2L(float mf[4][4], Mtx *m); -extern void guMtxL2F(float mf[4][4], Mtx *m); -extern void guMtxCatF(float m[4][4], float n[4][4], float r[4][4]); -extern void guMtxCatL(Mtx *m, Mtx *n, Mtx *res); -extern void guMtxXFMF(float mf[4][4], float x, float y, float z, - float *ox, float *oy, float *oz); -extern void guMtxXFML(Mtx *m, float x, float y, float z, - float *ox, float *oy, float *oz); - -/* vector utility: */ -extern void guNormalize(float *x, float *y, float *z); - -/* light utilities: */ -void guPosLight(PositionalLight *pl, Light *l, - float xOb, float yOb, float zOb); -void guPosLightHilite(PositionalLight *pl1, PositionalLight *pl2, - Light *l1, Light *l2, - LookAt *l, Hilite *h, - float xEye, float yEye, float zEye, - float xOb, float yOb, float zOb, - float xUp, float yUp, float zUp, - int twidth, int theight); -extern int guRandom(void); - -/* - * Math functions - */ -extern float sinf(float angle); -extern float cosf(float angle); -extern signed short sins (unsigned short angle); -extern signed short coss (unsigned short angle); -extern float sqrtf(float value); -#ifdef __sgi -#pragma intrinsic(sqrtf); -#endif - -/* - * Dump routines for low-level display lists - */ -/* flag values for guParseRdpDL() */ -#define GU_PARSERDP_VERBOSE 1 -#define GU_PARSERDP_PRAREA 2 -#define GU_PARSERDP_PRHISTO 4 -#define GU_PARSERDP_DUMPONLY 32 /* doesn't need to be same as */ - /* GU_PARSEGBI_DUMPOLNY, but this */ - /* allows app to use interchangeably */ - -extern void guParseRdpDL(u64 *rdp_dl, u64 nbytes, u8 flags); -extern void guParseString(char *StringPointer, u64 nbytes); - -/* - * NO LONGER SUPPORTED, - * use guParseRdpDL with GU_PARSERDP_DUMPONLY flags - */ -/* extern void guDumpRawRdpDL(u64 *rdp_dl, u64 nbytes); */ - -/* flag values for guBlinkRdpDL() */ -#define GU_BLINKRDP_HILITE 1 -#define GU_BLINKRDP_EXTRACT 2 - -extern void -guBlinkRdpDL(u64 *rdp_dl_in, u64 nbytes_in, - u64 *rdp_dl_out, u64 *nbytes_out, - u32 x, u32 y, u32 radius, - u8 red, u8 green, u8 blue, - u8 flags); - -/* flag values for guParseGbiDL() */ -#define GU_PARSEGBI_ROWMAJOR 1 -#define GU_PARSEGBI_NONEST 2 -#define GU_PARSEGBI_FLTMTX 4 -#define GU_PARSEGBI_SHOWDMA 8 -#define GU_PARSEGBI_ALLMTX 16 -#define GU_PARSEGBI_DUMPONLY 32 -/* -#define GU_PARSEGBI_HANGAFTER 64 -#define GU_PARSEGBI_NOTEXTURES 128 -*/ -extern void guParseGbiDL(u64 *gbi_dl, u32 nbytes, u8 flags); -extern void guDumpGbiDL(OSTask *tp,u8 flags); - -#define GU_PARSE_GBI_TYPE 1 -#define GU_PARSE_RDP_TYPE 2 -#define GU_PARSE_READY 3 -#define GU_PARSE_MEM_BLOCK 4 -#define GU_PARSE_ABI_TYPE 5 -#define GU_PARSE_STRING_TYPE 6 - -typedef struct { - int dataSize; - int dlType; - int flags; - u32 paddr; -} guDLPrintCB; - -void guSprite2DInit(uSprite *SpritePointer, - void *SourceImagePointer, - void *TlutPointer, - int Stride, - int SubImageWidth, - int SubImageHeight, - int SourceImageType, - int SourceImageBitSize, - int SourceImageOffsetS, - int SourceImageOffsetT); - -#endif /* !_GU_H_ */ +#ifndef _GU_H_ +#define _GU_H_ + +/************************************************************************** + * * + * Copyright (C) 1994, Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs contain * + * unpublished proprietary information of Silicon Graphics, Inc., and * + * are protected by Federal copyright law. They may not be disclosed * + * to third parties or copied or duplicated in any form, in whole or * + * in part, without the prior written consent of Silicon Graphics, Inc. * + * * + **************************************************************************/ + +/************************************************************************** + * + * $Revision: 1.48 $ + * $Date: 1999/07/13 08:00:20 $ + * $Source: /hosts/gate3/exdisk2/cvs/N64OS/Master/cvsmdev2/PR/include/gu.h,v $ + * + **************************************************************************/ + +#include +#include +#include + +#ifndef MAX +#define MAX(a,b) (((a)>(b))?(a):(b)) +#endif +#ifndef MIN +#define MIN(a,b) (((a)<(b))?(a):(b)) +#endif + +#define M_PI 3.14159265358979323846 +#define M_DTOR (3.14159265358979323846/180.0) + +#define FTOFIX32(x) (long)((x) * (float)0x00010000) +#define FIX32TOF(x) ((float)(x) * (1.0f / (float)0x00010000)) +#define FTOFRAC8(x) ((int) MIN(((x) * (128.0f)), 127.0f) & 0xff) + +#define FILTER_WRAP 0 +#define FILTER_CLAMP 1 + +#define RAND(x) (guRandom()%x) /* random number between 0 to x */ + +/* + * Data Structures + */ +typedef struct { + unsigned char *base; + int fmt, siz; + int xsize, ysize; + int lsize; + /* current tile info */ + int addr; + int w, h; + int s, t; +} Image; + +typedef struct { + float col[3]; + float pos[3]; + float a1, a2; /* actual color = col/(a1*dist + a2) */ +} PositionalLight; + + +/* + * Function Prototypes + */ + +extern int guLoadTextureBlockMipMap(Gfx **glist, unsigned char *tbuf, Image *im, + unsigned char startTile, unsigned char pal, unsigned char cms, + unsigned char cmt, unsigned char masks, unsigned char maskt, + unsigned char shifts, unsigned char shiftt, unsigned char cfs, + unsigned char cft); + +extern int guGetDPLoadTextureTileSz (int ult, int lrt); +extern void guDPLoadTextureTile (Gfx *glistp, void *timg, + int texl_fmt, int texl_size, + int img_width, int img_height, + int uls, int ult, int lrs, int lrt, + int palette, + int cms, int cmt, + int masks, int maskt, + int shifts, int shiftt); + + +/* + * matrix operations: + * + * The 'F' version is floating point, in case the application wants + * to do matrix manipulations and convert to fixed-point at the last + * minute. + */ +extern void guMtxIdent(Mtx *m); +extern void guMtxIdentF(float mf[4][4]); +extern void guOrtho(Mtx *m, float l, float r, float b, float t, + float n, float f, float scale); +extern void guOrthoF(float mf[4][4], float l, float r, float b, float t, + float n, float f, float scale); +extern void guFrustum(Mtx *m, float l, float r, float b, float t, + float n, float f, float scale); +extern void guFrustumF(float mf[4][4], float l, float r, float b, float t, + float n, float f, float scale); +extern void guPerspective(Mtx *m, u16 *perspNorm, float fovy, + float aspect, float near, float far, float scale); +extern void guPerspectiveF(float mf[4][4], u16 *perspNorm, float fovy, + float aspect, float near, float far, float scale); +extern void guLookAt(Mtx *m, + float xEye, float yEye, float zEye, + float xAt, float yAt, float zAt, + float xUp, float yUp, float zUp); +extern void guLookAtF(float mf[4][4], float xEye, float yEye, float zEye, + float xAt, float yAt, float zAt, + float xUp, float yUp, float zUp); +extern void guLookAtReflect(Mtx *m, LookAt *l, + float xEye, float yEye, float zEye, + float xAt, float yAt, float zAt, + float xUp, float yUp, float zUp); +extern void guLookAtReflectF(float mf[4][4], LookAt *l, + float xEye, float yEye, float zEye, + float xAt, float yAt, float zAt, + float xUp, float yUp, float zUp); +extern void guLookAtHilite(Mtx *m, LookAt *l, Hilite *h, + float xEye, float yEye, float zEye, + float xAt, float yAt, float zAt, + float xUp, float yUp, float zUp, + float xl1, float yl1, float zl1, + float xl2, float yl2, float zl2, + int twidth, int theight); +extern void guLookAtHiliteF(float mf[4][4], LookAt *l, Hilite *h, + float xEye, float yEye, float zEye, + float xAt, float yAt, float zAt, + float xUp, float yUp, float zUp, + float xl1, float yl1, float zl1, + float xl2, float yl2, float zl2, + int twidth, int theight); +extern void guLookAtStereo(Mtx *m, + float xEye, float yEye, float zEye, + float xAt, float yAt, float zAt, + float xUp, float yUp, float zUp, + float eyedist); +extern void guLookAtStereoF(float mf[4][4], + float xEye, float yEye, float zEye, + float xAt, float yAt, float zAt, + float xUp, float yUp, float zUp, + float eyedist); +extern void guRotate(Mtx *m, float a, float x, float y, float z); +extern void guRotateF(float mf[4][4], float a, float x, float y, float z); +extern void guRotateRPY(Mtx *m, float r, float p, float y); +extern void guRotateRPYF(float mf[4][4], float r, float p, float h); +extern void guAlign(Mtx *m, float a, float x, float y, float z); +extern void guAlignF(float mf[4][4], float a, float x, float y, float z); +extern void guScale(Mtx *m, float x, float y, float z); +extern void guScaleF(float mf[4][4], float x, float y, float z); +extern void guTranslate(Mtx *m, float x, float y, float z); +extern void guTranslateF(float mf[4][4], float x, float y, float z); +extern void guPosition(Mtx *m, float r, float p, float h, float s, + float x, float y, float z); +extern void guPositionF(float mf[4][4], float r, float p, float h, float s, + float x, float y, float z); +extern void guMtxF2L(float mf[4][4], Mtx *m); +extern void guMtxL2F(float mf[4][4], Mtx *m); +extern void guMtxCatF(float m[4][4], float n[4][4], float r[4][4]); +extern void guMtxCatL(Mtx *m, Mtx *n, Mtx *res); +extern void guMtxXFMF(float mf[4][4], float x, float y, float z, + float *ox, float *oy, float *oz); +extern void guMtxXFML(Mtx *m, float x, float y, float z, + float *ox, float *oy, float *oz); + +/* vector utility: */ +extern void guNormalize(float *x, float *y, float *z); + +/* light utilities: */ +void guPosLight(PositionalLight *pl, Light *l, + float xOb, float yOb, float zOb); +void guPosLightHilite(PositionalLight *pl1, PositionalLight *pl2, + Light *l1, Light *l2, + LookAt *l, Hilite *h, + float xEye, float yEye, float zEye, + float xOb, float yOb, float zOb, + float xUp, float yUp, float zUp, + int twidth, int theight); +extern int guRandom(void); + +/* + * Math functions + */ +extern float sinf(float angle); +extern float cosf(float angle); +extern signed short sins (unsigned short angle); +extern signed short coss (unsigned short angle); +extern float sqrtf(float value); +#ifdef __sgi +#pragma intrinsic(sqrtf); +#endif + +/* + * Dump routines for low-level display lists + */ +/* flag values for guParseRdpDL() */ +#define GU_PARSERDP_VERBOSE 1 +#define GU_PARSERDP_PRAREA 2 +#define GU_PARSERDP_PRHISTO 4 +#define GU_PARSERDP_DUMPONLY 32 /* doesn't need to be same as */ + /* GU_PARSEGBI_DUMPOLNY, but this */ + /* allows app to use interchangeably */ + +extern void guParseRdpDL(u64 *rdp_dl, u64 nbytes, u8 flags); +extern void guParseString(char *StringPointer, u64 nbytes); + +/* + * NO LONGER SUPPORTED, + * use guParseRdpDL with GU_PARSERDP_DUMPONLY flags + */ +/* extern void guDumpRawRdpDL(u64 *rdp_dl, u64 nbytes); */ + +/* flag values for guBlinkRdpDL() */ +#define GU_BLINKRDP_HILITE 1 +#define GU_BLINKRDP_EXTRACT 2 + +extern void +guBlinkRdpDL(u64 *rdp_dl_in, u64 nbytes_in, + u64 *rdp_dl_out, u64 *nbytes_out, + u32 x, u32 y, u32 radius, + u8 red, u8 green, u8 blue, + u8 flags); + +/* flag values for guParseGbiDL() */ +#define GU_PARSEGBI_ROWMAJOR 1 +#define GU_PARSEGBI_NONEST 2 +#define GU_PARSEGBI_FLTMTX 4 +#define GU_PARSEGBI_SHOWDMA 8 +#define GU_PARSEGBI_ALLMTX 16 +#define GU_PARSEGBI_DUMPONLY 32 +/* +#define GU_PARSEGBI_HANGAFTER 64 +#define GU_PARSEGBI_NOTEXTURES 128 +*/ +extern void guParseGbiDL(u64 *gbi_dl, u32 nbytes, u8 flags); +extern void guDumpGbiDL(OSTask *tp,u8 flags); + +#define GU_PARSE_GBI_TYPE 1 +#define GU_PARSE_RDP_TYPE 2 +#define GU_PARSE_READY 3 +#define GU_PARSE_MEM_BLOCK 4 +#define GU_PARSE_ABI_TYPE 5 +#define GU_PARSE_STRING_TYPE 6 + +typedef struct { + int dataSize; + int dlType; + int flags; + u32 paddr; +} guDLPrintCB; + +void guSprite2DInit(uSprite *SpritePointer, + void *SourceImagePointer, + void *TlutPointer, + int Stride, + int SubImageWidth, + int SubImageHeight, + int SourceImageType, + int SourceImageBitSize, + int SourceImageOffsetS, + int SourceImageOffsetT); + +#endif /* !_GU_H_ */ diff --git a/include/camera.h b/include/camera.h index 77e4cd7eb9..5168dfdd1a 100644 --- a/include/camera.h +++ b/include/camera.h @@ -3,4 +3,13 @@ extern f32 D_8009A5EC; +enum { + CAM_FLAG_ENABLED = 0x2, + CAM_FLAG_LEAD_PLAYER = 0x4, + CAM_FLAG_SHAKING = 0x8, + CAM_FLAG_ORTHO = 0x10, + CAM_FLAG_80 = 0x80, + CAM_FLAG_1000 = 0x1000, +}; + #endif diff --git a/include/common_structs.h b/include/common_structs.h index 9a7b58226e..725785c065 100644 --- a/include/common_structs.h +++ b/include/common_structs.h @@ -523,7 +523,7 @@ typedef struct CameraInitData { } CameraInitData; // size = 0x12; typedef struct Camera { - /* 0x000 */ s16 flags; + /* 0x000 */ u16 flags; /* 0x002 */ s16 moveFlags; /* 0x004 */ s16 mode; /* 0x006 */ s16 unk_06; diff --git a/include/macros.h b/include/macros.h index 16f226fe33..c7fc975ee9 100644 --- a/include/macros.h +++ b/include/macros.h @@ -20,8 +20,6 @@ #define PANIC() ASSERT(0) #define STATIC_ASSERT(condition) enum { static_assert_fail = 1/(!!(condition)) } // Causes division by zero ("not integer constant") if false -#define CAM(id) (&gCameras[id]) - #define BADGE_MENU_PAGE(index) (&gBadgeMenuPages[index]) #define ITEM_MENU_PAGE(index) (&gItemMenuPages[index]) diff --git a/src/8800.c b/src/8800.c index db355db838..bb5ea75fd1 100644 --- a/src/8800.c +++ b/src/8800.c @@ -5,7 +5,78 @@ void initialize_next_camera(CameraInitData* data); -INCLUDE_ASM(s32, "8800", update_cameras); +void update_cameras(void) { + s32 i; + + for (i = 0; i < ARRAY_COUNT(gCameras); i++) { + Camera* cam = &gCameras[i]; + + if (cam->flags != 0 && !(cam->flags & CAM_FLAG_ENABLED)) { + s32 sx; + s32 sy; + s32 sz; + + gCurrentCamID = i; + + switch (cam->mode) { + case 3: + update_camera_zone_interp(cam); + break; + case 0: + update_camera_mode_0(cam); + break; + case 1: + update_camera_mode_1(cam); + break; + case 2: + update_camera_mode_2(cam); + break; + case 4: + update_camera_mode_4(cam); + break; + case 5: + update_camera_mode_5(cam); + break; + case 6: + default: + update_camera_mode_6(cam); + break; + } + + guLookAtReflectF(cam->viewMtxPlayer, &gDisplayContext->lookAt[0], cam->lookAt_eye.x, cam->lookAt_eye.y, cam->lookAt_eye.z, cam->lookAt_obj.x, cam->lookAt_obj.y, cam->lookAt_obj.z, 0, 1.0f, 0); + + if (!(cam->flags & CAM_FLAG_ORTHO)) { + if (cam->flags & CAM_FLAG_LEAD_PLAYER) { + create_camera_leadplayer_matrix(cam); + } + + guPerspectiveF(cam->perspectiveMatrix, &cam->perspNorm, cam->vfov, (f32) cam->viewportW / (f32) cam->viewportH, (f32) cam->nearClip, (f32) cam->farClip, 1.0f); + + if (cam->flags & CAM_FLAG_SHAKING) { + guMtxCatF(cam->viewMtxShaking, cam->perspectiveMatrix, cam->perspectiveMatrix); + } + + if (cam->flags & CAM_FLAG_LEAD_PLAYER) { + guMtxCatF(cam->viewMtxLeading, cam->perspectiveMatrix, cam->perspectiveMatrix); + } + + guMtxCatF(cam->viewMtxPlayer, cam->perspectiveMatrix, cam->perspectiveMatrix); + } else { + f32 w = cam->viewportW; + f32 h = cam->viewportH; + + guOrthoF(cam->perspectiveMatrix, -w * 0.5, w * 0.5, -h * 0.5, h * 0.5, -1000.0f, 1000.0f, 1.0f); + } + + get_screen_coords(0, cam->targetPos.x, cam->targetPos.y, cam->targetPos.z, &sx, &sy, &sz); + cam->targetScreenCoords[0] = sx; + cam->targetScreenCoords[1] = sy; + cam->targetScreenCoords[2] = sz; + } + } + + gCurrentCamID = 0; +} INCLUDE_ASM(void, "8800", render_frame); @@ -124,19 +195,19 @@ INCLUDE_ASM(void, "8800", initialize_next_camera, CameraInitData* data); INCLUDE_ASM(void, "8800", set_cam_viewport, s16 id, s16 x, s16 y, s16 width, s16 height); void get_cam_viewport(s32 camID, u16* x, u16* y, u16* width, u16* height) { - *width = CAM(camID)->viewportW; - *height = CAM(camID)->viewportH; - *x = CAM(camID)->viewportStartX; - *y = CAM(camID)->viewportStartY; + *width = gCameras[camID].viewportW; + *height = gCameras[camID].viewportH; + *x = gCameras[camID].viewportStartX; + *y = gCameras[camID].viewportStartY; } INCLUDE_ASM(void, "8800", get_screen_coords, Cam camID, f32 x, f32 y, f32 z, s32* screenX, s32* screenY, s32* screenZ); s32 func_8002E754(s32 camID, s32 x, s32 y) { - s32 startX = CAM(camID)->viewportStartX; - s32 startY = CAM(camID)->viewportStartY; - s32 endX = startX + CAM(camID)->viewportW; - s32 endY = startY + CAM(camID)->viewportH; + s32 startX = gCameras[camID].viewportStartX; + s32 startY = gCameras[camID].viewportStartY; + s32 endX = startX + gCameras[camID].viewportW; + s32 endY = startY + gCameras[camID].viewportH; if (x < startX) { return TRUE; @@ -152,10 +223,10 @@ s32 func_8002E754(s32 camID, s32 x, s32 y) { } void func_8002E7CC(s32 camID, s32* x, s32* y, s32* width, s32* height) { - *x = CAM(camID)->viewportStartX; - *y = CAM(camID)->viewportStartY; - *width = CAM(camID)->viewportStartX + CAM(camID)->viewportW; - *height = CAM(camID)->viewportStartY + CAM(camID)->viewportH; + *x = gCameras[camID].viewportStartX; + *y = gCameras[camID].viewportStartY; + *width = gCameras[camID].viewportStartX + gCameras[camID].viewportW; + *height = gCameras[camID].viewportStartY + gCameras[camID].viewportH; } INCLUDE_ASM(s32, "8800", func_8002E82C); diff --git a/src/battle/item/dizzy_dial.c b/src/battle/item/dizzy_dial.c index 67f55abef0..f047076819 100644 --- a/src/battle/item/dizzy_dial.c +++ b/src/battle/item/dizzy_dial.c @@ -1,4 +1,5 @@ #include "dizzy_dial.h" +#include "camera.h" static s32* D_802A1CD0; static HudElement* D_802A1CD4; @@ -75,7 +76,7 @@ ApiStatus N(func_802A1270_727B80)(ScriptInstance* script, s32 isInitialCall) { D_802A1CD0 = create_generic_entity_frontUI(NULL, func_802A123C_727B4C); script->functionTemp[0] = 1; case 1: - camera->flags |= 8; + camera->flags |= CAM_FLAG_SHAKING; a = script->functionTemp[1]; guRotateF(camera->viewMtxShaking, a, 0.0f, 0.0f, 1.0f); script->functionTemp[1] = 2.0 * ((1.0 - sin_rad(((script->functionTemp[2] + 90) * 6.28318f) / 360.0f)) * 360.0); @@ -84,7 +85,7 @@ ApiStatus N(func_802A1270_727B80)(ScriptInstance* script, s32 isInitialCall) { return ApiStatus_BLOCK; } camera->unk_1C = 0; - camera->flags &= ~8; + camera->flags &= ~CAM_FLAG_SHAKING; free_generic_entity(D_802A1CD0); return ApiStatus_DONE2; } diff --git a/src/evt/cam_api.c b/src/evt/cam_api.c index be60a358b6..278e9d6e9e 100644 --- a/src/evt/cam_api.c +++ b/src/evt/cam_api.c @@ -1,4 +1,5 @@ #include "common.h" +#include "camera.h" Script ShakeCam1 = SCRIPT({ group 0; @@ -16,9 +17,9 @@ ApiStatus SetCamEnabled(ScriptInstance* script, s32 isInitialCall) { s32 enabled = get_variable(script, *args++); if (!enabled) { - CAM(id)->flags |= 0x2; + gCameras[id].flags |= CAM_FLAG_ENABLED; } else { - CAM(id)->flags &= ~0x2; + gCameras[id].flags &= ~CAM_FLAG_ENABLED; } return ApiStatus_DONE2; } @@ -29,9 +30,9 @@ ApiStatus SetCamFlag80(ScriptInstance* script, s32 isInitialCall) { s32 enabled = get_variable(script, *args++); if (!enabled) { - CAM(id)->flags |= 0x80; + gCameras[id].flags |= CAM_FLAG_80; } else { - CAM(id)->flags &= ~0x80; + gCameras[id].flags &= ~CAM_FLAG_80; } return ApiStatus_DONE2; } @@ -76,25 +77,25 @@ ApiStatus func_802CA988(ScriptInstance* script, s32 isInitialCall) { Bytecode outVar4 = *args++; f32 temp1, temp2, temp3; - CAM(id)->mode = 2; - CAM(id)->unk_06 = 0; - CAM(id)->unk_1C = -round(CAM(id)->currentPitch); - CAM(id)->unk_1E = -CAM(id)->currentBlendedYawNegated; + gCameras[id].mode = 2; + gCameras[id].unk_06 = 0; + gCameras[id].unk_1C = -round(gCameras[id].currentPitch); + gCameras[id].unk_1E = -gCameras[id].currentBlendedYawNegated; - temp1 = CAM(id)->lookAt_obj.x - CAM(id)->lookAt_eye.x; - temp2 = CAM(id)->lookAt_obj.y - CAM(id)->lookAt_eye.y; - temp3 = CAM(id)->lookAt_obj.z - CAM(id)->lookAt_eye.z; + temp1 = gCameras[id].lookAt_obj.x - gCameras[id].lookAt_eye.x; + temp2 = gCameras[id].lookAt_obj.y - gCameras[id].lookAt_eye.y; + temp3 = gCameras[id].lookAt_obj.z - gCameras[id].lookAt_eye.z; - CAM(id)->unk_20 = round(sqrtf(SQ(temp1) + SQ(temp2) + SQ(temp3))); - CAM(id)->unk_22 = 0; - CAM(id)->unk_54 = CAM(id)->lookAt_obj.x; - CAM(id)->unk_58 = CAM(id)->lookAt_obj.y; - CAM(id)->unk_5C = CAM(id)->lookAt_obj.z; + gCameras[id].unk_20 = round(sqrtf(SQ(temp1) + SQ(temp2) + SQ(temp3))); + gCameras[id].unk_22 = 0; + gCameras[id].unk_54 = gCameras[id].lookAt_obj.x; + gCameras[id].unk_58 = gCameras[id].lookAt_obj.y; + gCameras[id].unk_5C = gCameras[id].lookAt_obj.z; - set_variable(script, outVar1, CAM(id)->unk_1C); - set_variable(script, outVar2, CAM(id)->unk_1E); - set_variable(script, outVar3, CAM(id)->unk_20); - set_variable(script, outVar4, CAM(id)->unk_22); + set_variable(script, outVar1, gCameras[id].unk_1C); + set_variable(script, outVar2, gCameras[id].unk_1E); + set_variable(script, outVar3, gCameras[id].unk_20); + set_variable(script, outVar4, gCameras[id].unk_22); return ApiStatus_DONE2; } @@ -220,9 +221,9 @@ ApiStatus SetCamLeadPlayer(ScriptInstance* script, s32 isInitialCall) { Camera* camera = &cameras[id]; if (enabled) { - camera->flags |= 0x4; + camera->flags |= CAM_FLAG_LEAD_PLAYER; } else { - camera->flags &= ~0x4; + camera->flags &= ~CAM_FLAG_LEAD_PLAYER; } return ApiStatus_DONE2; } diff --git a/src/main_loop.c b/src/main_loop.c index de18e62429..7a180f7139 100644 --- a/src/main_loop.c +++ b/src/main_loop.c @@ -350,9 +350,17 @@ void gfx_init_state(void) { gSPDisplayList(gMasterGfxPos++, OS_K0_TO_PHYSICAL(D_80074210)); } -void func_800271FC(s16*, u32*, s32, s32, void*); +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 240 -INCLUDE_ASM(void, "main_loop", func_800271FC, s16*, u32*, s32, s32, void*); +s32 func_800271FC(const u16* framebuf1, const u16* framebuf2, s32 x, s32 y, u8* out) { + s32 pixel = (x * SCREEN_WIDTH) + y; + + out[3] = (framebuf2[pixel] >> 2) & 0xF; + out[0] = framebuf1[pixel] >> 11; // red + out[1] = (framebuf1[pixel] >> 6) & 0x1F; // green + out[2] = (framebuf1[pixel] >> 1) & 0x1F; // blue +} INCLUDE_ASM(s32, "main_loop", func_8002725C); @@ -360,13 +368,11 @@ INCLUDE_ASM(s32, "main_loop", func_80027600); INCLUDE_ASM(s32, "main_loop", func_80027774); -// alex: mystery t0=0x140 temp and a few missing loads, but mostly there +// alex: mystery t0=SCREEN_WIDTH temp and weirdness with the `pixel` calculation #ifdef NON_MATCHING -// arg0 and arg1 probably framebuffer voidptrs -void func_800279B4(u16* arg0, u16* arg1, u16* arg2) { - s32 temp_s4; - s32 j; - s32 i; +void func_800279B4(const u16* framebuf1, u16* framebuf2, u16* arg2) { + s32 x; + s32 y; s32 subroutine_argE; s32 subroutine_arg7; s32 subroutine_arg8; @@ -376,21 +382,24 @@ void func_800279B4(u16* arg0, u16* arg1, u16* arg2) { s32 subroutine_argC; s32 subroutine_argF; - for (i = 1; i < 0xEF; i++) { - for (j = 2; j < 0x13E; j++) { - temp_s4 = (subroutine_argF + j) * 2; + for (y = 1; y < SCREEN_HEIGHT - 1; y++) { + for (x = 2; x < SCREEN_WIDTH - 2; x++) { + s32 pixel = (subroutine_argF + x) * 2; + // Wii U VC changes this condition to FALSE to fix pause menu lag - if (((*(temp_s4 + arg1) >> 2) & 0xF) < 8) { - func_800271FC(arg0, arg1, i - 1, j - 1, &subroutine_argE); - func_800271FC(arg0, arg1, i - 1, j + 1, &subroutine_arg7); - func_800271FC(arg0, arg1, i, j - 2, &subroutine_arg8); - func_800271FC(arg0, arg1, i, j + 2, &subroutine_arg9); - func_800271FC(arg0, arg1, i + 1, j - 1, &subroutine_argA); - func_800271FC(arg0, arg1, i + 1, j + 1, &subroutine_argB); - func_800271FC(arg0, arg1, i, j, &subroutine_argC); - func_8002725C(&subroutine_argE, (subroutine_argC << 24) | (subroutine_argC << 16) | (subroutine_argC << 8) | subroutine_argC, arg2 + temp_s4); + if (((framebuf2[pixel] >> 2) & 0xF) < 8) { + func_800271FC(framebuf1, framebuf2, y - 1, x - 1, &subroutine_argE); + func_800271FC(framebuf1, framebuf2, y - 1, x + 1, &subroutine_arg7); + func_800271FC(framebuf1, framebuf2, y, x - 2, &subroutine_arg8); + func_800271FC(framebuf1, framebuf2, y, x + 2, &subroutine_arg9); + func_800271FC(framebuf1, framebuf2, y + 1, x - 1, &subroutine_argA); + func_800271FC(framebuf1, framebuf2, y + 1, x + 1, &subroutine_argB); + func_800271FC(framebuf1, framebuf2, y, x, &subroutine_argC); + + func_8002725C(&subroutine_argE, (subroutine_argC << 24) | (subroutine_argC << 16) | (subroutine_argC << 8) | subroutine_argC, &framebuf2[pixel]); } else { - *(temp_s4 + arg2) = *(temp_s4 + arg0) | 1; + // Edge + framebuf2[pixel] = framebuf1[pixel] | 1; } } } diff --git a/src/state_file_select.c b/src/state_file_select.c index bf3fd61cde..3bc94afb7d 100644 --- a/src/state_file_select.c +++ b/src/state_file_select.c @@ -1,10 +1,7 @@ #include "common.h" #include "ld_addrs.h" #include "nu/nusys.h" - -// todo remove here and from undefined_syms -extern Addr _163400_BSS_START; -extern Addr _163400_BSS_END; +#include "camera.h" s32 D_80077980[] = { &D_8038F800, &D_803B5000, &D_803DA800, }; @@ -43,11 +40,11 @@ void state_init_file_select(void) { gCameras[0].unk_06 = 1; gCameras[0].nearClip = 16; gCameras[0].farClip = 4096; - gCameras[0].flags |= 2; + gCameras[0].flags |= CAM_FLAG_ENABLED; gCurrentCameraID = 0; - gCameras[1].flags |= 2; - gCameras[2].flags |= 2; - gCameras[3].flags |= 2; + gCameras[1].flags |= CAM_FLAG_ENABLED; + gCameras[2].flags |= CAM_FLAG_ENABLED; + gCameras[3].flags |= CAM_FLAG_ENABLED; gCameras[0].vfov = 25.0f; set_cam_viewport(0, 12, 28, 296, 184); gCameras[0].unk_1E = 40; diff --git a/src/state_logos.c b/src/state_logos.c index fac0474a8f..dd18c24f04 100644 --- a/src/state_logos.c +++ b/src/state_logos.c @@ -1,5 +1,6 @@ #include "common.h" #include "ld_addrs.h" +#include "camera.h" void appendGfx_intro_logos(); @@ -41,10 +42,10 @@ void state_init_logos(void) { gCameras[0].farClip = 0x1000; gCurrentCameraID = 0; gCameras[0].vfov = 25.0f; - gCameras[0].flags |= 0x2; - gCameras[1].flags |= 0x2; - gCameras[2].flags |= 0x2; - gCameras[3].flags |= 0x2; + gCameras[0].flags |= CAM_FLAG_ENABLED; + gCameras[1].flags |= CAM_FLAG_ENABLED; + gCameras[2].flags |= CAM_FLAG_ENABLED; + gCameras[3].flags |= CAM_FLAG_ENABLED; set_cam_viewport(0, 12, 28, 296, 184); gCameras[0].unk_1E = 0x28; gCameras[0].bgColor[0] = 0; diff --git a/src/world/area_arn/arn_02/events.c b/src/world/area_arn/arn_02/events.c index a2ab056f83..8c94df57a9 100644 --- a/src/world/area_arn/arn_02/events.c +++ b/src/world/area_arn/arn_02/events.c @@ -203,7 +203,7 @@ NpcGroupList N(npcGroupList_80241A9C) = { s32 N(func_80240000_BDD1B0)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; f32 phi_f20; s32 ret = FALSE; diff --git a/src/world/area_arn/arn_04/events.c b/src/world/area_arn/arn_04/events.c index c628f45cc1..42455dbdf8 100644 --- a/src/world/area_arn/arn_04/events.c +++ b/src/world/area_arn/arn_04/events.c @@ -650,7 +650,7 @@ ApiStatus N(func_8024219C_BE594C)(ScriptInstance* script, s32 isInitialCall) { s32 N(func_80242388_BE5B38)(ScriptInstance* script, NpcAISettings* aiSettings, EnemyTerritoryThing* territory) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; f32 phi_f20; s32 ret = FALSE; diff --git a/src/world/area_dgb/dgb_02/C2EBA0.c b/src/world/area_dgb/dgb_02/C2EBA0.c index 60bd8e469f..e7f7ee8cc2 100644 --- a/src/world/area_dgb/dgb_02/C2EBA0.c +++ b/src/world/area_dgb/dgb_02/C2EBA0.c @@ -423,7 +423,7 @@ NpcGroupList N(npcGroupList_802425C8) = { s32 N(func_80240208_C2EDA8)(ScriptInstance* script) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_dgb/dgb_03/C31730.c b/src/world/area_dgb/dgb_03/C31730.c index 1bca8a62c1..135160a240 100644 --- a/src/world/area_dgb/dgb_03/C31730.c +++ b/src/world/area_dgb/dgb_03/C31730.c @@ -748,7 +748,7 @@ NpcGroupList N(npcGroupList_80244988) = { s32 N(func_80240458_C31938)(ScriptInstance* script) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_dgb/dgb_05/C3AA10.c b/src/world/area_dgb/dgb_05/C3AA10.c index 1d89d31ad3..3d09a67eb6 100644 --- a/src/world/area_dgb/dgb_05/C3AA10.c +++ b/src/world/area_dgb/dgb_05/C3AA10.c @@ -358,7 +358,7 @@ ApiStatus N(func_80240030_C3AA40)(ScriptInstance* script, s32 isInitialCall) { s32 N(func_80240268_C3AC78)(ScriptInstance* script) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_dgb/dgb_07/C3DBF0.c b/src/world/area_dgb/dgb_07/C3DBF0.c index 08fdcbd052..4646def8f7 100644 --- a/src/world/area_dgb/dgb_07/C3DBF0.c +++ b/src/world/area_dgb/dgb_07/C3DBF0.c @@ -267,7 +267,7 @@ static const s32 N(pad_1E74)[] = { s32 N(func_80240208_C3DDF8)(ScriptInstance* script) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_dgb/dgb_08/C3FDB0.c b/src/world/area_dgb/dgb_08/C3FDB0.c index 64702a7f17..08c68df59f 100644 --- a/src/world/area_dgb/dgb_08/C3FDB0.c +++ b/src/world/area_dgb/dgb_08/C3FDB0.c @@ -1071,7 +1071,7 @@ ApiStatus N(func_80240B94_C40944)(ScriptInstance* script, s32 isInitialCall) { s32 N(func_80241098_C40E48)(ScriptInstance* script) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_dgb/dgb_09/C46BE0.c b/src/world/area_dgb/dgb_09/C46BE0.c index 8701960a50..4575e91067 100644 --- a/src/world/area_dgb/dgb_09/C46BE0.c +++ b/src/world/area_dgb/dgb_09/C46BE0.c @@ -606,7 +606,7 @@ NpcGroupList N(npcGroupList_8024533C) = { s32 N(func_80240208_C46DE8)(ScriptInstance* script) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_dgb/dgb_15/C4F510.c b/src/world/area_dgb/dgb_15/C4F510.c index 9b5921defc..ea7fff61c9 100644 --- a/src/world/area_dgb/dgb_15/C4F510.c +++ b/src/world/area_dgb/dgb_15/C4F510.c @@ -454,7 +454,7 @@ Script N(makeEntities) = SCRIPT({ s32 N(func_80240208_C4F718)(ScriptInstance* script) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_dgb/dgb_16/C52540.c b/src/world/area_dgb/dgb_16/C52540.c index 62088144a2..4b58820bfe 100644 --- a/src/world/area_dgb/dgb_16/C52540.c +++ b/src/world/area_dgb/dgb_16/C52540.c @@ -624,7 +624,7 @@ NpcGroupList N(npcGroupList_8024318C) = { s32 N(func_80240208_C52748)(ScriptInstance* script) { Enemy* enemy = script->owner1.enemy; Npc* npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_jan/jan_05/B4B260.c b/src/world/area_jan/jan_05/B4B260.c index 47683dfd48..6187ace98a 100644 --- a/src/world/area_jan/jan_05/B4B260.c +++ b/src/world/area_jan/jan_05/B4B260.c @@ -36,7 +36,7 @@ s32 N(func_80241AD4_B4C544)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_jan/jan_06/B52F70.c b/src/world/area_jan/jan_06/B52F70.c index 73f4193dba..2d9f29c10d 100644 --- a/src/world/area_jan/jan_06/B52F70.c +++ b/src/world/area_jan/jan_06/B52F70.c @@ -36,7 +36,7 @@ s32 N(func_80241A24_B54254)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_jan/jan_07/B59870.c b/src/world/area_jan/jan_07/B59870.c index 2f3857d322..36b838698b 100644 --- a/src/world/area_jan/jan_07/B59870.c +++ b/src/world/area_jan/jan_07/B59870.c @@ -21,7 +21,7 @@ s32 N(func_8024041C_B59C8C)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_jan/jan_08/B5F650.c b/src/world/area_jan/jan_08/B5F650.c index 715abb1f13..b2887283c4 100644 --- a/src/world/area_jan/jan_08/B5F650.c +++ b/src/world/area_jan/jan_08/B5F650.c @@ -20,7 +20,7 @@ s32 N(func_80241870_B5FB20)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_jan/jan_09/B663F0.c b/src/world/area_jan/jan_09/B663F0.c index cc246e5bc8..faacc39f1a 100644 --- a/src/world/area_jan/jan_09/B663F0.c +++ b/src/world/area_jan/jan_09/B663F0.c @@ -18,7 +18,7 @@ s32 N(func_80240D5C_B6680C)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_jan/jan_12/B73570.c b/src/world/area_jan/jan_12/B73570.c index 1cb08bd712..c8645f9346 100644 --- a/src/world/area_jan/jan_12/B73570.c +++ b/src/world/area_jan/jan_12/B73570.c @@ -18,7 +18,7 @@ s32 N(func_802408DC_B7398C)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_kzn/kzn_03/C61020.c b/src/world/area_kzn/kzn_03/C61020.c index 4a11d2aae7..965b7230fa 100644 --- a/src/world/area_kzn/kzn_03/C61020.c +++ b/src/world/area_kzn/kzn_03/C61020.c @@ -26,7 +26,7 @@ s32 N(func_80240E00_C61B10)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_kzn/kzn_08/C71ED0.c b/src/world/area_kzn/kzn_08/C71ED0.c index 6e7d6bc5ad..871432573f 100644 --- a/src/world/area_kzn/kzn_08/C71ED0.c +++ b/src/world/area_kzn/kzn_08/C71ED0.c @@ -223,7 +223,7 @@ s32 N(func_80242744_C73BC4)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_kzn/kzn_09/C77D00.c b/src/world/area_kzn/kzn_09/C77D00.c index c98957bec9..60cb16c6df 100644 --- a/src/world/area_kzn/kzn_09/C77D00.c +++ b/src/world/area_kzn/kzn_09/C77D00.c @@ -14,7 +14,7 @@ s32 N(func_80241228_C77F08)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_kzn/kzn_17/C85DC0.c b/src/world/area_kzn/kzn_17/C85DC0.c index 20e6abfafa..a744de29f2 100644 --- a/src/world/area_kzn/kzn_17/C85DC0.c +++ b/src/world/area_kzn/kzn_17/C85DC0.c @@ -14,7 +14,7 @@ s32 N(func_80240518_C85FC8)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_mim/mim_01/B93940.c b/src/world/area_mim/mim_01/B93940.c index 1349dd3de4..64eec824e8 100644 --- a/src/world/area_mim/mim_01/B93940.c +++ b/src/world/area_mim/mim_01/B93940.c @@ -14,7 +14,7 @@ s32 N(func_80240708_B93B48)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_mim/mim_05/BA07A0.c b/src/world/area_mim/mim_05/BA07A0.c index d4afccbf8f..d3b52c7ea1 100644 --- a/src/world/area_mim/mim_05/BA07A0.c +++ b/src/world/area_mim/mim_05/BA07A0.c @@ -14,7 +14,7 @@ s32 N(func_80240278_BA09A8)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_mim/mim_06/BA4CF0.c b/src/world/area_mim/mim_06/BA4CF0.c index 166bcd4935..ac20e64ee0 100644 --- a/src/world/area_mim/mim_06/BA4CF0.c +++ b/src/world/area_mim/mim_06/BA4CF0.c @@ -14,7 +14,7 @@ s32 N(func_80240778_BA4EF8)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_mim/mim_08/BAD940.c b/src/world/area_mim/mim_08/BAD940.c index 1694d8ffba..3b243b4927 100644 --- a/src/world/area_mim/mim_08/BAD940.c +++ b/src/world/area_mim/mim_08/BAD940.c @@ -115,7 +115,7 @@ s32 N(func_802417A0_BAF0E0)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_pra/pra_35/D8D270.c b/src/world/area_pra/pra_35/D8D270.c index 0390944600..fb2c4a5811 100644 --- a/src/world/area_pra/pra_35/D8D270.c +++ b/src/world/area_pra/pra_35/D8D270.c @@ -125,7 +125,7 @@ s32 N(func_80241FB8_D8F208)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_pra/pra_37/D92F40.c b/src/world/area_pra/pra_37/D92F40.c index 82bab4ce3b..a6ca11a539 100644 --- a/src/world/area_pra/pra_37/D92F40.c +++ b/src/world/area_pra/pra_37/D92F40.c @@ -18,7 +18,7 @@ s32 N(func_80241158_D94098)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_sam/sam_03/D110C0.c b/src/world/area_sam/sam_03/D110C0.c index 66eedc2ba9..0cf6a7d530 100644 --- a/src/world/area_sam/sam_03/D110C0.c +++ b/src/world/area_sam/sam_03/D110C0.c @@ -19,7 +19,7 @@ s32 N(func_80240258_D11318)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_sam/sam_05/D187E0.c b/src/world/area_sam/sam_05/D187E0.c index e4bc32b3d3..928fb12903 100644 --- a/src/world/area_sam/sam_05/D187E0.c +++ b/src/world/area_sam/sam_05/D187E0.c @@ -17,7 +17,7 @@ s32 N(func_80240208_D189E8)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_sam/sam_07/D2BD30.c b/src/world/area_sam/sam_07/D2BD30.c index 4b3e794e77..f06476eb51 100644 --- a/src/world/area_sam/sam_07/D2BD30.c +++ b/src/world/area_sam/sam_07/D2BD30.c @@ -27,7 +27,7 @@ s32 N(func_80240858_D2C588)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_sam/sam_08/D309C0.c b/src/world/area_sam/sam_08/D309C0.c index 9a5f50870d..2a0e618b93 100644 --- a/src/world/area_sam/sam_08/D309C0.c +++ b/src/world/area_sam/sam_08/D309C0.c @@ -14,7 +14,7 @@ s32 N(func_80240F48_D30BC8)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_sam/sam_10/D37BD0.c b/src/world/area_sam/sam_10/D37BD0.c index 6a52d4ad7c..7d8fa6ad93 100644 --- a/src/world/area_sam/sam_10/D37BD0.c +++ b/src/world/area_sam/sam_10/D37BD0.c @@ -14,7 +14,7 @@ s32 N(func_802405D8_D37DD8)(ScriptInstance *script) { PlayerStatus** playerStatus = &gPlayerStatusPtr; Enemy* enemy = script->owner1.enemy; Npc *npc = get_npc_unsafe(enemy->npcID); - Camera* camera = CAM(gCurrentCamID); + Camera* camera = &gCameras[gCurrentCamID]; Enemy* enemy2 = get_enemy(enemy->npcID + 1); f32 phi_f20; s32 ret = TRUE; diff --git a/src/world/area_tst/tst_04/B1B570.c b/src/world/area_tst/tst_04/B1B570.c index 3bf2b6f760..b2dcfbb89b 100644 --- a/src/world/area_tst/tst_04/B1B570.c +++ b/src/world/area_tst/tst_04/B1B570.c @@ -99,7 +99,7 @@ void func_8024029C_B1B80C(void) { } void func_80240360_B1B8D0(PlayerStatus* playerStatus) { - f32 yaw = -CAM(gCurrentCamID)->currentYaw; + f32 yaw = -gCameras[gCurrentCamID].currentYaw; Matrix4f main; Matrix4f translation; Matrix4f rotation; diff --git a/src/world/area_tst/tst_11/B1CA50.c b/src/world/area_tst/tst_11/B1CA50.c index b7d87b4d33..04bb5d3043 100644 --- a/src/world/area_tst/tst_11/B1CA50.c +++ b/src/world/area_tst/tst_11/B1CA50.c @@ -36,7 +36,7 @@ void func_8024003C_B1CA8C(void) { } void func_80240100_B1CB50(PlayerStatus* playerStatus) { - f32 yaw = -CAM(gCurrentCamID)->currentYaw; + f32 yaw = -gCameras[gCurrentCamID].currentYaw; Matrix4f main; Matrix4f translation; Matrix4f rotation; diff --git a/src/world/common/CamSetFOV.inc.c b/src/world/common/CamSetFOV.inc.c index 7b82c39b5b..829edcd3e8 100644 --- a/src/world/common/CamSetFOV.inc.c +++ b/src/world/common/CamSetFOV.inc.c @@ -5,7 +5,7 @@ ApiStatus N(CamSetFOV)(ScriptInstance* script, s32 isInitialCall) { Bytecode* args = script->ptrReadPos; s32 camIdx = get_variable(script, *args++); - CAM(camIdx)->vfov = get_variable(script, *args++); + gCameras[camIdx].vfov = get_variable(script, *args++); return ApiStatus_DONE2; } diff --git a/src/world/common/GetCamVfov.inc.c b/src/world/common/GetCamVfov.inc.c index 16b4994623..c89ca62612 100644 --- a/src/world/common/GetCamVfov.inc.c +++ b/src/world/common/GetCamVfov.inc.c @@ -5,6 +5,6 @@ ApiStatus N(GetCamVfov)(ScriptInstance* script, s32 isInitialCall) { Bytecode* args = script->ptrReadPos; s32 cameraID = get_variable(script, *args++); - set_variable(script, *args++, SI_FIXED(CAM(cameraID)->vfov)); + set_variable(script, *args++, SI_FIXED(gCameras[cameraID].vfov)); return ApiStatus_DONE2; } diff --git a/src/world/common/SetCamVfov.inc.c b/src/world/common/SetCamVfov.inc.c index 2069337fd9..e8ae32ed63 100644 --- a/src/world/common/SetCamVfov.inc.c +++ b/src/world/common/SetCamVfov.inc.c @@ -5,6 +5,6 @@ ApiStatus N(SetCamVfov)(ScriptInstance* script, s32 isInitialCall) { Bytecode* args = script->ptrReadPos; s32 cameraID = get_variable(script, *args++); - CAM(cameraID)->vfov = get_float_variable(script, *args++); + gCameras[cameraID].vfov = get_float_variable(script, *args++); return ApiStatus_DONE2; } diff --git a/src/world/common/SetCamera0MoveFlag1.inc.c b/src/world/common/SetCamera0MoveFlag1.inc.c index cdf21afb5a..bbbc218152 100644 --- a/src/world/common/SetCamera0MoveFlag1.inc.c +++ b/src/world/common/SetCamera0MoveFlag1.inc.c @@ -2,7 +2,7 @@ #include "map.h" ApiStatus N(SetCamera0MoveFlag1)(ScriptInstance* script, s32 isInitialCall) { - Camera* camera = CAM(0); + Camera* camera = &gCameras[0]; camera->moveFlags |= 1; return ApiStatus_DONE2; diff --git a/src/world/common/UnsetCamera0Flag1000.inc.c b/src/world/common/UnsetCamera0Flag1000.inc.c index b4e1a88970..b02ee80aa2 100644 --- a/src/world/common/UnsetCamera0Flag1000.inc.c +++ b/src/world/common/UnsetCamera0Flag1000.inc.c @@ -1,9 +1,10 @@ #include "common.h" #include "map.h" +#include "camera.h" ApiStatus N(UnsetCamera0Flag1000)(ScriptInstance* script, s32 isInitialCall) { - Camera* camera = CAM(0); + Camera* camera = &gCameras[0]; - camera->flags &= ~0x1000; + camera->flags &= ~CAM_FLAG_1000; return ApiStatus_DONE2; } diff --git a/src/world/common/UnsetCamera0MoveFlag1.inc.c b/src/world/common/UnsetCamera0MoveFlag1.inc.c index 850e9a04f0..9cc66d8715 100644 --- a/src/world/common/UnsetCamera0MoveFlag1.inc.c +++ b/src/world/common/UnsetCamera0MoveFlag1.inc.c @@ -2,7 +2,7 @@ #include "map.h" ApiStatus N(UnsetCamera0MoveFlag1)(ScriptInstance* script, s32 isInitialCall) { - Camera* camera = CAM(0); + Camera* camera = &gCameras[0]; camera->moveFlags &= ~1; return ApiStatus_DONE2; diff --git a/src/world/common/reflection.inc.c b/src/world/common/reflection.inc.c index b2281123ea..b9acf27a4e 100644 --- a/src/world/common/reflection.inc.c +++ b/src/world/common/reflection.inc.c @@ -118,7 +118,7 @@ void N(reflection_setup_wall)(void) { } void N(reflection_render_wall)(PlayerStatus* playerStatus) { - f32 yaw = -CAM(gCurrentCamID)->currentYaw; + f32 yaw = -gCameras[gCurrentCamID].currentYaw; Matrix4f main; Matrix4f translation; Matrix4f rotation; @@ -196,7 +196,7 @@ void N(reflection_setup_floor)(void) { } void N(reflection_render_floor)(PlayerStatus* playerStatus) { - f32 yaw = -CAM(gCurrentCamID)->currentYaw; + f32 yaw = -gCameras[gCurrentCamID].currentYaw; Matrix4f main; Matrix4f translation; Matrix4f rotation; @@ -242,7 +242,7 @@ void N(reflection_render_floor_fancy)(PlayerStatus* playerStatus) { s32 flags; for (i = 0; i < 2; i++) { - yaw = -CAM(gCurrentCamID)->currentYaw; + yaw = -gCameras[gCurrentCamID].currentYaw; if (i == 0) { if ((playerStatus->spriteFacingAngle > 90.0f) && (playerStatus->spriteFacingAngle <= 180.0f)) { diff --git a/src/world/script_api/7E2AA0.c b/src/world/script_api/7E2AA0.c index 6f1df66ef7..2699037df2 100644 --- a/src/world/script_api/7E2AA0.c +++ b/src/world/script_api/7E2AA0.c @@ -70,7 +70,7 @@ ApiStatus func_80282594(ScriptInstance* script, s32 isInitialCall) { f32 temp_f0; temp_f0 = get_float_variable(script, *script->ptrReadPos); - camera = CAM(0); + camera = &gCameras[0]; if (temp_f0 >= 0.0f) { D_80286540 = camera->moveSpeed; diff --git a/src/world/world.c b/src/world/world.c index 581243243c..1b178eb18a 100644 --- a/src/world/world.c +++ b/src/world/world.c @@ -1,6 +1,7 @@ #include "common.h" #include "ld_addrs.h" #include "map.h" +#include "camera.h" #define ASSET_TABLE_ROM_START 0x1E40000 #define ASSET_TABLE_HEADER_SIZE 0x20 @@ -168,10 +169,10 @@ void load_map_by_IDs(s16 areaID, s16 mapID, s16 loadType) { } gCurrentCameraID = 0; - gCameras[0].flags |= 0x2; - gCameras[1].flags |= 0x2; - gCameras[2].flags |= 0x2; - gCameras[3].flags |= 0x2; + gCameras[0].flags |= CAM_FLAG_ENABLED; + gCameras[1].flags |= CAM_FLAG_ENABLED; + gCameras[2].flags |= CAM_FLAG_ENABLED; + gCameras[3].flags |= CAM_FLAG_ENABLED; if (gGameStatusPtr->creditsViewportMode == -1) { set_cam_viewport(0, 12, 20, 296, 200); diff --git a/ver/us/asm/nonmatchings/8800/update_cameras.s b/ver/us/asm/nonmatchings/8800/update_cameras.s deleted file mode 100644 index 986d2cffc4..0000000000 --- a/ver/us/asm/nonmatchings/8800/update_cameras.s +++ /dev/null @@ -1,234 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -.section .rodata - -glabel jtbl_800981E0 -.word L8002D4A8_88A8, L8002D4B8_88B8, L8002D4C8_88C8, L8002D498_8898, L8002D4D8_88D8, L8002D4E8_88E8, L8002D4F8_88F8, 0 - -.section .text - -glabel update_cameras -/* 8800 8002D400 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 8804 8002D404 F7B60068 */ sdc1 $f22, 0x68($sp) -/* 8808 8002D408 3C013F80 */ lui $at, 0x3f80 -/* 880C 8002D40C 4481B000 */ mtc1 $at, $f22 -/* 8810 8002D410 F7B40060 */ sdc1 $f20, 0x60($sp) -/* 8814 8002D414 3C013FE0 */ lui $at, 0x3fe0 -/* 8818 8002D418 4481A800 */ mtc1 $at, $f21 -/* 881C 8002D41C 4480A000 */ mtc1 $zero, $f20 -/* 8820 8002D420 AFB3004C */ sw $s3, 0x4c($sp) -/* 8824 8002D424 0000982D */ daddu $s3, $zero, $zero -/* 8828 8002D428 AFB60058 */ sw $s6, 0x58($sp) -/* 882C 8002D42C 27B60030 */ addiu $s6, $sp, 0x30 -/* 8830 8002D430 AFB50054 */ sw $s5, 0x54($sp) -/* 8834 8002D434 27B50034 */ addiu $s5, $sp, 0x34 -/* 8838 8002D438 AFB40050 */ sw $s4, 0x50($sp) -/* 883C 8002D43C 27B40038 */ addiu $s4, $sp, 0x38 -/* 8840 8002D440 AFB00040 */ sw $s0, 0x40($sp) -/* 8844 8002D444 3C10800B */ lui $s0, %hi(gCameras) -/* 8848 8002D448 26101D80 */ addiu $s0, $s0, %lo(gCameras) -/* 884C 8002D44C AFBF005C */ sw $ra, 0x5c($sp) -/* 8850 8002D450 AFB20048 */ sw $s2, 0x48($sp) -/* 8854 8002D454 AFB10044 */ sw $s1, 0x44($sp) -.L8002D458: -/* 8858 8002D458 96020000 */ lhu $v0, ($s0) -/* 885C 8002D45C 104000A5 */ beqz $v0, .L8002D6F4 -/* 8860 8002D460 30420002 */ andi $v0, $v0, 2 -/* 8864 8002D464 544000A4 */ bnel $v0, $zero, .L8002D6F8 -/* 8868 8002D468 26730001 */ addiu $s3, $s3, 1 -/* 886C 8002D46C 86030004 */ lh $v1, 4($s0) -/* 8870 8002D470 3C01800A */ lui $at, %hi(gCurrentCamID) -/* 8874 8002D474 A433A634 */ sh $s3, %lo(gCurrentCamID)($at) -/* 8878 8002D478 2C620007 */ sltiu $v0, $v1, 7 -/* 887C 8002D47C 1040001E */ beqz $v0, L8002D4F8_88F8 -/* 8880 8002D480 00031080 */ sll $v0, $v1, 2 -/* 8884 8002D484 3C01800A */ lui $at, %hi(jtbl_800981E0) -/* 8888 8002D488 00220821 */ addu $at, $at, $v0 -/* 888C 8002D48C 8C2281E0 */ lw $v0, %lo(jtbl_800981E0)($at) -/* 8890 8002D490 00400008 */ jr $v0 -/* 8894 8002D494 00000000 */ nop -glabel L8002D498_8898 -/* 8898 8002D498 0C00C525 */ jal update_camera_zone_interp -/* 889C 8002D49C 0200202D */ daddu $a0, $s0, $zero -/* 88A0 8002D4A0 0800B540 */ j .L8002D500 -/* 88A4 8002D4A4 00000000 */ nop -glabel L8002D4A8_88A8 -/* 88A8 8002D4A8 0C00BE14 */ jal update_camera_mode_0 -/* 88AC 8002D4AC 0200202D */ daddu $a0, $s0, $zero -/* 88B0 8002D4B0 0800B540 */ j .L8002D500 -/* 88B4 8002D4B4 00000000 */ nop -glabel L8002D4B8_88B8 -/* 88B8 8002D4B8 0C00BCA4 */ jal update_camera_mode_1 -/* 88BC 8002D4BC 0200202D */ daddu $a0, $s0, $zero -/* 88C0 8002D4C0 0800B540 */ j .L8002D500 -/* 88C4 8002D4C4 00000000 */ nop -glabel L8002D4C8_88C8 -/* 88C8 8002D4C8 0C00BB3E */ jal update_camera_mode_2 -/* 88CC 8002D4CC 0200202D */ daddu $a0, $s0, $zero -/* 88D0 8002D4D0 0800B540 */ j .L8002D500 -/* 88D4 8002D4D4 00000000 */ nop -glabel L8002D4D8_88D8 -/* 88D8 8002D4D8 0C00BA44 */ jal update_camera_mode_4 -/* 88DC 8002D4DC 0200202D */ daddu $a0, $s0, $zero -/* 88E0 8002D4E0 0800B540 */ j .L8002D500 -/* 88E4 8002D4E4 00000000 */ nop -glabel L8002D4E8_88E8 -/* 88E8 8002D4E8 0C00C000 */ jal update_camera_mode_5 -/* 88EC 8002D4EC 0200202D */ daddu $a0, $s0, $zero -/* 88F0 8002D4F0 0800B540 */ j .L8002D500 -/* 88F4 8002D4F4 00000000 */ nop -glabel L8002D4F8_88F8 -/* 88F8 8002D4F8 0C00BE64 */ jal update_camera_mode_6 -/* 88FC 8002D4FC 0200202D */ daddu $a0, $s0, $zero -.L8002D500: -/* 8900 8002D500 C6000044 */ lwc1 $f0, 0x44($s0) -/* 8904 8002D504 3C05800A */ lui $a1, %hi(gDisplayContext) -/* 8908 8002D508 8CA5A674 */ lw $a1, %lo(gDisplayContext)($a1) -/* 890C 8002D50C E7A00010 */ swc1 $f0, 0x10($sp) -/* 8910 8002D510 C6000048 */ lwc1 $f0, 0x48($s0) -/* 8914 8002D514 E7A00014 */ swc1 $f0, 0x14($sp) -/* 8918 8002D518 C600004C */ lwc1 $f0, 0x4c($s0) -/* 891C 8002D51C E7A00018 */ swc1 $f0, 0x18($sp) -/* 8920 8002D520 C6000050 */ lwc1 $f0, 0x50($s0) -/* 8924 8002D524 26120114 */ addiu $s2, $s0, 0x114 -/* 8928 8002D528 AFA00020 */ sw $zero, 0x20($sp) -/* 892C 8002D52C E7B60024 */ swc1 $f22, 0x24($sp) -/* 8930 8002D530 AFA00028 */ sw $zero, 0x28($sp) -/* 8934 8002D534 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 8938 8002D538 8E06003C */ lw $a2, 0x3c($s0) -/* 893C 8002D53C 8E070040 */ lw $a3, 0x40($s0) -/* 8940 8002D540 0C018CC8 */ jal guLookAtReflectF -/* 8944 8002D544 0240202D */ daddu $a0, $s2, $zero -/* 8948 8002D548 96030000 */ lhu $v1, ($s0) -/* 894C 8002D54C 30620010 */ andi $v0, $v1, 0x10 -/* 8950 8002D550 14400034 */ bnez $v0, .L8002D624 -/* 8954 8002D554 260400D4 */ addiu $a0, $s0, 0xd4 -/* 8958 8002D558 30620004 */ andi $v0, $v1, 4 -/* 895C 8002D55C 10400004 */ beqz $v0, .L8002D570 -/* 8960 8002D560 261100D4 */ addiu $s1, $s0, 0xd4 -/* 8964 8002D564 0C00CCE5 */ jal create_camera_leadplayer_matrix -/* 8968 8002D568 0200202D */ daddu $a0, $s0, $zero -/* 896C 8002D56C 261100D4 */ addiu $s1, $s0, 0xd4 -.L8002D570: -/* 8970 8002D570 0220202D */ daddu $a0, $s1, $zero -/* 8974 8002D574 8607000A */ lh $a3, 0xa($s0) -/* 8978 8002D578 86020012 */ lh $v0, 0x12($s0) -/* 897C 8002D57C 8603000C */ lh $v1, 0xc($s0) -/* 8980 8002D580 44820000 */ mtc1 $v0, $f0 -/* 8984 8002D584 00000000 */ nop -/* 8988 8002D588 46800020 */ cvt.s.w $f0, $f0 -/* 898C 8002D58C E7A00010 */ swc1 $f0, 0x10($sp) -/* 8990 8002D590 86020014 */ lh $v0, 0x14($s0) -/* 8994 8002D594 44871000 */ mtc1 $a3, $f2 -/* 8998 8002D598 00000000 */ nop -/* 899C 8002D59C 468010A0 */ cvt.s.w $f2, $f2 -/* 89A0 8002D5A0 E7B60018 */ swc1 $f22, 0x18($sp) -/* 89A4 8002D5A4 44820000 */ mtc1 $v0, $f0 -/* 89A8 8002D5A8 00000000 */ nop -/* 89AC 8002D5AC 46800020 */ cvt.s.w $f0, $f0 -/* 89B0 8002D5B0 E7A00014 */ swc1 $f0, 0x14($sp) -/* 89B4 8002D5B4 44830000 */ mtc1 $v1, $f0 -/* 89B8 8002D5B8 00000000 */ nop -/* 89BC 8002D5BC 46800020 */ cvt.s.w $f0, $f0 -/* 89C0 8002D5C0 46001083 */ div.s $f2, $f2, $f0 -/* 89C4 8002D5C4 8E060018 */ lw $a2, 0x18($s0) -/* 89C8 8002D5C8 44071000 */ mfc1 $a3, $f2 -/* 89CC 8002D5CC 0C018EE4 */ jal guPerspectiveF -/* 89D0 8002D5D0 26050038 */ addiu $a1, $s0, 0x38 -/* 89D4 8002D5D4 96020000 */ lhu $v0, ($s0) -/* 89D8 8002D5D8 30420008 */ andi $v0, $v0, 8 -/* 89DC 8002D5DC 10400004 */ beqz $v0, .L8002D5F0 -/* 89E0 8002D5E0 26040194 */ addiu $a0, $s0, 0x194 -/* 89E4 8002D5E4 0220282D */ daddu $a1, $s1, $zero -/* 89E8 8002D5E8 0C019D80 */ jal guMtxCatF -/* 89EC 8002D5EC 0220302D */ daddu $a2, $s1, $zero -.L8002D5F0: -/* 89F0 8002D5F0 96020000 */ lhu $v0, ($s0) -/* 89F4 8002D5F4 30420004 */ andi $v0, $v0, 4 -/* 89F8 8002D5F8 10400004 */ beqz $v0, .L8002D60C -/* 89FC 8002D5FC 26040154 */ addiu $a0, $s0, 0x154 -/* 8A00 8002D600 0220282D */ daddu $a1, $s1, $zero -/* 8A04 8002D604 0C019D80 */ jal guMtxCatF -/* 8A08 8002D608 0220302D */ daddu $a2, $s1, $zero -.L8002D60C: -/* 8A0C 8002D60C 0240202D */ daddu $a0, $s2, $zero -/* 8A10 8002D610 0220282D */ daddu $a1, $s1, $zero -/* 8A14 8002D614 0C019D80 */ jal guMtxCatF -/* 8A18 8002D618 00A0302D */ daddu $a2, $a1, $zero -/* 8A1C 8002D61C 0800B5B0 */ j .L8002D6C0 -/* 8A20 8002D620 AFB60010 */ sw $s6, 0x10($sp) -.L8002D624: -/* 8A24 8002D624 8602000A */ lh $v0, 0xa($s0) -/* 8A28 8002D628 44822000 */ mtc1 $v0, $f4 -/* 8A2C 8002D62C 00000000 */ nop -/* 8A30 8002D630 46802120 */ cvt.s.w $f4, $f4 -/* 8A34 8002D634 46002187 */ neg.s $f6, $f4 -/* 8A38 8002D638 460031A1 */ cvt.d.s $f6, $f6 -/* 8A3C 8002D63C 46343182 */ mul.d $f6, $f6, $f20 -/* 8A40 8002D640 00000000 */ nop -/* 8A44 8002D644 46002121 */ cvt.d.s $f4, $f4 -/* 8A48 8002D648 46342102 */ mul.d $f4, $f4, $f20 -/* 8A4C 8002D64C 00000000 */ nop -/* 8A50 8002D650 8602000C */ lh $v0, 0xc($s0) -/* 8A54 8002D654 44820000 */ mtc1 $v0, $f0 -/* 8A58 8002D658 00000000 */ nop -/* 8A5C 8002D65C 46800020 */ cvt.s.w $f0, $f0 -/* 8A60 8002D660 46000087 */ neg.s $f2, $f0 -/* 8A64 8002D664 460010A1 */ cvt.d.s $f2, $f2 -/* 8A68 8002D668 46341082 */ mul.d $f2, $f2, $f20 -/* 8A6C 8002D66C 00000000 */ nop -/* 8A70 8002D670 3C01C47A */ lui $at, 0xc47a -/* 8A74 8002D674 44814000 */ mtc1 $at, $f8 -/* 8A78 8002D678 3C01447A */ lui $at, 0x447a -/* 8A7C 8002D67C 44815000 */ mtc1 $at, $f10 -/* 8A80 8002D680 E7B6001C */ swc1 $f22, 0x1c($sp) -/* 8A84 8002D684 E7A80014 */ swc1 $f8, 0x14($sp) -/* 8A88 8002D688 46000021 */ cvt.d.s $f0, $f0 -/* 8A8C 8002D68C 46340002 */ mul.d $f0, $f0, $f20 -/* 8A90 8002D690 00000000 */ nop -/* 8A94 8002D694 E7AA0018 */ swc1 $f10, 0x18($sp) -/* 8A98 8002D698 462031A0 */ cvt.s.d $f6, $f6 -/* 8A9C 8002D69C 46202120 */ cvt.s.d $f4, $f4 -/* 8AA0 8002D6A0 44053000 */ mfc1 $a1, $f6 -/* 8AA4 8002D6A4 44062000 */ mfc1 $a2, $f4 -/* 8AA8 8002D6A8 462010A0 */ cvt.s.d $f2, $f2 -/* 8AAC 8002D6AC 44071000 */ mfc1 $a3, $f2 -/* 8AB0 8002D6B0 46200020 */ cvt.s.d $f0, $f0 -/* 8AB4 8002D6B4 0C018E44 */ jal guOrthoF -/* 8AB8 8002D6B8 E7A00010 */ swc1 $f0, 0x10($sp) -/* 8ABC 8002D6BC AFB60010 */ sw $s6, 0x10($sp) -.L8002D6C0: -/* 8AC0 8002D6C0 AFB50014 */ sw $s5, 0x14($sp) -/* 8AC4 8002D6C4 AFB40018 */ sw $s4, 0x18($sp) -/* 8AC8 8002D6C8 8E050060 */ lw $a1, 0x60($s0) -/* 8ACC 8002D6CC 8E060064 */ lw $a2, 0x64($s0) -/* 8AD0 8002D6D0 8E070068 */ lw $a3, 0x68($s0) -/* 8AD4 8002D6D4 0C00B94E */ jal get_screen_coords -/* 8AD8 8002D6D8 0000202D */ daddu $a0, $zero, $zero -/* 8ADC 8002D6DC 96C20002 */ lhu $v0, 2($s6) -/* 8AE0 8002D6E0 A6020032 */ sh $v0, 0x32($s0) -/* 8AE4 8002D6E4 96A20002 */ lhu $v0, 2($s5) -/* 8AE8 8002D6E8 A6020034 */ sh $v0, 0x34($s0) -/* 8AEC 8002D6EC 96820002 */ lhu $v0, 2($s4) -/* 8AF0 8002D6F0 A6020036 */ sh $v0, 0x36($s0) -.L8002D6F4: -/* 8AF4 8002D6F4 26730001 */ addiu $s3, $s3, 1 -.L8002D6F8: -/* 8AF8 8002D6F8 2A620004 */ slti $v0, $s3, 4 -/* 8AFC 8002D6FC 1440FF56 */ bnez $v0, .L8002D458 -/* 8B00 8002D700 26100558 */ addiu $s0, $s0, 0x558 -/* 8B04 8002D704 8FBF005C */ lw $ra, 0x5c($sp) -/* 8B08 8002D708 8FB60058 */ lw $s6, 0x58($sp) -/* 8B0C 8002D70C 8FB50054 */ lw $s5, 0x54($sp) -/* 8B10 8002D710 8FB40050 */ lw $s4, 0x50($sp) -/* 8B14 8002D714 8FB3004C */ lw $s3, 0x4c($sp) -/* 8B18 8002D718 8FB20048 */ lw $s2, 0x48($sp) -/* 8B1C 8002D71C 8FB10044 */ lw $s1, 0x44($sp) -/* 8B20 8002D720 8FB00040 */ lw $s0, 0x40($sp) -/* 8B24 8002D724 D7B60068 */ ldc1 $f22, 0x68($sp) -/* 8B28 8002D728 D7B40060 */ ldc1 $f20, 0x60($sp) -/* 8B2C 8002D72C 3C01800A */ lui $at, %hi(gCurrentCamID) -/* 8B30 8002D730 A420A634 */ sh $zero, %lo(gCurrentCamID)($at) -/* 8B34 8002D734 03E00008 */ jr $ra -/* 8B38 8002D738 27BD0070 */ addiu $sp, $sp, 0x70 diff --git a/ver/us/asm/nonmatchings/main_loop/func_800271FC.s b/ver/us/asm/nonmatchings/main_loop/func_800271FC.s deleted file mode 100644 index e0ef38a25f..0000000000 --- a/ver/us/asm/nonmatchings/main_loop/func_800271FC.s +++ /dev/null @@ -1,28 +0,0 @@ -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches - -glabel func_800271FC -/* 25FC 800271FC 00061880 */ sll $v1, $a2, 2 -/* 2600 80027200 00661821 */ addu $v1, $v1, $a2 -/* 2604 80027204 00031980 */ sll $v1, $v1, 6 -/* 2608 80027208 00671821 */ addu $v1, $v1, $a3 -/* 260C 8002720C 00031840 */ sll $v1, $v1, 1 -/* 2610 80027210 00652821 */ addu $a1, $v1, $a1 -/* 2614 80027214 00641821 */ addu $v1, $v1, $a0 -/* 2618 80027218 94A20000 */ lhu $v0, ($a1) -/* 261C 8002721C 8FA50010 */ lw $a1, 0x10($sp) -/* 2620 80027220 00021082 */ srl $v0, $v0, 2 -/* 2624 80027224 3042000F */ andi $v0, $v0, 0xf -/* 2628 80027228 A0A20003 */ sb $v0, 3($a1) -/* 262C 8002722C 94620000 */ lhu $v0, ($v1) -/* 2630 80027230 000212C2 */ srl $v0, $v0, 0xb -/* 2634 80027234 A0A20000 */ sb $v0, ($a1) -/* 2638 80027238 94620000 */ lhu $v0, ($v1) -/* 263C 8002723C 00021182 */ srl $v0, $v0, 6 -/* 2640 80027240 3042001F */ andi $v0, $v0, 0x1f -/* 2644 80027244 A0A20001 */ sb $v0, 1($a1) -/* 2648 80027248 94620000 */ lhu $v0, ($v1) -/* 264C 8002724C 00021042 */ srl $v0, $v0, 1 -/* 2650 80027250 3042001F */ andi $v0, $v0, 0x1f -/* 2654 80027254 03E00008 */ jr $ra -/* 2658 80027258 A0A20002 */ sb $v0, 2($a1)