Compare commits

...

3 Commits

Author SHA1 Message Date
RyzenDew fad254306b Simple correction and added a dep for fedora
sdl2-devel > SDL2-devel
added g++
2022-05-03 11:47:22 -04:00
Blake Warner d76dff5a65 converted save format to be emulator compatible (breaks previous save backwards compatibility) 2022-05-03 11:44:38 -04:00
Blake Warner 0c5b195d1d more linux fixes 2022-05-03 11:44:26 -04:00
63 changed files with 1251 additions and 397 deletions

@ -1 +1 @@
Subproject commit f495dd420927f0284211f1f98bdacf2a175388e8
Subproject commit a50281d820d6cd1aceff7f5c86a16547cb9f278f

View File

@ -169,9 +169,14 @@ Linux does not currently work. The below steps are for development purposes.
```
Debian/Ubuntu
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install gcc-multilib g++-multilib
sudo apt install libsdl2-dev
sudo apt install libsdl2-dev:i386
sudo apt install libpng-dev
sudo apt install libfreetype6-dev
sudo apt install libfreetype6-dev:i386
sudo apt install python3
sudo apt install python3-pip
sudo apt install meson
@ -189,13 +194,14 @@ sudo pacman -S libpng
Fedora Linux
sudo dnf in gcc
sudo dnf in sdl2-devel
sudo dnf in SDL2-devel
sudo dnf in meson
sudo dnf in python3-pip
sudo dnf in libpng
sudo dnf in g++
setup.py -b EUR_MQD
meson setup linux
meson setup linux --cross-file x86-linux-gnu
cd linux
ninja
```

View File

@ -49,6 +49,7 @@ void Math_Vec3f_Copy(Vec3f* dest, Vec3f* src);
void Math_Vec3f_Diff(Vec3f* a, Vec3f* b, Vec3f* dest);
f32 Math_Vec3f_DistXYZ(Vec3f* a, Vec3f* b);
f32 Math_Vec3f_DistXYZAndStoreDiff(Vec3f* a, Vec3f* b, Vec3f* dest);
f32 Math_Vec3f_DistXYZAndStoreDiff(const Vec3f& a, const Vec3f& b, Vec3f* dest);
f32 Math_Vec3f_DistXZ(Vec3f* a, Vec3f* b);
s16 Math_Vec3f_Pitch(Vec3f* a, Vec3f* b);
void Math_Vec3f_Scale(Vec3f* vec, f32 scaleF);

View File

@ -42,74 +42,121 @@
#define POINTER_SUB(a, b) (MAX((uintptr_t)a, (uintptr_t)b) - MIN((uintptr_t)a, (uintptr_t)b))
#define POINTER_SUB2(a, b) (MAX((uintptr_t)a.get(), (uintptr_t)b.get()) - MIN((uintptr_t)a.get(), (uintptr_t)b.get()))
struct s16be
template <typename T> static constexpr const T byteswap(T value);
template <>
static constexpr const s16 byteswap<s16>(s16 value)
{
s16be() : value(0)
return (s16)((u16)value >> 8) | ((u16)value << 8);
}
template <>
static constexpr const u16 byteswap<u16>(u16 value)
{
return (value >> 8) | (value << 8);
}
template <>
static constexpr const u32 byteswap<u32>(u32 value)
{
return u32(byteswap<u16>(value) << 16) | byteswap<u16>(value >> 16);
}
template <>
constexpr const s32 byteswap<s32>(s32 value)
{
return s32(byteswap<u16>(value) << 16) | byteswap<u16>(value >> 16);
}
template <>
constexpr const f32 byteswap<f32>(f32 value)
{
u8* ptr = (u8*)&value;
const u8 r[4] = {ptr[3], ptr[2], ptr[1], ptr[0]};
return *(f32*)r;
}
template<class T>
struct BE
{
BE() : m_value(0)
{
}
s16be(s16 v) : value((s16)BE16((u16)v))
BE(T v) : m_value(byteswap<T>(v))
{
}
operator s16() const
BE& operator-=(T v)
{
return (s16)BE16((u16)value);
*this = value() - v;
return *this;
}
s16 value;
BE& operator+=(T v)
{
*this = value() + v;
return *this;
}
BE& operator^=(T v)
{
*this = value() ^ v;
return *this;
}
BE& operator|=(T v)
{
*this = value() | v;
return *this;
}
BE& operator&=(T v)
{
*this = value() & v;
return *this;
}
BE& operator++()
{
return operator+=(1);
}
BE operator++(int)
{
T s = value();
operator+=(1);
return s;
}
BE& operator--()
{
return operator-=(1);
}
BE operator--(int)
{
T s = value();
operator-=(1);
return s;
}
operator T() const
{
return (T)byteswap<T>(m_value);
}
T value() const
{
return m_value;
}
T m_value;
};
struct u16be
{
u16be() : value(0)
{
}
typedef BE<u16> u16be;
typedef BE<s16> s16be;
typedef BE<u32> u32be;
typedef BE<s32> s32be;
typedef BE<f32> f32be;
u16be(u16 v) : value((u16)BE16((u16)v))
{
}
operator u16() const
{
return (u16)BE16((u16)value);
}
u16 value;
};
struct s32be
{
s32be() : value(0)
{
}
s32be(s32 v) : value((s32)BE32((u32)v))
{
}
operator s32() const
{
return (s32)BE32((u32)value);
}
s32 value;
};
struct u32be
{
u32be() : value(0)
{
}
u32be(u32 v) : value((u32)BE32((u32)v))
{
}
operator u32() const
{
return (u32)BE32((u32)value);
}
u32 value;
};

View File

