summaryrefslogtreecommitdiff
path: root/soh/src/code
diff options
context:
space:
mode:
Diffstat (limited to 'soh/src/code')
-rw-r--r--soh/src/code/z_draw.c56
-rw-r--r--soh/src/code/z_parameter.c5
2 files changed, 60 insertions, 1 deletions
diff --git a/soh/src/code/z_draw.c b/soh/src/code/z_draw.c
index e9ab95398..8dcd847ec 100644
--- a/soh/src/code/z_draw.c
+++ b/soh/src/code/z_draw.c
@@ -76,6 +76,7 @@
#include "objects/object_gi_dekupouch/object_gi_dekupouch.h"
#include "objects/object_gi_rupy/object_gi_rupy.h"
#include "objects/object_gi_sword_1/object_gi_sword_1.h"
+#include "objects/object_fish/object_fish.h"
#include "objects/object_st/object_st.h"
#include "soh_assets.h"
@@ -113,6 +114,7 @@ void GetItem_DrawJewelGoron(PlayState* play, s16 drawId);
void GetItem_DrawJewelZora(PlayState* play, s16 drawId);
void GetItem_DrawGenericMusicNote(PlayState* play, s16 drawId);
void GetItem_DrawTriforcePiece(PlayState* play, s16 drawId);
+void GetItem_DrawFishingPole(PlayState* play, s16 drawId);
typedef struct {
/* 0x00 */ void (*drawFunc)(PlayState*, s16);
@@ -388,7 +390,8 @@ DrawItemTableEntry sDrawItemTable[] = {
{ GetItem_DrawGenericMusicNote, { gGiSongNoteDL } }, //Sun's song
{ GetItem_DrawGenericMusicNote, { gGiSongNoteDL } }, //Song of time
{ GetItem_DrawGenericMusicNote, { gGiSongNoteDL } }, //Song of storms
- { GetItem_DrawTriforcePiece, { gTriforcePiece0DL } } // Triforce Piece
+ { GetItem_DrawTriforcePiece, { gTriforcePiece0DL } }, // Triforce Piece
+ { GetItem_DrawFishingPole, { gFishingPoleGiDL } }, // Fishing Pole
};
/**
@@ -1065,3 +1068,54 @@ void GetItem_DrawTriforcePiece(PlayState* play, s16 drawId) {
CLOSE_DISPS(play->state.gfxCtx);
}
+
+void GetItem_DrawFishingPole(PlayState* play, s16 drawId) {
+ Vec3f pos;
+ OPEN_DISPS(play->state.gfxCtx);
+
+ // Draw rod
+ Gfx_SetupDL_25Opa(play->state.gfxCtx);
+ Matrix_Scale(0.2, 0.2, 0.2, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
+ G_MTX_MODELVIEW | G_MTX_LOAD);
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingPoleGiDL);
+
+ // Draw lure
+ Matrix_Push();
+ Matrix_Scale(5.0f, 5.0f, 5.0f, MTXMODE_APPLY);
+ pos.x = 0.0f;
+ pos.y = -25.5f;
+ pos.z = -4.0f;
+ Matrix_Translate(pos.x, pos.y, pos.z, MTXMODE_APPLY);
+ Matrix_RotateZ(M_PI / -2, MTXMODE_APPLY);
+ Matrix_RotateY((M_PI / -2) - 0.2f, MTXMODE_APPLY);
+ Matrix_Scale(0.006f, 0.006f, 0.006f, MTXMODE_APPLY);
+ Gfx_SetupDL_25Opa(play->state.gfxCtx);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
+ G_MTX_NOPUSH | G_MTX_MODELVIEW | G_MTX_LOAD);
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureFloatDL);
+
+ // Draw hooks
+ Matrix_RotateY(0.2f, MTXMODE_APPLY);
+ Matrix_Translate(0.0f, 0.0f, -300.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
+ Matrix_RotateZ(M_PI / 2, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
+
+ Matrix_Translate(0.0f, -2200.0f, 700.0f, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
+ Matrix_RotateZ(M_PI / 2, MTXMODE_APPLY);
+ gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
+ G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+ gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gFishingLureHookDL);
+
+ Matrix_Pop();
+
+ CLOSE_DISPS(play->state.gfxCtx);
+} \ No newline at end of file
diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c
index 141dbaf6a..7abc2b151 100644
--- a/soh/src/code/z_parameter.c
+++ b/soh/src/code/z_parameter.c
@@ -2644,6 +2644,11 @@ u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
return Return_Item_Entry(giEntry, RG_NONE);
}
+ if (item == RG_FISHING_POLE) {
+ Flags_SetRandomizerInf(RAND_INF_FISHING_POLE_FOUND);
+ return Return_Item_Entry(giEntry, RG_NONE);
+ }
+
if (item == RG_PROGRESSIVE_BOMBCHUS) {
if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_NONE) {
INV_CONTENT(ITEM_BOMBCHU) = ITEM_BOMBCHU;