mirror of https://github.com/PrimeDecomp/prime.git
Add CMappableObject
This commit is contained in:
parent
920fe2cbd9
commit
cf0893f3b5
|
@ -69,7 +69,7 @@ lbl_805A7374:
|
|||
.section .bss
|
||||
.balign 8
|
||||
|
||||
.lcomm lbl_8046C498, 0x60, 4
|
||||
.lcomm skDoorVerts__15CMappableObject, 0x60, 4
|
||||
|
||||
.section .sdata2, "a"
|
||||
.balign 8
|
||||
|
@ -556,21 +556,21 @@ DrawDoorSurface__15CMappableObjectCFiRC13CMapWorldInfofib:
|
|||
/* 800E8CB8 000E5C18 7C 06 03 78 */ mr r6, r0
|
||||
/* 800E8CBC 000E5C1C 93 C1 00 18 */ stw r30, 0x18(r1)
|
||||
/* 800E8CC0 000E5C20 7C FE 3B 78 */ mr r30, r7
|
||||
/* 800E8CC4 000E5C24 48 00 05 45 */ bl GetDoorColors__15CMappableObjectCFiRC13CMapWorldInfo
|
||||
/* 800E8CC4 000E5C24 48 00 05 45 */ bl GetDoorColors__15CMappableObjectCFiRC13CMapWorldInfof
|
||||
/* 800E8CC8 000E5C28 57 C0 06 3F */ clrlwi. r0, r30, 0x18
|
||||
/* 800E8CCC 000E5C2C 80 81 00 08 */ lwz r4, 8(r1)
|
||||
/* 800E8CD0 000E5C30 80 A1 00 0C */ lwz r5, 0xc(r1)
|
||||
/* 800E8CD4 000E5C34 3C 60 80 3D */ lis r3, lbl_803CE5F0@ha
|
||||
/* 800E8CD4 000E5C34 3C 60 80 3D */ lis r3, sDoorData@ha
|
||||
/* 800E8CD8 000E5C38 90 81 00 10 */ stw r4, 0x10(r1)
|
||||
/* 800E8CDC 000E5C3C 57 E4 20 36 */ slwi r4, r31, 4
|
||||
/* 800E8CE0 000E5C40 38 03 E5 F0 */ addi r0, r3, lbl_803CE5F0@l
|
||||
/* 800E8CE0 000E5C40 38 03 E5 F0 */ addi r0, r3, sDoorData@l
|
||||
/* 800E8CE4 000E5C44 3B C1 00 14 */ addi r30, r1, 0x14
|
||||
/* 800E8CE8 000E5C48 90 A1 00 14 */ stw r5, 0x14(r1)
|
||||
/* 800E8CEC 000E5C4C 7F E0 22 14 */ add r31, r0, r4
|
||||
/* 800E8CF0 000E5C50 41 82 00 18 */ beq lbl_800E8D08
|
||||
/* 800E8CF4 000E5C54 3C 80 80 47 */ lis r4, lbl_8046C498@ha
|
||||
/* 800E8CF4 000E5C54 3C 80 80 47 */ lis r4, skDoorVerts__15CMappableObject@ha
|
||||
/* 800E8CF8 000E5C58 38 60 00 09 */ li r3, 9
|
||||
/* 800E8CFC 000E5C5C 38 84 C4 98 */ addi r4, r4, lbl_8046C498@l
|
||||
/* 800E8CFC 000E5C5C 38 84 C4 98 */ addi r4, r4, skDoorVerts__15CMappableObject@l
|
||||
/* 800E8D00 000E5C60 38 A0 00 0C */ li r5, 0xc
|
||||
/* 800E8D04 000E5C64 48 21 F9 41 */ bl SetArray__3CGXF7_GXAttrPCvUc
|
||||
lbl_800E8D08:
|
||||
|
@ -646,23 +646,23 @@ lbl_800E8DF8:
|
|||
/* 800E8E0C 000E5D6C 7D 25 4B 78 */ mr r5, r9
|
||||
/* 800E8E10 000E5D70 7D 06 43 78 */ mr r6, r8
|
||||
/* 800E8E14 000E5D74 38 61 00 38 */ addi r3, r1, 0x38
|
||||
/* 800E8E18 000E5D78 48 00 03 F1 */ bl GetDoorColors__15CMappableObjectCFiRC13CMapWorldInfo
|
||||
/* 800E8E18 000E5D78 48 00 03 F1 */ bl GetDoorColors__15CMappableObjectCFiRC13CMapWorldInfof
|
||||
/* 800E8E1C 000E5D7C 80 81 00 38 */ lwz r4, 0x38(r1)
|
||||
/* 800E8E20 000E5D80 3C 60 80 3D */ lis r3, lbl_803CE5F0@ha
|
||||
/* 800E8E20 000E5D80 3C 60 80 3D */ lis r3, sDoorData@ha
|
||||
/* 800E8E24 000E5D84 80 01 00 3C */ lwz r0, 0x3c(r1)
|
||||
/* 800E8E28 000E5D88 57 7D 06 3E */ clrlwi r29, r27, 0x18
|
||||
/* 800E8E2C 000E5D8C 90 81 00 40 */ stw r4, 0x40(r1)
|
||||
/* 800E8E30 000E5D90 3B E1 00 44 */ addi r31, r1, 0x44
|
||||
/* 800E8E34 000E5D94 3B 83 E5 F0 */ addi r28, r3, lbl_803CE5F0@l
|
||||
/* 800E8E34 000E5D94 3B 83 E5 F0 */ addi r28, r3, sDoorData@l
|
||||
/* 800E8E38 000E5D98 3B 60 00 00 */ li r27, 0
|
||||
/* 800E8E3C 000E5D9C 90 01 00 44 */ stw r0, 0x44(r1)
|
||||
/* 800E8E40 000E5DA0 3F C0 CC 01 */ lis r30, 0xcc01
|
||||
lbl_800E8E44:
|
||||
/* 800E8E44 000E5DA4 28 1D 00 00 */ cmplwi r29, 0
|
||||
/* 800E8E48 000E5DA8 41 82 00 18 */ beq lbl_800E8E60
|
||||
/* 800E8E4C 000E5DAC 3C 80 80 47 */ lis r4, lbl_8046C498@ha
|
||||
/* 800E8E4C 000E5DAC 3C 80 80 47 */ lis r4, skDoorVerts__15CMappableObject@ha
|
||||
/* 800E8E50 000E5DB0 38 60 00 09 */ li r3, 9
|
||||
/* 800E8E54 000E5DB4 38 84 C4 98 */ addi r4, r4, lbl_8046C498@l
|
||||
/* 800E8E54 000E5DB4 38 84 C4 98 */ addi r4, r4, skDoorVerts__15CMappableObject@l
|
||||
/* 800E8E58 000E5DB8 38 A0 00 0C */ li r5, 0xc
|
||||
/* 800E8E5C 000E5DBC 48 21 F7 E9 */ bl SetArray__3CGXF7_GXAttrPCvUc
|
||||
lbl_800E8E60:
|
||||
|
@ -716,7 +716,6 @@ lbl_800E8EF8:
|
|||
/* 800E8F18 000E5E78 7C 03 00 2E */ lwzx r0, r3, r0
|
||||
/* 800E8F1C 000E5E7C 7C 09 03 A6 */ mtctr r0
|
||||
/* 800E8F20 000E5E80 4E 80 04 20 */ bctr
|
||||
.global lbl_800E8F24
|
||||
lbl_800E8F24:
|
||||
/* 800E8F24 000E5E84 38 80 00 FF */ li r4, 0xff
|
||||
/* 800E8F28 000E5E88 38 00 00 96 */ li r0, 0x96
|
||||
|
@ -728,7 +727,6 @@ lbl_800E8F24:
|
|||
/* 800E8F40 000E5EA0 98 81 00 27 */ stb r4, 0x27(r1)
|
||||
/* 800E8F44 000E5EA4 83 A1 00 24 */ lwz r29, 0x24(r1)
|
||||
/* 800E8F48 000E5EA8 48 00 00 FC */ b lbl_800E9044
|
||||
.global lbl_800E8F4C
|
||||
lbl_800E8F4C:
|
||||
/* 800E8F4C 000E5EAC 38 80 00 FF */ li r4, 0xff
|
||||
/* 800E8F50 000E5EB0 38 00 00 96 */ li r0, 0x96
|
||||
|
@ -740,7 +738,6 @@ lbl_800E8F4C:
|
|||
/* 800E8F68 000E5EC8 98 81 00 23 */ stb r4, 0x23(r1)
|
||||
/* 800E8F6C 000E5ECC 83 A1 00 20 */ lwz r29, 0x20(r1)
|
||||
/* 800E8F70 000E5ED0 48 00 00 D4 */ b lbl_800E9044
|
||||
.global lbl_800E8F74
|
||||
lbl_800E8F74:
|
||||
/* 800E8F74 000E5ED4 38 80 00 FF */ li r4, 0xff
|
||||
/* 800E8F78 000E5ED8 38 A0 00 64 */ li r5, 0x64
|
||||
|
@ -753,7 +750,6 @@ lbl_800E8F74:
|
|||
/* 800E8F94 000E5EF4 98 81 00 1F */ stb r4, 0x1f(r1)
|
||||
/* 800E8F98 000E5EF8 83 A1 00 1C */ lwz r29, 0x1c(r1)
|
||||
/* 800E8F9C 000E5EFC 48 00 00 A8 */ b lbl_800E9044
|
||||
.global lbl_800E8FA0
|
||||
lbl_800E8FA0:
|
||||
/* 800E8FA0 000E5F00 38 80 00 FF */ li r4, 0xff
|
||||
/* 800E8FA4 000E5F04 38 A0 00 64 */ li r5, 0x64
|
||||
|
@ -766,7 +762,6 @@ lbl_800E8FA0:
|
|||
/* 800E8FC0 000E5F20 98 81 00 1B */ stb r4, 0x1b(r1)
|
||||
/* 800E8FC4 000E5F24 83 A1 00 18 */ lwz r29, 0x18(r1)
|
||||
/* 800E8FC8 000E5F28 48 00 00 7C */ b lbl_800E9044
|
||||
.global lbl_800E8FCC
|
||||
lbl_800E8FCC:
|
||||
/* 800E8FCC 000E5F2C 38 A0 00 FF */ li r5, 0xff
|
||||
/* 800E8FD0 000E5F30 38 80 00 64 */ li r4, 0x64
|
||||
|
@ -779,7 +774,6 @@ lbl_800E8FCC:
|
|||
/* 800E8FEC 000E5F4C 98 A1 00 17 */ stb r5, 0x17(r1)
|
||||
/* 800E8FF0 000E5F50 83 A1 00 14 */ lwz r29, 0x14(r1)
|
||||
/* 800E8FF4 000E5F54 48 00 00 50 */ b lbl_800E9044
|
||||
.global lbl_800E8FF8
|
||||
lbl_800E8FF8:
|
||||
/* 800E8FF8 000E5F58 38 A0 00 FF */ li r5, 0xff
|
||||
/* 800E8FFC 000E5F5C 38 80 00 64 */ li r4, 0x64
|
||||
|
@ -792,17 +786,14 @@ lbl_800E8FF8:
|
|||
/* 800E9018 000E5F78 98 A1 00 13 */ stb r5, 0x13(r1)
|
||||
/* 800E901C 000E5F7C 83 A1 00 10 */ lwz r29, 0x10(r1)
|
||||
/* 800E9020 000E5F80 48 00 00 24 */ b lbl_800E9044
|
||||
.global lbl_800E9024
|
||||
lbl_800E9024:
|
||||
/* 800E9024 000E5F84 80 6D A1 4C */ lwz r3, gpTweakPlayerRes@sda21(r13)
|
||||
/* 800E9028 000E5F88 80 C3 00 04 */ lwz r6, 4(r3)
|
||||
/* 800E902C 000E5F8C 48 00 00 18 */ b lbl_800E9044
|
||||
.global lbl_800E9030
|
||||
lbl_800E9030:
|
||||
/* 800E9030 000E5F90 80 6D A1 4C */ lwz r3, gpTweakPlayerRes@sda21(r13)
|
||||
/* 800E9034 000E5F94 80 C3 00 08 */ lwz r6, 8(r3)
|
||||
/* 800E9038 000E5F98 48 00 00 0C */ b lbl_800E9044
|
||||
.global lbl_800E903C
|
||||
lbl_800E903C:
|
||||
/* 800E903C 000E5F9C 80 6D A1 4C */ lwz r3, gpTweakPlayerRes@sda21(r13)
|
||||
/* 800E9040 000E5FA0 80 C3 00 0C */ lwz r6, 0xc(r3)
|
||||
|
@ -925,8 +916,8 @@ PostConstruct__15CMappableObjectFPCv:
|
|||
/* 800E9200 000E6160 38 21 00 40 */ addi r1, r1, 0x40
|
||||
/* 800E9204 000E6164 4E 80 00 20 */ blr
|
||||
|
||||
.global GetDoorColors__15CMappableObjectCFiRC13CMapWorldInfo
|
||||
GetDoorColors__15CMappableObjectCFiRC13CMapWorldInfo:
|
||||
.global GetDoorColors__15CMappableObjectCFiRC13CMapWorldInfof
|
||||
GetDoorColors__15CMappableObjectCFiRC13CMapWorldInfof:
|
||||
/* 800E9208 000E6168 94 21 FF A0 */ stwu r1, -0x60(r1)
|
||||
/* 800E920C 000E616C 7C 08 02 A6 */ mflr r0
|
||||
/* 800E9210 000E6170 90 01 00 64 */ stw r0, 0x64(r1)
|
||||
|
@ -977,22 +968,17 @@ lbl_800E92A4:
|
|||
/* 800E92C0 000E6220 7C 03 00 2E */ lwzx r0, r3, r0
|
||||
/* 800E92C4 000E6224 7C 09 03 A6 */ mtctr r0
|
||||
/* 800E92C8 000E6228 4E 80 04 20 */ bctr
|
||||
.global lbl_800E92CC
|
||||
lbl_800E92CC:
|
||||
/* 800E92CC 000E622C 38 80 00 01 */ li r4, 1
|
||||
/* 800E92D0 000E6230 48 00 00 18 */ b lbl_800E92E8
|
||||
.global lbl_800E92D4
|
||||
lbl_800E92D4:
|
||||
/* 800E92D4 000E6234 38 80 00 02 */ li r4, 2
|
||||
/* 800E92D8 000E6238 48 00 00 10 */ b lbl_800E92E8
|
||||
.global lbl_800E92DC
|
||||
lbl_800E92DC:
|
||||
/* 800E92DC 000E623C 38 80 00 03 */ li r4, 3
|
||||
/* 800E92E0 000E6240 48 00 00 08 */ b lbl_800E92E8
|
||||
.global lbl_800E92E4
|
||||
lbl_800E92E4:
|
||||
/* 800E92E4 000E6244 38 80 00 04 */ li r4, 4
|
||||
.global lbl_800E92E8
|
||||
lbl_800E92E8:
|
||||
/* 800E92E8 000E6248 80 6D A1 44 */ lwz r3, gpTweakAutoMapper@sda21(r13)
|
||||
/* 800E92EC 000E624C 54 80 10 3A */ slwi r0, r4, 2
|
||||
|
@ -1105,7 +1091,7 @@ lbl_800E9424:
|
|||
.global ReadAutomapperTweaks__15CMappableObjectFRC16CTweakAutoMapper
|
||||
ReadAutomapperTweaks__15CMappableObjectFRC16CTweakAutoMapper:
|
||||
/* 800E9468 000E63C8 C0 03 00 AC */ lfs f0, 0xac(r3)
|
||||
/* 800E946C 000E63CC 3C 80 80 47 */ lis r4, lbl_8046C498@ha
|
||||
/* 800E946C 000E63CC 3C 80 80 47 */ lis r4, skDoorVerts__15CMappableObject@ha
|
||||
/* 800E9470 000E63D0 C0 A3 00 A8 */ lfs f5, 0xa8(r3)
|
||||
/* 800E9474 000E63D4 FC 40 00 50 */ fneg f2, f0
|
||||
/* 800E9478 000E63D8 C0 02 90 70 */ lfs f0, lbl_805AAD90@sda21(r2)
|
||||
|
@ -1114,7 +1100,7 @@ ReadAutomapperTweaks__15CMappableObjectFRC16CTweakAutoMapper:
|
|||
/* 800E9484 000E63E4 C0 22 90 20 */ lfs f1, lbl_805AAD40@sda21(r2)
|
||||
/* 800E9488 000E63E8 EC 80 00 B2 */ fmuls f4, f0, f2
|
||||
/* 800E948C 000E63EC C0 02 90 48 */ lfs f0, lbl_805AAD68@sda21(r2)
|
||||
/* 800E9490 000E63F0 D4 44 C4 98 */ stfsu f2, lbl_8046C498@l(r4)
|
||||
/* 800E9490 000E63F0 D4 44 C4 98 */ stfsu f2, skDoorVerts__15CMappableObject@l(r4)
|
||||
/* 800E9494 000E63F4 EC 00 01 B2 */ fmuls f0, f0, f6
|
||||
/* 800E9498 000E63F8 D0 64 00 04 */ stfs f3, 4(r4)
|
||||
/* 800E949C 000E63FC D0 24 00 08 */ stfs f1, 8(r4)
|
||||
|
@ -1145,8 +1131,8 @@ ReadAutomapperTweaks__15CMappableObjectFRC16CTweakAutoMapper:
|
|||
__sinit_CMappableObject_cpp:
|
||||
/* 800E94F8 000E6458 3C 80 80 5A */ lis r4, sZeroVector__9CVector3f@ha
|
||||
/* 800E94FC 000E645C C4 04 66 A0 */ lfsu f0, sZeroVector__9CVector3f@l(r4)
|
||||
/* 800E9500 000E6460 3C 60 80 47 */ lis r3, lbl_8046C498@ha
|
||||
/* 800E9504 000E6464 D4 03 C4 98 */ stfsu f0, lbl_8046C498@l(r3)
|
||||
/* 800E9500 000E6460 3C 60 80 47 */ lis r3, skDoorVerts__15CMappableObject@ha
|
||||
/* 800E9504 000E6464 D4 03 C4 98 */ stfsu f0, skDoorVerts__15CMappableObject@l(r3)
|
||||
/* 800E9508 000E6468 C0 24 00 04 */ lfs f1, 4(r4)
|
||||
/* 800E950C 000E646C C0 44 00 08 */ lfs f2, 8(r4)
|
||||
/* 800E9510 000E6470 D0 23 00 04 */ stfs f1, 4(r3)
|
||||
|
@ -1176,8 +1162,8 @@ __sinit_CMappableObject_cpp:
|
|||
|
||||
.section .rodata
|
||||
.balign 8
|
||||
.global lbl_803CE5F0
|
||||
lbl_803CE5F0:
|
||||
.global sDoorData
|
||||
sDoorData:
|
||||
# ROM: 0x3CB5F0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
|
@ -1203,4 +1189,3 @@ lbl_803CE5F0:
|
|||
.4byte 0
|
||||
.4byte 0
|
||||
.4byte 0x05040706
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ LIBS = [
|
|||
"MetroidPrime/Enemies/CBeetle",
|
||||
["MetroidPrime/HUD/CHUDMemoParms", True],
|
||||
["MetroidPrime/ScriptObjects/CScriptHUDMemo", True],
|
||||
"MetroidPrime/CMappableObject",
|
||||
["MetroidPrime/CMappableObject", False],
|
||||
"MetroidPrime/Player/CPlayerCameraBob",
|
||||
["MetroidPrime/ScriptObjects/CScriptCameraFilterKeyframe", True],
|
||||
["MetroidPrime/ScriptObjects/CScriptCameraBlurKeyframe", True],
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
#define _CMAPWORLDINFO
|
||||
|
||||
class CMapWorldInfo {
|
||||
|
||||
public:
|
||||
bool IsDoorVisited(TEditorId eid) const;
|
||||
};
|
||||
|
||||
#endif // _CMAPWORLDINFO
|
||||
|
|
|
@ -2,8 +2,15 @@
|
|||
#define _CMAPPABLEOBJECT
|
||||
|
||||
#include "MetroidPrime/TGameTypes.hpp"
|
||||
|
||||
#include "Kyoto/Graphics/CColor.hpp"
|
||||
#include "Kyoto/Math/CTransform4f.hpp"
|
||||
|
||||
#include "rstl/pair.hpp"
|
||||
|
||||
class CTweakAutoMapper;
|
||||
class CMapWorldInfo;
|
||||
|
||||
class CMappableObject {
|
||||
public:
|
||||
enum EMappableObjectType {
|
||||
|
@ -37,6 +44,8 @@ public:
|
|||
enum EVisMode { kVM_Always, kVM_MapStationOrVisit, kVM_Visit, kVM_Never, kVM_MapStationOrVisit2 };
|
||||
|
||||
void PostConstruct(const void*);
|
||||
rstl::pair< CColor, CColor > GetDoorColors(int idx, const CMapWorldInfo&, float alpha) const;
|
||||
void Draw(int, const CMapWorldInfo&, float, bool) const;
|
||||
|
||||
private:
|
||||
EMappableObjectType x0_type;
|
||||
|
@ -45,6 +54,11 @@ private:
|
|||
uint xc_;
|
||||
CTransform4f x10_transform;
|
||||
uchar x40_pad[0x10];
|
||||
|
||||
static void ReadAutomapperTweaks(const CTweakAutoMapper&);
|
||||
CTransform4f AdjustTransformForType();
|
||||
|
||||
static CVector3f skDoorVerts[8];
|
||||
};
|
||||
CHECK_SIZEOF(CMappableObject, 0x50)
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "MetroidPrime/Tweaks/ITweakObject.hpp"
|
||||
|
||||
#include "Kyoto/Graphics/CColor.hpp"
|
||||
#include "Kyoto/Math/CVector3f.hpp"
|
||||
#include "Kyoto/TOneStatic.hpp"
|
||||
|
||||
#include "rstl/reserved_vector.hpp"
|
||||
|
@ -15,6 +16,12 @@ public:
|
|||
~CTweakAutoMapper();
|
||||
CTweakAutoMapper(CInputStream&);
|
||||
|
||||
const CColor& GetDoorColor(int idx) const { return x100_doorColors[idx]; }
|
||||
const CColor& GetOpenDoorColor() const { return x11c_openDoorColor; }
|
||||
const CVector3f& GetDoorCenter() const {
|
||||
return CVector3f(xa4_doorCenterA, xa8_doorCenterB, xac_doorCenterC);
|
||||
}
|
||||
|
||||
private:
|
||||
bool x4_24_showOneMiniMapArea : 1;
|
||||
bool x4_25_ : 1;
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
#ifndef _CTWEAKPLAYERRES
|
||||
#define _CTWEAKPLAYERRES
|
||||
|
||||
#include "Kyoto/SObjectTag.hpp"
|
||||
|
||||
struct CTweakPlayerRes {
|
||||
public:
|
||||
CAssetId x4_saveStationIcon;
|
||||
CAssetId x8_missileStationIcon;
|
||||
CAssetId xc_elevatorIcon;
|
||||
CAssetId x10_minesBreakFirstTopIcon;
|
||||
CAssetId x14_minesBreakFirstBottomIcon;
|
||||
};
|
||||
|
||||
extern CTweakPlayerRes* gpTweakPlayerRes;
|
||||
|
||||
#endif // _CTWEAKPLAYERRES
|
|
@ -0,0 +1,200 @@
|
|||
#include "MetroidPrime/CMappableObject.hpp"
|
||||
|
||||
#include "MetroidPrime/CMapWorldInfo.hpp"
|
||||
#include "MetroidPrime/Tweaks/CTweakAutoMapper.hpp"
|
||||
#include "MetroidPrime/Tweaks/CTweakPlayerRes.hpp"
|
||||
|
||||
#include "Kyoto/CSimplePool.hpp"
|
||||
#include "Kyoto/Graphics/CGX.hpp"
|
||||
#include "Kyoto/Graphics/CGraphics.hpp"
|
||||
#include "Kyoto/Graphics/CTexture.hpp"
|
||||
#include "Kyoto/SObjectTag.hpp"
|
||||
#include "Kyoto/TToken.hpp"
|
||||
|
||||
#include "rstl/math.hpp"
|
||||
|
||||
struct SDrawData {
|
||||
int x0_;
|
||||
int x4_;
|
||||
int x8_;
|
||||
uchar xc_idxA;
|
||||
uchar xd_idxB;
|
||||
uchar xe_idxC;
|
||||
uchar xf_idxD;
|
||||
};
|
||||
static const SDrawData sDoorData[6] = {
|
||||
{0x00000000, 0x00000000, 0xBF800000, 6, 4, 2, 0},
|
||||
{0x00000000, 0x00000000, 0x3F800000, 3, 1, 7, 5},
|
||||
{0x00000000, 0xBF800000, 0x3F800000, 1, 0, 5, 4},
|
||||
{0x00000000, 0x3F800000, 0x3F800000, 7, 6, 3, 2},
|
||||
{0xBF800000, 0x00000000, 0x00000000, 3, 2, 1, 0},
|
||||
{0x3F800000, 0x00000000, 0x00000000, 5, 4, 7, 6},
|
||||
};
|
||||
|
||||
CVector3f CMappableObject::skDoorVerts[8] = {
|
||||
CVector3f::Zero(), CVector3f::Zero(), CVector3f::Zero(), CVector3f::Zero(),
|
||||
CVector3f::Zero(), CVector3f::Zero(), CVector3f::Zero(), CVector3f::Zero(),
|
||||
};
|
||||
|
||||
void CMappableObject::ReadAutomapperTweaks(const CTweakAutoMapper& tweaks) {
|
||||
const CVector3f& center = tweaks.GetDoorCenter();
|
||||
|
||||
// skDoorVerts[0] = CVector3f(-center.GetZ(), -center.GetY(), 0.f);
|
||||
// skDoorVerts[1] = CVector3f(-center.GetZ(), skDoorVerts[0].GetY(), center.GetX() * 2.0f);
|
||||
// skDoorVerts[2] = CVector3f(-center.GetZ(), center.GetY(), 0.f);
|
||||
// skDoorVerts[3] = CVector3f(-center.GetZ(), skDoorVerts[2].GetY(), skDoorVerts[1].GetZ());
|
||||
|
||||
// skDoorVerts[4] = CVector3f(-center.GetZ() * 0.2f, skDoorVerts[0].GetY(), 0.f);
|
||||
// skDoorVerts[5] = CVector3f(skDoorVerts[4].GetX(), skDoorVerts[0].GetY(),
|
||||
// skDoorVerts[1].GetZ()); skDoorVerts[6] = CVector3f(skDoorVerts[4].GetX(),
|
||||
// skDoorVerts[2].GetY(), 0.f); skDoorVerts[7] = CVector3f(skDoorVerts[4].GetX(),
|
||||
// skDoorVerts[2].GetY(), skDoorVerts[1].GetZ());
|
||||
|
||||
skDoorVerts[0] = CVector3f(-center.GetZ(), -center.GetY(), 0.f);
|
||||
skDoorVerts[1] = CVector3f(-center.GetZ(), -center.GetY(), 2.f * center.GetX());
|
||||
skDoorVerts[2] = CVector3f(-center.GetZ(), center.GetY(), 0.f);
|
||||
skDoorVerts[3] = CVector3f(-center.GetZ(), center.GetY(), 2.f * center.GetX());
|
||||
skDoorVerts[4] = CVector3f(.2f * -center.GetZ(), -center.GetY(), 0.f);
|
||||
skDoorVerts[5] = CVector3f(.2f * -center.GetZ(), -center.GetY(), 2.f * center.GetX());
|
||||
skDoorVerts[6] = CVector3f(.2f * -center.GetZ(), center.GetY(), 0.f);
|
||||
skDoorVerts[7] = CVector3f(.2f * -center.GetZ(), center.GetY(), 2.f * center.GetX());
|
||||
}
|
||||
|
||||
rstl::pair< CColor, CColor >
|
||||
CMappableObject::GetDoorColors(int curAreaId, const CMapWorldInfo& mwInfo, float alpha) const {
|
||||
CColor firstColor(0xff00ffff);
|
||||
bool areaNumMatches = x8_objId.AreaNum() == curAreaId;
|
||||
bool doorVisited = mwInfo.IsDoorVisited(x8_objId);
|
||||
|
||||
if (areaNumMatches) {
|
||||
if (doorVisited && x0_type == kMOT_ShieldDoor) {
|
||||
firstColor = gpTweakAutoMapper->GetDoorColor(0);
|
||||
} else {
|
||||
int colorIdx = 0;
|
||||
switch (x0_type) {
|
||||
case kMOT_ShieldDoor:
|
||||
colorIdx = 1;
|
||||
break;
|
||||
case kMOT_IceDoor:
|
||||
case kMOT_IceDoorCeiling:
|
||||
case kMOT_IceDoorFloor:
|
||||
case kMOT_IceDoorFloor2:
|
||||
colorIdx = 2;
|
||||
break;
|
||||
case kMOT_WaveDoor:
|
||||
case kMOT_WaveDoorCeiling:
|
||||
case kMOT_WaveDoorFloor:
|
||||
case kMOT_WaveDoorFloor2:
|
||||
colorIdx = 3;
|
||||
break;
|
||||
case kMOT_PlasmaDoor:
|
||||
case kMOT_PlasmaDoorCeiling:
|
||||
case kMOT_PlasmaDoorFloor:
|
||||
case kMOT_PlasmaDoorFloor2:
|
||||
colorIdx = 4;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
firstColor = gpTweakAutoMapper->GetDoorColor(colorIdx);
|
||||
}
|
||||
|
||||
} else if (doorVisited) {
|
||||
firstColor = gpTweakAutoMapper->GetOpenDoorColor();
|
||||
} else {
|
||||
firstColor = CColor(0);
|
||||
}
|
||||
|
||||
firstColor = firstColor.WithAlphaModulatedBy(alpha);
|
||||
|
||||
float r = rstl::min_val(1.0f, firstColor.GetRed() * 1.4f);
|
||||
float g = rstl::min_val(1.0f, firstColor.GetGreen() * 1.4f);
|
||||
float b = rstl::min_val(1.0f, firstColor.GetBlue() * 1.4f);
|
||||
float a = rstl::min_val(1.0f, firstColor.GetAlpha() * 1.4f);
|
||||
return rstl::pair< CColor, CColor >(firstColor, CColor(r, g, b, a));
|
||||
}
|
||||
|
||||
void CMappableObject::PostConstruct(const void*) { x10_transform = AdjustTransformForType(); }
|
||||
|
||||
void CMappableObject::Draw(int curArea, const CMapWorldInfo& mwInfo, float alpha,
|
||||
bool needsVtxLoad) const {
|
||||
bool flag = -1 < x0_type && x0_type < 0x10;
|
||||
if (flag) {
|
||||
rstl::pair< CColor, CColor > colors = GetDoorColors(curArea, mwInfo, alpha);
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
if (needsVtxLoad) {
|
||||
CGX::SetArray(GX_VA_POS, skDoorVerts, '\f');
|
||||
}
|
||||
CGX::SetTevKColor(GX_KCOLOR0, colors.first.GetGXColor());
|
||||
CGX::Begin(GX_TRIANGLESTRIP, GX_VTXFMT0, 4);
|
||||
GXPosition1x8(sDoorData[i].xc_idxA);
|
||||
GXPosition1x8(sDoorData[i].xd_idxB);
|
||||
GXPosition1x8(sDoorData[i].xe_idxC);
|
||||
GXPosition1x8(sDoorData[i].xf_idxD);
|
||||
CGX::End();
|
||||
|
||||
CGX::SetTevKColor(GX_KCOLOR0, colors.second.GetGXColor());
|
||||
CGX::Begin(GX_LINESTRIP, GX_VTXFMT0, 5);
|
||||
GXPosition1x8(sDoorData[i].xc_idxA);
|
||||
GXPosition1x8(sDoorData[i].xd_idxB);
|
||||
GXPosition1x8(sDoorData[i].xf_idxD);
|
||||
GXPosition1x8(sDoorData[i].xe_idxC);
|
||||
GXPosition1x8(sDoorData[i].xc_idxA);
|
||||
CGX::End();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
CAssetId iconRes = kInvalidAssetId;
|
||||
CColor iconColor = CColor(0xffffffff);
|
||||
|
||||
switch (x0_type) {
|
||||
case kMOT_DownArrowYellow:
|
||||
iconRes = gpTweakPlayerRes->x10_minesBreakFirstTopIcon;
|
||||
iconColor = CColor(0xffff96ff);
|
||||
break;
|
||||
case kMOT_UpArrowYellow:
|
||||
iconRes = gpTweakPlayerRes->x14_minesBreakFirstBottomIcon;
|
||||
iconColor = CColor(0xffff96ff);
|
||||
break;
|
||||
case kMOT_DownArrowGreen:
|
||||
iconRes = gpTweakPlayerRes->x10_minesBreakFirstTopIcon;
|
||||
iconColor = CColor(0x64ff96ff);
|
||||
break;
|
||||
case kMOT_UpArrowGreen:
|
||||
iconRes = gpTweakPlayerRes->x14_minesBreakFirstBottomIcon;
|
||||
iconColor = CColor(0x64ff96ff);
|
||||
break;
|
||||
case kMOT_DownArrowRed:
|
||||
iconRes = gpTweakPlayerRes->x10_minesBreakFirstTopIcon;
|
||||
iconColor = CColor(0xff6496ff);
|
||||
break;
|
||||
case kMOT_UpArrowRed:
|
||||
iconRes = gpTweakPlayerRes->x14_minesBreakFirstBottomIcon;
|
||||
iconColor = CColor(0xff6496ff);
|
||||
break;
|
||||
case kMOT_SaveStation:
|
||||
iconRes = gpTweakPlayerRes->x4_saveStationIcon;
|
||||
break;
|
||||
case kMOT_MissileStation:
|
||||
iconRes = gpTweakPlayerRes->x8_missileStationIcon;
|
||||
break;
|
||||
default:
|
||||
iconRes = gpTweakPlayerRes->xc_elevatorIcon;
|
||||
break;
|
||||
}
|
||||
TLockedToken< CTexture > tex = gpSimplePool->GetObj(SObjectTag('TXTR', iconRes));
|
||||
tex->Load(GX_TEXMAP0, CTexture::kCM_Repeat);
|
||||
CGraphics::SetTevOp(kTS_Stage0, CGraphics::kEnvModulate);
|
||||
CGraphics::StreamBegin(kP_TriangleStrip);
|
||||
CGraphics::StreamColor(iconColor.WithAlphaOf(alpha));
|
||||
CGraphics::StreamTexcoord(0.0f, 1.0f);
|
||||
CGraphics::StreamVertex(-2.6f, 0.0f, 2.6f);
|
||||
CGraphics::StreamTexcoord(0.0f, 0.0f);
|
||||
CGraphics::StreamVertex(-2.6f, 0.0f, -2.6f);
|
||||
CGraphics::StreamTexcoord(1.0f, 1.0f);
|
||||
CGraphics::StreamVertex(2.6f, 0.0f, 2.6f);
|
||||
CGraphics::StreamTexcoord(1.0f, 0.0f);
|
||||
CGraphics::StreamVertex(2.6f, 0.0f, -2.6f);
|
||||
CGraphics::StreamEnd();
|
||||
}
|
Loading…
Reference in New Issue