@ -2,6 +2,7 @@
#include <math.h>
#include "framerate.h"
#include "ultra64/types.h"
#include "porting_defs.h"
#include "globalctx.h"
#define VEC_SET(V, X, Y, Z) \
@ -20,11 +21,22 @@ struct Vec2f
f32 x, y;
}; // size = 0x08
struct Vec3fbe;
struct Vec3f
{
Vec3f& operator=(const Vec3f& a);
f32 x, y, z;
}; // size = 0x0C
struct Vec3fbe
{
Vec3fbe& operator=(const Vec3fbe& a);
operator Vec3f() const;
f32be x, y, z;
}; // size = 0x0C
struct Vec3us
{
u16 x, y, z;
@ -35,11 +47,21 @@ struct Vec3s
s16 x, y, z;
}; // size = 0x06
struct Vec3sbe
{
s16be x, y, z;
}; // size = 0x06
struct Vec3i
{
s32 x, y, z;
}; // size = 0x0C
struct Vec3ibe
{
s32be x, y, z;
}; // size = 0x0C
struct VecRot
{
VecRot();

View File

@ -10,15 +10,48 @@ struct FileChooseContext;
#define SLOT_SIZE 0x1450
struct ItemEquips;
struct Inventory;
struct FaroresWindData;
struct HorseData;
struct ItemEquipsBE
{
ItemEquipsBE& operator=(const ItemEquips& a);
/* 0x00 */ u8 buttonItems[4];
/* 0x04 */ u8 cButtonSlots[3];
/* 0x08 */ u16be equipment;
}; // size = 0x0A
struct ItemEquips
{
ItemEquips& operator=(const ItemEquipsBE& a);
/* 0x00 */ u8 buttonItems[4];
/* 0x04 */ u8 cButtonSlots[3];
/* 0x08 */ u16 equipment;
}; // size = 0x0A
struct InventoryBE
{
InventoryBE& operator=(const Inventory& a);
/* 0x00 */ u8 items[24];
/* 0x18 */ s8 ammo[16];
/* 0x28 */ u16be equipment;
// u16 equipmentPadding;
/* 0x2C */ u32be upgrades;
/* 0x30 */ u32be questItems;
/* 0x34 */ u8 dungeonItems[20];
/* 0x48 */ s8 dungeonKeys[19];
/* 0x5B */ s8 defenseHearts;
/* 0x5C */ s16be gsTokens;
// s16 gsTokensPadding;
}; // size = 0x60
static_assert(sizeof(InventoryBE) == 0x60, "Save Inventory incorrect size");
struct Inventory
{
Inventory& operator=(const InventoryBE& a);
/* 0x00 */ u8 items[24];
/* 0x18 */ s8 ammo[16];
/* 0x28 */ u16 equipment;
@ -34,6 +67,17 @@ struct Inventory
static_assert(sizeof(Inventory) == 0x60, "Save Inventory incorrect size");
struct SavedSceneFlagsBE
{
/* 0x00 */ u32be chest;
/* 0x04 */ u32be swch;
/* 0x08 */ u32be clear;
/* 0x0C */ u32be collect;
/* 0x10 */ u32be unk;
/* 0x14 */ u32be rooms;
/* 0x18 */ u32be floors;
}; // size = 0x1C
struct SavedSceneFlags
{
/* 0x00 */ u32 chest;
@ -45,15 +89,27 @@ struct SavedSceneFlags
/* 0x18 */ u32 floors;
}; // size = 0x1C
struct HorseDataBE
{
HorseDataBE& operator=(const HorseData& a);
/* 0x00 */ s16be scene;
/* 0x02 */ Vec3sbe pos;
/* 0x08 */ s16be angle;
}; // size = 0x0A
struct HorseData
{
HorseData& operator=(const HorseDataBE& a);
/* 0x00 */ s16 scene;
/* 0x02 */ Vec3s pos;
/* 0x08 */ s16 angle;
}; // size = 0x0A
struct RespawnDataBE;
struct RespawnData
{
operator RespawnDataBE() const;
/* 0x00 */ Vec3f pos;
/* 0x0C */ s16 yaw;
/* 0x0E */ s16 playerParams;
@ -64,8 +120,35 @@ struct RespawnData
/* 0x18 */ u32 tempCollectFlags;
}; // size = 0x1C
struct RespawnDataBE
{
operator RespawnData() const;
/* 0x00 */ Vec3fbe pos;
/* 0x0C */ s16be yaw;
/* 0x0E */ s16be playerParams;
/* 0x10 */ s16be entranceIndex;
/* 0x12 */ u8 roomIndex;
/* 0x13 */ s8 data;
/* 0x14 */ u32be tempSwchFlags;
/* 0x18 */ u32be tempCollectFlags;
}; // size = 0x1C
struct FaroresWindDataBE
{
FaroresWindDataBE& operator=(const FaroresWindData& a);
/* 0x00 */ Vec3ibe pos;
/* 0x0C */ s32be yaw;
/* 0x10 */ s32be playerParams;
/* 0x14 */ s32be entranceIndex;
/* 0x18 */ s32be roomIndex;
/* 0x1C */ s32be set;
/* 0x20 */ s32be tempSwchFlags;
/* 0x24 */ s32be tempCollectFlags;
}; // size = 0x28
struct FaroresWindData
{
FaroresWindData& operator=(const FaroresWindDataBE& a);
/* 0x00 */ Vec3i pos;
/* 0x0C */ s32 yaw;
/* 0x10 */ s32 playerParams;
@ -80,6 +163,35 @@ namespace oot::save
{
static const u8 MAX_SLOTS = 3;
struct PlayerDataBE
{
/* 0x00 */ char newf[6]; // string "ZELDAZ"
/* 0x06 */ s16be deaths;
/* 0x08 */ char playerName[8];
/* 0x10 */ s16be n64ddFlag;
/* 0x12 */ s16be healthCapacity; // "max_life"
/* 0x14 */ s16be health; // "now_life"
/* 0x16 */ s8 magicLevel;
/* 0x17 */ s8 magic;
/* 0x18 */ s16be rupees;
/* 0x1A */ u16be swordHealth;
/* 0x1C */ u16be naviTimer;
/* 0x1E */ u8 magicAcquired;
/* 0x1F */ u8 unk_3B;
/* 0x20 */ u8 doubleMagic;
/* 0x21 */ u8 doubleDefense;
/* 0x22 */ u8 bgsFlag;
/* 0x23 */ u8 ocarinaGameRoundNum;
/* 0x24 */ ItemEquipsBE childEquips;
/* 0x2E */ ItemEquipsBE adultEquips;
/* 0x38 */ u32be unk_54; // this may be incorrect, currently used for alignement
/* 0x3C */ char unk_58[0x0E];
/* 0x4A */ s16be savedSceneNum;
void setMagic();
bool isMagicValid() const;
}; // size = 0x4C
struct PlayerData
{
/* 0x00 */ char newf[6]; // string "ZELDAZ"
@ -87,7 +199,7 @@ namespace oot::save
/* 0x08 */ char playerName[8];
/* 0x10 */ s16 n64ddFlag;
/* 0x12 */ s16 healthCapacity; // "max_life"
/* 0x14 */ s16 health; // "now_life"
/* 0x14 */ s16 health; // "now_life"
/* 0x16 */ s8 magicLevel;
/* 0x17 */ s8 magic;
/* 0x18 */ s16 rupees;
@ -104,29 +216,26 @@ namespace oot::save
/* 0x38 */ u32 unk_54; // this may be incorrect, currently used for alignement
/* 0x3C */ char unk_58[0x0E];
/* 0x4A */ s16 savedSceneNum;
void setMagic();
bool isMagicValid() const;
}; // size = 0x4C
static_assert(sizeof(PlayerData) == 0x4C, "Save PlayerData incorrect size");
static_assert(sizeof(PlayerDataBE) == 0x4C, "Save PlayerData incorrect size");
struct Info
struct InfoBE
{
/* 0x0000 */ PlayerData playerData; // "S_Private" substruct name
/* 0x004C */ ItemEquips equips;
/* 0x0058 */ Inventory inventory;
/* 0x00B8 */ SavedSceneFlags sceneFlags[124];
/* 0x0E48 */ FaroresWindData fw;
/* 0x0000 */ PlayerDataBE playerData; // "S_Private" substruct name
/* 0x004C */ ItemEquipsBE equips;
/* 0x0058 */ InventoryBE inventory;
/* 0x00B8 */ SavedSceneFlagsBE sceneFlags[124];
/* 0x0E48 */ FaroresWindDataBE fw;
/* 0x0E70 */ char unk_E8C[0x10];
/* 0x0E80 */ s32 gsFlags[6];
/* 0x0E80 */ s32be gsFlags[6];
/* 0x0E98 */ char unk_EB4[0x4];
/* 0x0EA8 */ s32 highScores[7];
/* 0x0EB8 */ u16 eventChkInf[14]; // "event_chk_inf"
/* 0x0ED4 */ u16 itemGetInf[4]; // "item_get_inf"
/* 0x0EDC */ u16 infTable[30]; // "inf_table"
/* 0x0EA8 */ s32be highScores[7];
/* 0x0EB8 */ u16be eventChkInf[14]; // "event_chk_inf"
/* 0x0ED4 */ u16be itemGetInf[4]; // "item_get_inf"
/* 0x0EDC */ u16be infTable[30]; // "inf_table"
/* 0x0F18 */ char unk_F34[0x04];
/* 0x0F1C */ u32 worldMapAreaData; // "area_arrival"
/* 0x0F1C */ u32be worldMapAreaData; // "area_arrival"
/* 0x0F20 */ char unk_F3C[0x4];
/* 0x0F24 */ u8 scarecrowCustomSongSet;
/* 0x0F25 */ u8 scarecrowCustomSong[0x360];
@ -134,97 +243,97 @@ namespace oot::save
/* 0x12A9 */ u8 scarecrowSpawnSongSet;
/* 0x12AA */ u8 scarecrowSpawnSong[0x80];
/* 0x132A */ char unk_1346[0x02];
/* 0x132C */ HorseData horseData;
/* 0x1336 */ u16 checksum; // "check_sum"
/* 0x132C */ HorseDataBE horseData;
/* 0x1336 */ u16be checksum; // "check_sum"
};
static_assert(offsetof(Info, inventory) == 0x58, "Inventory out of alignment");
static_assert(sizeof(Info) == 0x1338, "Save Info incorrect size");
static_assert(offsetof(InfoBE, inventory) == 0x58, "Inventory out of alignment");
static_assert(sizeof(InfoBE) == 0x1338, "Save Info incorrect size");
struct Save
struct SaveBE
{
/* 0x00 */ s32 entranceIndex;
/* 0x04 */ s32 linkAge; // 0: Adult; 1: Child
/* 0x08 */ s32 cutsceneIndex;
/* 0x0C */ u16 dayTime; // "zelda_time"
/* 0x00 */ s32be entranceIndex;
/* 0x04 */ s32be linkAge; // 0: Adult; 1: Child
/* 0x08 */ s32be cutsceneIndex;
/* 0x0C */ u16be dayTime; // "zelda_time"
// u16 dayTimePadding;
/* 0x10 */ s32 nightFlag;
/* 0x14 */ s32 totalDays;
/* 0x18 */ s32 bgsDayCount; // increments with totalDays, gets reset by goron for bgs and one other use
/* 0x1C */ Info info; // "information"
/* 0x10 */ s32be nightFlag;
/* 0x14 */ s32be totalDays;
/* 0x18 */ s32be bgsDayCount; // increments with totalDays, gets reset by goron for bgs and one other use
/* 0x1C */ InfoBE info; // "information"
u16 checksum();
};
static_assert(offsetof(Save, dayTime) == 0x0C, "dayTime out of alignment");
static_assert(offsetof(Save, nightFlag) == 0x10, "nightFlag out of alignment");
static_assert(sizeof(Save) == 0x1C + sizeof(Info), "Save incorrect size");
static_assert(offsetof(SaveBE, dayTime) == 0x0C, "dayTime out of alignment");
static_assert(offsetof(SaveBE, nightFlag) == 0x10, "nightFlag out of alignment");
static_assert(sizeof(SaveBE) == 0x1C + sizeof(InfoBE), "Save incorrect size");
struct Slot
{
Save save;
SaveBE save;
/* 0x1354 */ s32 fileNum; // "file_no"
/* 0x1354 */ s32be fileNum; // "file_no"
/* 0x1358 */ char unk_1358[0x0004];
/* 0x135C */ s32 gameMode;
/* 0x1360 */ s32 sceneSetupIndex;
/* 0x1364 */ s32 respawnFlag; // "restart_flag"
/* 0x1368 */ RespawnData respawn[3]; // "restart_data"
/* 0x13BC */ f32 entranceSpeed;
/* 0x13C0 */ u16 entranceSound;
/* 0x135C */ s32be gameMode;
/* 0x1360 */ s32be sceneSetupIndex;
/* 0x1364 */ s32be respawnFlag; // "restart_flag"
/* 0x1368 */ RespawnDataBE respawn[3]; // "restart_data"
/* 0x13BC */ f32be entranceSpeed;
/* 0x13C0 */ u16be entranceSound;
/* 0x13C2 */ char unk_13C2[0x0001];
/* 0x13C3 */ u8 unk_13C3;
/* 0x13C4 */ s16 dogParams;
/* 0x13C4 */ s16be dogParams;
/* 0x13C6 */ u8 textTriggerFlags;
/* 0x13C7 */ u8 showTitleCard;
/* 0x13C8 */ s16 nayrusLoveTimer;
/* 0x13C8 */ s16be nayrusLoveTimer;
/* 0x13CA */ char unk_13CA[0x0002];
/* 0x13CC */ s16 rupeeAccumulator;
/* 0x13CE */ s16 timer1State;
/* 0x13D0 */ s16 timer1Value;
/* 0x13D2 */ s16 timer2State;
/* 0x13D4 */ s16 timer2Value;
/* 0x13D6 */ s16 timerX[2];
/* 0x13DA */ s16 timerY[2];
/* 0x13CC */ s16be rupeeAccumulator;
/* 0x13CE */ s16be timer1State;
/* 0x13D0 */ s16be timer1Value;
/* 0x13D2 */ s16be timer2State;
/* 0x13D4 */ s16be timer2Value;
/* 0x13D6 */ s16be timerX[2];
/* 0x13DA */ s16be timerY[2];
/* 0x13DE */ char unk_13DE[0x0002];
/* 0x13E0 */ u8 seqId;
/* 0x13E1 */ u8 natureAmbienceId;
/* 0x13E2 */ u8 buttonStatus[5];
/* 0x13E7 */ u8 startDemo; // alpha related
/* 0x13E8 */ u16 unk_13E8; // alpha type?
/* 0x13EA */ u16 unk_13EA; // also alpha type?
/* 0x13EC */ u16 unk_13EC; // alpha type counter?
/* 0x13EE */ u16 unk_13EE; // previous alpha type?
/* 0x13F0 */ s16 unk_13F0; // magic related
/* 0x13F2 */ s16 unk_13F2; // magic related
/* 0x13F4 */ s16 unk_13F4; // magic related
/* 0x13F6 */ s16 unk_13F6; // magic related
/* 0x13F8 */ s16 unk_13F8; // magic related
/* 0x13FA */ u16 eventInf[4]; // "event_inf"
/* 0x1402 */ u16 mapIndex; // intended for maps/minimaps but commonly used as the dungeon index
/* 0x1404 */ u16 minigameState;
/* 0x1406 */ u16 minigameScore; // "yabusame_total"
/* 0x13E8 */ u16be unk_13E8; // alpha type?
/* 0x13EA */ u16be unk_13EA; // also alpha type?
/* 0x13EC */ u16be unk_13EC; // alpha type counter?
/* 0x13EE */ u16be unk_13EE; // previous alpha type?
/* 0x13F0 */ s16be unk_13F0; // magic related
/* 0x13F2 */ s16be unk_13F2; // magic related
/* 0x13F4 */ s16be unk_13F4; // magic related
/* 0x13F6 */ s16be unk_13F6; // magic related
/* 0x13F8 */ s16be unk_13F8; // magic related
/* 0x13FA */ u16be eventInf[4]; // "event_inf"
/* 0x1402 */ u16be mapIndex; // intended for maps/minimaps but commonly used as the dungeon index
/* 0x1404 */ u16be minigameState;
/* 0x1406 */ u16be minigameScore; // "yabusame_total"
/* 0x1408 */ char unk_1408[0x0001];
/* 0x1409 */ u8 language; // NTSC 0: Japanese; 1: English | PAL 0: English; 1: German; 2: French
/* 0x140A */ u8 audioSetting;
/* 0x140B */ char unk_140B[0x0001];
/* 0x140C */ u8 zTargetSetting; // 0: Switch; 1: Hold
/* 0x140E */ u16 forcedSeqId; // immediately start playing the sequence if set
/* 0x140E */ u16be forcedSeqId; // immediately start playing the sequence if set
/* 0x1410 */ u8 unk_1410; // transition related
/* 0x1411 */ char unk_1411[0x0001];
/* 0x1412 */ u16 nextCutsceneIndex;
/* 0x1412 */ u16be nextCutsceneIndex;
/* 0x1414 */ u8 cutsceneTrigger;
/* 0x1415 */ u8 chamberCutsceneNum;
/* 0x1416 */ u16 nextDayTime; // "next_zelda_time"
/* 0x1416 */ u16be nextDayTime; // "next_zelda_time"
/* 0x1418 */ u8 fadeDuration;
/* 0x1419 */ u8 unk_1419; // transition related
/* 0x141A */ u16 skyboxTime;
/* 0x141A */ u16be skyboxTime;
/* 0x141C */ u8 dogIsLost;
/* 0x141D */ u8 nextTransition;
/* 0x141E */ char unk_141E[0x0002];
/* 0x1420 */ s16 worldMapArea;
/* 0x1422 */ s16 sunsSongState; // controls the effects of suns song
/* 0x1424 */ s16 healthAccumulator;
/* 0x1420 */ s16be worldMapArea;
/* 0x1422 */ s16be sunsSongState; // controls the effects of suns song
/* 0x1424 */ s16be healthAccumulator;
u8 padding[0x28];
}; // size = 0x1428

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
#include "actor_common.h"
#include "overlays\misc\ovl_kaleido_scope\z_kaleido_scope.h"
#include "overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h"
static const Vtx sMarkBossVtx[] = {
VTX(-4, 4, 0, 0, 0, 255, 255, 255, 255),

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Arrow_Fire" BaseAddress="0x80865d10" RangeStart="0x9D0" RangeEnd="0x1DF0">
<Texture Name="s1Tex" OutName="fire_tex_1" Format="i8" Width="32" Height="64" Offset="0x9D0" Static="On"/>
<Texture Name="s2Tex" OutName="fire_tex_2" Format="i8" Width="32" Height="64" Offset="0x11D0" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x19D0" Static="On">
<Texture Name="sArrowFire1Tex" OutName="fire_tex_1" Format="i8" Width="32" Height="64" Offset="0x9D0" Static="On"/>
<Texture Name="sArrowFire2Tex" OutName="fire_tex_2" Format="i8" Width="32" Height="64" Offset="0x11D0" Static="On"/>
<Array Name="sArrowFireVtx" Count="43" Offset="0x19D0" Static="On">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1C80" Static="On"/>
<DList Name="sModelDL" Offset="0x1D30" Static="On"/>
<DList Name="sArrowFireMaterialDL" Offset="0x1C80" Static="On"/>
<DList Name="sArrowFireModelDL" Offset="0x1D30" Static="On"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Arrow_Ice" BaseAddress="0x80867cd0" RangeStart="0x9F0" RangeEnd="0x1E10">
<Texture Name="s1Tex" OutName="ice_tex_1" Format="i8" Width="32" Height="64" Offset="0x9F0" Static="On"/>
<Texture Name="s2Tex" OutName="ice_tex_2" Format="i8" Width="32" Height="64" Offset="0x11F0" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x19F0" Static="On">
<Texture Name="sArrowIce1Tex" OutName="ice_tex_1" Format="i8" Width="32" Height="64" Offset="0x9F0" Static="On"/>
<Texture Name="sArrowIce2Tex" OutName="ice_tex_2" Format="i8" Width="32" Height="64" Offset="0x11F0" Static="On"/>
<Array Name="sArrowIceVtx" Count="43" Offset="0x19F0" Static="On">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1CA0" Static="On"/>
<DList Name="sModelDL" Offset="0x1D50" Static="On"/>
<DList Name="sArrowIceMaterialDL" Offset="0x1CA0" Static="On"/>
<DList Name="sArrowIceModelDL" Offset="0x1D50" Static="On"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Arrow_Light" BaseAddress="0x80869cb0" RangeStart="0xA00" RangeEnd="0x1E20">
<Texture Name="s1Tex" OutName="light_tex_1" Format="i8" Width="32" Height="64" Offset="0xA00" Static="On"/>
<Texture Name="s2Tex" OutName="light_tex_2" Format="i8" Width="32" Height="64" Offset="0x1200" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x1A00" Static="On">
<Texture Name="sArrowLight1Tex" OutName="light_tex_1" Format="i8" Width="32" Height="64" Offset="0xA00" Static="On"/>
<Texture Name="sArrowLight2Tex" OutName="light_tex_2" Format="i8" Width="32" Height="64" Offset="0x1200" Static="On"/>
<Array Name="sArrowLightVtx" Count="43" Offset="0x1A00" Static="On">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1CB0" Static="On"/>
<DList Name="sModelDL" Offset="0x1D60" Static="On"/>
<DList Name="sArrowLightMaterialDL" Offset="0x1CB0" Static="On"/>
<DList Name="sArrowLightModelDL" Offset="0x1D60" Static="On"/>
</File>
</Root>

View File

@ -3,14 +3,14 @@
<DList Name="D_809AD278" Offset="0x758"/>
<Array Name="sCylinderVtx" Count="16" Offset="0x798">
<Array Name="sElfMsgCylinderVtx" Count="16" Offset="0x798">
<Vtx/>
</Array>
<DList Name="sCylinderDL" Offset="0x898"/>
<DList Name="sElfMsgCylinderDL" Offset="0x898"/>
<Array Name="sCubeVtx" Count="8" Offset="0x918">
<Array Name="sElfMsgCubeVtx" Count="8" Offset="0x918">
<Vtx/>
</Array>
<DList Name="sCubeDL" Offset="0x998"/>
<DList Name="sElfMsgCubeDL" Offset="0x998"/>
</File>
</Root>

View File

@ -3,9 +3,9 @@
<DList Name="D_809ADC38" Offset="0x538"/>
<Array Name="sCubeVtx" Count="8" Offset="0x578">
<Array Name="sElfMsg2CubeVtx" Count="8" Offset="0x578">
<Vtx/>
</Array>
<DList Name="sCubeDL" Offset="0x5F8"/>
<DList Name="sElfMsg2CubeDL" Offset="0x5F8"/>
</File>
</Root>

View File

@ -1,38 +1,38 @@
<Root>
<File Name="ovl_En_Jsjutan" BaseAddress="0x80A897A0" RangeStart="0x12F8" RangeEnd="0x4C88">
<!-- D_80A8AA98. Carpet texture. -->
<Texture Name="sCarpetTex" OutName="carpet" Format="rgba16" Width="32" Height="64" Offset="0x12F8"/>
<Texture Name="sEnJsjutanCarpetTex" OutName="carpet" Format="rgba16" Width="32" Height="64" Offset="0x12F8"/>
<!-- D_80A8BA98. Carpet's shadow vertices. Same vertex type as sShadowEvenVtx. Used when gameplayFrames is odd. -->
<Array Name="gShadowOddVtx" Count="144" Offset="0x22F8">
<Array Name="gEnJsjutanShadowOddVtx" Count="144" Offset="0x22F8">
<Vtx/>
</Array>
<!-- D_80A8C398. Carpet's shadow vertices. Same vertex type as gShadowOddVtx. Used when gameplayFrames is even. -->
<Array Name="sShadowEvenVtx" Count="144" Offset="0x2BF8">
<Array Name="sEnJsjutanShadowEvenVtx" Count="144" Offset="0x2BF8">
<Vtx/>
</Array>
<!-- D_80A8CC98. Carpet vertices. Same vertex type as sCarpetEvenVtx. Used when gameplayFrames is odd. -->
<Array Name="sCarpetOddVtx" Count="144" Offset="0x34F8">
<Array Name="sEnJsjutanCarpetOddVtx" Count="144" Offset="0x34F8">
<Vtx/>
</Array>
<!-- D_80A8E610. Variable declared in `.bss` of EnJsjutan. Used by sShadowMaterialDL -->
<Symbol Name="sShadowTex" Type="u8" TypeSize="1" Count="0x800" Offset="0x4E70"/>
<Symbol Name="sEnJsjutanShadowTex" Type="u8" TypeSize="1" Count="0x800" Offset="0x4E70"/>
<!-- D_80A8D598. Draws the carpet's texture. -->
<DList Name="sCarpetMaterialDL" Offset="0x3DF8"/>
<DList Name="sEnJsjutanCarpetMaterialDL" Offset="0x3DF8"/>
<!-- D_80A8D618. Draws the carpet's shadow texture. -->
<DList Name="sShadowMaterialDL" Offset="0x3E78"/>
<DList Name="sEnJsjutanShadowMaterialDL" Offset="0x3E78"/>
<!-- D_80A8D688. Draws vertexs in segment 0x0C. -->
<DList Name="sModelDL" Offset="0x3EE8"/>
<DList Name="sEnJsjutanModelDL" Offset="0x3EE8"/>
<!-- D_80A8DAB8. Carpet vertices. Same vertex type as sCarpetOddVtx. Used when gameplayFrames is even. -->
<Array Name="sCarpetEvenVtx" Count="144" Offset="0x4318">
<Array Name="sEnJsjutanCarpetEvenVtx" Count="144" Offset="0x4318">
<Vtx/>
</Array>
<!-- D_80A8E400 -->
<Collision Name="sCol" Offset="0x4C60"/>
<Collision Name="sEnJsjutanCol" Offset="0x4C60"/>
</File>
</Root>

View File

@ -1,8 +1,8 @@
<Root>
<File Name="ovl_En_Kanban" BaseAddress="0x80A91FA0" RangeStart="0x2F80" RangeEnd="0x3040">
<Array Name="sShadowVtx" Count="4" Offset="0x2F80">
<Array Name="sEnKanbanShadowVtx" Count="4" Offset="0x2F80">
<Vtx/>
</Array>
<DList Name="sShadowDL" Offset="0x2FC0"/>
<DList Name="sEnKanbanShadowDL" Offset="0x2FC0"/>
</File>
</Root>

View File

@ -1,13 +1,13 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
<File Name="ovl_Magic_Dark" BaseAddress="0x80B873D0" RangeStart="0xD10" RangeEnd="0x1740">
<Texture Name="sDiamondTex" OutName="diamond_texture" Format="i8" Width="32" Height="64" Offset="0xD10"/>
<Texture Name="sMagicDarkDiamondTex" OutName="diamond_texture" Format="i8" Width="32" Height="64" Offset="0xD10"/>
<Array Name="sDiamondVtx" Count="20" Offset="0x1510">
<Array Name="sMagicDarkDiamondVtx" Count="20" Offset="0x1510">
<Vtx/>
</Array>
<DList Name="sDiamondMaterialDL" Offset="0x1650"/>
<DList Name="sDiamondModelDL" Offset="0x1700"/>
<DList Name="sMagicDarkDiamondMaterialDL" Offset="0x1650"/>
<DList Name="sMagicDarkDiamondModelDL" Offset="0x1700"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Magic_Fire" BaseAddress="0x80B88D70" RangeStart="0xB90" RangeEnd="0x21E0">
<Texture Name="sTex" OutName="dins_fire" Format="i8" Width="64" Height="64" Offset="0xB90"/>
<Array Name="sSphereVtx" Count="76" Offset="0x1B90">
<Texture Name="sMagicFireTex" OutName="dins_fire" Format="i8" Width="64" Height="64" Offset="0xB90"/>
<Array Name="sMagicFireSphereVtx" Count="76" Offset="0x1B90">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x2050"/>
<DList Name="sModelDL" Offset="0x2078"/>
<DList Name="sMagicFireMaterialDL" Offset="0x2050"/>
<DList Name="sMagicFireModelDL" Offset="0x2078"/>
</File>
</Root>

View File

@ -1,15 +1,15 @@
<Root>
<File Name="ovl_Magic_Wind" BaseAddress="0x80B8B100" RangeStart="0x780" RangeEnd="0x1C98">
<Skeleton Name="sSkel" Type="Curve" LimbType="Curve" Offset="0x1C90"/>
<CurveAnimation Name="sAnim" SkelOffset="0x1C90" Offset="0x1C50"/>
<Limb Name="sRootLimb" LimbType="Curve" Offset="0x1C60"/>
<Limb Name="sInnerCylinderLimb" LimbType="Curve" Offset="0x1C6C"/>
<Limb Name="sOuterCylinderLimb" LimbType="Curve" Offset="0x1C78"/>
<Array Name="sCylinderVtx" Count="36" Offset="0x780">
<Skeleton Name="sMagicWindSkel" Type="Curve" LimbType="Curve" Offset="0x1C90"/>
<CurveAnimation Name="sMagicWindAnim" SkelOffset="0x1C90" Offset="0x1C50"/>
<Limb Name="sMagicWindRootLimb" LimbType="Curve" Offset="0x1C60"/>
<Limb Name="sMagicWindInnerCylinderLimb" LimbType="Curve" Offset="0x1C6C"/>
<Limb Name="sMagicWindOuterCylinderLimb" LimbType="Curve" Offset="0x1C78"/>
<Array Name="sMagicWindCylinderVtx" Count="36" Offset="0x780">
<Vtx/>
</Array>
<Texture Name="sTex" OutName="magic_wind" Format="i8" Width="64" Height="64" Offset="0x9C0"/>
<DList Name="sInnerCylinderDL" Offset="0x19C0"/>
<DList Name="sOuterCylinderDL" Offset="0x1AC8"/>
<Texture Name="sMagicWindTex" OutName="magic_wind" Format="i8" Width="64" Height="64" Offset="0x9C0"/>
<DList Name="sMagicWindInnerCylinderDL" Offset="0x19C0"/>
<DList Name="sMagicWindOuterCylinderDL" Offset="0x1AC8"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Oceff_Spot" BaseAddress="0x80BA6070" RangeStart="0x7F0" RangeEnd="0xEC8">
<Texture Name="sTex" OutName="sun_song_effect" Format="i8" Width="32" Height="32" Offset="0x7F0"/>
<Array Name="sCylinderVtx" Count="27" Offset="0xBF0">
<Texture Name="sOceffSpotTex" OutName="sun_song_effect" Format="i8" Width="32" Height="32" Offset="0x7F0"/>
<Array Name="sOceffSpotCylinderVtx" Count="27" Offset="0xBF0">
<Vtx/>
</Array>
<DList Name="sCylinderMaterialDL" Offset="0xDA0"/>
<DList Name="sCylinderModelDL" Offset="0xE38"/>
<DList Name="sOceffSpotCylinderMaterialDL" Offset="0xDA0"/>
<DList Name="sOceffSpotCylinderModelDL" Offset="0xE38"/>
</File>
</Root>

View File

@ -1,12 +1,12 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
<File Name="ovl_Oceff_Storm" BaseAddress="0x80BA70E0" RangeStart="0x7B0" RangeEnd="0x1B40">
<Texture Name="sTex" OutName="song_of_storms_effect" Format="i8" Width="64" Height="64" Offset="0x7B0"/>
<DList Name="sMaterialDL" Offset="0x17B0"/>
<Array Name="sCylinderVtx" Count="27" Offset="0x1858">
<Texture Name="sOceffStormTex" OutName="song_of_storms_effect" Format="i8" Width="64" Height="64" Offset="0x7B0"/>
<DList Name="sOceffStormMaterialDL" Offset="0x17B0"/>
<Array Name="sOceffStormCylinderVtx" Count="27" Offset="0x1858">
<Vtx/>
</Array>
<DList Name="sCylinderMaterialDL" Offset="0x1A08"/>
<DList Name="sCylinderModelDL" Offset="0x1AB0"/>
<DList Name="sOceffStormCylinderMaterialDL" Offset="0x1A08"/>
<DList Name="sOceffStormCylinderModelDL" Offset="0x1AB0"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Oceff_Wipe" BaseAddress="0x80BA8D90" RangeStart="0x550" RangeEnd="0xD10">
<Texture Name="sTex" OutName="oceff" Format="i8" Width="32" Height="32" Offset="0x550"/>
<Array Name="sFrustumVtx" Count="40" Offset="0x950">
<Texture Name="sOceffWipeTex" OutName="oceff" Format="i8" Width="32" Height="32" Offset="0x550"/>
<Array Name="sOceffWipeFrustumVtx" Count="40" Offset="0x950">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0xBD0"/>
<DList Name="sFrustumDL" Offset="0xC58"/>
<DList Name="sOceffWipeMaterialDL" Offset="0xBD0"/>
<DList Name="sOceffWipeFrustumDL" Offset="0xC58"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Oceff_Wipe2" BaseAddress="0x80BA9BB0" RangeStart="0x480" RangeEnd="0x16E8">
<Texture Name="s1Tex" OutName="eponas_song_effect_1" Format="i4" Width="64" Height="64" Offset="0x480"/>
<Texture Name="s2Tex" OutName="eponas_song_effect_2" Format="i4" Width="64" Height="64" Offset="0xC80"/>
<Array Name="sFrustumVtx" Count="22" Offset="0x1480">
<Texture Name="sOceffWipe21Tex" OutName="eponas_song_effect_1" Format="i4" Width="64" Height="64" Offset="0x480"/>
<Texture Name="sOceffWipe22Tex" OutName="eponas_song_effect_2" Format="i4" Width="64" Height="64" Offset="0xC80"/>
<Array Name="sOceffWipe2FrustumVtx" Count="22" Offset="0x1480">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x15E0"/>
<DList Name="sFrustumDL" Offset="0x1688"/>
<DList Name="sOceffWipe2MaterialDL" Offset="0x15E0"/>
<DList Name="sOceffWipe2FrustumDL" Offset="0x1688"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Oceff_Wipe3" BaseAddress="0x80BAB3F0" RangeStart="0x480" RangeEnd="0x16C8">
<Texture Name="sTex" OutName="saria_song_effect" Format="i8" Width="64" Height="64" Offset="0x480"/>
<Array Name="sFrustumVtx" Count="22" Offset="0x1480">
<Texture Name="sOceffWipe3Tex" OutName="saria_song_effect" Format="i8" Width="64" Height="64" Offset="0x480"/>
<Array Name="sOceffWipe3FrustumVtx" Count="22" Offset="0x1480">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x15E0"/>
<DList Name="sFrustumDL" Offset="0x1668"/>
<DList Name="sOceffWipe3MaterialDL" Offset="0x15E0"/>
<DList Name="sOceffWipe3FrustumDL" Offset="0x1668"/>
</File>
</Root>

View File

@ -1,12 +1,12 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
<File Name="ovl_Oceff_Wipe4" BaseAddress="0x80BACC10" RangeStart="0x460" RangeEnd="0xF48">
<Texture Name="sTex" OutName="scarecrow_song_effect" Format="i8" Width="32" Height="64" Offset="0x460"/>
<Array Name="sFrustumVtx" Count="22" Offset="0xC60">
<Texture Name="sOceffWipe4Tex" OutName="scarecrow_song_effect" Format="i8" Width="32" Height="64" Offset="0x460"/>
<Array Name="sOceffWipe4FrustumVtx" Count="22" Offset="0xC60">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0xDC0"/>
<DList Name="sUnusedMaterialDL" Offset="0xE28"/>
<DList Name="sMaterial2DL" Offset="0xE90"/>
<DList Name="sOceffWipe4MaterialDL" Offset="0xDC0"/>
<DList Name="sOceffWipe4UnusedMaterialDL" Offset="0xE28"/>
<DList Name="sOceffWipe4Material2DL" Offset="0xE90"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Arrow_Fire" BaseAddress="0x80A5F6B0" RangeStart="0x960" RangeEnd="0x1D30">
<Texture Name="s1Tex" OutName="fire_tex_1" Format="i8" Width="32" Height="64" Offset="0x960" Static="On"/>
<Texture Name="s2Tex" OutName="fire_tex_2" Format="i8" Width="32" Height="64" Offset="0x1160" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x1960" Static="On">
<Texture Name="sArrowFire1Tex" OutName="fire_tex_1" Format="i8" Width="32" Height="64" Offset="0x960" Static="On"/>
<Texture Name="sArrowFire2Tex" OutName="fire_tex_2" Format="i8" Width="32" Height="64" Offset="0x1160" Static="On"/>
<Array Name="sArrowFireVtx" Count="43" Offset="0x1960" Static="On">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1C10" Static="On"/>
<DList Name="sModelDL" Offset="0x1CC0" Static="On"/>
<DList Name="sArrowFireMaterialDL" Offset="0x1C10" Static="On"/>
<DList Name="sArrowFireModelDL" Offset="0x1CC0" Static="On"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Arrow_Ice" BaseAddress="0x80A61570" RangeStart="0x980" RangeEnd="0x1DA0">
<Texture Name="s1Tex" OutName="ice_tex_1" Format="i8" Width="32" Height="64" Offset="0x980" Static="On"/>
<Texture Name="s2Tex" OutName="ice_tex_2" Format="i8" Width="32" Height="64" Offset="0x1180" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x1980" Static="On">
<Texture Name="sArrowIce1Tex" OutName="ice_tex_1" Format="i8" Width="32" Height="64" Offset="0x980" Static="On"/>
<Texture Name="sArrowIce2Tex" OutName="ice_tex_2" Format="i8" Width="32" Height="64" Offset="0x1180" Static="On"/>
<Array Name="sArrowIceVtx" Count="43" Offset="0x1980" Static="On">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1C30" Static="On"/>
<DList Name="sModelDL" Offset="0x1CE0" Static="On"/>
<DList Name="sArrowIceMaterialDL" Offset="0x1C30" Static="On"/>
<DList Name="sArrowIceModelDL" Offset="0x1CE0" Static="On"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Arrow_Light" BaseAddress="0x80A63450" RangeStart="0x990" RangeEnd="0x1DB0">
<Texture Name="s1Tex" OutName="light_tex_1" Format="i8" Width="32" Height="64" Offset="0x990" Static="On"/>
<Texture Name="s2Tex" OutName="light_tex_2" Format="i8" Width="32" Height="64" Offset="0x1190" Static="On"/>
<Array Name="sVtx" Count="43" Offset="0x1990" Static="On">
<Texture Name="sArrowLight1Tex" OutName="light_tex_1" Format="i8" Width="32" Height="64" Offset="0x990" Static="On"/>
<Texture Name="sArrowLight2Tex" OutName="light_tex_2" Format="i8" Width="32" Height="64" Offset="0x1190" Static="On"/>
<Array Name="sArrowLightVtx" Count="43" Offset="0x1990" Static="On">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1C40" Static="On"/>
<DList Name="sModelDL" Offset="0x1CF0" Static="On"/>
<DList Name="sArrowLightMaterialDL" Offset="0x1C40" Static="On"/>
<DList Name="sArrowLightModelDL" Offset="0x1CF0" Static="On"/>
</File>
</Root>

View File

@ -1,38 +1,38 @@
<Root>
<File Name="ovl_En_Jsjutan" BaseAddress="0x80ADCC30" RangeStart="0x12B8" RangeEnd="0x4C48">
<!-- D_80A8AA98. Carpet texture. -->
<Texture Name="sCarpetTex" OutName="carpet" Format="rgba16" Width="32" Height="64" Offset="0x12B8"/>
<Texture Name="sEnJsjutanCarpetTex" OutName="carpet" Format="rgba16" Width="32" Height="64" Offset="0x12B8"/>
<!-- D_80A8BA98. Carpet's shadow vertices. Same vertex type as sShadowEvenVtx. Used when gameplayFrames is odd. -->
<Array Name="gShadowOddVtx" Count="144" Offset="0x22B8">
<Array Name="gEnJsjutanShadowOddVtx" Count="144" Offset="0x22B8">
<Vtx/>
</Array>
<!-- D_80A8C398. Carpet's shadow vertices. Same vertex type as gShadowOddVtx. Used when gameplayFrames is even. -->
<Array Name="sShadowEvenVtx" Count="144" Offset="0x2BB8">
<Array Name="sEnJsjutanShadowEvenVtx" Count="144" Offset="0x2BB8">
<Vtx/>
</Array>
<!-- D_80A8CC98. Carpet vertices. Same vertex type as sCarpetEvenVtx. Used when gameplayFrames is odd. -->
<Array Name="sCarpetOddVtx" Count="144" Offset="0x34B8">
<Array Name="sEnJsjutanCarpetOddVtx" Count="144" Offset="0x34B8">
<Vtx/>
</Array>
<!-- D_80A8E610. Variable declared in `.bss` of EnJsjutan. Used by sShadowMaterialDL -->
<Symbol Name="sShadowTex" Type="u8" TypeSize="1" Count="0x800" Offset="0x4DC0"/>
<Symbol Name="sEnJsjutanShadowTex" Type="u8" TypeSize="1" Count="0x800" Offset="0x4DC0"/>
<!-- D_80A8D598. Draws the carpet's texture. -->
<DList Name="sCarpetMaterialDL" Offset="0x3DB8"/>
<DList Name="sEnJsjutanCarpetMaterialDL" Offset="0x3DB8"/>
<!-- D_80A8D618. Draws the carpet's shadow texture. -->
<DList Name="sShadowMaterialDL" Offset="0x3E38"/>
<DList Name="sEnJsjutanShadowMaterialDL" Offset="0x3E38"/>
<!-- D_80A8D688. Draws vertexs in segment 0x0C. -->
<DList Name="sModelDL" Offset="0x3EA8"/>
<DList Name="sEnJsjutanModelDL" Offset="0x3EA8"/>
<!-- D_80A8DAB8. Carpet vertices. Same vertex type as sCarpetOddVtx. Used when gameplayFrames is even. -->
<Array Name="sCarpetEvenVtx" Count="144" Offset="0x42D8">
<Array Name="sEnJsjutanCarpetEvenVtx" Count="144" Offset="0x42D8">
<Vtx/>
</Array>
<!-- D_80A8E400 -->
<Collision Name="sCol" Offset="0x4C20"/>
<Collision Name="sEnJsjutanCol" Offset="0x4C20"/>
</File>
</Root>

View File

@ -1,8 +1,8 @@
<Root>
<File Name="ovl_En_Kanban" BaseAddress="0x80AA2A00" RangeStart="0x2E70" RangeEnd="0x2F30">
<Array Name="sShadowVtx" Count="4" Offset="0x2E70">
<Array Name="sEnKanbanShadowVtx" Count="4" Offset="0x2E70">
<Vtx/>
</Array>
<DList Name="sShadowDL" Offset="0x2EB0"/>
<DList Name="sEnKanbanShadowDL" Offset="0x2EB0"/>
</File>
</Root>

View File

@ -1,13 +1,13 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
<File Name="ovl_Magic_Dark" BaseAddress="0x80A2C850" RangeStart="0xC90" RangeEnd="0x16C0">
<Texture Name="sDiamondTex" OutName="diamond_texture" Format="i8" Width="32" Height="64" Offset="0xC90"/>
<Texture Name="sMagicDarkDiamondTex" OutName="diamond_texture" Format="i8" Width="32" Height="64" Offset="0xC90"/>
<Array Name="sDiamondVtx" Count="20" Offset="0x1490">
<Array Name="sMagicDarkDiamondVtx" Count="20" Offset="0x1490">
<Vtx/>
</Array>
<DList Name="sDiamondMaterialDL" Offset="0x15D0"/>
<DList Name="sDiamondModelDL" Offset="0x1680"/>
<DList Name="sMagicDarkDiamondMaterialDL" Offset="0x15D0"/>
<DList Name="sMagicDarkDiamondModelDL" Offset="0x1680"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Magic_Fire" BaseAddress="0x8095E560" RangeStart="0xB20" RangeEnd="0x2170">
<Texture Name="sTex" OutName="dins_fire" Format="i8" Width="64" Height="64" Offset="0xB20"/>
<Array Name="sSphereVtx" Count="76" Offset="0x1B20">
<Texture Name="sMagicFireTex" OutName="dins_fire" Format="i8" Width="64" Height="64" Offset="0xB20"/>
<Array Name="sMagicFireSphereVtx" Count="76" Offset="0x1B20">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1FE0"/>
<DList Name="sModelDL" Offset="0x2008"/>
<DList Name="sMagicFireMaterialDL" Offset="0x1FE0"/>
<DList Name="sMagicFireModelDL" Offset="0x2008"/>
</File>
</Root>

View File

@ -1,15 +1,15 @@
<Root>
<File Name="ovl_Magic_Wind" BaseAddress="0x8095C860" RangeStart="0x6A0" RangeEnd="0x1BB8">
<Skeleton Name="sSkel" Type="Curve" LimbType="Curve" Offset="0x1BB0"/>
<CurveAnimation Name="sAnim" SkelOffset="0x1BB0" Offset="0x1B70"/>
<Limb Name="sRootLimb" LimbType="Curve" Offset="0x1B80"/>
<Limb Name="sInnerCylinderLimb" LimbType="Curve" Offset="0x1B8C"/>
<Limb Name="sOuterCylinderLimb" LimbType="Curve" Offset="0x1B98"/>
<Array Name="sCylinderVtx" Count="36" Offset="0x6A0">
<Skeleton Name="sMagicWindSkel" Type="Curve" LimbType="Curve" Offset="0x1BB0"/>
<CurveAnimation Name="sMagicWindAnim" SkelOffset="0x1BB0" Offset="0x1B70"/>
<Limb Name="sMagicWindRootLimb" LimbType="Curve" Offset="0x1B80"/>
<Limb Name="sMagicWindInnerCylinderLimb" LimbType="Curve" Offset="0x1B8C"/>
<Limb Name="sMagicWindOuterCylinderLimb" LimbType="Curve" Offset="0x1B98"/>
<Array Name="sMagicWindCylinderVtx" Count="36" Offset="0x6A0">
<Vtx/>
</Array>
<Texture Name="sTex" OutName="magic_wind" Format="i8" Width="64" Height="64" Offset="0x8E0"/>
<DList Name="sInnerCylinderDL" Offset="0x18E0"/>
<DList Name="sOuterCylinderDL" Offset="0x19E8"/>
<Texture Name="sMagicWindTex" OutName="magic_wind" Format="i8" Width="64" Height="64" Offset="0x8E0"/>
<DList Name="sMagicWindInnerCylinderDL" Offset="0x18E0"/>
<DList Name="sMagicWindOuterCylinderDL" Offset="0x19E8"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Oceff_Spot" BaseAddress="0x80B1A890" RangeStart="0x780" RangeEnd="0xE58">
<Texture Name="sTex" OutName="sun_song_effect" Format="i8" Width="32" Height="32" Offset="0x780"/>
<Array Name="sCylinderVtx" Count="27" Offset="0xB80">
<Texture Name="sOceffSpotTex" OutName="sun_song_effect" Format="i8" Width="32" Height="32" Offset="0x780"/>
<Array Name="sOceffSpotCylinderVtx" Count="27" Offset="0xB80">
<Vtx/>
</Array>
<DList Name="sCylinderMaterialDL" Offset="0xD30"/>
<DList Name="sCylinderModelDL" Offset="0xDC8"/>
<DList Name="sOceffSpotCylinderMaterialDL" Offset="0xD30"/>
<DList Name="sOceffSpotCylinderModelDL" Offset="0xDC8"/>
</File>
</Root>

View File

@ -1,12 +1,12 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
<File Name="ovl_Oceff_Storm" BaseAddress="0x80B39AA0" RangeStart="0x740" RangeEnd="0x1AD0">
<Texture Name="sTex" OutName="song_of_storms_effect" Format="i8" Width="64" Height="64" Offset="0x740"/>
<DList Name="sMaterialDL" Offset="0x1740"/>
<Array Name="sCylinderVtx" Count="27" Offset="0x17E8">
<Texture Name="sOceffStormTex" OutName="song_of_storms_effect" Format="i8" Width="64" Height="64" Offset="0x740"/>
<DList Name="sOceffStormMaterialDL" Offset="0x1740"/>
<Array Name="sOceffStormCylinderVtx" Count="27" Offset="0x17E8">
<Vtx/>
</Array>
<DList Name="sCylinderMaterialDL" Offset="0x1998"/>
<DList Name="sCylinderModelDL" Offset="0x1A40"/>
<DList Name="sOceffStormCylinderMaterialDL" Offset="0x1998"/>
<DList Name="sOceffStormCylinderModelDL" Offset="0x1A40"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Oceff_Wipe" BaseAddress="0x80B2C7B0" RangeStart="0x4F0" RangeEnd="0xCB0">
<Texture Name="sTex" OutName="oceff" Format="i8" Width="32" Height="32" Offset="0x4F0"/>
<Array Name="sFrustumVtx" Count="40" Offset="0x8F0">
<Texture Name="sOceffWipeTex" OutName="oceff" Format="i8" Width="32" Height="32" Offset="0x4F0"/>
<Array Name="sOceffWipeFrustumVtx" Count="40" Offset="0x8F0">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0xB70"/>
<DList Name="sFrustumDL" Offset="0xBF8"/>
<DList Name="sOceffWipeMaterialDL" Offset="0xB70"/>
<DList Name="sOceffWipeFrustumDL" Offset="0xBF8"/>
</File>
</Root>

View File

@ -1,11 +1,11 @@
<Root>
<File Name="ovl_Oceff_Wipe2" BaseAddress="0x80B470F0" RangeStart="0x430" RangeEnd="0x1698">
<Texture Name="s1Tex" OutName="eponas_song_effect_1" Format="i4" Width="64" Height="64" Offset="0x430"/>
<Texture Name="s2Tex" OutName="eponas_song_effect_2" Format="i4" Width="64" Height="64" Offset="0xC30"/>
<Array Name="sFrustumVtx" Count="22" Offset="0x1430">
<Texture Name="sOceffWipe21Tex" OutName="eponas_song_effect_1" Format="i4" Width="64" Height="64" Offset="0x430"/>
<Texture Name="sOceffWipe22Tex" OutName="eponas_song_effect_2" Format="i4" Width="64" Height="64" Offset="0xC30"/>
<Array Name="sOceffWipe2FrustumVtx" Count="22" Offset="0x1430">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1590"/>
<DList Name="sFrustumDL" Offset="0x1638"/>
<DList Name="sOceffWipe2MaterialDL" Offset="0x1590"/>
<DList Name="sOceffWipe2FrustumDL" Offset="0x1638"/>
</File>
</Root>

View File

@ -1,10 +1,10 @@
<Root>
<File Name="ovl_Oceff_Wipe3" BaseAddress="0x80B48860" RangeStart="0x430" RangeEnd="0x1678">
<Texture Name="sTex" OutName="saria_song_effect" Format="i8" Width="64" Height="64" Offset="0x430"/>
<Array Name="sFrustumVtx" Count="22" Offset="0x1430">
<Texture Name="sOceffWipe3Tex" OutName="saria_song_effect" Format="i8" Width="64" Height="64" Offset="0x430"/>
<Array Name="sOceffWipe3FrustumVtx" Count="22" Offset="0x1430">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0x1590"/>
<DList Name="sFrustumDL" Offset="0x1618"/>
<DList Name="sOceffWipe3MaterialDL" Offset="0x1590"/>
<DList Name="sOceffWipe3FrustumDL" Offset="0x1618"/>
</File>
</Root>

View File

@ -1,12 +1,12 @@
<Root>
<ExternalFile XmlPath="objects/gameplay_keep.xml" OutPath="objects/gameplay_keep/"/>
<File Name="ovl_Oceff_Wipe4" BaseAddress="0x80B7BC40" RangeStart="0x410" RangeEnd="0xEF8">
<Texture Name="sTex" OutName="scarecrow_song_effect" Format="i8" Width="32" Height="64" Offset="0x410"/>
<Array Name="sFrustumVtx" Count="22" Offset="0xC10">
<Texture Name="sOceffWipe4Tex" OutName="scarecrow_song_effect" Format="i8" Width="32" Height="64" Offset="0x410"/>
<Array Name="sOceffWipe4FrustumVtx" Count="22" Offset="0xC10">
<Vtx/>
</Array>
<DList Name="sMaterialDL" Offset="0xD70"/>
<DList Name="sUnusedMaterialDL" Offset="0xDD8"/>
<DList Name="sMaterial2DL" Offset="0xE40"/>
<DList Name="sOceffWipe4MaterialDL" Offset="0xD70"/>
<DList Name="sOceffWipe4UnusedMaterialDL" Offset="0xDD8"/>
<DList Name="sOceffWipe4Material2DL" Offset="0xE40"/>
</File>
</Root>

View File

@ -137,4 +137,29 @@ VecPosF::operator Vec3f() const
vec.z = z;
return vec;
}
*/
*/
Vec3f& Vec3f::operator=(const Vec3f& a)
{
x = a.x;
y = a.y;
z = a.z;
return *this;
}
Vec3fbe& Vec3fbe::operator=(const Vec3fbe& a)
{
x = a.x;
y = a.y;
z = a.z;
return *this;
}
Vec3fbe::operator Vec3f() const
{
Vec3f r;
r.x = x;
r.y = y;
r.z = z;
return r;
}

View File

@ -487,6 +487,15 @@ f32 Math_Vec3f_DistXYZAndStoreDiff(Vec3f* a, Vec3f* b, Vec3f* dest)
return sqrtf(SQ(dest->x) + SQ(dest->y) + SQ(dest->z));
}
f32 Math_Vec3f_DistXYZAndStoreDiff(const Vec3f& a, const Vec3f& b, Vec3f* dest)
{
dest->x = b.x - a.x;
dest->y = b.y - a.y;
dest->z = b.z - a.z;
return sqrtf(SQ(dest->x) + SQ(dest->y) + SQ(dest->z));
}
f32 Math_Vec3f_DistXZ(Vec3f* a, Vec3f* b)
{
f32 dx = b->x - a->x;

View File

@ -109,7 +109,7 @@ namespace oot::save
*/
void Context::create()
{
memset(this->newf, 0, sizeof(Info));
memset(this->newf, 0, sizeof(InfoBE));
this->totalDays = 0;
this->bgsDayCount = 0;
@ -129,7 +129,7 @@ namespace oot::save
this->sceneFlags[5].swch = 0x40000000;
}
static PlayerData sDebugSavePlayerData = {
static PlayerDataBE sDebugSavePlayerData = {
{'Z', 'E', 'L', 'D', 'A', 'Z'}, // newf
0, // deaths
{0x15, 0x12, 0x17, 0x14, 0x3E, 0x3E, 0x3E, 0x3E}, // playerName ( "LINK" )
@ -162,7 +162,7 @@ namespace oot::save
0x51, // savedSceneNum
};
void PlayerData::setMagic()
void PlayerDataBE::setMagic()
{
newf[0] = 'Z';
newf[1] = 'E';
@ -172,7 +172,7 @@ namespace oot::save
newf[5] = 'Z';
}
bool PlayerData::isMagicValid() const
bool PlayerDataBE::isMagicValid() const
{
return newf[0] == 'Z' && newf[1] == 'E' && newf[2] == 'L' && newf[3] == 'D' && newf[4] == 'A' && newf[5] == 'Z';
}
@ -211,11 +211,11 @@ namespace oot::save
*/
void Context::createDebug()
{
memset(this->newf, 0, sizeof(Info));
memset(this->newf, 0, sizeof(InfoBE));
this->totalDays = 0;
this->bgsDayCount = 0;
auto playerData = (PlayerData*)this->newf;
auto playerData = (PlayerDataBE*)this->newf;
*playerData = sDebugSavePlayerData;
this->equips = sDebugSaveEquips;
this->inventory = sDebugSaveInventory;
@ -389,20 +389,20 @@ namespace oot::save
magicLevel = 0;
}
u16 Save::checksum()
u16 SaveBE::checksum()
{
auto ptr = (u16*)this;
u16 currentChecksum = info.checksum;
auto ptr = (u16be*)this;
//u16 currentChecksum = info.checksum;
u16 val = 0;
info.checksum = 0;
//info.checksum = 0;
for(u16 offset = 0; offset < sizeof(*this) / sizeof(u16); offset++)
for(u16 offset = 0; offset < (sizeof(*this) - sizeof(info.checksum)) / sizeof(u16); offset++)
{
val += *ptr++;
}
info.checksum = currentChecksum;
//info.checksum = currentChecksum;
return val;
}
@ -426,6 +426,7 @@ namespace oot::save
{
for(u8 slotNum = 0; slotNum < MAX_SLOTS; slotNum++)
{
auto slotChecksum = file.slots[slotNum].save.checksum();
load(file.slots[slotNum]);
if(checksum != slot().save.checksum())
@ -676,7 +677,7 @@ namespace oot::save
s.save.entranceIndex = this->entranceIndex;
s.save.linkAge = this->linkAge;
s.save.cutsceneIndex = this->cutsceneIndex;
s.save.dayTime = this->dayTime;
s.save.dayTime = this->dayTime.toS16();
// s.save.dayTimePadding = this->dayTimePadding;
s.save.nightFlag = this->nightFlag;
s.save.totalDays = this->totalDays;
@ -707,15 +708,48 @@ namespace oot::save
s.save.info.equips = this->equips;
s.save.info.inventory = this->inventory;
memcpy(s.save.info.sceneFlags, this->sceneFlags, sizeof(sceneFlags));
for(int i = 0; i < ARRAY_COUNT(sceneFlags); i++)
{
s.save.info.sceneFlags[i].chest = this[i].sceneFlags[i].chest;
s.save.info.sceneFlags[i].clear = this[i].sceneFlags[i].clear;
s.save.info.sceneFlags[i].collect = this[i].sceneFlags[i].collect;
s.save.info.sceneFlags[i].floors = this[i].sceneFlags[i].floors;
s.save.info.sceneFlags[i].rooms = this[i].sceneFlags[i].rooms;
s.save.info.sceneFlags[i].swch = this[i].sceneFlags[i].swch;
s.save.info.sceneFlags[i].unk = this[i].sceneFlags[i].unk;
}
s.save.info.fw = this->fw;
memcpy(s.save.info.unk_E8C, this->unk_E8C, sizeof(unk_E8C));
memcpy(s.save.info.gsFlags, this->gsFlags, sizeof(gsFlags));
for(int i = 0; i < ARRAY_COUNT(s.save.info.gsFlags); i++)
{
s.save.info.gsFlags[i] = this->gsFlags[i];
}
memcpy(s.save.info.unk_EB4, this->unk_EB4, sizeof(unk_EB4));
memcpy(s.save.info.highScores, this->highScores, sizeof(highScores));
memcpy(s.save.info.eventChkInf, this->eventChkInf, sizeof(eventChkInf));
memcpy(s.save.info.itemGetInf, this->itemGetInf, sizeof(itemGetInf));
memcpy(s.save.info.infTable, this->infTable, sizeof(infTable));
for(int i = 0; i < ARRAY_COUNT(highScores); i++)
{
s.save.info.highScores[i] = this->highScores[i];
}
for(int i = 0; i < ARRAY_COUNT(eventChkInf); i++)
{
s.save.info.eventChkInf[i] = this->eventChkInf[i];
}
for(int i = 0; i < ARRAY_COUNT(itemGetInf); i++)
{
s.save.info.itemGetInf[i] = this->itemGetInf[i];
}
for(int i = 0; i < ARRAY_COUNT(infTable); i++)
{
s.save.info.infTable[i] = this->infTable[i];
}
memcpy(s.save.info.unk_F34, this->unk_F34, sizeof(unk_F34));
s.save.info.worldMapAreaData = this->worldMapAreaData;
memcpy(s.save.info.unk_F3C, this->unk_F3C, sizeof(unk_F3C));
@ -733,7 +767,12 @@ namespace oot::save
s.gameMode = this->gameMode;
s.sceneSetupIndex = this->sceneSetupIndex;
s.respawnFlag = this->respawnFlag;
memcpy(s.respawn, this->respawn, sizeof(respawn));
for(int i = 0; i < ARRAY_COUNT(respawn); i++)
{
s.respawn[i] = this->respawn[i];
}
s.entranceSpeed = this->entranceSpeed;
s.entranceSound = this->entranceSound;
memcpy(s.unk_13C2, this->unk_13C2, sizeof(unk_13C2));
@ -745,11 +784,14 @@ namespace oot::save
memcpy(s.unk_13CA, this->unk_13CA, sizeof(unk_13CA));
s.rupeeAccumulator = this->rupeeAccumulator;
s.timer1State = this->timer1State;
s.timer1Value = this->timer1Value;
s.timer1Value = this->timer1Value.toS16();
s.timer2State = this->timer2State;
s.timer2Value = this->timer2Value;
memcpy(s.timerX, this->timerX, sizeof(timerX));
memcpy(s.timerY, this->timerY, sizeof(timerY));
s.timer2Value = this->timer2Value.toS16();
s.timerX[0] = this->timerX[0].toS16();
s.timerX[1] = this->timerX[1].toS16();
s.timerY[0] = this->timerY[0].toS16();
s.timerY[1] = this->timerY[1].toS16();
memcpy(s.unk_13DE, this->unk_13DE, sizeof(unk_13DE));
s.seqId = this->seqId;
s.natureAmbienceId = this->natureAmbienceId;
@ -764,7 +806,12 @@ namespace oot::save
s.unk_13F4 = this->unk_13F4;
s.unk_13F6 = this->magicMax;
s.unk_13F8 = this->unk_13F8;
memcpy(eventInf, this->eventInf, sizeof(eventInf));
for(int i = 0; i < ARRAY_COUNT(eventInf); i++)
{
s.eventInf[i] = this->eventInf[i];
}
s.mapIndex = this->mapIndex;
s.minigameState = this->minigameState;
s.minigameScore = this->minigameScore;
@ -782,7 +829,7 @@ namespace oot::save
s.nextDayTime = this->nextDayTime;
s.fadeDuration = this->fadeDuration;
s.unk_1419 = this->unk_1419;
s.skyboxTime = this->skyboxTime;
s.skyboxTime = this->skyboxTime.toS16();
s.dogIsLost = this->dogIsLost;
s.nextTransition = this->nextTransition;
memcpy(s.unk_141E, this->unk_141E, sizeof(unk_141E));
@ -815,12 +862,12 @@ namespace oot::save
this->entranceIndex = s.save.entranceIndex;
this->linkAge = s.save.linkAge;
this->cutsceneIndex = s.save.cutsceneIndex;
this->dayTime = s.save.dayTime;
this->dayTime = (u16)s.save.dayTime;
this->nightFlag = s.save.nightFlag;
this->totalDays = s.save.totalDays;
this->bgsDayCount = s.save.bgsDayCount;
memcpy(this->newf, s.save.info.playerData.newf, sizeof(newf));
this->deaths = s.save.info.playerData.deaths;
this->deaths = s.save.info.playerData.deaths.value();
memcpy(this->playerName, s.save.info.playerData.playerName, sizeof(playerName));
this->n64ddFlag = s.save.info.playerData.n64ddFlag;
this->healthCapacity = s.save.info.playerData.healthCapacity;
@ -843,15 +890,48 @@ namespace oot::save
this->savedSceneNum = s.save.info.playerData.savedSceneNum;
this->equips = s.save.info.equips;
this->inventory = s.save.info.inventory;
memcpy(this->sceneFlags, s.save.info.sceneFlags, sizeof(sceneFlags));
for(int i = 0; i < ARRAY_COUNT(sceneFlags); i++)
{
this[i].sceneFlags[i].chest = s.save.info.sceneFlags[i].chest;
this[i].sceneFlags[i].clear = s.save.info.sceneFlags[i].clear;
this[i].sceneFlags[i].collect = s.save.info.sceneFlags[i].collect;
this[i].sceneFlags[i].floors = s.save.info.sceneFlags[i].floors;
this[i].sceneFlags[i].rooms = s.save.info.sceneFlags[i].rooms;
this[i].sceneFlags[i].swch = s.save.info.sceneFlags[i].swch;
this[i].sceneFlags[i].unk = s.save.info.sceneFlags[i].unk;
}
this->fw = s.save.info.fw;
memcpy(this->unk_E8C, s.save.info.unk_E8C, sizeof(unk_E8C));
memcpy(this->gsFlags, s.save.info.gsFlags, sizeof(gsFlags));
for(int i = 0; i < ARRAY_COUNT(s.save.info.gsFlags); i++)
{
this->gsFlags[i] = s.save.info.gsFlags[i];
}
memcpy(this->unk_EB4, s.save.info.unk_EB4, sizeof(unk_EB4));
memcpy(this->highScores, s.save.info.highScores, sizeof(highScores));
memcpy(this->eventChkInf, s.save.info.eventChkInf, sizeof(eventChkInf));
memcpy(this->itemGetInf, s.save.info.itemGetInf, sizeof(itemGetInf));
memcpy(this->infTable, s.save.info.infTable, sizeof(infTable));
for(int i = 0; i < ARRAY_COUNT(highScores); i++)
{
this->highScores[i] = s.save.info.highScores[i];
}
for(int i = 0; i < ARRAY_COUNT(eventChkInf); i++)
{
this->eventChkInf[i] = s.save.info.eventChkInf[i];
}
for(int i = 0; i < ARRAY_COUNT(itemGetInf); i++)
{
this->itemGetInf[i] = s.save.info.itemGetInf[i];
}
for(int i = 0; i < ARRAY_COUNT(infTable); i++)
{
this->infTable[i] = s.save.info.infTable[i];
}
memcpy(this->unk_F34, s.save.info.unk_F34, sizeof(unk_F34));
this->worldMapAreaData = s.save.info.worldMapAreaData;
memcpy(this->unk_F3C, s.save.info.unk_F3C, sizeof(unk_F3C));
@ -869,7 +949,12 @@ namespace oot::save
this->gameMode = s.gameMode;
this->sceneSetupIndex = s.sceneSetupIndex;
this->respawnFlag = s.respawnFlag;
memcpy(this->respawn, s.respawn, sizeof(respawn));
for(int i = 0; i < ARRAY_COUNT(respawn); i++)
{
this->respawn[i] = s.respawn[i];
}
this->entranceSpeed = s.entranceSpeed;
this->entranceSound = s.entranceSound;
memcpy(this->unk_13C2, s.unk_13C2, sizeof(unk_13C2));
@ -881,11 +966,20 @@ namespace oot::save
memcpy(this->unk_13CA, s.unk_13CA, sizeof(unk_13CA));
this->rupeeAccumulator = s.rupeeAccumulator;
this->timer1State = s.timer1State;
this->timer1Value = s.timer1Value;
this->timer1Value = (s16)s.timer1Value;
this->timer2State = s.timer2State;
this->timer2Value = s.timer2Value;
memcpy(this->timerX, s.timerX, sizeof(timerX));
memcpy(this->timerY, s.timerY, sizeof(timerY));
this->timer2Value = (s16)s.timer2Value;
for(int i = 0; i < ARRAY_COUNT(timerX); i++)
{
this->timerX[i] = s.timerX[i].value();
}
for(int i = 0; i < ARRAY_COUNT(timerY); i++)
{
this->timerY[i] = s.timerY[i].value();
}
memcpy(this->unk_13DE, s.unk_13DE, sizeof(unk_13DE));
this->seqId = s.seqId;
this->natureAmbienceId = s.natureAmbienceId;
@ -900,7 +994,12 @@ namespace oot::save
this->unk_13F4 = s.unk_13F4;
this->magicMax = s.unk_13F6;
this->unk_13F8 = s.unk_13F8;
memcpy(this->eventInf, eventInf, sizeof(eventInf));
for(int i = 0; i < ARRAY_COUNT(eventInf); i++)
{
this->eventInf[i] = s.eventInf[i];
}
this->mapIndex = s.mapIndex;
this->minigameState = s.minigameState;
this->minigameScore = s.minigameScore;
@ -918,7 +1017,7 @@ namespace oot::save
this->nextDayTime = s.nextDayTime;
this->fadeDuration = s.fadeDuration;
this->unk_1419 = s.unk_1419;
this->skyboxTime = s.skyboxTime;
this->skyboxTime = (u16)s.skyboxTime;
this->dogIsLost = s.dogIsLost;
this->nextTransition = s.nextTransition;
memcpy(this->unk_141E, s.unk_141E, sizeof(unk_141E));
@ -956,3 +1055,135 @@ namespace oot::save
language = oot::config().game().language();
}
} // namespace oot::save
ItemEquipsBE& ItemEquipsBE::operator=(const ItemEquips& a)
{
memcpy(this->buttonItems, a.buttonItems, sizeof(a.buttonItems));
memcpy(this->cButtonSlots, a.cButtonSlots, sizeof(a.cButtonSlots));
this->equipment = a.equipment;
return *this;
}
ItemEquips& ItemEquips::operator=(const ItemEquipsBE& a)
{
memcpy(this->buttonItems, a.buttonItems, sizeof(a.buttonItems));
memcpy(this->cButtonSlots, a.cButtonSlots, sizeof(a.cButtonSlots));
this->equipment = a.equipment;
return *this;
}
InventoryBE& InventoryBE::operator=(const Inventory& a)
{
memcpy(this->items, a.items, sizeof(a.items));
memcpy(this->ammo, a.ammo, sizeof(a.ammo));
equipment = a.equipment;
upgrades = a.upgrades;
questItems = a.questItems;
memcpy(this->dungeonItems, a.dungeonItems, sizeof(a.dungeonItems));
memcpy(this->dungeonKeys, a.dungeonKeys, sizeof(a.dungeonKeys));
defenseHearts = a.defenseHearts;
gsTokens = a.gsTokens;
return *this;
}
Inventory& Inventory::operator=(const InventoryBE& a)
{
memcpy(this->items, a.items, sizeof(a.items));
memcpy(this->ammo, a.ammo, sizeof(a.ammo));
equipment = a.equipment;
upgrades = a.upgrades;
questItems = a.questItems;
memcpy(this->dungeonItems, a.dungeonItems, sizeof(a.dungeonItems));
memcpy(this->dungeonKeys, a.dungeonKeys, sizeof(a.dungeonKeys));
defenseHearts = a.defenseHearts;
gsTokens = a.gsTokens;
return *this;
}
HorseDataBE& HorseDataBE::operator=(const HorseData& a)
{
this->angle = a.angle;
this->scene = a.scene;
this->pos.x = a.pos.x;
this->pos.y = a.pos.y;
this->pos.z = a.pos.z;
return *this;
}
HorseData& HorseData::operator=(const HorseDataBE& a)
{
this->angle = a.angle;
this->scene = a.scene;
this->pos.x = a.pos.x;
this->pos.y = a.pos.y;
this->pos.z = a.pos.z;
return *this;
}
FaroresWindDataBE& FaroresWindDataBE::operator=(const FaroresWindData& a)
{
this->pos.x = a.pos.x;
this->pos.y = a.pos.y;
this->pos.z = a.pos.z;
yaw = a.yaw;
playerParams = a.playerParams;
entranceIndex = a.entranceIndex;
roomIndex = a.roomIndex;
set = a.set;
tempSwchFlags = a.tempSwchFlags;
tempCollectFlags = a.tempCollectFlags;
return *this;
}
FaroresWindData& FaroresWindData::operator=(const FaroresWindDataBE& a)
{
this->pos.x = a.pos.x;
this->pos.y = a.pos.y;
this->pos.z = a.pos.z;
yaw = a.yaw;
playerParams = a.playerParams;
entranceIndex = a.entranceIndex;
roomIndex = a.roomIndex;
set = a.set;
tempSwchFlags = a.tempSwchFlags;
tempCollectFlags = a.tempCollectFlags;
return *this;
}
RespawnDataBE::operator RespawnData() const
{
RespawnData r;
r.data = data;
r.entranceIndex = entranceIndex;
r.playerParams = playerParams;
r.pos = pos;
r.roomIndex = roomIndex;
r.tempCollectFlags = tempCollectFlags;
r.tempSwchFlags = tempSwchFlags;
r.yaw = yaw;
return r;
}
RespawnData::operator RespawnDataBE() const
{
RespawnDataBE r;
r.data = data;
r.entranceIndex = entranceIndex;
r.playerParams = playerParams;
r.pos.x = pos.x;
r.pos.y = pos.y;
r.pos.z = pos.z;
r.roomIndex = roomIndex;
r.tempCollectFlags = tempCollectFlags;
r.tempSwchFlags = tempSwchFlags;
r.yaw = yaw;
return r;
}
static_assert(byteswap<u16>(0xf8d0) == 0xd0f8, "bad swap");
static_assert(byteswap<s16>(-1840) == -12040, "bad swap");
static_assert(byteswap<u32>(0xf8d05708) == 0x0857d0f8, "bad swap");
static_assert(byteswap<s32>(-120563960) == 139972856, "bad swap");
static_assert(byteswap<u32>(0xf8d057D8) == 0xD857d0f8, "bad swap");
static_assert(byteswap<s32>(-120563752) == -665333512, "bad swap");

View File

@ -111,8 +111,8 @@ void VisMono_Draw(VisMono* pthis, Gfx** gfxp)
gDPSetScissor(gfx++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
}
gDPSetColor(gfx++, G_SETPRIMCOLOR, pthis->primColor.r, pthis->primColor.g, pthis->primColor.b, pthis->primColor.a);
gDPSetColor(gfx++, G_SETENVCOLOR, pthis->envColor.r, pthis->envColor.g, pthis->envColor.b, pthis->envColor.a);
gDPSetColor(gfx++, G_SETPRIMCOLOR, (u32)pthis->primColor);
gDPSetColor(gfx++, G_SETENVCOLOR, (u32)pthis->envColor);
gDPLoadTLUT_pal256(gfx++, tlut);

View File

@ -278,9 +278,9 @@ void ArrowFire_Draw(Actor* pthisx, GlobalContext* globalCtx2)
Matrix_Scale(pthis->radius * 0.2f, pthis->unk_158 * 4.0f, pthis->radius * 0.2f, MTXMODE_APPLY);
Matrix_Translate(0.0f, -700.0f, 0.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_arrow_fire.c", 666), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sArrowFireMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, 255 - (uintptr_t)(stateFrames * 2) % 256, 0, 64, 32, 1, 255 - (uintptr_t)stateFrames % 256, 511 - (uintptr_t)(stateFrames * 10) % 512, 64, 64));
gSPDisplayList(POLY_XLU_DISP++, sModelDL);
gSPDisplayList(POLY_XLU_DISP++, sArrowFireModelDL);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_arrow_fire.c", 682);
}

View File

@ -279,9 +279,9 @@ void ArrowIce_Draw(Actor* pthisx, GlobalContext* globalCtx)
Matrix_Scale(pthis->radius * 0.2f, pthis->unk_160 * 3.0f, pthis->radius * 0.2f, MTXMODE_APPLY);
Matrix_Translate(0.0f, -700.0f, 0.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_arrow_ice.c", 660), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sArrowIceMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, 511 - (uintptr_t)(stateFrames * 5) % 512, 0, 128, 32, 1, 511 - (uintptr_t)(stateFrames * 10) % 512, 511 - (uintptr_t)(stateFrames * 10) % 512, 4, 16));
gSPDisplayList(POLY_XLU_DISP++, sModelDL);
gSPDisplayList(POLY_XLU_DISP++, sArrowIceModelDL);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_arrow_ice.c", 676);
}

View File

@ -277,9 +277,9 @@ void ArrowLight_Draw(Actor* pthisx, GlobalContext* globalCtx)
Matrix_Scale(pthis->radius * 0.2f, pthis->unk_160 * 4.0f, pthis->radius * 0.2f, MTXMODE_APPLY);
Matrix_Translate(0.0f, -700.0f, 0.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_arrow_light.c", 648), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sArrowLightMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, 511 - (uintptr_t)(stateFrames * 5) % 512, 0, 4, 32, 1, 511 - (uintptr_t)(stateFrames * 10) % 512, 511 - (uintptr_t)(stateFrames * 30) % 512, 8, 16));
gSPDisplayList(POLY_XLU_DISP++, sModelDL);
gSPDisplayList(POLY_XLU_DISP++, sArrowLightModelDL);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_arrow_light.c", 664);
}

View File

@ -224,11 +224,11 @@ void ElfMsg_Draw(Actor* thisx, GlobalContext* globalCtx)
if(thisx->params & 0x4000)
{
gSPDisplayList(POLY_XLU_DISP++, sCubeDL);
gSPDisplayList(POLY_XLU_DISP++, sElfMsgCubeDL);
}
else
{
gSPDisplayList(POLY_XLU_DISP++, sCylinderDL);
gSPDisplayList(POLY_XLU_DISP++, sElfMsgCylinderDL);
}
CLOSE_DISPS(globalCtx->gfxCtx, "../z_elf_msg.c", 457);

View File

@ -193,7 +193,7 @@ void ElfMsg2_Draw(Actor* thisx, GlobalContext* globalCtx)
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 100, 100, 255, R_NAVI_MSG_REGION_ALPHA);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_elf_msg2.c", 362), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, D_809ADC38);
gSPDisplayList(POLY_XLU_DISP++, sCubeDL);
gSPDisplayList(POLY_XLU_DISP++, sElfMsg2CubeDL);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_elf_msg2.c", 367);
#endif

View File

@ -550,6 +550,7 @@ void EnBb_Damage(EnBb* pthis, GlobalContext* globalCtx)
{
Math_SmoothStepToF(&pthis->actor.speedXZ, 0.0f, 1.0f, 0.5f, 0.0f);
if(Round(pthis->actor.speedXZ) == 0.0f)
{
pthis->actor.shape.yOffset = 200.0f;
EnBb_SetupDown(pthis);

View File

@ -29,7 +29,7 @@ ActorInit En_Jsjutan_InitVars = {
};
// Shadow texture. 32x64 I8.
static u8 sShadowTex[0x800];
static u8 sEnJsjutanShadowTex[0x800];
static Vec3s D_80A8EE10[0x90];
@ -45,7 +45,7 @@ void EnJsjutan_Init(Actor* thisx, GlobalContext* globalCtx)
pthis->dyna.actor.flags &= ~ACTOR_FLAG_VISIBLE;
DynaPolyActor_Init(&pthis->dyna, DPM_UNK);
CollisionHeader_GetVirtual(&sCol, &header);
CollisionHeader_GetVirtual(&sEnJsjutanCol, &header);
pthis->dyna.bgId = DynaPoly_SetBgActor(globalCtx, &globalCtx->colCtx.dyna, thisx, header);
Actor_SetScale(thisx, 0.02f);
pthis->unk_164 = true;
@ -66,8 +66,8 @@ void func_80A89860(EnJsjutan* pthis, GlobalContext* globalCtx)
Vtx* evenVtx;
Vec3f actorPos = pthis->dyna.actor.world.pos;
oddVtx = SEGMENTED_TO_VIRTUAL(gShadowOddVtx);
evenVtx = SEGMENTED_TO_VIRTUAL(sShadowEvenVtx);
oddVtx = SEGMENTED_TO_VIRTUAL(gEnJsjutanShadowOddVtx);
evenVtx = SEGMENTED_TO_VIRTUAL(sEnJsjutanShadowEvenVtx);
for(i = 0; i < ARRAY_COUNT(D_80A8EE10); i++, oddVtx++, evenVtx++)
{
@ -128,13 +128,13 @@ void func_80A89A6C(EnJsjutan* pthis, GlobalContext* globalCtx)
if(globalCtx->gameplayFrames % 2 != 0)
{
carpetVtx = SEGMENTED_TO_VIRTUAL(sCarpetOddVtx);
shadowVtx = SEGMENTED_TO_VIRTUAL(gShadowOddVtx);
carpetVtx = SEGMENTED_TO_VIRTUAL(sEnJsjutanCarpetOddVtx);
shadowVtx = SEGMENTED_TO_VIRTUAL(gEnJsjutanShadowOddVtx);
}
else
{
carpetVtx = SEGMENTED_TO_VIRTUAL(sCarpetEvenVtx);
shadowVtx = SEGMENTED_TO_VIRTUAL(sShadowEvenVtx);
carpetVtx = SEGMENTED_TO_VIRTUAL(sEnJsjutanCarpetEvenVtx);
shadowVtx = SEGMENTED_TO_VIRTUAL(sEnJsjutanShadowEvenVtx);
}
// Distance of player to carpet.
@ -366,7 +366,7 @@ void func_80A89A6C(EnJsjutan* pthis, GlobalContext* globalCtx)
sp108.z = 120.0f;
// Fancy math to smooth each part of the wave considering its neighborhood.
for(i = 0; i < ARRAY_COUNT(sCarpetOddVtx); i++, carpetVtx++)
for(i = 0; i < ARRAY_COUNT(sEnJsjutanCarpetOddVtx); i++, carpetVtx++)
{
f32 rotX;
f32 rotZ;
@ -454,15 +454,15 @@ void EnJsjutan_Draw(Actor* thisx, GlobalContext* globalCtx2)
if(pthis->unk_164)
{
pthis->unk_164 = false;
for(i = 0; i < ARRAY_COUNT(sShadowTex); i++)
for(i = 0; i < ARRAY_COUNT(sEnJsjutanShadowTex); i++)
{
if(((u16*)sCarpetTex)[i] != 0)
if(((u16*)sEnJsjutanCarpetTex)[i] != 0)
{ // Hack to bypass ZAPD exporting textures as u64.
sShadowTex[i] = 0xFF;
sEnJsjutanShadowTex[i] = 0xFF;
}
else
{
sShadowTex[i] = 0;
sEnJsjutanShadowTex[i] = 0;
}
}
}
@ -476,19 +476,19 @@ void EnJsjutan_Draw(Actor* thisx, GlobalContext* globalCtx2)
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_en_jsjutan.c", 782), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
// Draws the carpet's shadow texture.
gSPDisplayList(POLY_OPA_DISP++, sShadowMaterialDL);
gSPDisplayList(POLY_OPA_DISP++, sEnJsjutanShadowMaterialDL);
gDPPipeSync(POLY_OPA_DISP++);
// Draws the carpet's shadow vertices. Swaps them between frames to get a smoother result.
if(globalCtx->gameplayFrames % 2 != 0)
{
gSPSegment(POLY_OPA_DISP++, 0x0C, gShadowOddVtx);
gSPSegment(POLY_OPA_DISP++, 0x0C, gEnJsjutanShadowOddVtx);
}
else
{
gSPSegment(POLY_OPA_DISP++, 0x0C, sShadowEvenVtx);
gSPSegment(POLY_OPA_DISP++, 0x0C, sEnJsjutanShadowEvenVtx);
}
gSPDisplayList(POLY_OPA_DISP++, sModelDL);
gSPDisplayList(POLY_OPA_DISP++, sEnJsjutanModelDL);
func_80093D18(globalCtx->gfxCtx);
Matrix_Translate(thisx->world.pos.x, pthis->unk_168 + 3.0f, thisx->world.pos.z, MTXMODE_NEW);
@ -496,20 +496,20 @@ void EnJsjutan_Draw(Actor* thisx, GlobalContext* globalCtx2)
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_en_jsjutan.c", 805), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
// Draws the carpet's texture.
gSPDisplayList(POLY_OPA_DISP++, sCarpetMaterialDL);
gSPDisplayList(POLY_OPA_DISP++, sEnJsjutanCarpetMaterialDL);
gDPPipeSync(POLY_OPA_DISP++);
// Draws the carpet vertices.
if(globalCtx->gameplayFrames % 2 != 0)
{
gSPSegment(POLY_OPA_DISP++, 0x0C, sCarpetOddVtx);
gSPSegment(POLY_OPA_DISP++, 0x0C, sEnJsjutanCarpetOddVtx);
}
else
{
gSPSegment(POLY_OPA_DISP++, 0x0C, sCarpetEvenVtx);
gSPSegment(POLY_OPA_DISP++, 0x0C, sEnJsjutanCarpetEvenVtx);
}
gSPDisplayList(POLY_OPA_DISP++, sModelDL);
gSPDisplayList(POLY_OPA_DISP++, sEnJsjutanModelDL);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_en_jsjutan.c", 823);
}

View File

@ -1041,7 +1041,7 @@ void EnKanban_Draw(Actor* thisx, GlobalContext* globalCtx)
}
}
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(shadowTex));
gSPDisplayList(POLY_XLU_DISP++, sShadowDL);
gSPDisplayList(POLY_XLU_DISP++, sEnKanbanShadowDL);
}
}
CLOSE_DISPS(globalCtx->gfxCtx, "../z_en_kanban.c", 1857);

View File

@ -270,9 +270,9 @@ void MagicDark_DiamondDraw(Actor* thisx, GlobalContext* globalCtx)
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_magic_dark.c", 553), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 170, 255, 255, (s32)(pthis->primAlpha * 0.6f) & 0xFF);
gDPSetEnvColor(POLY_XLU_DISP++, 0, 100, 255, 128);
gSPDisplayList(POLY_XLU_DISP++, sDiamondMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sMagicDarkDiamondMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, gameplayFrames * 2, gameplayFrames * -4, 32, 32, 1, 0, gameplayFrames * -16, 64, 32));
gSPDisplayList(POLY_XLU_DISP++, sDiamondModelDL);
gSPDisplayList(POLY_XLU_DISP++, sMagicDarkDiamondModelDL);
}
CLOSE_DISPS(globalCtx->gfxCtx, "../z_magic_dark.c", 570);

