// // Generated by dtk // Translation Unit: d_map.cpp // #include "d/dolzel.h" // IWYU pragma: keep #include "d/d_map.h" #include "d/actor/d_a_agb.h" #include "d/d_com_inf_game.h" #include "d/d_stage.h" #include "dolphin/gx/GX.h" #include "dolphin/gx/GXEnum.h" #include "dolphin/gx/GXInit.h" #include "dolphin/gx/GXGeometry.h" #include "res/Object/Always.h" #include "f_ap/f_ap_game.h" #include "m_Do/m_Do_gba_com.h" #include "m_Do/m_Do_lib.h" #include "m_Do/m_Do_gba_com.h" #include "stdio.h" enum { Floor_B5F = 123, Floor_B4F = 124, Floor_B3F = 125, Floor_B2F = 126, Floor_B1F = 127, Floor_1F = 128, Floor_2F = 129, Floor_3F = 130, Floor_4F = 131, Floor_5F = 132, Floor_Base = Floor_B5F, }; enum { MAP_POINT_NONE = 0, MAP_POINT_PLAYER = 1, MAP_POINT_AGB_CURSOR = 2, MAP_POINT_ENEMY = 3, MAP_POINT_ENEMY_ID = 4, MAP_POINT_SHIP = 5, MAP_POINT_TBOX = 6, MAP_POINT_DOOR = 7, MAP_POINT_FRIEND = 8, MAP_POINT_RESTART = 9, }; enum { MAP_KIND_UNK = 1, MAP_KIND_DUNGEON = 2, }; enum { MAP_DISP_FULL = 0, MAP_DISP_MINI = 1, }; #define MAP_VIEW_HALF 0x78 #define MAP_VIEW_CENTER 0x3c #define Floor_Num (Floor_5F - Floor_B5F + 1) #define Floor_Valid(no) (no >= 0) && (no < Floor_Num) u8 dMap_c::mAgbSendBuf[130]; u8 dMap_c::mAgbSendBufIsland[196]; dMap_RoomInfo_c dMap_c::mRoomInfo[20]; dMap_2DMtMapSpcl_c dMap_c::mFrameTex[8]; dMap_2DMtMapSpcl_tex_c dMap_c::mFrameTexture[8]; dMap_2DMtMapSpcl_c dMap_c::mIconFreeTex; dMap_2DMtMapSpcl_tex_c dMap_c::mIconFreeTexture; dMap_2DMtMapSpcl_c dMap_c::mIconSelfTex; dMap_2DMtMapSpcl_tex_c dMap_c::mIconSelfTexture; dMap_2DTri_c dMap_c::mCursor; dMap_2DAGBCursor_c dMap_c::mAgbCursor; dMap_2DPoint_c dMap_c::mPoint[15]; dMap_2DSQ_c dMap_c::m2DSQdraw; dMap_2DSQ_c dMap_c::m2DSQdraw2; dMap_2DT2_c dMap_c::mTbox[8]; dMap_2DT2_c dMap_c::mDoor[16]; dMap_2DTri_c dMap_c::mPointRestart; dMap_2DPoint_c dMap_c::mPointFriend[3]; dMap_2DT2_c dMap_c::mShip; dMap_CollectPoint dMap_c::mCollectPointData[64]; s8 dMap_c::mCollectPointDataLinkList[21]; u8 dMap_c::mCompAlpha; u8 dMap_c::mAlpha; u8 dMap_c::mDrawPointCntPlayer; u8 dMap_c::mDrawPointCntEnemy; u8 dMap_c::mDrawPointCntAgbCursor; u8 dMap_c::mTboxNum; u8 dMap_c::mDoorNum; u8 dMap_c::mPointFriendNum; u8 dMap_c::mDrawPointCntShip; u8 dMap_c::mDrawPointRestartCnt; u8 dMap_c::mCollectPointDataCnt; u8 dMap_c::mAGBMapSendStatus; u8 dMap_c::mSetCursorFlg; u8 dMap_c::mMapDispMode; u8 dMap_c::mIconDispMode; u8 dMap_c::mIconFreeAlpha; u8 dMap_c::mIconSelfAlpha; bool dMap_c::mAGBMapSendStopFlg; u8 dMap_c::mMapAGBCursorFlashFrmCnt; u8 dMap_c::mPlayerStayAgbMapTypeNow; u8 dMap_c::mPlayerStayAgbMapTypeOld; s8 dMap_c::mPlGridX; s8 dMap_c::mPlGridY; s8 dMap_c::mPlGridX_Old; s8 dMap_c::mPlGridY_Old; u8 dMap_c::mNowFloorNo; s16 dMap_c::mIconFreePosX; s16 dMap_c::mIconFreePosY; u16 dMap_c::mAGBPointValueC; u16 dMap_c::mAGBPointValueE; u16 dMap_c::mAGBPointValueAll; u16 dMap_c::mAGBPointValueRoomAll; char dMap_c::mAgbSendNowStageName[8]; int dMap_c::mAgbSendNowRoomNo; s16 dMap_c::mAgbSendNowDspFloorNo; u8 dMap_c::mAgbSendNowAgbMapType; f32 dMap_c::mEnlargementSizeCenterX; f32 dMap_c::mEnlargementSizeCenterZ; f32 dMap_c::mEnlargementSizeScaleX; f32 dMap_c::mEnlargementSizeScaleZ; u8 dMap_c::mFmapChkPntValue; FmapChkPnt* dMap_c::mFmapChkPntData_p; s16 dMap_c::mDispPosLeftUpX; s16 dMap_c::mDispPosLeftUpY; s16 dMap_c::mDispSizeX; s16 dMap_c::mDispSizeY; int dMap_c::mScissorOrigY; int dMap_c::mScissorOrigX; int dMap_c::mScissorWidth; int dMap_c::mScissorHeight; f32 dMap_c::mIconFreeScale; f32 dMap_c::mIconSelfScale; f32 dMap_c::mNowCenterX; f32 dMap_c::mNowCenterZ; f32 dMap_c::mNowScaleX; f32 dMap_c::mNowScaleZ; // ? dMap_c::mGbaSendMapOceanDt; dMap_RoomInfoCtrl_c dMap_c::mRoomInfoCtrl; dMap_RoomInfo_c* dMap_c::mNowRoomInfoP; #if VERSION == VERSION_DEMO class dMap_HIO_c { public: dMap_HIO_c(); virtual ~dMap_HIO_c() {} public: u8 pad[0xFC]; }; dMap_HIO_c::dMap_HIO_c() { /* Nonmatching */ } dMap_HIO_c g_mapHIO; #endif static inline f32 getMapInfo_map1_X0(stage_map_info_class* i_mapInfoP) { JUT_ASSERT(VERSION_SELECT(730, 719, 719, 719), i_mapInfoP != NULL); return i_mapInfoP->field_0x18; } static inline f32 getMapInfo_map1_Z0(stage_map_info_class* i_mapInfoP) { JUT_ASSERT(VERSION_SELECT(740, 725, 725, 725), i_mapInfoP != NULL); return i_mapInfoP->field_0x1C; } static inline f32 getMapInfo_map1_X1(stage_map_info_class* i_mapInfoP) { JUT_ASSERT(VERSION_SELECT(750, 731, 731, 731), i_mapInfoP != NULL); return i_mapInfoP->field_0x20; } static inline f32 getMapInfo_map1_Z1(stage_map_info_class* i_mapInfoP) { JUT_ASSERT(VERSION_SELECT(760, 737, 737, 737), i_mapInfoP != NULL); return i_mapInfoP->field_0x24; } static inline f32 getMapInfo_map1_XC(stage_map_info_class* i_mapInfoP) { JUT_ASSERT(VERSION_SELECT(770, 739, 743, 743), i_mapInfoP != NULL); return i_mapInfoP->field_0x28; } static inline f32 getMapInfo_map1_ZC(stage_map_info_class* i_mapInfoP) { JUT_ASSERT(VERSION_SELECT(780, 745, 749, 749), i_mapInfoP != NULL); return i_mapInfoP->field_0x2c; } static inline int gridPos2GridNo(int i_gridX, int i_gridY) { JUT_ASSERT(VERSION_SELECT(1258, 1188, 1188, 1188), (i_gridX >= -3) && (i_gridX <= 3) && (i_gridY >= -3) && (i_gridY <= 3)); return i_gridX + 3 + (i_gridY + 3) * 7; } /* 800455AC-80045660 .text onSaveArriveGridForAgbUseGridPos__Fii */ void onSaveArriveGridForAgbUseGridPos(int i_gridX, int i_gridY) { dComIfGs_onSaveArriveGridForAgb(gridPos2GridNo(i_gridX, i_gridY)); } /* 80045660-80045714 .text isSaveArriveGridForAgbUseGridPos__Fii */ BOOL isSaveArriveGridForAgbUseGridPos(int i_gridX, int i_gridY) { return dComIfGs_isSaveArriveGridForAgb(gridPos2GridNo(i_gridX, i_gridY)); } /* 80045714-80045734 .text IsFloorNo__Fi */ bool IsFloorNo(int i_no) { return i_no >= Floor_B5F && i_no <= Floor_5F; } /* 80045734-800457B8 .text getFloorInfo_WithRoom__Fi */ dStage_FloorInfo_c* getFloorInfo_WithRoom(int i_roomNo) { dStage_FloorInfo_c* floor = NULL; if (i_roomNo >= 0) { dStage_roomDt_c* room = dComIfGp_roomControl_getStatusRoomDt(i_roomNo); if (room != NULL) { floor = room->getFloorInfo(); } } if (floor == NULL) { floor = dComIfGp_getStage().getFloorInfo(); } return floor; } #if VERSION > VERSION_DEMO /* 800457B8-800458E0 .text mapOffsetY__Fv */ static f32 mapOffsetY() { f32 ret = 0.0f; if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_BOSS_e || dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_MINIBOSS_e) { if (dComIfGp_getStage().getDMap() != NULL) { dStage_DMap_c* pinf = dComIfGp_getStage().getDMap(); dStage_DMap_dt_c* entry = pinf->entries; JUT_ASSERT(VERSION_SELECT(1415, 1415, 1415, 1415), pinf->num == 1); for (int i = 0; i < pinf->num; i++, entry++) ret = entry->offsetY; } } return ret; } #endif /* 800458E0-800459E4 .text dMap_GetTopBottomFloorNo__FP11dStage_dt_cPUcPUc */ BOOL dMap_GetTopBottomFloorNo(dStage_dt_c* stag, u8* bottom_p, u8* top_p) { if (stag == NULL) { return FALSE; } u8 floorNo; u8 bottom; u8 top; dStage_FloorInfo_c* floor = stag->getFloorInfo(); dStage_FloorInfo_dt_c* entry; if (floor != NULL && floor->num >= 1) { entry = floor->m_entries; bottom = Floor_B5F; top = Floor_5F; for (int i = 0; i < floor->num; i++, entry++) { for (int j = 0; j < ARRAY_SIZE(entry->field_0x05); j++) { if (entry->field_0x05[j] != -1) { floorNo = entry->floorNo; if (floorNo > bottom) { bottom = floorNo; } if (floorNo < top) { top = floorNo; } break; } } } } else { bottom = Floor_1F; top = Floor_1F; } if (bottom_p != NULL) { *bottom_p = bottom; } if (top_p != NULL) { *top_p = top; } return FALSE; } /* 800459E4-80045A98 .text dMap_GetFloorInfoDtP__FP18dStage_FloorInfo_cf */ dStage_FloorInfo_dt_c* dMap_GetFloorInfoDtP(dStage_FloorInfo_c* floor, f32 ret) { dStage_FloorInfo_dt_c* entry; BOOL valid = false; if (floor && floor->num >= 1) { entry = floor->m_entries; for (int i = 0; i < floor->num; i++, entry++) { if (i == floor->num - 1) { if (floor->num == 1 || ret >= entry->field_0x00) { valid = true; break; } } else if (i == 0) { if (ret < entry[1].field_0x00) { valid = true; break; } } else if (ret >= entry->field_0x00 && ret < entry[1].field_0x00) { valid = true; break; } } } if (valid) { return entry; } return NULL; } /* 80045A98-80045AEC .text dMap_GetFloorInfoDtPFromFloorNo__FP18dStage_FloorInfo_cUc */ dStage_FloorInfo_dt_c* dMap_GetFloorInfoDtPFromFloorNo(dStage_FloorInfo_c* floor, u8 i_floorNo) { dStage_FloorInfo_dt_c* entry; BOOL valid = FALSE; if (floor != NULL) { entry = floor->m_entries; for (int i = 0; !valid && i < floor->num; i++, entry++) { if (i_floorNo == entry->floorNo) { valid = TRUE; break; } } } if (!valid) entry = NULL; return entry; } /* 80045AEC-80045C24 .text dMap_GetFloorNoForDmap__FP11dStage_dt_cif */ u8 dMap_GetFloorNoForDmap(dStage_dt_c* stag, int param_2, f32 param_3) { dStage_FloorInfo_c* floor = stag->getFloorInfo(); u8 floorNo = Floor_1F; dStage_FloorInfo_dt_c* floorData = dMap_GetFloorInfoDtP(floor, param_3); if (floorData) { bool var3 = false; for (int i = 0; !var3 && i < int(ARRAY_SIZE(floorData->field_0x05)); i++) { if (floorData->field_0x05[i] == param_2) { var3 = true; floorNo = floorData->floorNo; } } if (!var3) { f32 var1 = FLT_MAX; floorData = floor->m_entries; for (int i = 0; i < floor->num; i++, floorData++) { var3 = false; for (int j = 0; !var3 && j < int(ARRAY_SIZE(floorData->field_0x05)); j++) { if (floorData->field_0x05[j] == param_2) { var3 = true; } } if (var3) { f32 var2 = fabs(floorData->field_0x00 - param_3); if (var2 < var1) { var1 = var2; floorNo = floorData->floorNo; } } } } } return floorNo; } /* 80045C24-80045C6C .text dMap_GetFloorNo_WithRoom__Fif */ u8 dMap_GetFloorNo_WithRoom(int param_1, f32 param_2) { dStage_FloorInfo_c* floor = getFloorInfo_WithRoom(param_1); dStage_FloorInfo_dt_c *floorData = dMap_GetFloorInfoDtP(floor, param_2); if (floorData) { return floorData->floorNo; } return Floor_1F; } /* 80045C6C-80045C90 .text dMap_GetFloorNo__FP11dStage_dt_cf */ u8 dMap_GetFloorNo(dStage_dt_c* stag, f32 param_2) { return dMap_GetFloorNo_WithRoom(-1, param_2); } /* 80045C90-80045E54 .text getRoomDspFloorNo__15dMap_RoomInfo_cFUci */ u8 dMap_RoomInfo_c::getRoomDspFloorNo(u8 i_no, BOOL search) { u8 dspFloorNo; int no = i_no - Floor_Base; #if VERSION > VERSION_DEMO JUT_ASSERT(VERSION_SELECT(1794, 1794, 1794, 1794), Floor_Valid(no)); #endif dspFloorNo = field_0x2[no]; if (search && !IsFloorNo(dspFloorNo)) { while (!IsFloorNo(dspFloorNo) && --no >= 0) { #if VERSION > VERSION_DEMO JUT_ASSERT(VERSION_SELECT(1807, 1807, 1807, 1807), Floor_Valid(no)); #endif dspFloorNo = field_0x2[no]; } if (!IsFloorNo(dspFloorNo)) { while (!IsFloorNo(dspFloorNo) && ++no <= (Floor_Num - 1)) { #if VERSION > VERSION_DEMO JUT_ASSERT(VERSION_SELECT(1816, 1816, 1816, 1816), Floor_Valid(no)); #endif dspFloorNo = field_0x2[no]; } if (!IsFloorNo(dspFloorNo)) { dspFloorNo = 255; } } } return dspFloorNo; } /* 80045E54-80045F40 .text init__15dMap_RoomInfo_cFP15dMap_RoomInfo_ci */ dMap_RoomInfo_c* dMap_RoomInfo_c::init(dMap_RoomInfo_c* prev, int p2) { m_exist = 0; field_0x1 = 0; for (int i = 0; i < ARRAY_SIZE(field_0x2); i++) { field_0x2[i] = 255; } field_0xc = 255; m_no = -1; field_0x14 = p2; field_0x18 = 0.0f; field_0x1c = 0.0f; field_0x20 = 0.0f; field_0x24 = 0.0f; field_0x8c.init(NULL, NULL, 0.0f, 0.0f, 0, 0, 0, 0, 1.0f, 1.0f, 0); field_0x44[0].field_0x0 = 0; field_0x30.init(1, &field_0x44[0]); m_next = NULL; mStageMapInfoP = NULL; if (prev != NULL) { prev->m_next = this; } return this; } /* 80045F40-80046314 .text getRoomImage__15dMap_RoomInfo_cFiUciPP7ResTIMGPP7ResTIMGPP8map_dt_cPP20stage_map_info_classPUc */ u8 dMap_RoomInfo_c::getRoomImage(int i_roomNo, u8 param_2, int param_3, ResTIMG** param_4, ResTIMG** param_5, map_dt_c** param_6, stage_map_info_class** param_7, u8* param_8) { ResTIMG* r28; ResTIMG* r27; map_dt_c* r26; stage_map_info_class* r25; bool r24; u8 r23; u8 r22; r24 = false; r28 = NULL; r27 = NULL; r26 = NULL; r25 = NULL; r22 = 0; if (IsFloorNo(param_2)) { r23 = param_2; char archiveName[0x20]; sprintf(archiveName, "Room%d", i_roomNo); while (!r24 && IsFloorNo(r23)) { char resourceName[0x20]; sprintf(resourceName, "s%d.bti", r23); r28 = (ResTIMG*)dComIfG_getStageRes(archiveName, resourceName); sprintf(resourceName, "m%d.bti", r23); r27 = (ResTIMG*)dComIfG_getStageRes(archiveName, resourceName); sprintf(resourceName, "m%d.amp", r23); r26 = (map_dt_c*)dComIfG_getStageRes(archiveName, resourceName); r25 = NULL; u8 r21 = r23; while (!r25 && IsFloorNo(r21)) { dStage_roomDt_c* roomData = dComIfGp_roomControl_getStatusRoomDt(i_roomNo); r25 = roomData->getMapInfo2(r21); r21--; } if (r28 && r27 && r26 && r25) { r24 = true; } else { r23--; } if (!param_3) { break; } } if (r28 && r25 && r25->field_0x08 != r25->field_0x00 && r25->field_0x0C != r25->field_0x04) { r22 |= 2; } if (r27 && ((r27->width == 128 && r27->height <= 480) || ((r27->width % 8) == 0 && r27->height == 8)) && r25) { if (getMapInfo_map1_X1(r25) != getMapInfo_map1_X0(r25)) { if (getMapInfo_map1_Z1(r25) != getMapInfo_map1_Z0(r25)) { r22 |= 1; } } } } if (r22 != 3) { r22 = 0; } if (param_4) { *param_4 = r28; } if (param_5) { *param_5 = r27; } if (param_6) { *param_6 = r26; } if (param_7) { *param_7 = r25; } if (param_8) { *param_8 = r22; } if (r24) { return r23; } else { return -1; } } /* 80046314-80046470 .text makeRoomDspFloorNoTbl__15dMap_RoomInfo_cFi */ BOOL dMap_RoomInfo_c::makeRoomDspFloorNoTbl(int i_roomNo) { /* Nonmatching */ dStage_FloorInfo_c* floor = getFloorInfo_WithRoom(i_roomNo); for (int i = 0; i < ARRAY_SIZE(field_0x2); i++) { field_0x2[i] = -1; } if (floor) { dStage_FloorInfo_dt_c* floorData = floor->m_entries; for (int i = 0; i < floor->num; i++, floorData++) { u8 floorNo = floorData->floorNo; if (IsFloorNo(floorNo)) { for (int j = 0; j < int(ARRAY_SIZE(floorData->field_0x05)); j++) { if (i_roomNo == floorData->field_0x05[j]) { u8 r22 = getRoomImage(i_roomNo, floorNo, 1, NULL, NULL, NULL, NULL, NULL); #if VERSION > VERSION_DEMO JUT_ASSERT(VERSION_SELECT(2195, 2195, 2195, 2195), ((floorNo - Floor_B5F) >= 0) && ((floorNo - Floor_B5F) < (Floor_5F - Floor_B5F + 1))) #endif field_0x2[floorNo - Floor_B5F] = r22; } } } } } else { field_0x2[5] = 0x80; } return true; } /* 80046470-80046A58 .text roomEntryRoom__15dMap_RoomInfo_cFiUciUcP15dMap_RoomInfo_cssf */ #if VERSION == VERSION_DEMO dMap_RoomInfo_c* dMap_RoomInfo_c::roomEntryRoom(int i_roomNo, u8 param_2, int param_3, u8 param_4, dMap_RoomInfo_c* param_5, s16 param_6, s16 param_7) #else dMap_RoomInfo_c* dMap_RoomInfo_c::roomEntryRoom(int i_roomNo, u8 param_2, int param_3, u8 param_4, dMap_RoomInfo_c* param_5, s16 param_6, s16 param_7, f32 param_8) #endif { JUT_ASSERT(VERSION_SELECT(2397, 2241, 2241, 2241), i_roomNo >= 0); if (m_exist == 0) { field_0x1 = 0; mStageMapInfoP = NULL; u8 local_60 = 0; makeRoomDspFloorNoTbl(i_roomNo); u8 r26 = getRoomDspFloorNo(param_2, i_roomNo == param_3); ResTIMG* local_4c = NULL; ResTIMG* l_image1P = NULL; map_dt_c* l_mapDtP = NULL; stage_map_info_class* l_mapInfoP = NULL; if (IsFloorNo(r26)) { getRoomImage(i_roomNo, r26, 0, &local_4c, &l_image1P, &l_mapDtP, &l_mapInfoP, &local_60); } if (local_60 != 3) { local_60 = 0; } m_no = i_roomNo; field_0xc = r26; if (i_roomNo != -1) { mStageMapInfoP = l_mapInfoP; field_0x44[0].field_0x0 = 0; if (local_60 != 3) { local_60 = 0; } field_0x1 = local_60; if ((local_60 & 2)) { field_0x44[0].init(local_4c, 0, COMPOUND_LITERAL(GXColor){255, 255, 255, 128}); field_0x44[0].setScroll(0.0f, 0.0f, 1.0f, 1.0f); field_0x44[0].field_0x0 = 1; if (l_mapInfoP) { field_0x18 = param_6 / (l_mapInfoP->field_0x08 - l_mapInfoP->field_0x00); field_0x1c = param_7 / (l_mapInfoP->field_0x0C - l_mapInfoP->field_0x04); } else { JUT_ASSERT(VERSION_SELECT(2487, 2331, 2331, 2331), 0); } } else { field_0x44[0].field_0x0 = 0; } field_0x30.init(1, field_0x44); if ((local_60 & 1)) { JUT_ASSERT(VERSION_SELECT(2502, 2346, 2346, 2346), l_mapDtP != NULL); JUT_ASSERT(VERSION_SELECT(2503, 2347, 2347, 2347), l_image1P != NULL); JUT_ASSERT(VERSION_SELECT(2504, 2348, 2348, 2348), l_mapInfoP != NULL); field_0x8c.setImage(l_image1P,l_mapDtP); field_0x28 = mDoLib_cnvind16(l_mapDtP->field_0x0); field_0x2c = mDoLib_cnvind16(l_mapDtP->field_0x2); field_0x20 = field_0x28 / (getMapInfo_map1_X1(l_mapInfoP) - getMapInfo_map1_X0(l_mapInfoP)); field_0x24 = field_0x2c / (getMapInfo_map1_Z1(l_mapInfoP) - getMapInfo_map1_Z0(l_mapInfoP)); if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_DUNGEON_e) { if (l_mapInfoP->field_0x30 < 18.75f) { l_mapDtP->field_0x32 = 0; } else { l_mapDtP->field_0x32 = 1; } if (param_2 >= 0x80) { l_mapDtP->field_0x6 = param_2 - 0x7f; } else { l_mapDtP->field_0x6 = param_2 - 0x80; } } #if VERSION > VERSION_DEMO else if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_MINIBOSS_e) { int tmp = dMap_GetFloorNo(&dComIfGp_getStage(), param_8 + mapOffsetY()); if (tmp >= 0x80) { l_mapDtP->field_0x6 = tmp - 0x7f; } else { l_mapDtP->field_0x6 = tmp - 0x80; } } #endif else { l_mapDtP->field_0x32 = 0; l_mapDtP->field_0x6 = 0; } } } if (i_roomNo != -1) { m_exist = 1; } return this; } return NULL; } /* 80046A58-80046F08 .text Changeimage__15dMap_RoomInfo_cFUcUcissf */ #if VERSION == VERSION_DEMO BOOL dMap_RoomInfo_c::Changeimage(u8 param_1, u8 param_2, int param_3, s16 param_4, s16 param_5) #else BOOL dMap_RoomInfo_c::Changeimage(u8 param_1, u8 param_2, int param_3, s16 param_4, s16 param_5, f32 param_6) #endif { ResTIMG* local_60 = NULL; ResTIMG* local_64 = NULL; map_dt_c* local_68 = NULL; stage_map_info_class* local_6c = NULL; u8 r26; if (IsFloorNo(param_1)) { r26 = getRoomDspFloorNo(param_1, m_no == param_3); } else { JUT_ASSERT(VERSION_SELECT(2606, 2453, 2453, 2453), 0); } if (r26 == field_0xc) { return false; } mStageMapInfoP = NULL; field_0xc = r26; field_0x1 = 0; if (IsFloorNo(r26)) { getRoomImage(m_no, r26, 0, &local_60, &local_64, &local_68, &local_6c, &field_0x1); } if (local_6c) { mStageMapInfoP = local_6c; } if (field_0x1 & 2) { field_0x44[0].init(local_60, 0, COMPOUND_LITERAL(GXColor){255, 255, 255, 128}); field_0x44[0].setScroll(0.0f, 0.0f, 1.0f, 1.0f); field_0x44[0].field_0x0 = 1; if (local_6c) { field_0x18 = param_4 / (local_6c->field_0x08 - local_6c->field_0x00); field_0x1c = param_5 / (local_6c->field_0x0C - local_6c->field_0x04); } field_0x30.init(1, field_0x44); } if (field_0x1 & 1) { field_0x8c.setImage(local_64, local_68); field_0x28 = mDoLib_cnvind16(local_68->field_0x0); field_0x2c = mDoLib_cnvind16(local_68->field_0x2); field_0x20 = field_0x28 / (getMapInfo_map1_X1(local_6c) - getMapInfo_map1_X0(local_6c)); field_0x24 = field_0x2c / (getMapInfo_map1_Z1(local_6c) - getMapInfo_map1_Z0(local_6c)); if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_DUNGEON_e) { if (local_6c->field_0x30 < 18.75f) { local_68->field_0x32 = 0; } else { local_68->field_0x32 = 1; } if (param_1 >= 0x80) { local_68->field_0x6 = param_1 - 0x7f; } else { local_68->field_0x6 = param_1 - 0x80; } } #if VERSION > VERSION_DEMO else if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_MINIBOSS_e) { int tmp = dMap_GetFloorNo(&dComIfGp_getStage(), param_6 + mapOffsetY()); if (tmp >= 0x80) { local_68->field_0x6 = tmp - 0x7f; } else { local_68->field_0x6 = tmp - 0x80; } } #endif else { local_68->field_0x32 = 0; local_68->field_0x6 = 0; } } return true; } /* 80046F08-80046FE0 .text deleteRoom__15dMap_RoomInfo_cFv */ BOOL dMap_RoomInfo_c::deleteRoom() { m_no = -1; m_exist = 0; mStageMapInfoP = NULL; #if VERSION > VERSION_DEMO field_0x1 = 0; for (int i = 0; i < ARRAY_SIZE(field_0x2); i++) { field_0x2[i] = 255; } field_0xc = 255; m_no = -1; field_0x18 = 0.0f; field_0x1c = 0.0f; field_0x20 = 0.0f; field_0x24 = 0.0f; field_0x28 = 0.0f; field_0x2c = 0.0f; field_0x8c.init(NULL, NULL, 0.0f, 0.0f, 0, 0, 0, 0, 1.0f, 1.0f, 0); field_0x44[0].field_0x0 = 0; field_0x30.init(1, &field_0x44[0]); #endif return TRUE; } /* 80046FE0-800470CC .text enlagementSizeTextureCordCalc__15dMap_RoomInfo_cFPfPfPfPfffffff */ bool dMap_RoomInfo_c::enlagementSizeTextureCordCalc(f32* param_1, f32* param_2, f32* param_3, f32* param_4, f32 param_5, f32 param_6, f32 param_7, f32 param_8, f32 param_9, f32 param_10) { /* Nonmatching */ f32 f10 = param_5 - param_6 * 0.5f; f32 f9 = param_5 + param_6 * 0.5f; f32 f7 = *param_3; f32 f12 = (1.0f / param_9) * f7; f32 f8 = *param_4; f32 f11 = (1.0f / param_9) * f8; f32 f31 = param_8 + f12; f32 f13 = param_8 + f11; bool ret = false; if (param_9 != 0.0f || f31 <= f9 || f13 >= f10) { f32 tmp = ((param_8 - param_5) * param_7) / param_10; param_7 = f7; param_10 = f8; *param_1 = tmp + 0.5f + f12 / param_6; *param_2 = tmp + 0.5f + f11 / param_6; if (f31 < f10) { *param_1 = 0.0f; param_7 = (f10 - param_8) * param_9; *param_1 = 0.0f; } if (f13 > f9) { *param_2 = 1.0f; param_10 = (f9 - param_8) * param_9; *param_2 = 1.0f; } *param_3 = param_7; *param_4 = param_10; ret = true; } return ret; } /* 800470CC-800475B8 .text roomDrawRoomEnlargementSize__15dMap_RoomInfo_cFiiiiffffUc */ void dMap_RoomInfo_c::roomDrawRoomEnlargementSize(int param_1, int param_2, int param_3, int param_4, f32 param_5, f32 param_6, f32 param_7, f32 param_8, u8 param_9) { /* Nonmatching */ if (field_0x1 & 2) { f32 f28 = getStageMapInfoP()->field_0x08 - getStageMapInfoP()->field_0x00; f32 f27 = getStageMapInfoP()->field_0x0C - getStageMapInfoP()->field_0x04; f32 f22 = field_0x18; f32 f31 = field_0x1c; field_0x44->field_0x0 = 0; f32 local_e8 = 176.0f; f32 local_ec; f32 local_f0; f32 local_f4; f32 local_f8; f32 f30 = param_3 * 0.5f; f32 local_fc = -f30; f32 local_e0 = 176.0f; f32 f29 = param_4 * 0.5f; f32 local_100; f32 local_104 = -f29; f32 local_108 = f29; local_100 = f30; if (!enlagementSizeTextureCordCalc(&local_ec, &local_f0, &local_fc, &local_100, getStageMapInfoP()->field_0x10, f28, f22, param_5, param_7, param_3)) { return; } if (!enlagementSizeTextureCordCalc(&local_f4, &local_f8, &local_104, &local_108, getStageMapInfoP()->field_0x14, f27, f31, param_6, param_8, param_4)) { return; } if (local_ec > 1.0f || local_f0 < 0.0f || local_f4 > 1.0f || local_f8 < 0.0f) { return; } field_0x44->field_0x0 = 1; field_0x44->setScroll(local_ec, local_f4, local_f0 - local_ec, local_f8 - local_f4); field_0x44->mColor.r = 255; field_0x44->mColor.g = 255; field_0x44->mColor.b = 255; field_0x44->mColor.a = param_9; field_0x30.setPos(param_1 + f30 + local_fc, param_2 + f29 + local_104, param_1 + f30 + local_100, param_2 + f29 + local_108); field_0x30.field_0x5 = 1; dComIfGd_set2DOpa(&field_0x30); } } /* 800475B8-80047834 .text roomDrawRoomRealSize__15dMap_RoomInfo_cFiiiiffffffUc */ void dMap_RoomInfo_c::roomDrawRoomRealSize(int param_1, int param_2, int param_3, int param_4, f32 param_5, f32 param_6, f32 param_7, f32 param_8, f32 param_9, f32 param_10, u8 i_alpha ) { if (field_0x1 & 1) { f32 f28 = getStageMapInfoP()->field_0x30 / param_9; f32 f27 = getStageMapInfoP()->field_0x30 / param_10; field_0x8c.setCenterPos( field_0x28 * 0.5f + (param_5 - param_7) / getStageMapInfoP()->field_0x30, field_0x2c * 0.5f + (param_6 - param_8) / getStageMapInfoP()->field_0x30 ); field_0x8c.setScale(f28, f27); field_0x8c.setPos(param_1, param_2, param_1 + param_3, param_2 + param_4); field_0x8c.setAlpha(i_alpha); dComIfGd_set2DOpa(&field_0x8c); } } /* 80047834-8004793C .text roomExistenceCheck__19dMap_RoomInfoCtrl_cFiPP15dMap_RoomInfo_c */ bool dMap_RoomInfoCtrl_c::roomExistenceCheck(int i_no, dMap_RoomInfo_c** roomInfoPP) { /* Nonmatching */ JUT_ASSERT(VERSION_SELECT(3075, 2947, 2947, 2947), roomInfoPP != NULL); bool ret = false; *roomInfoPP = NULL; dMap_RoomInfo_c* roomInfoP = m_info; JUT_ASSERT(VERSION_SELECT(3083, 2955, 2955, 2955), roomInfoP != NULL); for (; !ret && roomInfoP != NULL; roomInfoP = roomInfoP->m_next) { if (roomInfoP->m_exist) { if (i_no == roomInfoP->m_no) { *roomInfoPP = roomInfoP; ret = TRUE; } } else { if (*roomInfoPP == NULL) *roomInfoPP = roomInfoP; } } return ret; } /* 8004793C-80047960 .text getNextRoomP__19dMap_RoomInfoCtrl_cFP15dMap_RoomInfo_c */ dMap_RoomInfo_c* dMap_RoomInfoCtrl_c::getNextRoomP(dMap_RoomInfo_c* info) { if (info == NULL) { if (m_info != NULL) return m_info; else return NULL; } else { return info->m_next; } } /* 80047960-80047A8C .text ctrlEntryRoom__19dMap_RoomInfoCtrl_cFiUciUcssf */ #if VERSION == VERSION_DEMO dMap_RoomInfo_c* dMap_RoomInfoCtrl_c::ctrlEntryRoom(int i_no, u8 p1, int p2, u8 p3, s16 p4, s16 p5) #else dMap_RoomInfo_c* dMap_RoomInfoCtrl_c::ctrlEntryRoom(int i_no, u8 p1, int p2, u8 p3, s16 p4, s16 p5, f32 p6) #endif { dMap_RoomInfo_c* roomInfoP; if (roomExistenceCheck(i_no, &roomInfoP)) return NULL; dMap_RoomInfo_c* prev = NULL; roomInfoP = m_info; JUT_ASSERT(VERSION_SELECT(3196, 3069, 3069, 3069), roomInfoP != NULL); if (roomInfoP == NULL) return NULL; for (; roomInfoP != NULL && roomInfoP->m_exist; roomInfoP = roomInfoP->m_next) prev = roomInfoP; if (roomInfoP != NULL) { #if VERSION == VERSION_DEMO if (roomInfoP->roomEntryRoom(i_no, p1, p2, p3, prev, p4, p5)) return roomInfoP; #else if (roomInfoP->roomEntryRoom(i_no, p1, p2, p3, prev, p4, p5, p6)) return roomInfoP; #endif } #if VERSION == VERSION_DEMO JUT_ASSERT(3227, FALSE); #endif return NULL; } /* 80047A8C-80047AC4 .text deleteRoom__19dMap_RoomInfoCtrl_cFi */ bool dMap_RoomInfoCtrl_c::deleteRoom(int i_no) { dMap_RoomInfo_c* roomInfoP; if (roomExistenceCheck(i_no, &roomInfoP)) { roomInfoP->deleteRoom(); } else { #if VERSION == VERSION_DEMO JUT_WARN(3264, "delete room <%d> none", i_no); for (int i = 0; i < 20; i++) { int r7 = dMap_c::mRoomInfo[i].m_no; JUTAssertion::setWarningMessage_f(2, __FILE__, 3266, "%2d ", r7); } #endif } return FALSE; } /* 80047AC4-80047B8C .text ctrlDrawRoomEnlargementSize__19dMap_RoomInfoCtrl_cFiiiiiffffUc */ void dMap_RoomInfoCtrl_c::ctrlDrawRoomEnlargementSize(int i_no, int p1, int p2, int p3, int p4, f32 p5, f32 p6, f32 p7, f32 p8, u8 p9) { dMap_RoomInfo_c* roomInfoP = NULL; while ((roomInfoP = getNextRoomP(roomInfoP))) { if (roomInfoP->m_exist && i_no == roomInfoP->m_no) roomInfoP->roomDrawRoomEnlargementSize(p1, p2, p3, p4, p5, p6, p7, p8, p9); } } /* 80047B8C-80047C64 .text ctrlDrawRoomRealSize__19dMap_RoomInfoCtrl_cFiiiiiffffffUc */ void dMap_RoomInfoCtrl_c::ctrlDrawRoomRealSize(int i_no, int p1, int p2, int p3, int p4, f32 p5, f32 p6, f32 p7, f32 p8, f32 p9, f32 p10, u8 i_alpha) { dMap_RoomInfo_c* roomInfoP = NULL; while ((roomInfoP = getNextRoomP(roomInfoP))) { if (roomInfoP->m_exist && i_no == roomInfoP->m_no) roomInfoP->roomDrawRoomRealSize(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, i_alpha); } } /* 80047C64-80047CD0 .text init__19dMap_RoomInfoCtrl_cFv */ void dMap_RoomInfoCtrl_c::init() { int no; int i; dMap_RoomInfo_c* prev = NULL; dMap_RoomInfo_c* info = m_info; no = 0; for (i = 0; i < m_num; no++, i++, info++) { prev = info->init(prev, no); } } /* 80047CD0-8004826C .text create__6dMap_cFv */ void dMap_c::create() { /* Nonmatching */ static const GXColor l_cursorColor = {255, 255, 0, 255}; static const int frameArcIdx[] = { dRes_INDEX_ALWAYS_BTI_MAP_FRAME1_e, dRes_INDEX_ALWAYS_BTI_MAP_FRAME3_e, dRes_INDEX_ALWAYS_BTI_MAP_FRAME2_e, dRes_INDEX_ALWAYS_BTI_MAP_FRAME4_e, dRes_INDEX_ALWAYS_BTI_MAP_FRAME1_e, dRes_INDEX_ALWAYS_BTI_MAP_FRAME3_e, dRes_INDEX_ALWAYS_BTI_MAP_FRAME1_e, dRes_INDEX_ALWAYS_BTI_MAP_FRAME2_e, }; static const f32 cord[][4] = { {0.0f, 0.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 1.0f, 1.0f}, {0.0f, 0.0f, 1.0f, 1.0f}, {0.0f, 1.0f, 1.0f, 13.0f}, {0.0f, 1.0f, 1.0f, 13.0f}, {1.0f, 0.0f, 13.0f, 1.0f}, {1.0f, 0.0f, 13.0f, 1.0f}, }; mCompAlpha = 0; mAlpha = 0; mDrawPointCntPlayer = 0; mDrawPointCntEnemy = 0; mDrawPointCntAgbCursor = 0; mDoorNum = 0; mTboxNum = 0; mAGBMapSendStatus = 0; mSetCursorFlg = 0; mIconDispMode = dMapIconDisp_NONE_e; mIconFreeAlpha = 0; mIconSelfAlpha = 0; mAGBMapSendStopFlg = 0; mPlayerStayAgbMapTypeNow = 0; mPlayerStayAgbMapTypeOld = -1; mMapAGBCursorFlashFrmCnt = 0; mPlGridX = -0x80; mPlGridY = -0x80; mPlGridX_Old = -0x80; mPlGridY_Old = -0x80; mNowFloorNo = 0; mIconFreePosX = 0; mIconFreePosY = 0; mAGBPointValueC = 0; mAGBPointValueE = 0; mAGBPointValueAll = 0; mAGBPointValueRoomAll = 0; strcpy(mAgbSendNowStageName,""); mAgbSendNowRoomNo = -1; mAgbSendNowDspFloorNo = -1; mFmapChkPntValue = 0; mFmapChkPntData_p = 0; mEnlargementSizeCenterX = 0.0f; mEnlargementSizeCenterZ = 0.0f; mEnlargementSizeScaleX = 1.0f; mEnlargementSizeScaleZ = 1.0f; mDispPosLeftUpX = 0; mDispPosLeftUpY = 0; mDispSizeX = 0; mDispSizeY = 0; mScissorOrigY = 0; mScissorOrigX = 0; mScissorWidth = 0; mScissorHeight = 0; mIconFreeScale = 0.0f; mIconSelfScale = 0.0f; mNowCenterX = 0.0f; mNowCenterZ = 0.0f; mNowScaleX = 0.0f; mNowScaleZ = 0.0f; mNowRoomInfoP = NULL; mMapDispMode = 0; mNowFloorNo = -1; setFmapChkDtPrm(); mRoomInfoCtrl.m_num = 0x14; mRoomInfoCtrl.m_info = mRoomInfo; mRoomInfoCtrl.init(); mNowRoomInfoP = NULL; mCursor.init(0, 0, l_cursorColor, 6.0f, 10.0f, 0); mAlpha = 0; mapAGBSendStatInit(); mAGBMapSendStatus = 0; mDispPosLeftUpX = 25; mDispPosLeftUpY = 338; mDispSizeX = 120; mDispSizeY = 120; mIconFreePosX = 85; mIconFreePosY = 324; ResTIMG* timg; for (int i = 0; i < 8; i++) { timg = (ResTIMG*)dComIfG_getObjectRes("Always", frameArcIdx[i]); JUT_ASSERT(VERSION_SELECT(3450, 3450, 3450, 3450), timg != NULL); mFrameTexture[i].init(timg, i + 2, COMPOUND_LITERAL(GXColor){255, 255, 255, 255}); mFrameTexture[i].field_0x0 = 1; mFrameTexture[i].setScroll(cord[i][0], cord[i][1], cord[i][2], cord[i][3]); mFrameTex[i].init(1, &mFrameTexture[i]); } timg = (ResTIMG*)dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BTI_CAMERA_FREE_e); JUT_ASSERT(VERSION_SELECT(3476, 3476, 3476, 3476), timg != NULL); mIconFreeTexture.init(timg, 10, COMPOUND_LITERAL(GXColor){255, 210, 0, 255}); mIconFreeTexture.field_0x0 = 1; mIconFreeTexture.setScroll(0.0f, 0.0f, 1.0f, 1.0f); mIconFreeTex.init(1, &mIconFreeTexture); timg = (ResTIMG*)dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BTI_CAMERA_SELF_e); JUT_ASSERT(VERSION_SELECT(3489, 3489, 3489, 3489), timg != NULL); mIconSelfTexture.init(timg, 10, COMPOUND_LITERAL(GXColor){255, 222, 255, 255}); mIconSelfTexture.field_0x0 = 1; mIconSelfTexture.setScroll(0.0f, 0.0f, 1.0f, 1.0f); mIconSelfTex.init(1, &mIconSelfTexture); timg = (ResTIMG*)dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BTI_F_SHIPICON_e); JUT_ASSERT(VERSION_SELECT(3502, 3502, 3502, 3502), timg != NULL); mShip.init(timg, 0.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 1.0f, 1.0f, 0); timg = (ResTIMG*)dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BTI_TREASUREBOX_e); JUT_ASSERT(VERSION_SELECT(3511, 3511, 3511, 3511), timg != NULL); for (int i = 0; i < 8; i++) { mTbox[i].init(timg, 0.0f, 0.0f, 0.0f, 0.0f, 1, 0, 0, 1.0f, 1.0f, 0); } timg = (ResTIMG*)dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BTI_BLACK_WHITE_2_e); for (int i = 0; i < 16; i++) { mDoor[i].init(timg, 0.0f, 0.0f, 0.0f, 0.0f, 1, 0, 0, 1.0f, 1.0f, 0); } initPoint(); } /* 8004826C-800482B4 .text isEnableEnlargementScroll__6dMap_cFv */ BOOL dMap_c::isEnableEnlargementScroll() { return dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_SEA_e; } /* 800482B4-800482D8 .text isEnableDispMap__6dMap_cFv */ bool dMap_c::isEnableDispMap() { return mNowRoomInfoP && mNowRoomInfoP->getEnableFlg() == DSP_ENABLE_BOTH_SIZE; } /* 800482D8-80048340 .text getKindMapType__6dMap_cFv */ int dMap_c::getKindMapType() { u32 stage_type = dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()); if (stage_type == dStageType_DUNGEON_e || stage_type == dStageType_FF1_e || stage_type == dStageType_MINIBOSS_e) { return 2; } else if (stage_type == dStageType_SEA_e) { return 1; } else { return 0; } } /* 80048340-80048370 .text remove__6dMap_cFv */ void dMap_c::remove() { mDoGaC_SendEntry(1, 1); } /* 80048370-800484A4 .text setImage__6dMap_cFiif */ void dMap_c::setImage(int param_1, int param_2, f32 param_3) { if (param_2 < 0) { return; } if (!IsFloorNo(mNowFloorNo)) { mNowFloorNo = dMap_GetFloorNo_WithRoom(param_2, param_3); if (!IsFloorNo(mNowFloorNo)) { JUT_ASSERT(VERSION_SELECT(3882, 3694, 3694, 3694), 0); } } u8 r31 = mNowFloorNo; #if VERSION == VERSION_DEMO if (!mRoomInfoCtrl.ctrlEntryRoom(param_1, dMap_GetFloorNo_WithRoom(param_2, param_3), param_2, r31, 120, 120)) #else if (!mRoomInfoCtrl.ctrlEntryRoom(param_1, dMap_GetFloorNo_WithRoom(param_2, param_3), param_2, r31, 120, 120, param_3)) #endif { JUT_ASSERT(VERSION_SELECT(3908, 3714, 3714, 3714), 0); } if (!mNowRoomInfoP && param_1 == param_2 && param_2 != -1) { setNowRoom(param_2); } } /* 800484A4-800484F4 .text deleteImage__6dMap_cFi */ void dMap_c::deleteImage(int param_1) { if (param_1 < 0) { return; } mRoomInfoCtrl.deleteRoom(param_1); if (param_1 == dStage_roomControl_c::getStayNo()) { mNowRoomInfoP = NULL; } } /* 800484F4-80048660 .text setNowRoom__6dMap_cFi */ BOOL dMap_c::setNowRoom(int param_1) { BOOL r31 = false; mNowRoomInfoP = NULL; dMap_RoomInfo_c* roomInfoP = NULL; while ((roomInfoP = mRoomInfoCtrl.getNextRoomP(roomInfoP))) { if (param_1 == roomInfoP->m_no) { mNowRoomInfoP = roomInfoP; r31 = true; break; } } if (r31) { if (mNowRoomInfoP->getEnableFlg() & 2) { mEnlargementSizeCenterX = mNowRoomInfoP->getStageMapInfoP()->field_0x10; mEnlargementSizeCenterZ = mNowRoomInfoP->getStageMapInfoP()->field_0x14; mEnlargementSizeScaleX = mNowRoomInfoP->field_0x18; mEnlargementSizeScaleZ = mNowRoomInfoP->field_0x1c; } if (getKindMapType() != 1 && !mAGBMapSendStopFlg && mAGBMapSendStatus) { mAGBMapSendStatus = 0; } } return r31; } /* 80048660-80048A20 .text draw__11dMap_2DSQ_cFv */ void dMap_2DSQ_c::draw() { GXVtxAttrFmtList fmt[GX_VA_MAX_ATTR + 1]; GXGetVtxAttrFmtv(GX_VTXFMT0, fmt); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetNumChans(1); GXSetNumTexGens(0); GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE); GXSetNumTevStages(1); GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); if (mMode == 0) { GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetBlendMode(GX_BM_BLEND, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET); GXSetColorUpdate(GX_DISABLE); GXSetAlphaUpdate(GX_ENABLE); GXSetDstAlpha(GX_ENABLE, mAlpha); } else if (mMode == 1) { GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); GXSetTevColor(GX_TEVREG0, mColor); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetBlendMode(GX_BM_BLEND, GX_BL_DST_ALPHA, GX_BL_INV_DST_ALPHA, GX_LO_SET); GXSetColorUpdate(GX_ENABLE); GXSetAlphaUpdate(GX_DISABLE); GXSetDstAlpha(GX_DISABLE, 0); } GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition3f32(mDispLeft, mDispTop, 0.0f); GXPosition3f32(mDispRight, mDispTop, 0.0f); GXPosition3f32(mDispRight, mDispBottom, 0.0f); GXPosition3f32(mDispLeft, mDispBottom, 0.0f); GXEnd(); GXSetColorUpdate(GX_ENABLE); GXSetAlphaUpdate(GX_DISABLE); GXSetDstAlpha(GX_DISABLE, 0xff); GXSetVtxAttrFmtv(GX_VTXFMT0, fmt); } /* 80048A20-80048B54 .text mapDrawIconFree__6dMap_cFssUc */ void dMap_c::mapDrawIconFree(s16 param_1, s16 param_2, u8 param_3) { if (param_3) { mIconFreeTex.setPos(param_1 - mIconFreeScale * 64.0f, param_2 - mIconFreeScale * 16.0f, param_1 + mIconFreeScale * 64.0f, param_2 + mIconFreeScale * 16.0f); mIconFreeTexture.mColor.r = 255; mIconFreeTexture.mColor.g = 210; mIconFreeTexture.mColor.b = 0; mIconFreeTexture.mColor.a = param_3; dComIfGd_set2DOpa(&mIconFreeTex); } } /* 80048B54-80048C80 .text mapDrawIconSelf__6dMap_cFssUc */ void dMap_c::mapDrawIconSelf(s16 param_1, s16 param_2, u8 param_3) { if (param_3) { mIconSelfTex.setPos(param_1 - mIconFreeScale * 64.0f, param_2 - mIconFreeScale * 16.0f, param_1 + mIconFreeScale * 64.0f, param_2 + mIconFreeScale * 16.0f); mIconSelfTexture.mColor.r = 255; mIconSelfTexture.mColor.g = 255; mIconSelfTexture.mColor.b = 255; mIconSelfTexture.mColor.a = param_3; dComIfGd_set2DOpa(&mIconSelfTex); } } /* 80048C80-80048D80 .text mapDrawFrame__6dMap_cFUc */ void dMap_c::mapDrawFrame(u8 param_1) { static const s16 position[][4] = { {-8, -8, 8, 8}, {112, -8, 128, 8}, {-8, 112, 8, 128}, {112, 112, 128, 128}, {-8, 8, 8, 112}, {112, 8, 128, 112}, {8, -8, 112, 8}, {8, 112, 112, 128}, }; if (param_1) { for (int i = 0; i < 8; i++) { mFrameTex[i].setPos(mDispPosLeftUpX + position[i][0], mDispPosLeftUpY + position[i][1], mDispPosLeftUpX + position[i][2], mDispPosLeftUpY + position[i][3]); mFrameTexture[i].mColor.r = 255; mFrameTexture[i].mColor.g = 255; mFrameTexture[i].mColor.b = 255; mFrameTexture[i].mColor.a = param_1; dComIfGd_set2DOpa(&mFrameTex[i]); } } } /* 80048D80-80048F74 .text mapDrawEnlargementSize__6dMap_cFffffUc */ void dMap_c::mapDrawEnlargementSize(f32 param_1, f32 param_2, f32 param_3, f32 param_4, u8 param_5) { static const GXColor l_color_field = {0, 0, 255, 255}; static const GXColor l_color_dungeon = {0, 0, 0, 255}; if (param_5) { m2DSQdraw.setDispPos(mDispPosLeftUpX, mDispPosLeftUpY, mDispPosLeftUpX + mDispSizeX, mDispPosLeftUpY + mDispSizeY); m2DSQdraw.setAlpha(param_5); m2DSQdraw.setMode(0); dComIfGd_set2DOpa(&m2DSQdraw); if (getNowRoom()->getEnableFlg() & 2) { mRoomInfoCtrl.ctrlDrawRoomEnlargementSize(getNowRoom()->getRoomNo(), mDispPosLeftUpX, mDispPosLeftUpY, mDispSizeX, mDispSizeY, param_1, param_2, param_3, param_4, param_5); } m2DSQdraw2.setDispPos(mDispPosLeftUpX, mDispPosLeftUpY, mDispPosLeftUpX + mDispSizeX, mDispPosLeftUpY + mDispSizeY); if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_OUTDOORS_e || dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_SEA_e) { m2DSQdraw2.setColor(&l_color_field); } else { m2DSQdraw2.setColor(&l_color_dungeon); } m2DSQdraw2.setMode(1); dComIfGd_set2DOpa(&m2DSQdraw2); } } /* 80048F74-80049354 .text mapDrawRealSize__6dMap_cFffUc */ void dMap_c::mapDrawRealSize(f32 param_1, f32 param_2, u8 i_alpha) { /* Nonmatching */ static const GXColor l_color_field = {0, 0, 255, 255}; static const GXColor l_color_dungeon = {0, 0, 0, 255}; if (i_alpha) { m2DSQdraw.setDispPos(mDispPosLeftUpX, mDispPosLeftUpY, mDispPosLeftUpX + mDispSizeX, mDispPosLeftUpY + mDispSizeY); m2DSQdraw.setAlpha(i_alpha); m2DSQdraw.setMode(0); dComIfGd_set2DOpa(&m2DSQdraw); if (mNowRoomInfoP->getEnableFlg() & 1) { f32 f31 = mNowRoomInfoP->getStageMapInfoP()->field_0x30; f32 f30 = mNowRoomInfoP->getStageMapInfoP()->field_0x30; mRoomInfoCtrl.ctrlDrawRoomRealSize( mNowRoomInfoP->getRoomNo(), mDispPosLeftUpX, mDispPosLeftUpY, mDispSizeX, mDispSizeY, param_1, param_2, getMapInfo_map1_XC(mNowRoomInfoP->getStageMapInfoP()), getMapInfo_map1_ZC(mNowRoomInfoP->getStageMapInfoP()), f30, f31, i_alpha ); } m2DSQdraw2.setDispPos(mDispPosLeftUpX, mDispPosLeftUpY, mDispPosLeftUpX + mDispSizeX, mDispPosLeftUpY + mDispSizeY); if ( dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_OUTDOORS_e || dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_SEA_e ) { m2DSQdraw2.setColor(&l_color_field); } else { m2DSQdraw2.setColor(&l_color_dungeon); } m2DSQdraw2.setMode(1); dComIfGd_set2DOpa(&m2DSQdraw2); } } /* 80049354-800494A0 .text mapAGBSendIslandData__6dMap_cFv */ void dMap_c::mapAGBSendIslandData() { /* Nonmatching */ } /* 800494A0-800494C8 .text setPlayerStayAgbMapTypeNow__6dMap_cFff */ void dMap_c::setPlayerStayAgbMapTypeNow(f32 param_1, f32 param_2) { mPlayerStayAgbMapTypeNow = getPosAgbMapType(param_1, param_2, true); } /* 800494C8-80049538 .text agbMapNoSet__6dMap_cFUcUc */ void dMap_c::agbMapNoSet(u8 r29, u8 r30) { daAgb_c* agb = dComIfGp_getAgb(); if (agb) { int stageNo = dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()); agb->MapNoSet(stageNo, r29, r30); } } /* 80049538-800495D8 .text agbMapNoSetCall__6dMap_cFv */ void dMap_c::agbMapNoSetCall() { if (getKindMapType() == 1) { if (mPlGridX >= -3 && mPlGridX <= 3 && mPlGridY >= -3 && mPlGridY <= 3) { agbMapNoSet(mPlGridX + 4 + (mPlGridY + 3) * 7, mPlayerStayAgbMapTypeNow == 3); } } else if (mNowRoomInfoP->getRoomNo() >= 0) { agbMapNoSet(mNowRoomInfoP->getRoomNo(), 0); } } /* 800495D8-800495F8 .text agbIsMsgSend__6dMap_cFv */ BOOL dMap_c::agbIsMsgSend() { daAgb_c* agb = dComIfGp_getAgb(); BOOL ret = false; if (agb) { ret = agb->isMsgSend(); } return ret; } /* 800495F8-80049630 .text agbResetCursor__6dMap_cFv */ void dMap_c::agbResetCursor() { if (dComIfGp_getAgb()) { dComIfGp_getAgb()->resetCursor(true); } } /* 80049630-80049650 .text agbScrollX__6dMap_cFv */ u16 dMap_c::agbScrollX() { daAgb_c* agb = dComIfGp_getAgb(); u16 ret = 0; if (agb) { ret = agb->field_0x630; } return ret; } /* 80049650-80049670 .text agbScrollY__6dMap_cFv */ u16 dMap_c::agbScrollY() { daAgb_c* agb = dComIfGp_getAgb(); u16 ret = 0; if (agb) { ret = agb->field_0x632; } return ret; } /* 80049670-800496B0 .text agbFlashCheck__6dMap_cFv */ BOOL dMap_c::agbFlashCheck() { daAgb_c* agb = dComIfGp_getAgb(); BOOL ret = false; if (agb) { ret = agb->FlashCheck(); } return ret; } /* 800496B0-800496D0 .text agbIsActive__6dMap_cFv */ BOOL dMap_c::agbIsActive() { daAgb_c* agb = dComIfGp_getAgb(); BOOL ret = false; if (agb) { ret = agb->isActive(); } return ret; } /* 800496D0-80049B1C .text isInDspArea__6dMap_cFffb */ BOOL dMap_c::isInDspArea(f32 param_1, f32 param_2, bool param_3) { BOOL ret = false; if (mNowRoomInfoP) { if (param_3) { if (mNowRoomInfoP->getEnableFlg() & 1) { if (param_1 >= getMapInfo_map1_X0(mNowRoomInfoP->getStageMapInfoP()) && param_1 <= getMapInfo_map1_X1(mNowRoomInfoP->getStageMapInfoP())) { if (param_2 >= getMapInfo_map1_Z0(mNowRoomInfoP->getStageMapInfoP()) && param_2 <= getMapInfo_map1_Z1(mNowRoomInfoP->getStageMapInfoP())) { ret = true; } } } } else { if (mNowRoomInfoP->getEnableFlg() & 2) { if (param_1 >= mNowRoomInfoP->getStageMapInfoP()->field_0x00 && param_1 <= mNowRoomInfoP->getStageMapInfoP()->field_0x08) { if (param_2 >= mNowRoomInfoP->getStageMapInfoP()->field_0x04 && param_2 <= mNowRoomInfoP->getStageMapInfoP()->field_0x0C) { ret = true; } } } } } return ret; } /* 80049B1C-80049B64 .text mapAGBSendStatInit__6dMap_cFv */ void dMap_c::mapAGBSendStatInit() { mAGBMapSendStopFlg = false; memset(mAgbSendNowStageName, 0, sizeof(mAgbSendNowStageName)); mAgbSendNowRoomNo = -1; mAgbSendNowDspFloorNo = -1; mAgbSendNowAgbMapType = 0xff; } /* 80049B64-80049F4C .text mapAGBSendMapMain__6dMap_cFff */ void dMap_c::mapAGBSendMapMain(f32 param_1, f32 param_2) { /* Nonmatching */ if (getKindMapType() == 1) { if (mPlayerStayAgbMapTypeNow == 2) { if (mPlayerStayAgbMapTypeOld != 2) { agbMapNoSetCall(); #if VERSION > VERSION_DEMO mAGBMapSendStatus = 0; #endif } } else if (mPlayerStayAgbMapTypeNow == 3) { if (mPlayerStayAgbMapTypeOld != 3) { agbMapNoSetCall(); mAGBMapSendStatus = 0; } } } if (!mDoGaC_GbaLink()) { mAGBMapSendStatus = 0; #if VERSION > VERSION_DEMO mPlayerStayAgbMapTypeOld = 0xff; #endif } else { #if VERSION > VERSION_DEMO if (mPlayerStayAgbMapTypeNow != mPlayerStayAgbMapTypeOld) { mPlayerStayAgbMapTypeOld = mPlayerStayAgbMapTypeNow; } #endif if (mAGBMapSendStatus > 2 && mAGBMapSendStopFlg) { mAGBMapSendStatus = 0; } if (mAGBMapSendStatus == 0 && mDoGaC_getReConnect()) { agbMapNoSetCall(); mAGBMapSendStatus = 0; mapAGBSendStatInit(); } if (agbIsMsgSend()) { if ((!mNowRoomInfoP || (mNowRoomInfoP->getEnableFlg() & DSP_ENABLE_BOTH_SIZE) != DSP_ENABLE_BOTH_SIZE) && getKindMapType() != 1) { mAGBMapSendStatus = 0; } else { switch (mAGBMapSendStatus) { case 0: if (!mDoGac_SendEndCheck(2)) { if (mPlayerStayAgbMapTypeNow == 1 || mPlayerStayAgbMapTypeNow == 3) { if ( !strcmp(mAgbSendNowStageName, dComIfGp_getStartStageName()) && mAgbSendNowRoomNo == mNowRoomInfoP->getRoomNo() && mAgbSendNowDspFloorNo == mNowRoomInfoP->field_0xc && mAgbSendNowAgbMapType == mPlayerStayAgbMapTypeNow ) { mAGBMapSendStatus = 3; } else { mAGBMapSendStatus = 0; } } else { mAGBMapSendStatus = 0; } } else { static const u8 data[] = {0, 1, 0, 0}; if (mDoGac_SendStatusCheck(1) && mDoGac_SendDataSet((u32*)data, 4, 1, 0)) { mAGBMapSendStatus = 1; } } break; case 1: if (mDoGac_SendEndCheck(2)) { if (mPlayerStayAgbMapTypeNow == 2) { mAGBMapSendStatus = 4; } else if (mAGBMapSendStopFlg == 0) { mAGBMapSendStatus = 2; } } break; case 2: JUT_ASSERT(VERSION_SELECT(5274, 5051, 5051, 5051), mNowRoomInfoP != NULL); JUT_ASSERT(VERSION_SELECT(5275, 5052, 5052, 5052), (mNowRoomInfoP->getEnableFlg() & DSP_ENABLE_BOTH_SIZE) == DSP_ENABLE_BOTH_SIZE); if (mDoGac_SendStatusCheck(2)) { memcpy(mAgbSendNowStageName, dComIfGp_getStartStageName(), sizeof(mAgbSendNowStageName)); mAgbSendNowRoomNo = mNowRoomInfoP->getRoomNo(); mAgbSendNowDspFloorNo = mNowRoomInfoP->field_0xc; mAgbSendNowAgbMapType = mPlayerStayAgbMapTypeNow; agbMapNoSetCall(); if (mDoGac_SendDataSet((u32*)mNowRoomInfoP->field_0x8c.field_0x4, mNowRoomInfoP->field_0x8c.field_0x38, 2, 0)) { mAGBMapSendStatus = 3; agbResetCursor(); } } break; case 3: #if VERSION == VERSION_DEMO if (mDoGaC_getDataStatus(2) == 0 || mDoGaC_getDataStatus(2) == 4) #else if (mDoGac_SendEndCheck(2)) #endif { mAGBMapSendStatus = 4; memset(mAgbSendNowStageName, 0, sizeof(mAgbSendNowStageName)); mAgbSendNowRoomNo = -1; mAgbSendNowDspFloorNo = -1; mAgbSendNowAgbMapType = 0xff; } break; case 4: break; } } } } } /* 80049F4C-8004A3A4 .text calcEnlargementSizeParameter__6dMap_cFff */ void dMap_c::calcEnlargementSizeParameter(f32 param_1, f32 param_2) { /* Nonmatching */ if (isEnableEnlargementScroll() && mNowRoomInfoP->getEnableFlg() & 2) { f32 f28 = std::fabsf(mNowRoomInfoP->getStageMapInfoP()->field_0x08 - mNowRoomInfoP->getStageMapInfoP()->field_0x10) * 0.9f; f32 f27 = std::fabsf(mNowRoomInfoP->getStageMapInfoP()->field_0x0C - mNowRoomInfoP->getStageMapInfoP()->field_0x14) * 0.9f; f32 f29 = param_1 - mNowRoomInfoP->getStageMapInfoP()->field_0x10; f32 var2 = param_2 - mNowRoomInfoP->getStageMapInfoP()->field_0x14; f32 f31 = f29 >= 0.0f ? 1.0f : -1.0f; f32 f30 = var2 >= 0.0f ? 1.0f : -1.0f; if (std::fabsf(f29) > f28) { f28 = (std::fabsf(f29) - f28) * 2.0f; if (f28 > std::fabsf(f29)) { f28 = std::fabsf(f29); } } else { f28 = 0.0f; } if (std::fabsf(var2) > f27) { f27 = (std::fabsf(var2) - f27) * 2.0f; if (f27 > std::fabsf(var2)) { f27 = std::fabsf(var2); } } else { f27 = 0.0f; } if (0.0f != f28 || 0.0f != f27) { if (f28 > f27) { f27 = (f28 * std::fabsf(var2)) / std::fabsf(f29); } else { f28 = (f27 * std::fabsf(f29)) / std::fabsf(var2); } } mEnlargementSizeCenterX = f31 * f28 + mNowRoomInfoP->getStageMapInfoP()->field_0x10; mEnlargementSizeCenterZ = f30 * f27 + mNowRoomInfoP->getStageMapInfoP()->field_0x14; mEnlargementSizeScaleX = mNowRoomInfoP->field_0x18; mEnlargementSizeScaleZ = mNowRoomInfoP->field_0x1c; } } /* 8004A3A4-8004A478 .text calcScissor__6dMap_cFv */ void dMap_c::calcScissor() { int x = (mDispPosLeftUpX - -9.0f) * 640.0f / 659.0f; int y = (mDispPosLeftUpY - -21.0f) * 480.0f / 524.0f; int width = 116; int height = 109; if (x < 0) { width += x; if (width < 0) { width = 0; } x = 0; } if (y < 0) { height += y; if (height < 0) { height = 0; } y = 0; } mScissorOrigX = x; mScissorOrigY = y; mScissorWidth = width; mScissorHeight = height; } /* 8004A478-8004A6E8 .text mapMoveAll__6dMap_cFffif */ void dMap_c::mapMoveAll(f32 param_1, f32 param_2, int param_3, f32 param_4) { /* Nonmatching */ setPlayerStayAgbMapTypeNow(param_1, param_2); u32 stageType = dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()); if (stageType != dStageType_FF1_e && stageType != dStageType_SEA_e && param_3 >= 0 && param_3 < 64) { dComIfGs_onVisitedRoom(param_3); } if (param_3 != -1 && !mNowRoomInfoP) { setNowRoom(param_3); } if (mNowRoomInfoP) { u8 tmp = dMap_GetFloorNo_WithRoom(param_3, param_4); if (mNowRoomInfoP && tmp != mNowFloorNo) { u8 r30 = mNowRoomInfoP->field_0xc; mNowFloorNo = tmp; mRoomInfoCtrl.checkFloorMoveImageChangeRoom(tmp, tmp, param_3, 120, 120, param_4); if (r30 != mNowRoomInfoP->field_0xc) { mAGBMapSendStatus = 0; mAGBMapSendStopFlg = false; } } if (param_3 != -1 && param_3 != mNowRoomInfoP->getRoomNo()) { setNowRoom(param_3); } if (mNowRoomInfoP) { calcEnlargementSizeParameter(param_1, param_2); mapAGBSendMapMain(param_1, param_2); if (mMapDispMode == 1) { if (mNowRoomInfoP->getEnableFlg() & 2) { mNowCenterX = mEnlargementSizeCenterX; mNowCenterZ = mEnlargementSizeCenterZ; mNowScaleX = mEnlargementSizeScaleX; mNowScaleZ = mEnlargementSizeScaleZ; } } else if (mNowRoomInfoP->getEnableFlg() & 1) { mNowCenterX = param_1; mNowCenterZ = param_2; mNowScaleX = mNowRoomInfoP->field_0x20; mNowScaleZ = mNowRoomInfoP->field_0x24; } calcScissor(); if (mNowRoomInfoP->mStageMapInfoP) { mCompAlpha = ((u8)mNowRoomInfoP->mStageMapInfoP->field_0x34 * mAlpha) >> 8; } else { mCompAlpha = 0; } #if VERSION > VERSION_DEMO cXyz& restartPos = dComIfGs_getRestartRoomPos(); setCollectPoint( 20, 9, restartPos.x, restartPos.y, restartPos.z, dComIfGs_getRestartRoomNo(), dComIfGs_getRestartRoomAngleY(), 0, 0, 0, 0 ); #endif } } } /* 8004A6E8-8004A760 .text mapDrawAll__6dMap_cFffif */ void dMap_c::mapDrawAll(f32 param_1, f32 param_2, int param_3, f32 param_4) { if (mNowRoomInfoP && mNowRoomInfoP->getEnableFlg() == DSP_ENABLE_BOTH_SIZE && mDispPosLeftUpX < 650) { if (mMapDispMode == 1) { mapDrawEnlargementSize(mEnlargementSizeCenterX, mEnlargementSizeCenterZ, mEnlargementSizeScaleX, mEnlargementSizeScaleZ, mCompAlpha); } else { mapDrawRealSize(param_1, param_2, mCompAlpha); } mapDrawFrame(mCompAlpha); } } /* 8004A760-8004A7B4 .text mapDrawIcon__6dMap_cFv */ void dMap_c::mapDrawIcon() { if (mIconDispMode == dMapIconDisp_SELF_e) { mapDrawIconSelf(mIconFreePosX, mIconFreePosY, mIconSelfAlpha); } else if (mIconDispMode == dMapIconDisp_FREE_e) { mapDrawIconFree(mIconFreePosX, mIconFreePosY, mIconFreeAlpha); } } /* 8004A7B4-8004A82C .text draw__6dMap_cFffif */ void dMap_c::draw(f32 param_1, f32 param_2, int param_3, f32 param_4) { if (param_3 >= 0) { mapMoveAll(param_1, param_2, param_3, param_4); if (g_HIO.field_0x09) { mapDrawAll(param_1, param_2, param_3, param_4); mapDrawIcon(); } } } /* 8004A82C-8004A97C .text point2Grid__6dMap_cFffPScPSc */ void dMap_c::point2Grid(f32 param_1, f32 param_2, s8* i_gridX_p, s8* i_gridY_p) { JUT_ASSERT(VERSION_SELECT(6130, 5751, 5751, 5751), i_gridX_p != NULL); JUT_ASSERT(VERSION_SELECT(6131, 5752, 5752, 5752), i_gridY_p != NULL); s8 x = floor(param_1 / 100000.0f + 0.5f); if (x < -3) { x = -3; } if (x > 3) { x = 3; } *i_gridX_p = x; s8 y = floor(param_2 / 100000.0f + 0.5f); if (y < -3) { y = -3; } if (y > 3) { y = 3; } *i_gridY_p = y; } /* 8004A97C-8004ABB0 .text point2GridAndLocal__6dMap_cFffPScPScPsPs */ void dMap_c::point2GridAndLocal(f32 param_1, f32 param_2, s8* i_gridX_p, s8* i_gridY_p, s16* i_localX_p, s16* i_localY_p) { JUT_ASSERT(VERSION_SELECT(6182, 5803, 5803, 5803), i_gridX_p != NULL); JUT_ASSERT(VERSION_SELECT(6183, 5804, 5804, 5804), i_gridY_p != NULL); JUT_ASSERT(VERSION_SELECT(6184, 5805, 5805, 5805), i_localX_p != NULL); JUT_ASSERT(VERSION_SELECT(6185, 5806, 5806, 5806), i_localY_p != NULL); s8 x = floor(param_1 / 100000.0f + 0.5f); s8 y = floor(param_2 / 100000.0f + 0.5f); if (x < -3) { x = -3; } if (x > 3) { x = 3; } if (y < -3) { y = -3; } if (y > 3) { y = 3; } *i_gridX_p = x; *i_gridY_p = y; *i_localX_p = param_1 - x * 100000.0f; *i_localY_p = param_2 - y * 100000.0f; } /* 8004ABB0-8004AC44 .text getCheckPointUseGrid__6dMap_cFScSc */ int dMap_c::getCheckPointUseGrid(s8 i_x, s8 i_y) { FmapChkPnt* pChkPnt = getFmapChkPntDtPnt(0); int i; int ret = -1; for (i = 0; i < mFmapChkPntValue; i++, pChkPnt++) { if (i_x == pChkPnt->mSectorX && i_y == pChkPnt->mSectorY) { ret = i; break; } } return ret; } /* 8004AC44-8004ACD8 .text getFmapChkPntPrm__6dMap_cFiPScPScPsPsPUc */ void dMap_c::getFmapChkPntPrm(int, s8*, s8*, s16*, s16*, u8*) { /* Nonmatching */ } /* 8004ACD8-8004AD00 .text setFmapChkDtPrm__6dMap_cFv */ void dMap_c::setFmapChkDtPrm() { dMap_FmapChkPnt* ptr = (dMap_FmapChkPnt*)dComIfGp_getFmapData(); if (!ptr) { return; } mFmapChkPntValue = ptr->field_0x0; mFmapChkPntData_p = ptr->field_0x4; } /* 8004AD00-8004ADC8 .text getFmapChkPntDtPnt__6dMap_cFi */ FmapChkPnt* dMap_c::getFmapChkPntDtPnt(int i_param) { JUT_ASSERT(VERSION_SELECT(6454, 6075, 6075, 6075), mFmapChkPntData_p != NULL); FmapChkPnt* ret = NULL; if (i_param >= 0 && i_param <= mFmapChkPntValue) { ret = &mFmapChkPntData_p[i_param]; } else { JUT_ASSERT(VERSION_SELECT(6461, 6082, 6082, 6082), 0) }; return ret; } /* 8004ADC8-8004AE28 .text initPoint__6dMap_cFv */ void dMap_c::initPoint() { mDrawPointCntPlayer = 0; mDrawPointCntEnemy = 0; mDrawPointCntAgbCursor = 0; mTboxNum = 0; mDoorNum = 0; mAGBPointValueC = 0; mAGBPointValueE = 0; mAGBPointValueAll = 0; mAGBPointValueRoomAll = 0; mPointFriendNum = 0; mDrawPointCntShip = 0; mSetCursorFlg = 0; mDrawPointRestartCnt = 0; mCollectPointDataCnt = 0; for (int i = 0; i < ARRAY_SIZE(mCollectPointDataLinkList); i++) { mCollectPointDataLinkList[i] = -1; } } /* 8004AE28-8004B148 .text setGbaPoint_ocean__6dMap_cFUcffsUcUcUcUc */ void dMap_c::setGbaPoint_ocean(u8, f32, f32, s16, u8, u8, u8, u8) { /* Nonmatching */ } /* 8004B148-8004B1D0 .text isPointStayInDspNowRoomAgbScr__6dMap_cFss */ BOOL dMap_c::isPointStayInDspNowRoomAgbScr(s16 param_1, s16 param_2) { /* Nonmatching */ BOOL ret = true; if (param_1 < -8 || param_1 > mNowRoomInfoP->field_0x28 + 8.0f || param_2 < -8 || param_2 > mNowRoomInfoP->field_0x2c + 8.0f) { ret = false; } return ret; } /* 8004B1D0-8004B33C .text setCollectPoint__6dMap_cFUcUcfffScsUcUcUcUc */ void dMap_c::setCollectPoint(u8 param_1, u8 param_2, f32 param_3, f32 param_4, f32 param_5, s8 param_6, s16 param_7, u8 param_8, u8 param_9, u8 param_10, u8 param_11) { if (mCollectPointDataCnt >= 64) { return; } if (getKindMapType() != 1 && param_1 != 1 && param_1 != 3 && param_6 != -1 && (!mNowRoomInfoP || param_6 != mNowRoomInfoP->getRoomNo())) { return; } int typeNo = param_1 - 1; #if VERSION > VERSION_DEMO JUT_ASSERT(VERSION_SELECT(6441, 6441, 6441, 6441), (typeNo >= 0) && (typeNo < AGB_POINT_TYPE_NUM)); #endif s8 var1 = mCollectPointDataLinkList[typeNo]; mCollectPointDataLinkList[typeNo] = mCollectPointDataCnt; dMap_CollectPoint* point = &mCollectPointData[mCollectPointDataCnt]; point->field_0x0 = param_3; point->field_0x4 = param_4; point->field_0x8 = param_5; point->field_0xc = param_7; point->field_0xf = param_1; point->field_0x10 = param_2; point->field_0xe = param_6; point->field_0x11 = param_8; point->field_0x12 = param_9; point->field_0x13 = param_10; point->field_0x14 = param_11; point->field_0x16 = var1; mCollectPointDataCnt++; } /* 8004B33C-8004B814 .text setGbaPoint_dungeon__6dMap_cFUcffsUcUcUcUc */ void dMap_c::setGbaPoint_dungeon(u8, f32, f32, s16, u8, u8, u8, u8) { /* Nonmatching */ } /* 8004B814-8004B8A0 .text getPosAgbMapType__6dMap_cFffb */ u8 dMap_c::getPosAgbMapType(f32 param_1, f32 param_2, bool param_3) { /* Nonmatching */ if (getKindMapType() == 1) { if (isInDspArea(param_1, param_2, param_3)) { return 3; } else { return 2; } } else if (getKindMapType() == 2) { return 1; } else { return 0; } } /* 8004B8A0-8004B8DC .text setGbaPoint__6dMap_cFUcffsUcUcUcUc */ void dMap_c::setGbaPoint(u8 param_1, f32 param_2, f32 param_3, s16 param_4, u8 param_5, u8 param_6, u8 param_7, u8 param_8) { if (mPlayerStayAgbMapTypeNow) { if (mPlayerStayAgbMapTypeNow == 2) { setGbaPoint_ocean(param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8); } else { setGbaPoint_dungeon(param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8); } } } /* 8004B8DC-8004B9C8 .text setArriveInfo__6dMap_cFff */ void dMap_c::setArriveInfo(f32 param_1, f32 param_2) { if (!dComIfGp_event_runCheck() && strcmp(dComIfGp_getStartStageName(), "sea") == 0) { s8 gridX; s8 gridY; s16 localX; s16 localY; point2GridAndLocal(param_1, param_2, &gridX, &gridY, &localX, &localY); if (mPlGridX != gridX || mPlGridY != gridY) { mPlGridX = gridX; mPlGridY = gridY; if (gridX >= -3 && gridX <= 3 && gridY >= -3 && gridY <= 3) { onSaveArriveGridForAgbUseGridPos(gridX, gridY); } agbMapNoSetCall(); } } } /* 8004B9C8-8004BA64 .text drawPointPlayer__6dMap_cFffs */ void dMap_c::drawPointPlayer(f32 i_posX, f32 i_posY, s16 i_angle) { mCursor.setPos(i_posX, i_posY); mCursor.setScaleX(6.6000004f); mCursor.setScaleY(11.0f); mCursor.setAngle(i_angle); mCursor.setAlpha(mAlpha); mCursor.setScissor(mScissorOrigX, mScissorOrigY, mScissorWidth, mScissorHeight); mDrawPointCntPlayer++; } /* 8004BA64-8004BB0C .text drawPointEnemy__6dMap_cFff */ void dMap_c::drawPointEnemy(f32 param_1, f32 param_2) { if (mDrawPointCntEnemy >= ARRAY_SIZE(mPoint)) { return; } GXColor color = {255, 0, 0, 255}; color.a = mAlpha; mPoint[mDrawPointCntEnemy].init(param_1, param_2, color, 24); mPoint[mDrawPointCntEnemy].setScissor(mScissorOrigX, mScissorOrigY, mScissorWidth, mScissorHeight); mDrawPointCntEnemy++; } /* 8004BB0C-8004BC94 .text drawPointAgbCursor__6dMap_cFff */ void dMap_c::drawPointAgbCursor(f32 param_1, f32 param_2) { /* Nonmatching */ GXColor color; if (agbFlashCheck()) { mMapAGBCursorFlashFrmCnt++; mMapAGBCursorFlashFrmCnt = mMapAGBCursorFlashFrmCnt % 45; f32 tmp = JMASSin(mMapAGBCursorFlashFrmCnt / 45.0f * 0x8000) * JMASSin(mMapAGBCursorFlashFrmCnt / 45.0f * 0x8000); color.r = 0; color.g = tmp * 175.0f + 80.0f; color.b = 0; } else { color.r = 0; color.g = 80; color.b = 0; mMapAGBCursorFlashFrmCnt = 0; } color.a = mAlpha; f32 tmp = 105.600006f; mAgbCursor.init(param_1, param_2, color, tmp); mAgbCursor.setScissor(mScissorOrigX, mScissorOrigY, mScissorWidth, mScissorHeight); mDrawPointCntAgbCursor++; } /* 8004BC94-8004BD84 .text drawPointTbox__6dMap_cFffff */ void dMap_c::drawPointTbox(f32 param_1, f32 param_2, f32 param_3, f32 param_4) { if (mTboxNum >= ARRAY_SIZE(mTbox)) { return; } GXColor local_c; local_c.r = 255; local_c.g = 255; local_c.b = 0; GXColor local_10; local_10.r = 0; local_10.g = 0; local_10.b = 0; local_c.a = mAlpha; mTbox[mTboxNum].setPos(param_1, param_2); mTbox[mTboxNum].setColorW(local_c); mTbox[mTboxNum].setColorB(local_10); mTbox[mTboxNum].setWide(param_3 * 8.0f); mTbox[mTboxNum].setHeight(param_4 * 8.0f); mTbox[mTboxNum].setScaleX(1.0f); mTbox[mTboxNum].setScaleY(1.0f); mTbox[mTboxNum].setScissor(mScissorOrigX, mScissorOrigY, mScissorWidth, mScissorHeight); mTboxNum++; } /* 8004BD84-8004BE7C .text drawPointDoor__6dMap_cFffffsUc */ void dMap_c::drawPointDoor(f32 param_1, f32 param_2, f32 param_3, f32 param_4, s16 param_5, u8 param_6) { if (mDoorNum >= ARRAY_SIZE(mDoor)) { return; } GXColor local_c = {255, 255, 255, 255}; GXColor local_10 = {0, 0, 0, 255}; local_c.r = 168; local_c.g = 168; local_c.b = 168; local_10.r = 0; local_10.g = 0; local_10.b = 0; local_c.a = param_6; mDoor[mDoorNum].setPos(param_1, param_2); mDoor[mDoorNum].setColorW(local_c); mDoor[mDoorNum].setColorB(local_10); mDoor[mDoorNum].setWide(param_3 * 8.0f); mDoor[mDoorNum].setHeight(param_4 * 8.0f); mDoor[mDoorNum].setRotZ(-param_5); mDoor[mDoorNum].setScissor(mScissorOrigX, mScissorOrigY, mScissorWidth, mScissorHeight); mDoorNum++; } /* 8004BE7C-8004BF78 .text drawPointRestart__6dMap_cFffsff */ void dMap_c::drawPointRestart(f32 param_1, f32 param_2, s16 param_3, f32 param_4, f32 param_5) { GXColor color; color.r = 119; color.g = 255; color.b = 255; mPointRestart.init(0, 0, color, param_4 * 6.0f, param_5 * 10.0f, 0); mPointRestart.setPos(param_1, param_2); mPointRestart.setAngle(param_3); mPointRestart.setAlpha((mAlpha * 255) >> 8); mPointRestart.setScissor(mScissorOrigX, mScissorOrigY, mScissorWidth, mScissorHeight); mDrawPointRestartCnt++; } /* 8004BF78-8004C044 .text drawPointFriend__6dMap_cFfff */ void dMap_c::drawPointFriend(f32 param_1, f32 param_2, f32 param_3) { if (mPointFriendNum >= 3) { return; } GXColor color; color.r = 255; color.g = 0; color.b = 255; color.a = mAlpha; mPointFriend[mPointFriendNum].init(param_1, param_2, color, u8(param_3 * 4.0f) * 6); mPointFriend[mPointFriendNum].setScissor(mScissorOrigX, mScissorOrigY, mScissorWidth, mScissorHeight); mPointFriendNum++; } /* 8004C044-8004C144 .text drawPointShip__6dMap_cFffsff */ void dMap_c::drawPointShip(f32 param_1, f32 param_2, s16 param_3, f32 param_4, f32 param_5) { GXColor local_c = {255, 255, 255, 255}; GXColor local_10 = {}; local_c.r = 255; local_c.g = 70; local_c.b = 0; local_10.r = 0; local_10.g = 0; local_10.b = 0; local_c.a = mAlpha; mShip.setPos(param_1, param_2); mShip.setColorW(local_c); mShip.setColorB(local_10); mShip.setWide(param_4 * 8.0f); mShip.setHeight(param_5 * 16.0f); mShip.setScaleX(1.0f); mShip.setScaleY(1.0f); mShip.setRotZ(-param_3); mShip.setScissor(mScissorOrigX, mScissorOrigY, mScissorWidth, mScissorHeight); mDrawPointCntShip++; } /* 8004C144-8004CC7C .text drawPointGc__6dMap_cFUcfffScsUcUcUcUc */ void dMap_c::drawPointGc(u8 kind, f32 posX, f32 posY, f32 posZ, s8 roomNo, s16 angle, u8 param_7, u8 gbaName, u8 param_9, u8 gcName) { if (kind == MAP_POINT_NONE) return; if (mNowRoomInfoP == NULL || mNowRoomInfoP->getEnableFlg() == 0) { return; } if (roomNo != -1 && roomNo != mNowRoomInfoP->getRoomNo()){ return; } u8 floorNo = dMap_GetFloorNo_WithRoom(roomNo, posY); if (kind != MAP_POINT_PLAYER && kind != MAP_POINT_AGB_CURSOR && (IsFloorNo(floorNo) == 0 || IsFloorNo(mNowFloorNo) == 0 || mNowFloorNo != floorNo)) { return; } if (mMapDispMode == MAP_DISP_MINI && kind != MAP_POINT_PLAYER && kind != MAP_POINT_AGB_CURSOR && kind != MAP_POINT_TBOX && kind != MAP_POINT_DOOR && kind != MAP_POINT_RESTART && kind != MAP_POINT_SHIP && kind != MAP_POINT_FRIEND) return; s16 dispX = mNowScaleX * (posX - mNowCenterX); s16 dispY = mNowScaleZ * (posZ - mNowCenterZ); u8 size; if (kind == MAP_POINT_AGB_CURSOR) { size = 0x10; } else { size = 4; } u8 halfSize = size / 2; if ((s16)dispX + halfSize >= -MAP_VIEW_HALF && dispX - halfSize <= MAP_VIEW_HALF && dispY + halfSize >= -MAP_VIEW_HALF && dispY - halfSize <= MAP_VIEW_HALF) { dispX += (s16)(mDispPosLeftUpX + MAP_VIEW_CENTER); dispY += (s16)(mDispPosLeftUpY + MAP_VIEW_CENTER); switch (kind) { case MAP_POINT_PLAYER: drawPointPlayer(dispX, dispY, angle); break; case MAP_POINT_ENEMY: if (getKindMapType() == MAP_KIND_DUNGEON && dComIfGs_isDungeonItemCompass()) { drawPointEnemy(dispX, dispY); } break; case MAP_POINT_ENEMY_ID: if (getKindMapType() == MAP_KIND_UNK) { if (gcName == 0x18) { drawPointEnemy(dispX, dispY); } } else if (getKindMapType() == MAP_KIND_DUNGEON) { if (gcName == 0x17) { if (dComIfGs_isDungeonItemCompass()) { drawPointEnemy(dispX, dispY); } } else { drawPointEnemy(dispX, dispY); } } break; case MAP_POINT_SHIP: if (getKindMapType() == MAP_KIND_DUNGEON) { if (mMapDispMode == MAP_DISP_FULL) { drawPointShip(dispX, dispY, angle, 1.1f, 1.3f); } else { drawPointShip(dispX, dispY, angle, 1.0f, 1.0f); } } else if (getKindMapType() == MAP_KIND_UNK) { if (mMapDispMode == MAP_DISP_FULL) { drawPointShip(dispX, dispY, angle, 1.1f, 1.3f); } else { drawPointShip(dispX, dispY, angle, 1.0f, 1.0f); } } break; case MAP_POINT_AGB_CURSOR: if (param_7 == 0) { drawPointAgbCursor(dispX, dispY); } break; case MAP_POINT_TBOX: if (param_7 != 0xF && param_7 != 0x10) { if (getKindMapType() == MAP_KIND_DUNGEON) { if (dComIfGs_isDungeonItemCompass()) { if (mMapDispMode == MAP_DISP_FULL) { drawPointTbox(dispX, dispY, 2.5f, 2.0f); } else { drawPointTbox(dispX, dispY, 2.0f, 1.5f); } } } else if (getKindMapType() == MAP_KIND_UNK && mMapDispMode == MAP_DISP_FULL) { drawPointTbox(dispX, dispY, 2.5f, 2.0f); } } break; case MAP_POINT_DOOR: if (getKindMapType() == MAP_KIND_DUNGEON) { if (mMapDispMode == MAP_DISP_FULL) { drawPointDoor(dispX, dispY, 4.0f, 1.5f, angle, mCompAlpha); } else { drawPointDoor(dispX, dispY, 1.75f, 0.75f, angle, mAlpha); } } else if (getKindMapType() == MAP_KIND_UNK) { if (mNowRoomInfoP->getRoomNo() == 1) { if (mMapDispMode == MAP_DISP_FULL) { drawPointDoor(dispX, dispY, 4.0f, 1.5f, angle, mCompAlpha); } else { drawPointDoor(dispX, dispY, 1.75f, 0.75f, angle, mAlpha); } } else if (mMapDispMode == MAP_DISP_FULL) { drawPointDoor(dispX, dispY, 2.5f, 1.0f, angle, mAlpha); } } break; case MAP_POINT_RESTART: if (getKindMapType() == MAP_KIND_DUNGEON) { if (mMapDispMode == MAP_DISP_FULL) { drawPointRestart(dispX, dispY, angle, 1.0f, 1.2f); } else { drawPointRestart(dispX, dispY, angle, 1.0f, 1.2f); } } else if (getKindMapType() == MAP_KIND_UNK) { if (mMapDispMode == MAP_DISP_FULL) { drawPointRestart(dispX, dispY, angle, 1.0f, 1.2f); } else { drawPointRestart(dispX, dispY, angle, 0.8f, 1.0f); } } break; case MAP_POINT_FRIEND: if (getKindMapType() == MAP_KIND_DUNGEON) { if (dComIfGs_isDungeonItemCompass()) { if (mMapDispMode == MAP_DISP_FULL) { drawPointFriend(dispX, dispY, 2.0f); } else { drawPointFriend(dispX, dispY, 1.8f); } } } else if (getKindMapType() == MAP_KIND_UNK) { if (mMapDispMode == MAP_DISP_FULL) { drawPointFriend(dispX, dispY, 2.2f); } else { drawPointFriend(dispX, dispY, 2.0f); } } break; } } } /* 8004CC7C-8004CD68 .text drawPointMain__6dMap_cFUcUcfffScsUcUcUcUc */ void dMap_c::drawPointMain(u8 pointType,u8 param_2, f32 posX,f32 posY, f32 posZ,s8 param_6,s16 param_7,u8 param_8,u8 mGbaName,u8 param_10,u8 param_11) { if (mDoGaC_GbaLink() != 0 && mDoGac_SendStatusCheck(3) != 0) { drawPointAgb(pointType, posX, posY, posZ, param_6, param_7, param_8, mGbaName, param_10, param_11); } drawPointGc(param_2, posX, posY, posZ, param_6, param_7, param_8, mGbaName, param_10, param_11); } /* 8004CD68-8004CEF4 .text drawPointAgb__6dMap_cFUcfffScsUcUcUcUc */ void dMap_c::drawPointAgb(u8 pointType,f32 posX,f32 posY,f32 posZ,s8 param_5,s16 param_6,u8 param_7,u8 mGbaName,u8 param_9,u8 param_10){ mAGBPointValueRoomAll = mAGBPointValueRoomAll + 1; if (getKindMapType() == 1) { setGbaPoint(pointType,posX,posZ,param_6,param_7,mGbaName,param_9,param_10); return; } if (mNowRoomInfoP == 0 || mNowRoomInfoP->getEnableFlg() == 0){ return; } if (pointType != 1 && pointType != 3 && param_5 != -1 && param_5 != mNowRoomInfoP->getRoomNo()) { return; } u8 floorNum = dMap_GetFloorNo_WithRoom(param_5, posY); bool bVar1 = (int)pointType >= 7 && (int)pointType <= 0xb; if (!bVar1 && pointType != 1 && pointType != 3 && (IsFloorNo(floorNum) == 0 || IsFloorNo(mNowFloorNo) == 0 || mNowFloorNo != floorNum)) { return; } setGbaPoint(pointType,posX,posZ,param_6,param_7,mGbaName,param_9,param_10); } /* 8004CEF4-8004CFA4 .text getTypeAgbGcFromTypeAcs__6dMap_cFUcPUcPUc */ void dMap_c::getTypeAgbGcFromTypeAcs(u8 i_typeAcs, u8* param_2, u8* param_3) { const int ACS_MAP_POINT_TYPE_MAX = 25; const static u8 statusMapNo2TypeNoTbl[ACS_MAP_POINT_TYPE_MAX][2] = { 2, 3, 1, 1, 4, 5, 12, 0, 6, 0, 6, 0, 13, 0, 14, 0, 15, 0, 17, 7, 17, 7, 17, 7, 19, 8, 19, 8, 19, 8, 19, 8, 19, 8, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 3, 6, 4, 6, 4, }; JUT_ASSERT(VERSION_SELECT(8287, 7814, 7814, 7814), (i_typeAcs >= 0) && (i_typeAcs < ACS_MAP_POINT_TYPE_MAX)); if (param_2) { *param_2 = statusMapNo2TypeNoTbl[i_typeAcs][0]; } if (param_3) { *param_3 = statusMapNo2TypeNoTbl[i_typeAcs][1]; } } /* 8004CFA4-8004D0A4 .text drawPointSingle__6dMap_cFUcfffScsUcUcUc */ void dMap_c::drawPointSingle(u8 param_1, f32 param_2, f32 param_3, f32 param_4, s8 param_5, s16 param_6, u8 param_7, u8 param_8, u8 param_9) { static const s8 agbTbl[] = { -1, -1, 2, -1, 6, -1, 0, 0, 0, 0, 0, -1, -1, -1, -1, 0, -1, -1, -1, -1, 0, }; #if VERSION > VERSION_DEMO if (dComIfGp_roomControl_getStayNo() < 0 || !mNowRoomInfoP) { return; } #endif int tmp = param_1 - 1; if (tmp < 0 || tmp >= sizeof(agbTbl)) { #if VERSION > VERSION_DEMO JUT_ASSERT(VERSION_SELECT(7901, 7901, 7901, 7901), 0); #endif return; } int r4 = agbTbl[tmp]; if (r4 < 0) { #if VERSION > VERSION_DEMO JUT_ASSERT(VERSION_SELECT(7908, 7908, 7908, 7908), 0); #endif return; } setCollectPoint(param_1, r4, param_2, param_3, param_4, param_5, param_6, param_7, param_8, param_9, 0); } /* 8004D0A4-8004D260 .text drawActorPointMiniMap__6dMap_cFP10fopAc_ac_c */ void dMap_c::drawActorPointMiniMap(fopAc_ac_c*) { /* Nonmatching */ } /* 8004D260-8004D364 .text mapBufferSendAGB_commonCursor__6dMap_cFv */ void dMap_c::mapBufferSendAGB_commonCursor() { /* Nonmatching */ } /* 8004D364-8004D4CC .text mapBufferSendAGB_ocean__6dMap_cFv */ void dMap_c::mapBufferSendAGB_ocean() { /* Nonmatching */ } /* 8004D4CC-8004D4F8 .text mapBufferSendAGB_dungeon__6dMap_cFv */ void dMap_c::mapBufferSendAGB_dungeon() { /* Nonmatching */ } /* 8004D4F8-8004D5F8 .text mapSetPointAll__6dMap_cFv */ void dMap_c::mapSetPointAll() { static const s8 agbSetList[] = { 1, 3, 21, 2, 4, 19, 20, 7, 17, 18, 12, 8, 9, 10, 11, 16, 13, 5, 15, 14, 6 }; for (int i = 0; i < sizeof(agbSetList); i++) { s8 typeNo = agbSetList[i] - 1; #if VERSION > VERSION_DEMO JUT_ASSERT(VERSION_SELECT(8427, 8427, 8427, 8427), (typeNo >= 0) && (typeNo < AGB_POINT_TYPE_NUM)); #endif for (s8 j = mCollectPointDataLinkList[typeNo]; j >= 0; j = mCollectPointData[j].field_0x16) { drawPointMain( mCollectPointData[j].field_0xf, mCollectPointData[j].field_0x10, mCollectPointData[j].field_0x0, mCollectPointData[j].field_0x4, mCollectPointData[j].field_0x8, mCollectPointData[j].field_0xe, mCollectPointData[j].field_0xc, mCollectPointData[j].field_0x11, mCollectPointData[j].field_0x12, mCollectPointData[j].field_0x13, mCollectPointData[j].field_0x14 ); } } } /* 8004D5F8-8004D9BC .text mapBufferSendAGB__6dMap_cFi */ void dMap_c::mapBufferSendAGB(int) { /* Nonmatching */ } /* 8004D9BC-8004DA54 .text checkFloorMoveImageChangeRoom__19dMap_RoomInfoCtrl_cFUcUcissf */ void dMap_RoomInfoCtrl_c::checkFloorMoveImageChangeRoom(u8, u8, int, s16, s16, f32) { /* Nonmatching */ } /* 8004DA54-8004DBE0 .text init__22dMap_2DMtMapSpcl_tex_cFP7ResTIMGUlRC8_GXColor */ void dMap_2DMtMapSpcl_tex_c::init(ResTIMG* i_img, u32 param_2, const GXColor& param_3) { field_0x44 = param_2; if (i_img->indexTexture) { GXInitTlutObj(&mTlutObj, (u8*)i_img + i_img->paletteOffset, GXTlutFmt(i_img->colorFormat), i_img->numColors); GXInitTexObjCI(&mTexObj, (u8*)i_img + i_img->imageOffset, i_img->width, i_img->height, GXCITexFmt(i_img->format), GXTexWrapMode(i_img->wrapS), GXTexWrapMode(i_img->wrapT), i_img->mipmapCount > 1, param_2); field_0x1 = 1; } else { GXInitTexObj(&mTexObj, (u8*)i_img + i_img->imageOffset, i_img->width, i_img->height, GXTexFmt(i_img->format), GXTexWrapMode(i_img->wrapS), GXTexWrapMode(i_img->wrapT), i_img->mipmapCount > 1); field_0x1 = 0; } GXInitTexObjLOD(&mTexObj, GXTexFilter(i_img->minFilter), GXTexFilter(i_img->magFilter), i_img->minLOD * 0.125f, i_img->maxLOD * 0.125f, i_img->LODBias * 0.01f, i_img->biasClamp, i_img->doEdgeLOD, GXAnisotropy(i_img->maxAnisotropy)); mColor = param_3; field_0x0 = 1; } /* 8004DBE0-8004DBF4 .text setScroll__22dMap_2DMtMapSpcl_tex_cFffff */ void dMap_2DMtMapSpcl_tex_c::setScroll(f32 param_1, f32 param_2, f32 param_3, f32 param_4) { field_0x34 = param_1; field_0x38 = param_2; field_0x3c = param_3; field_0x40 = param_4; } /* 8004DBF4-8004DC08 .text init__18dMap_2DMtMapSpcl_cFiP22dMap_2DMtMapSpcl_tex_c */ void dMap_2DMtMapSpcl_c::init(int param_1, dMap_2DMtMapSpcl_tex_c* param_2) { field_0x5 = 0; field_0x4 = param_1; field_0x8 = param_2; } /* 8004DC08-8004DC1C .text setPos__18dMap_2DMtMapSpcl_cFssss */ void dMap_2DMtMapSpcl_c::setPos(s16 param_1, s16 param_2, s16 param_3, s16 param_4) { field_0xc = param_1; field_0xe = param_2; field_0x10 = param_3; field_0x12 = param_4; } /* 8004DC1C-8004E068 .text draw__18dMap_2DMtMapSpcl_cFv */ void dMap_2DMtMapSpcl_c::draw() { /* Nonmatching */ GXVtxAttrFmtList fmtList[GX_VA_MAX_ATTR + 1]; GXGetVtxAttrFmtv(GX_VTXFMT0, fmtList); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); dMap_2DMtMapSpcl_tex_c* r27 = field_0x8; int r28 = 0; int r30 = 0; for (int i = 0; i < field_0x4; r27++, i++) { if (r27->field_0x0 == 0) { continue; } if (r27->field_0x1) { GXLoadTlut(&r27->mTlutObj, r27->field_0x44); } GXLoadTexObj(&r27->mTexObj, GXTexMapID(r28)); GXSetVtxAttrFmt(GX_VTXFMT0, GXAttr(GX_VA_TEX0 + r28), GX_TEX_ST, GX_F32, 0); GXSetVtxDesc(GXAttr(GX_VA_TEX0 + r28), GX_DIRECT); GXSetTevColor(GXTevRegID(GX_TEVREG0 + r28), r27->mColor); GXSetTexCoordGen(GXTexCoordID(r28), GX_TG_MTX2x4, GXTexGenSrc(GX_TG_TEX0 + r28), GX_IDENTITY); GXSetTevOrder(GXTevStageID(r28), GXTexCoordID(r28), GXTexMapID(r28), GX_COLOR_NULL); GXSetTevColorIn(GXTevStageID(r28), GX_CC_ZERO, GXTevColorArg(GX_CC_C0 + r30), GX_CC_TEXC, r28 ? GX_CC_CPREV : GX_CC_ZERO); GXSetTevColorOp(GXTevStageID(r28), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GXTevStageID(r28), GX_CA_ZERO, GXTevAlphaArg(GX_CA_A0 + r28), GX_CA_TEXA, r28 ? GX_CA_APREV : GX_CA_ZERO); GXSetTevAlphaOp(GXTevStageID(r28), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); r28 += 1; r30 += 2; if (r28 >= 3) { break; } } if (r28 == 0) { return; } GXSetNumChans(0); GXSetNumTexGens(r28); GXSetNumTevStages(r28); switch (field_0x5) { case 0: GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET); break; case 1: GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET); GXSetDstAlpha(GX_ENABLE,0); GXSetAlphaUpdate(GX_ENABLE); case 2: GXSetBlendMode(GX_BM_BLEND, GX_BL_DST_ALPHA, GX_BL_INV_DST_ALPHA, GX_LO_SET); break; case 3: GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_ONE, GX_LO_SET); break; } GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_AND, GX_ALWAYS, 0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition3s16(field_0xc, field_0xe, 0); r27 = field_0x8; for (int i = 0; i < field_0x4; r27++, i++) { if (r27->field_0x0) { GXTexCoord2f32(r27->field_0x34, r27->field_0x38); } } GXPosition3s16(field_0x10, field_0xe, 0); r27 = field_0x8; for (int i = 0; i < field_0x4; r27++, i++) { if (r27->field_0x0) { GXTexCoord2f32(r27->field_0x34 + r27->field_0x3c, r27->field_0x38); } } GXPosition3s16(field_0x10, field_0x12, 0); r27 = field_0x8; for (int i = 0; i < field_0x4; r27++, i++) { if (r27->field_0x0) { GXTexCoord2f32(r27->field_0x34 + r27->field_0x3c, r27->field_0x38 + r27->field_0x40); } } GXPosition3s16(field_0xc, field_0x12, 0); r27 = field_0x8; for (int i = 0; i < field_0x4; r27++, i++) { if (r27->field_0x0) { GXTexCoord2f32(r27->field_0x34, r27->field_0x38 + r27->field_0x40); } } GXEnd(); GXSetDstAlpha(GX_DISABLE, 0); GXSetAlphaUpdate(GX_DISABLE); GXSetVtxAttrFmtv(GX_VTXFMT0, fmtList); } /* 8004E068-8004E1CC .text setImage__18dMap_2DAGBScrDsp_cFP7ResTIMGP8map_dt_c */ void dMap_2DAGBScrDsp_c::setImage(ResTIMG* i_img, map_dt_c* param_2) { field_0x4 = param_2; mImg = i_img; if (!field_0x4 || !mImg) { field_0x38 = 0; return; } GXInitTlutObj(&field_0x2c, (u8*)mImg + mImg->paletteOffset, GXTlutFmt(mImg->colorFormat), mImg->numColors); GXInitTexObjCI(&field_0xc, (u8*)mImg + mImg->imageOffset, mImg->width, mImg->height, GXCITexFmt(mImg->format), GXTexWrapMode(mImg->wrapS), GXTexWrapMode(mImg->wrapT), mImg->mipmapCount > 1 ? GX_TRUE : GX_FALSE, 0); GXInitTexObjLOD(&field_0xc, GX_NEAR, GX_NEAR, mImg->minLOD * 0.125f, mImg->maxLOD * 0.125f, mImg->LODBias * 0.01f, mImg->biasClamp, mImg->doEdgeLOD, GXAnisotropy(mImg->maxAnisotropy)); field_0x38 = 0x3c + mDoLib_cnvind32(field_0x4->field_0xc) + mDoLib_cnvind32(field_0x4->field_0x38); } /* 8004E1CC-8004E264 .text init__18dMap_2DAGBScrDsp_cFP8map_dt_cP7ResTIMGffssssffUc */ void dMap_2DAGBScrDsp_c::init(map_dt_c* param_1, ResTIMG* param_2, f32 param_3, f32 param_4, s16 param_5, s16 param_6, s16 param_7, s16 param_8, f32 param_9, f32 param_10, u8 param_11) { setImage(param_2, param_1); field_0x44 = param_3; field_0x48 = param_4; field_0x3c = param_5; field_0x3e = param_6; field_0x40 = param_7; field_0x42 = param_8; mScaleX = param_9; mScaleY = param_10; mAlpha = param_11; } /* 8004E264-8004E384 .text getScrnPrm__18dMap_2DAGBScrDsp_cFffifPiPfPf */ void dMap_2DAGBScrDsp_c::getScrnPrm(f32 param_1, f32 param_2, int param_3, f32 param_4, int* param_5, f32* param_6, f32* param_7) { /* Nonmatching */ if (param_4 != 0.0) { f32 f30 = param_3; f32 f31 = param_1 + param_2 * (1.0f / param_4); int tmp1 = floor(f31 / f30); if (param_5) { *param_5 = tmp1; } f32 tmp2 = fmod(f31, f30); tmp2 = fmod(f30 + tmp2, f30); if (param_6) { *param_6 = tmp2; } if (param_7) { *param_7 = tmp2 / f30; } } else { if (param_5) { *param_5 = 0; } if (param_6) { *param_6 = 0.0f; } if (param_7) { *param_7 = 0.0f; } } } /* 8004E384-8004E41C .text getScrnPrmXY__18dMap_2DAGBScrDsp_cFffffiiffPiPiPfPfPfPf */ void dMap_2DAGBScrDsp_c::getScrnPrmXY(f32 param_1, f32 param_2, f32 param_3, f32 param_4, int param_5, int param_6, f32 param_7, f32 param_8, int* param_9, int* param_10, f32* param_11, f32* param_12, f32* param_13, f32* param_14) { getScrnPrm(param_1, param_3, param_5, param_7, param_9, param_11, param_13); getScrnPrm(param_2, param_4, param_6, param_8, param_10, param_12, param_14); } /* 8004E41C-8004E698 .text calc_standard_prm__18dMap_2DAGBScrDsp_cFUsUsffssssffPiPiPiPiPfPfPfPfPfPf */ void dMap_2DAGBScrDsp_c::calc_standard_prm(u16 param_1, u16 param_2, f32 param_3, f32 param_4, s16 param_5, s16 param_6, s16 param_7, s16 param_8, f32 param_9, f32 param_10, int* param_11, int* param_12, int* param_13, int* param_14, f32* param_15, f32* param_16, f32* param_17, f32* param_18, f32* param_19, f32* param_20) { f32 f30 = (param_7 - param_5) * 0.5f; f32 f29 = (param_8 - param_6) * 0.5f; int local_bc; int local_c0; int local_c4; int local_c8; f32 local_cc; f32 local_d0; getScrnPrmXY(param_3, param_4, 0.0f, 0.0f, param_1, param_2, param_9, param_10, &local_c4, &local_c8, &local_cc, &local_d0, NULL, NULL); getScrnPrmXY(param_3, param_4, -f30, -f29, param_1, param_2, param_9, param_10, param_13, param_14, NULL, NULL, param_17, param_19); getScrnPrmXY(param_3, param_4, f30, f29, param_1, param_2, param_9, param_10, &local_bc, &local_c0, NULL, NULL, param_18, param_20); *param_11 = (local_bc - *param_13) + 1; *param_12 = (local_c0 - *param_14) + 1; *param_15 = -(param_9 * (local_cc + (param_1 * (local_c4 - *param_13)))); *param_16 = -(param_10 * (local_d0 + (param_2 * (local_c8 - *param_14)))); } /* 8004E698-8004EE30 .text draw__18dMap_2DAGBScrDsp_cFv */ void dMap_2DAGBScrDsp_c::draw() { /* Nonmatching */ } /* 8004EE30-8004EE44 .text setPos__18dMap_2DAGBScrDsp_cFssss */ void dMap_2DAGBScrDsp_c::setPos(s16 param_1, s16 param_2, s16 param_3, s16 param_4) { field_0x3c = param_1; field_0x3e = param_2; field_0x40 = param_3; field_0x42 = param_4; } /* 8004EE44-8004EE50 .text setScale__18dMap_2DAGBScrDsp_cFff */ void dMap_2DAGBScrDsp_c::setScale(f32 i_scaleX, f32 i_scaleY) { mScaleX = i_scaleX; mScaleY = i_scaleY; } /* 8004EE50-8004EE88 .text init__12dMap_2DTri_cFssRC8_GXColorffs */ void dMap_2DTri_c::init(s16 i_posX, s16 i_posY, const GXColor& i_color, f32 i_scaleX, f32 i_scaleY, s16 i_angle) { mPosX = i_posX; mPosY = i_posY; mScaleX = i_scaleX; mScaleY = i_scaleY; mColor = i_color; mAngle = i_angle; } /* 8004EE88-8004F080 .text draw__12dMap_2DTri_cFv */ void dMap_2DTri_c::draw() { f32 f2 = JMASCos(mAngle); f32 f3 = JMASSin(mAngle); s16 r10 = 0; s16 local_2c[3]; s16 local_34[3]; for (int i = 0; i < 3; i++) { f32 f4 = mScaleX * JMASSin(r10); f32 f5 = mScaleY * JMASCos(r10); local_2c[i] = mPosX + int(f4 * f2 + f5 * f3); local_34[i] = mPosY + int(f5 * f2 - f4 * f3); r10 -= 0x5555; } GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE); GXSetChanMatColor(GX_COLOR0A0, mColor); GXSetNumTexGens(0); GXSetNumTevStages(1); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET); GXSetZMode(0, GX_LEQUAL, 0); GXSetScissor(mScissorX, mScissorY, mScissorWidth, mScissorHeight); GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3); GXPosition3s16(local_2c[0], local_34[0], 0); GXPosition3s16(local_2c[1], local_34[1], 0); GXPosition3s16(local_2c[2], local_34[2], 0); GXEnd(); GXSetScissor(0, 0, 640, 480); } /* 8004F080-8004F08C .text setPos__12dMap_2DTri_cFss */ void dMap_2DTri_c::setPos(s16 i_posX, s16 i_posY) { mPosX = i_posX; mPosY = i_posY; } /* 8004F08C-8004F0BC .text init__14dMap_2DPoint_cFssRC8_GXColorUc */ void dMap_2DPoint_c::init(s16 param_1, s16 param_2, const GXColor& param_3, u8 param_4) { field_0x14 = param_1; field_0x16 = param_2; field_0x18 = param_3; field_0x1c = param_4; } /* 8004F0BC-8004F1E4 .text draw__14dMap_2DPoint_cFv */ void dMap_2DPoint_c::draw() { GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS,GX_DIRECT); GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0A0,false,GX_SRC_REG,GX_SRC_REG,0,GX_DF_NONE,GX_AF_NONE); GXSetChanMatColor(GX_COLOR0A0,field_0x18); GXSetNumTexGens(0); GXSetNumTevStages(1); GXSetTevOrder(GX_TEVSTAGE0,GX_TEXCOORD_NULL,GX_TEXMAP_NULL,GX_COLOR0A0); GXSetTevOp(GX_TEVSTAGE0,GX_PASSCLR); GXSetBlendMode(GX_BM_BLEND,GX_BL_SRC_ALPHA,GX_BL_INV_SRC_ALPHA,GX_LO_SET); GXSetPointSize(field_0x1c,GX_TO_ZERO); GXSetZMode(false,GX_LEQUAL,false); GXSetScissor(field_0x4,field_0x8, field_0xc,field_0x10); GXBegin(GX_POINTS,GX_VTXFMT0,1); GXPosition3s16(field_0x14,field_0x16,0); GXEnd(); GXSetScissor(0,0,0x280,0x1e0); return; } /* 8004F1E4-8004F214 .text init__18dMap_2DAGBCursor_cFssRC8_GXColorUc */ void dMap_2DAGBCursor_c::init(s16 param_1, s16 param_2, const GXColor& param_3, u8 param_4) { field_0x14 = param_1; field_0x16 = param_2; field_0x18 = param_3; field_0x1c = param_4; } /* 8004F214-8004F3C0 .text draw__18dMap_2DAGBCursor_cFv */ void dMap_2DAGBCursor_c::draw() { /* Nonmatching */ } /* 8004F3C0-8004F778 .text draw__11dMap_2DT2_cFv */ void dMap_2DT2_c::draw() { /* Nonmatching */ } /* 8004F778-8004F8B4 .text init__11dMap_2DT2_cFP7ResTIMGffffUcUcUcffs */ void dMap_2DT2_c::init(ResTIMG* param_1, f32 param_2, f32 param_3, f32 param_4, f32 param_5, u8 param_6, u8 param_7, u8 param_8, f32 param_9, f32 param_10, s16 param_11) { mDoLib_setResTimgObj(param_1, &field_0x4, 0, NULL); mPosX = param_2; mPosY = param_3; mWidth = param_4; mHeight = param_5; mScaleX = param_9; mScaleY = param_10; mRotZ = param_11; mColorW = COMPOUND_LITERAL(GXColor){0, 0, 0, 255}; mColorB = COMPOUND_LITERAL(GXColor){0, 0, 0, 255}; field_0x56 = param_7; if (field_0x56 && GXGetTexObjWrapS(&field_0x4) == GX_MIRROR) { field_0x56 = 0; } field_0x57 = param_8; if (field_0x57 && GXGetTexObjWrapT(&field_0x4) == GX_MIRROR) { field_0x57 = 0; } field_0x58 = param_6; } /* 8004F8B4-8004FC68 .text setTlut__11dMap_Dmap_cFP16dmap_dmap_tlut_sUcUcUcf */ void dMap_Dmap_c::setTlut(dmap_dmap_tlut_s* param_1, u8 param_2, u8 param_3, u8 param_4, f32 param_5) { /* Nonmatching */ static const GXColor color_on = {0, 128, 0, 255}; static const GXColor color_off_map_possession = {30, 30, 30, 255}; static const GXColor color_off_map_none = {0, 0, 0, 0}; static const GXColor flash_color = {0, 255, 180, 255}; dStage_FloorInfo_dt_c* floorInfo = dMap_GetFloorInfoDtPFromFloorNo(dComIfGp_getStage().getFloorInfo(), param_2); if (!floorInfo) { return; } if (param_5 > 1.0f) { param_5 = 1.0f - param_5; } s8* r29 = floorInfo->field_0x05; for (int i = 0; i < 14; i++, r29++) { if (*r29 == -1) { continue; } u16* r30 = NULL; int tmp = field_0x2bb[param_2 - Floor_Base][i + 1]; if (tmp >= 0) { r30 = ¶m_1->field_0x0[tmp]; } if (!r30) { continue; } stage_stag_info_class* stageInfo = dComIfGp_getStage().getStagInfo(); if ((stageInfo->mStageTypeAndSchbit >> 16 & 7) != 3 && *r29 == param_3) { *r30 = ((u16(flash_color.r + param_5 * (color_on.r - flash_color.r)) << 7) & 0x7C0) | ((u16(flash_color.g + param_5 * (color_on.g - flash_color.g)) << 2) & 0x3E0) | ((u16(flash_color.b + param_5 * (color_on.b - flash_color.b)) >> 3) & 0x1F); continue; } if (!dComIfGs_isDungeonItemMap()) { if (dComIfGs_isVisitedRoom(*r29)) { *r30 = color_on.a >= 0xe0 ? u16(color_on.r & 0xf8) << 7 | u16(color_on.g & 0xf8) << 2 | u16(color_on.b) >> 3 : u16(color_on.r & 0xf0) << 4 | u16(color_on.g & 0xf0) | u16(color_on.b) >> 4 | u16(color_on.a & 0xe0) << 7; } else { *r30 = color_off_map_none.a >= 0xe0 ? u16(color_off_map_none.r & 0xf8) << 7 | u16(color_off_map_none.g & 0xf8) << 2 | u16(color_off_map_none.b) >> 3 : u16(color_off_map_none.r & 0xf0) << 4 | u16(color_off_map_none.g & 0xf0) | u16(color_off_map_none.b) >> 4 | u16(color_off_map_none.a & 0xe0) << 7; } continue; } else { if (dComIfGs_isVisitedRoom(*r29)) { *r30 = color_on.a >= 0xe0 ? u16(color_on.r & 0xf8) << 7 | u16(color_on.g & 0xf8) << 2 | u16(color_on.b) >> 3 : u16(color_on.r & 0xf0) << 4 | u16(color_on.g & 0xf0) | u16(color_on.b) >> 4 | u16(color_on.a & 0xe0) << 7; } else { *r30 = color_off_map_possession.a >= 0xe0 ? u16(color_off_map_possession.r & 0xf8) << 7 | u16(color_off_map_possession.g & 0xf8) << 2 | u16(color_off_map_possession.b) >> 3 : u16(color_off_map_possession.r & 0xf0) << 4 | u16(color_off_map_possession.g & 0xf0) | u16(color_off_map_possession.b) >> 4 | u16(color_off_map_possession.a & 0xe0) << 7; } } } DCStoreRange(param_1, 0x20); } /* 8004FC68-8004FFC8 .text setFloorTextureOne__11dMap_Dmap_cFUc */ void dMap_Dmap_c::setFloorTextureOne(u8 param_1) { /* Nonmatching */ static const u16 l_indexColor[] = { 0x0000, 0x8218, 0x821F, 0x83E8, 0x83F0, 0x83FF, 0xC3E0, 0xC3F0, 0xC3FF, 0xFC00, 0xFE10, 0xFE18, 0xFE1F, 0xFFE0, 0xFFF0, 0xFFFF, }; int r29 = param_1 - Floor_Base; if (r29 > field_0x2b4 - Floor_Base || r29 < field_0x2b5 - Floor_Base) { return; } char local_70[32]; sprintf(local_70, "dmap%d.bti", param_1); ResTIMG* imageP = (ResTIMG*)dComIfG_getStageRes("Stage", local_70); if (!imageP) { return; } field_0x36e |= 1 << (r29 & 0x3F); for (int i = 0; i < 16; i++) { field_0x2bb[r29][i] = -1; } for (int i = 0; i < 16; i++) { u16* palette = (u16*)((u8*)imageP + imageP->paletteOffset); u16 color = palette[i]; u32 j; for (j = 0; j < 16; j++) { if (color == l_indexColor[j]) { break; } } if (j != 16) { field_0x2bb[r29][j] = i; } } for (int i = 0; i < 2; i++) { dmap_dmap_tlut_s* r23 = &field_0x20[i][r29]; memset(r23, 0, sizeof(dmap_dmap_tlut_s)); GXInitTlutObj(&field_0x4b0[i][r29], r23, GXTlutFmt(imageP->colorFormat), imageP->numColors); JUT_ASSERT(VERSION_SELECT(10393, 10393, 10393, 10393), imageP->numColors == (16)) } GXTexObj* texObj = &field_0x370[r29]; GXInitTexObjCI(texObj, (u8*)imageP + imageP->imageOffset, imageP->width, imageP->height, GXCITexFmt(imageP->format), GXTexWrapMode(imageP->wrapS), GXTexWrapMode(imageP->wrapT), imageP->mipmapCount > 1, r29); GXInitTexObjLOD(texObj, GXTexFilter(imageP->minFilter), GXTexFilter(imageP->magFilter), imageP->minLOD * 0.125f, imageP->maxLOD * 0.125f, imageP->LODBias * 0.01f, imageP->biasClamp, imageP->doEdgeLOD, GXAnisotropy(imageP->maxAnisotropy)); JUT_ASSERT(VERSION_SELECT(10419, 10419, 10419, 10419), (mNowTlutDblBufNo == 0) || (mNowTlutDblBufNo == 1)); for (int i = 0; i < 2; i++) { setTlut(&field_0x20[i][r29], param_1, field_0x2b8, field_0x2b9, field_0x2ba); } } /* 8004FFC8-800504C4 .text init__11dMap_Dmap_cFsssssssssUcUcUcUcUc */ void dMap_Dmap_c::init(s16 param_1, s16 param_2, s16 param_3, s16 param_4, s16 param_5, s16 param_6, s16 param_7, s16 param_8, s16 param_9, u8 param_10, u8 param_11, u8 param_12, u8 param_13, u8 param_14) { /* Nonmatching */ field_0x35c = param_1; field_0x35e = param_2; field_0x360 = param_3; mMaskHeight = param_4; field_0x364 = param_5; field_0x366 = param_6; field_0x368 = param_7; field_0x36a = param_8; field_0x36c = param_9; field_0x2b4 = param_10; field_0x2b5 = param_11; field_0x2b8 = param_12; field_0x2b9 = param_13; field_0x2b6 = param_14; mNowTlutDblBufNo = 0; field_0x2ba = 0; field_0x36e = 0; mImageP = (ResTIMG*)JKRGetResource('TIMG', "dtmap_mask.bti", mpArc); JUT_ASSERT(VERSION_SELECT(10504, 10504, 10504, 10504), mImageP != NULL); mImageSeetP = (ResTIMG*)JKRGetResource('TIMG', "menu_note_02_2.bti", mpArc); JUT_ASSERT(VERSION_SELECT(10511, 10511, 10511, 10511), mImageSeetP !=NULL); mImageGridP = (ResTIMG*)JKRGetResource('TIMG', "grid_32.bti", mpArc); JUT_ASSERT(VERSION_SELECT(10519, 10519, 10519, 10519), mImageGridP !=NULL); field_0x2b0 = (ResTIMG*)dComIfG_getStageRes("Stage", "dmap_back.bti"); GXInitTexObj(&field_0x5c0, (u8*)mImageP + mImageP->imageOffset, mImageP->width, mImageP->height, GXTexFmt(mImageP->format), GXTexWrapMode(mImageP->wrapS), GXTexWrapMode(mImageP->wrapT), mImageP->mipmapCount > 1); GXInitTexObjLOD(&field_0x5c0, GXTexFilter(mImageP->minFilter), GXTexFilter(mImageP->magFilter), mImageP->minLOD * 0.125f, mImageP->maxLOD * 0.125f, mImageP->LODBias * 0.01f, mImageP->biasClamp, mImageP->doEdgeLOD, GXAnisotropy(mImageP->maxAnisotropy)); GXInitTexObj(&field_0x5a0, (u8*)mImageSeetP + mImageSeetP->imageOffset, mImageSeetP->width, mImageSeetP->height, GXTexFmt(mImageSeetP->format), GXTexWrapMode(mImageSeetP->wrapS), GXTexWrapMode(mImageSeetP->wrapT), mImageSeetP->mipmapCount > 1); GXInitTexObjLOD(&field_0x5a0, GXTexFilter(mImageSeetP->minFilter), GXTexFilter(mImageSeetP->magFilter), mImageSeetP->minLOD * 0.125f, mImageSeetP->maxLOD * 0.125f, mImageSeetP->LODBias * 0.01f, mImageSeetP->biasClamp, mImageSeetP->doEdgeLOD, GXAnisotropy(mImageSeetP->maxAnisotropy)); GXInitTexObj(&field_0x5e0, (u8*)mImageGridP + mImageGridP->imageOffset, mImageGridP->width, mImageGridP->height, GXTexFmt(mImageGridP->format), GXTexWrapMode(mImageGridP->wrapS), GXTexWrapMode(mImageGridP->wrapT), mImageGridP->mipmapCount > 1); GXInitTexObjLOD(&field_0x5e0, GXTexFilter(mImageGridP->minFilter), GXTexFilter(mImageGridP->magFilter), mImageGridP->minLOD * 0.125f, mImageGridP->maxLOD * 0.125f, mImageGridP->LODBias * 0.01f, mImageGridP->biasClamp, mImageGridP->doEdgeLOD, GXAnisotropy(mImageGridP->maxAnisotropy)); if (field_0x2b0) { GXInitTexObj(&field_0x600, (u8*)field_0x2b0 + field_0x2b0->imageOffset, field_0x2b0->width, field_0x2b0->height, GXTexFmt(field_0x2b0->format), GXTexWrapMode(field_0x2b0->wrapS), GXTexWrapMode(field_0x2b0->wrapT), field_0x2b0->mipmapCount > 1); GXInitTexObjLOD(&field_0x600, GXTexFilter(field_0x2b0->minFilter), GXTexFilter(field_0x2b0->magFilter), field_0x2b0->minLOD * 0.125f, field_0x2b0->maxLOD * 0.125f, field_0x2b0->LODBias * 0.01f, field_0x2b0->biasClamp, field_0x2b0->doEdgeLOD, GXAnisotropy(field_0x2b0->maxAnisotropy)); } for (int i = 0; i < 10; i++) { setFloorTextureOne(i + Floor_Base); } } /* 800504C4-800517AC .text draw__11dMap_Dmap_cFv */ void dMap_Dmap_c::draw() { /* Nonmatching */ static const GXColor backColorWhite = {185, 135, 0, 255}; static const GXColor backColorBlack = {150, 80, 0, 255}; static const GXColor wallPaperColorWhite = {255, 255, 255, 255}; static const GXColor wallPaperColorBlack = {255, 255, 255, 255}; static const GXColor edgeColor = {255, 255, 255, 255}; JUT_ASSERT(VERSION_SELECT(10663, 10663, 10663, 10663), mMaskHeight != 0.0f); f32 f27 = field_0x368 / 64.0f; f32 f26 = field_0x36a / 64.0f; f32 f23 = 1.0f / GXGetTexObjWidth(&field_0x5e0); f32 f25 = 1.0f / GXGetTexObjHeight(&field_0x5e0); f32 f30 = 2.0f * fopMsgM_valueIncrease(40, field_0x2ba, 2); if (f30 > 1.0f) { f30 = 2.0f - f30; } s16 r21 = field_0x35e - (mMaskHeight >> 1); s16 r25 = field_0x364 - (field_0x368 >> 1); s16 r24 = field_0x364 + (field_0x368 >> 1); s16 r23 = field_0x366 + field_0x36c + (field_0x36a + field_0x36c) * 4 + (field_0x36a >> 1); GXVtxAttrFmtList fmtList[GX_VA_MAX_ATTR + 1]; GXGetVtxAttrFmtv(GX_VTXFMT0, fmtList); GXLoadPosMtxImm(mDoMtx_getIdentity(), GX_PNMTX0); GXSetCurrentMtx(GX_PNMTX0); setTlutDblBufNo(0); changeTlutDblBufNo(); for (int i = 0; i < 10; i++) { if (r23 <= 480) { s16 r22 = r23 + field_0x36a; if (r22 < 0) { break; } if (field_0x36e & 1 << i && i <= field_0x2b4 - Floor_Base && field_0x2b5 - Floor_Base <= i) { setTlut(&field_0x20[getLoadTlutDblBufNo()][i], i + Floor_Base, field_0x2b8, field_0x2b9, f30); f32 f29 = (f32(r23) - f32(r21)) / mMaskHeight; f32 f28 = (f32(r22) - f32(r21)) / mMaskHeight; GXTexObj* r26 = &field_0x370[i]; f32 f24 = 0.3f / GXGetTexObjWidth(r26); f32 f23_2 = 0.3f / GXGetTexObjHeight(r26); GXColor local_2c4; local_2c4.r = backColorWhite.r; local_2c4.g = backColorWhite.g; local_2c4.b = backColorWhite.b; local_2c4.a = backColorWhite.a; GXColor local_2c8; local_2c8.r = wallPaperColorWhite.r; local_2c8.g = wallPaperColorWhite.g; local_2c8.b = wallPaperColorWhite.b; local_2c8.a = wallPaperColorWhite.a; GXColor local_2cc; local_2cc.r = edgeColor.r; local_2cc.g = edgeColor.g; local_2cc.b = edgeColor.b; local_2cc.a = edgeColor.a; local_2c8.r = 128; local_2c8.g = 128; local_2c8.b = 0; GXColor local_2d0; local_2d0.r = backColorBlack.r; local_2d0.g = backColorBlack.g; local_2d0.b = backColorBlack.b; local_2d0.a = backColorBlack.a; GXColor local_2d4; local_2d4.r = wallPaperColorBlack.r; local_2d4.g = wallPaperColorBlack.g; local_2d4.b = wallPaperColorBlack.b; local_2d4.a = wallPaperColorBlack.a; local_2d4.r = 0; local_2d4.g = 0; local_2d4.b = 0; if (field_0x2b0) { local_2c4.a = 96; } else { local_2c4.a = 0; } local_2c8.a = 128; local_2cc.a = field_0x2b6; GXSetTevKColor(GX_KCOLOR0, local_2c4); GXSetTevKColor(GX_KCOLOR1, local_2c8); GXSetTevKColor(GX_KCOLOR2, local_2cc); GXSetTevColor(GX_TEVREG0, local_2d0); GXSetTevColor(GX_TEVREG1, local_2d4); GXSetTevKColorSel(GX_TEVSTAGE0, GX_TEV_KCSEL_K0); GXSetTevKColorSel(GX_TEVSTAGE1, GX_TEV_KCSEL_K1); GXSetTevKColorSel(GX_TEVSTAGE7, GX_TEV_KCSEL_K2); GXSetTevKColorSel(GX_TEVSTAGE9, GX_TEV_KCSEL_K1_A); GXSetTevKAlphaSel(GX_TEVSTAGE1, GX_TEV_KASEL_K0_A); GXSetTevKAlphaSel(GX_TEVSTAGE11, GX_TEV_KASEL_K2_A); GXLoadTexObj(&field_0x5a0, GX_TEXMAP0); GXLoadTlut(&field_0x4b0[getLoadTlutDblBufNo()][i], i); GXLoadTexObj(r26, GX_TEXMAP1); GXLoadTexObj(&field_0x5e0, GX_TEXMAP2); GXLoadTexObj(&field_0x5c0, GX_TEXMAP3); if (field_0x2b0) { GXLoadTexObj(&field_0x600, GX_TEXMAP4); } GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_TEX_ST, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX2, GX_TEX_ST, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX3, GX_TEX_ST, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX4, GX_TEX_ST, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX5, GX_TEX_ST, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX6, GX_TEX_ST, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX7, GX_TEX_ST, GX_F32, 0); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX1, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX2, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX3, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX4, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX5, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX6, GX_DIRECT); GXSetVtxDesc(GX_VA_TEX7, GX_DIRECT); GXSetNumChans(0); GXSetNumTexGens(8); GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); GXSetTexCoordGen(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY); GXSetTexCoordGen(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX2, GX_IDENTITY); GXSetTexCoordGen(GX_TEXCOORD3, GX_TG_MTX2x4, GX_TG_TEX3, GX_IDENTITY); GXSetTexCoordGen(GX_TEXCOORD4, GX_TG_MTX2x4, GX_TG_TEX4, GX_IDENTITY); GXSetTexCoordGen(GX_TEXCOORD5, GX_TG_MTX2x4, GX_TG_TEX5, GX_IDENTITY); GXSetTexCoordGen(GX_TEXCOORD6, GX_TG_MTX2x4, GX_TG_TEX6, GX_IDENTITY); GXSetTexCoordGen(GX_TEXCOORD7, GX_TG_MTX2x4, GX_TG_TEX7, GX_IDENTITY); GXSetNumTevStages(12); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); if (field_0x2b0) { GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD5, GX_TEXMAP4, GX_COLOR_NULL); } else { GXSetTevOrder(GX_TEVSTAGE7, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); } GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL); GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD2, GX_TEXMAP1, GX_COLOR_NULL); GXSetTevOrder(GX_TEVSTAGE5, GX_TEXCOORD3, GX_TEXMAP1, GX_COLOR_NULL); GXSetTevOrder(GX_TEVSTAGE6, GX_TEXCOORD4, GX_TEXMAP1, GX_COLOR_NULL); GXSetTevOrder(GX_TEVSTAGE7, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); GXSetTevOrder(GX_TEVSTAGE8, GX_TEXCOORD5, GX_TEXMAP1, GX_COLOR_NULL); GXSetTevOrder(GX_TEVSTAGE9, GX_TEXCOORD6, GX_TEXMAP2, GX_COLOR_NULL); GXSetTevOrder(GX_TEVSTAGE10, GX_TEXCOORD6, GX_TEXMAP2, GX_COLOR_NULL); GXSetTevOrder(GX_TEVSTAGE11, GX_TEXCOORD7, GX_TEXMAP3, GX_COLOR_NULL); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C0, GX_CC_KONST, GX_CC_TEXC, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG2); if (field_0x2b0) { GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_C1, GX_CC_KONST, GX_CC_TEXC, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_C2, GX_CC_CPREV, GX_CC_APREV, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG2); } else { GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C2); GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG2); } GXSetTevColorIn(GX_TEVSTAGE3, GX_CC_ZERO, GX_CC_ONE, GX_CC_TEXA, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevColorIn(GX_TEVSTAGE4, GX_CC_ZERO, GX_CC_ONE, GX_CC_TEXA, GX_CC_CPREV); GXSetTevColorOp(GX_TEVSTAGE4, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevColorIn(GX_TEVSTAGE5, GX_CC_ZERO, GX_CC_ONE, GX_CC_TEXA, GX_CC_CPREV); GXSetTevColorOp(GX_TEVSTAGE5, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevColorIn(GX_TEVSTAGE6, GX_CC_ZERO, GX_CC_ONE, GX_CC_TEXA, GX_CC_CPREV); GXSetTevColorOp(GX_TEVSTAGE6, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevColorIn(GX_TEVSTAGE7, GX_CC_C2, GX_CC_KONST, GX_CC_CPREV, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE7, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevColorIn(GX_TEVSTAGE8, GX_CC_CPREV, GX_CC_TEXC, GX_CC_TEXA, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE8, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG2); GXSetTevColorIn(GX_TEVSTAGE9, GX_CC_ZERO, GX_CC_TEXA, GX_CC_KONST, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE9, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevColorIn(GX_TEVSTAGE10, GX_CC_C2, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE10, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevColorIn(GX_TEVSTAGE11, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_CPREV); GXSetTevColorOp(GX_TEVSTAGE11, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); if (field_0x2b0) { GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_KONST, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); } else { GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); } GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE3, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE3, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE4, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE4, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE5, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE5, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE6, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE6, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE7, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE7, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE8, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE8, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE9, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE9, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE10, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE10, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE11, GX_CA_ZERO, GX_CA_KONST, GX_CA_TEXA, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE11, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET); GXSetCullMode(GX_CULL_NONE); GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition3s16(r25, r23, 0); GXTexCoord2f32(0.0f, 0.0f); GXTexCoord2f32(-f24, 0.0f); GXTexCoord2f32(f24, 0.0f); GXTexCoord2f32(0.0f, f23_2); GXTexCoord2f32(0.0f, -f23_2); GXTexCoord2f32(0.0f, 0.0f); GXTexCoord2f32(0.0f, f25); GXTexCoord2f32(0.0f, f29); GXPosition3s16(r24, r23, 0); GXTexCoord2f32(f27, 0.0f); GXTexCoord2f32(1.0f - f24, 0.0f); GXTexCoord2f32(1.0f + f24, 0.0f); GXTexCoord2f32(1.0f, f23_2); GXTexCoord2f32(1.0f, -f23_2); GXTexCoord2f32(1.0f, 0.0f); GXTexCoord2f32(6.0f - f23, f25); GXTexCoord2f32(1.0f, f29); GXPosition3s16(r24, r22, 0); GXTexCoord2f32(f27, f26); GXTexCoord2f32(1.0f - f24, 1.0f); GXTexCoord2f32(1.0f + f24, 1.0f); GXTexCoord2f32(1.0f, 1.0f + f23_2); GXTexCoord2f32(1.0f, 1.0f - f23_2); GXTexCoord2f32(1.0f, 1.0f); GXTexCoord2f32(6.0f - f23, 6.0f); GXTexCoord2f32(1.0f, f28); GXPosition3s16(r25, r22, 0); GXTexCoord2f32(0.0f, f26); GXTexCoord2f32(-f24, 1.0f); GXTexCoord2f32(f24, 1.0f); GXTexCoord2f32(0.0f, 1.0f + f23_2); GXTexCoord2f32(0.0f, 1.0f - f23_2); GXTexCoord2f32(0.0f, 1.0f); GXTexCoord2f32(0.0f, 6.0f); GXTexCoord2f32(0.0f, f28); GXEnd(); } } r23 -= field_0x36a + field_0x36c; } GXSetVtxAttrFmtv(GX_VTXFMT0, fmtList); field_0x2ba++; if (field_0x2ba > 40) { field_0x2ba = 0; } }