View File

@ -243,24 +243,24 @@ void MagicFire_Draw(Actor* thisx, GlobalContext* globalCtx)
gDPPipeSync(POLY_XLU_DISP++);
gSPTexture(POLY_XLU_DISP++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
gDPSetTextureLUT(POLY_XLU_DISP++, G_TT_NONE);
gDPLoadTextureBlock(POLY_XLU_DISP++, sTex, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 6, 6, 15, G_TX_NOLOD);
gDPLoadTextureBlock(POLY_XLU_DISP++, sMagicFireTex, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 6, 6, 15, G_TX_NOLOD);
gDPSetTile(POLY_XLU_DISP++, G_IM_FMT_I, G_IM_SIZ_8b, 8, 0, 1, 0, G_TX_NOMIRROR | G_TX_WRAP, 6, 14, G_TX_NOMIRROR | G_TX_WRAP, 6, 14);
gDPSetTileSize(POLY_XLU_DISP++, 1, 0, 0, 252, 252);
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sMagicFireMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, (gameplayFrames * 2) % 512, 511 - ((gameplayFrames * 5) % 512), 64, 64, 1, (gameplayFrames * 2) % 256, 255 - ((gameplayFrames * 20) % 256), 32, 32));
gSPDisplayList(POLY_XLU_DISP++, sModelDL);
gSPDisplayList(POLY_XLU_DISP++, sMagicFireModelDL);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_magic_fire.c", 750);
alpha = (s32)(pthis->alphaMultiplier * 255);
for(i = 0; i < 36; i++)
{
sSphereVtx[sVertexIndices[i]].n.a = alpha;
sMagicFireSphereVtx[sVertexIndices[i]].n.a = alpha;
}
alpha = (s32)(pthis->alphaMultiplier * 76);
for(i = 36; i < 60; i++)
{
sSphereVtx[sVertexIndices[i]].n.a = alpha;
sMagicFireSphereVtx[sVertexIndices[i]].n.a = alpha;
}
}
}

View File

@ -46,7 +46,7 @@ void MagicWind_Init(Actor* thisx, GlobalContext* globalCtx)
MagicWind* pthis = (MagicWind*)thisx;
Player* player = GET_PLAYER(globalCtx);
if(SkelCurve_Init(globalCtx, &pthis->skelCurve, &sSkel, &sAnim) == 0)
if(SkelCurve_Init(globalCtx, &pthis->skelCurve, &sMagicWindSkel, &sMagicWindAnim) == 0)
{
// "Magic_Wind_Actor_ct (): Construct failed"
osSyncPrintf("Magic_Wind_Actor_ct():コンストラクト失敗\n");
@ -55,12 +55,12 @@ void MagicWind_Init(Actor* thisx, GlobalContext* globalCtx)
switch(pthis->actor.params)
{
case 0:
SkelCurve_SetAnim(&pthis->skelCurve, &sAnim, 0.0f, 60.0f, 0.0f, 1.0f);
SkelCurve_SetAnim(&pthis->skelCurve, &sMagicWindAnim, 0.0f, 60.0f, 0.0f, 1.0f);
pthis->timer = 29;
MagicWind_SetupAction(pthis, MagicWind_WaitForTimer);
break;
case 1:
SkelCurve_SetAnim(&pthis->skelCurve, &sAnim, 60.0f, 0.0f, 60.0f, -1.0f);
SkelCurve_SetAnim(&pthis->skelCurve, &sMagicWindAnim, 60.0f, 0.0f, 60.0f, -1.0f);
MagicWind_SetupAction(pthis, MagicWind_Shrink);
// "Means start"
LOG_STRING("表示開始", "../z_magic_wind.c", 486);
@ -84,7 +84,7 @@ void MagicWind_UpdateAlpha(f32 alpha)
for(i = 0; i < ARRAY_COUNT(sAlphaUpdVals); i++)
{
sCylinderVtx[sAlphaUpdVals[i]].n.a = alpha * 255.0f;
sMagicWindCylinderVtx[sAlphaUpdVals[i]].n.a = alpha * 255.0f;
}
}

View File

@ -176,9 +176,9 @@ void OceffSpot_Draw(Actor* thisx, GlobalContext* globalCtx)
func_80093D84(globalCtx->gfxCtx);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_oceff_spot.c", 469), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sCylinderMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffSpotCylinderMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, scroll * 2, scroll * (-2), 32, 32, 1, 0, scroll * (-8), 32, 32));
gSPDisplayList(POLY_XLU_DISP++, sCylinderModelDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffSpotCylinderModelDL);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_oceff_spot.c", 485);
}

View File

@ -167,7 +167,7 @@ void OceffStorm_Draw2(Actor* thisx, GlobalContext* globalCtx)
gDPSetAlphaDither(POLY_XLU_DISP++, G_AD_NOISE);
gDPSetColorDither(POLY_XLU_DISP++, G_CD_NOISE);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 200, 200, 150, pthis->primColorAlpha);
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffStormMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, scroll * 8, scroll * 4, 64, 64, 1, scroll * 4, scroll * 4, 64, 64));
gSPTextureRectangle(POLY_XLU_DISP++, 0, 0, (SCREEN_WIDTH << 2), (SCREEN_HEIGHT << 2), G_TX_RENDERTILE, 0, 0, 140, (1 << 15) | (31 << 10) | 884);
@ -178,7 +178,7 @@ void OceffStorm_Draw(Actor* thisx, GlobalContext* globalCtx)
{
u32 scroll = globalCtx->frames & 0xFFF;
OceffStorm* pthis = (OceffStorm*)thisx;
Vtx* vtxPtr = sCylinderVtx;
Vtx* vtxPtr = sOceffStormCylinderVtx;
OPEN_DISPS(globalCtx->gfxCtx, "../z_oceff_storm.c", 486);
@ -194,9 +194,9 @@ void OceffStorm_Draw(Actor* thisx, GlobalContext* globalCtx)
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->gfxCtx, "../z_oceff_storm.c", 498), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, sCylinderMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffStormCylinderMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, scroll * 4, (0 - scroll) * 8, 32, 32, 1, scroll * 8, (0 - scroll) * 12, 32, 32));
gSPDisplayList(POLY_XLU_DISP++, sCylinderModelDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffStormCylinderModelDL);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_oceff_storm.c", 512);

View File

@ -111,7 +111,7 @@ void OceffWipe_Draw(Actor* thisx, GlobalContext* globalCtx)
for(i = 0; i < 20; i++)
{
vtxPtr = sFrustumVtx;
vtxPtr = sOceffWipeFrustumVtx;
vtxPtr[i * 2 + 0].v.cn[3] = alphaTable[(sAlphaIndices[i] & 0xF0) >> 4];
vtxPtr[i * 2 + 1].v.cn[3] = alphaTable[sAlphaIndices[i] & 0xF];
}
@ -136,9 +136,9 @@ void OceffWipe_Draw(Actor* thisx, GlobalContext* globalCtx)
gDPSetEnvColor(POLY_XLU_DISP++, 100, 0, 255, 128);
}
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffWipeMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, 0 - scroll, scroll * (-2), 32, 32, 1, 0 - scroll, scroll * (-2), 32, 32));
gSPDisplayList(POLY_XLU_DISP++, sFrustumDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffWipeFrustumDL);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_oceff_wipe.c", 398);
}

View File

@ -89,7 +89,7 @@ void OceffWipe2_Draw(Actor* thisx, GlobalContext* globalCtx)
z = 1330;
}
vtxPtr = sFrustumVtx;
vtxPtr = sOceffWipe2FrustumVtx;
if(pthis->timer >= 80)
{
alpha = 12 * (100 - pthis->timer);
@ -115,9 +115,9 @@ void OceffWipe2_Draw(Actor* thisx, GlobalContext* globalCtx)
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 170, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 100, 0, 128);
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffWipe2MaterialDL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, scroll * 6, scroll * (-6), 64, 64, 1, scroll * (-6), 0, 64, 64));
gSPDisplayList(POLY_XLU_DISP++, sFrustumDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffWipe2FrustumDL);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_oceff_wipe2.c", 417);
}

View File

@ -90,7 +90,7 @@ void OceffWipe3_Draw(Actor* thisx, GlobalContext* globalCtx)
z = 1330;
}
vtxPtr = sFrustumVtx;
vtxPtr = sOceffWipe3FrustumVtx;
if(pthis->counter >= 80)
{
alpha = 12 * (100 - pthis->counter);
@ -116,9 +116,9 @@ void OceffWipe3_Draw(Actor* thisx, GlobalContext* globalCtx)
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 170, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 100, 200, 0, 128);
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffWipe3MaterialDL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, scroll * 12, scroll * (-12), 64, 64, 1, scroll * 8, scroll * (-8), 64, 64));
gSPDisplayList(POLY_XLU_DISP++, sFrustumDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffWipe3FrustumDL);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_oceff_wipe3.c", 370);
}

View File

@ -84,7 +84,7 @@ void OceffWipe4_Draw(Actor* thisx, GlobalContext* globalCtx)
z = 1330.0f;
}
vtxPtr = sFrustumVtx;
vtxPtr = sOceffWipe4FrustumVtx;
if(pthis->timer >= 30)
{
alpha = 12 * (50 - pthis->timer);
@ -110,16 +110,16 @@ void OceffWipe4_Draw(Actor* thisx, GlobalContext* globalCtx)
if(pthis->actor.params == OCEFF_WIPE4_UNUSED)
{
gSPDisplayList(POLY_XLU_DISP++, sUnusedMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffWipe4UnusedMaterialDL);
}
else
{
gSPDisplayList(POLY_XLU_DISP++, sMaterialDL);
gSPDisplayList(POLY_XLU_DISP++, sOceffWipe4MaterialDL);
}
gSPDisplayList(POLY_XLU_DISP++, sMaterial2DL);
gSPDisplayList(POLY_XLU_DISP++, sOceffWipe4Material2DL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(globalCtx->gfxCtx, 0, scroll * 2, scroll * (-2), 32, 64, 1, scroll * (-1), scroll, 32, 32));
gSPDisplayList(POLY_XLU_DISP++, &sMaterial2DL[11]);
gSPDisplayList(POLY_XLU_DISP++, &sOceffWipe4Material2DL[11]);
CLOSE_DISPS(globalCtx->gfxCtx, "../z_oceff_wipe4.c", 344);
}

View File

@ -44,6 +44,7 @@ namespace oot::hid
resetBindingsImpl();
#if SDL_VERSION_ATLEAST(2, 0, 14) != 0
if(SDL_GameControllerHasSensor(m_context, SDL_SENSOR_GYRO) == SDL_TRUE)
{
if(!SDL_GameControllerSetSensorEnabled(m_context, SDL_SENSOR_GYRO, SDL_TRUE))
@ -59,6 +60,7 @@ namespace oot::hid
m_hasAccel = true;
}
}
#endif
#ifndef __SWITCH__
loadKeyBindings();
@ -369,6 +371,7 @@ namespace oot::hid
m_state.r_stick_x = stickRightX();
m_state.r_stick_y = stickRightY();
#if SDL_VERSION_ATLEAST(2, 0, 14) != 0
if(config().controls().enableGyro())
{
if(m_hasGyro && isFirstPerson())
@ -407,6 +410,7 @@ namespace oot::hid
}
}
}
#endif
for(const auto& [scancode, input] : m_keyBindings)
{

View File

@ -182,7 +182,7 @@ void run()
main_func();
}
int main(int argc, char** argv)
int main2(int argc, char** argv)
{
std::vector<std::string> commands;
for(int i = 1; i < argc; i++)
@ -190,6 +190,7 @@ int main(int argc, char** argv)
ParseCommandLineArguments(commands);
run();
return 0;
}
#if defined(_MSC_VER)

View File

@ -266,7 +266,8 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pCmdLine,
run();
return 0;
}
#else
#endif
#ifdef __SWITCH__
void initialize();
#endif
@ -276,15 +277,18 @@ extern "C"
int main(int argc, char* argv[]);
}
int main2(int argc, char** argv);
int main(int argc, char* argv[])
{
#ifdef __SWITCH__
initialize();
#endif
main_func();
main2(argc, argv);
return 0;
}
#endif
static bool g_isRunning = true;

View File

@ -3,7 +3,7 @@ c = '/usr/bin/gcc'
cpp = '/usr/bin/g++'
ar = '/usr/bin/gcc-ar'
strip = '/usr/bin/strip'
pkgconfig = '/usr/bin/i686-redhat-linux-gnu-pkg-config'
pkgconfig = '/usr/bin/i686-linux-gnu-pkg-config'
llvm-config = '/usr/bin/llvm-config32'
[built-in options]