Linking w_017 data contents (#1652)

This commit is contained in:
roeming 2024-09-23 13:54:27 -04:00 committed by GitHub
parent 9c2d8ec140
commit 2940a4634c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 157 additions and 35 deletions

View File

@ -356,7 +356,7 @@ segments:
subsegments:
- [0x7B040, animset, w_017_1]
- [0x7B040, animset, w_017_2]
- [0x7B040, data, w_017]
- [0x7B040, .data, w_017]
- [0x7B3AC, c, w_017]
- [0x7C0F4, sbss, w_017]
- name: f_018

View File

@ -2,9 +2,6 @@
// Weapon ID #17. Used by weapons:
// Pentagram, Bat Pentagram
#include "weapon_private.h"
extern u16* g_WeaponCluts[];
extern s32 g_HandId;
#include "shared.h"
#include "w_017_1.h"
#include "w_017_2.h"
#define g_Animset w_017_1
@ -26,16 +23,140 @@ typedef struct {
/* 0x24 */ u8 pad[8];
} PrimWeapon017; /* size = 0x2C */
extern Point16 D_7B000_8017A260[]; // sizeof(Point16) * 3 * (PrimCount - 1)
extern SVECTOR D_7B000_8017B0F4[]; // sizeof(SVECTOR) * 4 * (PrimCount - 1)
extern SVECTOR D_7B000_8017B10C[]; // sizeof(SVECTOR) * 4 * (PrimCount - 1)
extern PrimWeapon017
D_7B000_8017B3F4[]; // sizeof(PrimWeapon017) * (PrimCount - 1)
static u16 D_7B000_8017A040[] = {
COLOR16(0, 0, 0, 0), COLOR16(27, 10, 0, 0), COLOR16(27, 12, 2, 0),
COLOR16(28, 15, 5, 0), COLOR16(28, 18, 8, 0), COLOR16(29, 20, 11, 0),
COLOR16(29, 23, 14, 0), COLOR16(30, 26, 17, 0), COLOR16(2, 2, 1, 0),
COLOR16(5, 4, 1, 0), COLOR16(9, 7, 2, 0), COLOR16(14, 10, 2, 0),
COLOR16(18, 13, 3, 0), COLOR16(22, 16, 3, 0), COLOR16(27, 20, 4, 0),
COLOR16(3, 1, 13, 1), COLOR16(0, 0, 0, 0), COLOR16(27, 10, 0, 0),
COLOR16(27, 12, 2, 0), COLOR16(28, 15, 5, 0), COLOR16(28, 18, 8, 0),
COLOR16(29, 20, 11, 0), COLOR16(29, 23, 14, 0), COLOR16(30, 26, 17, 0),
COLOR16(2, 2, 1, 0), COLOR16(5, 4, 1, 0), COLOR16(9, 7, 2, 0),
COLOR16(14, 10, 2, 0), COLOR16(18, 13, 3, 0), COLOR16(22, 16, 3, 0),
COLOR16(27, 20, 4, 0), COLOR16(8, 0, 20, 1), COLOR16(0, 0, 0, 0),
COLOR16(13, 5, 8, 0), COLOR16(14, 5, 9, 0), COLOR16(15, 6, 10, 0),
COLOR16(16, 7, 12, 0), COLOR16(17, 8, 13, 0), COLOR16(18, 9, 14, 0),
COLOR16(19, 10, 16, 0), COLOR16(3, 3, 1, 0), COLOR16(6, 5, 1, 0),
COLOR16(10, 8, 2, 0), COLOR16(15, 11, 2, 0), COLOR16(19, 14, 3, 0),
COLOR16(23, 17, 3, 0), COLOR16(28, 21, 4, 0), COLOR16(1, 1, 3, 1),
COLOR16(0, 0, 0, 0), COLOR16(13, 5, 8, 0), COLOR16(14, 5, 9, 0),
COLOR16(15, 6, 10, 0), COLOR16(16, 7, 12, 0), COLOR16(17, 8, 13, 0),
COLOR16(18, 9, 14, 0), COLOR16(19, 10, 16, 0), COLOR16(3, 3, 1, 0),
COLOR16(6, 5, 1, 0), COLOR16(10, 8, 2, 0), COLOR16(15, 11, 2, 0),
COLOR16(19, 14, 3, 0), COLOR16(23, 17, 3, 0), COLOR16(28, 21, 4, 0),
COLOR16(3, 0, 13, 1), COLOR16(0, 0, 0, 0), COLOR16(27, 10, 0, 1),
COLOR16(27, 12, 2, 1), COLOR16(28, 15, 5, 1), COLOR16(28, 18, 8, 1),
COLOR16(29, 20, 11, 1), COLOR16(29, 23, 14, 1), COLOR16(30, 26, 17, 1),
COLOR16(2, 2, 1, 1), COLOR16(5, 4, 1, 1), COLOR16(9, 7, 2, 1),
COLOR16(14, 10, 2, 1), COLOR16(18, 13, 3, 1), COLOR16(22, 16, 3, 1),
COLOR16(27, 20, 4, 1), COLOR16(0, 0, 0, 0), COLOR16(0, 0, 0, 0),
COLOR16(27, 10, 0, 1), COLOR16(27, 12, 2, 1), COLOR16(28, 15, 5, 1),
COLOR16(28, 18, 8, 1), COLOR16(29, 20, 11, 1), COLOR16(29, 23, 14, 1),
COLOR16(30, 26, 17, 1), COLOR16(2, 2, 1, 1), COLOR16(5, 4, 1, 1),
COLOR16(9, 7, 2, 1), COLOR16(14, 10, 2, 1), COLOR16(18, 13, 3, 1),
COLOR16(22, 16, 3, 1), COLOR16(27, 20, 4, 1), COLOR16(0, 0, 0, 0),
COLOR16(0, 0, 0, 0), COLOR16(13, 5, 8, 1), COLOR16(14, 5, 9, 1),
COLOR16(15, 6, 10, 1), COLOR16(16, 7, 12, 1), COLOR16(17, 8, 13, 1),
COLOR16(18, 9, 14, 1), COLOR16(19, 10, 16, 1), COLOR16(3, 3, 1, 1),
COLOR16(6, 5, 1, 1), COLOR16(10, 8, 2, 1), COLOR16(15, 11, 2, 1),
COLOR16(19, 14, 3, 1), COLOR16(23, 17, 3, 1), COLOR16(28, 21, 4, 1),
COLOR16(0, 0, 0, 0), COLOR16(0, 0, 0, 0), COLOR16(13, 5, 8, 1),
COLOR16(14, 5, 9, 1), COLOR16(15, 6, 10, 1), COLOR16(16, 7, 12, 1),
COLOR16(17, 8, 13, 1), COLOR16(18, 9, 14, 1), COLOR16(19, 10, 16, 1),
COLOR16(3, 3, 1, 1), COLOR16(6, 5, 1, 1), COLOR16(10, 8, 2, 1),
COLOR16(15, 11, 2, 1), COLOR16(19, 14, 3, 1), COLOR16(23, 17, 3, 1),
COLOR16(28, 21, 4, 1), COLOR16(0, 0, 0, 0), COLOR16(0, 0, 0, 0),
COLOR16(0, 2, 0, 0), COLOR16(0, 4, 0, 0), COLOR16(0, 6, 0, 0),
COLOR16(0, 8, 0, 0), COLOR16(0, 10, 0, 0), COLOR16(0, 12, 0, 0),
COLOR16(0, 14, 0, 0), COLOR16(0, 16, 0, 0), COLOR16(0, 18, 0, 0),
COLOR16(0, 20, 0, 0), COLOR16(0, 22, 0, 0), COLOR16(0, 24, 0, 0),
COLOR16(0, 26, 0, 0), COLOR16(0, 28, 0, 0), COLOR16(0, 20, 0, 0),
COLOR16(0, 0, 0, 0), COLOR16(0, 2, 0, 0), COLOR16(0, 4, 0, 0),
COLOR16(0, 6, 0, 0), COLOR16(0, 8, 0, 0), COLOR16(0, 10, 0, 0),
COLOR16(0, 12, 0, 0), COLOR16(0, 14, 0, 0), COLOR16(0, 16, 0, 0),
COLOR16(0, 18, 0, 0), COLOR16(0, 20, 0, 0), COLOR16(0, 22, 0, 0),
COLOR16(0, 24, 0, 0), COLOR16(0, 26, 0, 0), COLOR16(0, 28, 0, 0),
COLOR16(0, 20, 0, 0), COLOR16(0, 0, 0, 0), COLOR16(0, 2, 0, 0),
COLOR16(0, 4, 0, 0), COLOR16(0, 6, 0, 0), COLOR16(0, 8, 0, 0),
COLOR16(0, 10, 0, 0), COLOR16(0, 12, 0, 0), COLOR16(0, 14, 0, 0),
COLOR16(0, 16, 0, 0), COLOR16(0, 18, 0, 0), COLOR16(0, 20, 0, 0),
COLOR16(0, 22, 0, 0), COLOR16(0, 24, 0, 0), COLOR16(0, 26, 0, 0),
COLOR16(0, 28, 0, 0), COLOR16(0, 18, 0, 0), COLOR16(0, 0, 0, 0),
COLOR16(0, 2, 0, 0), COLOR16(0, 4, 0, 0), COLOR16(0, 6, 0, 0),
COLOR16(0, 8, 0, 0), COLOR16(0, 10, 0, 0), COLOR16(0, 12, 0, 0),
COLOR16(0, 14, 0, 0), COLOR16(0, 16, 0, 0), COLOR16(0, 18, 0, 0),
COLOR16(0, 20, 0, 0), COLOR16(0, 22, 0, 0), COLOR16(0, 24, 0, 0),
COLOR16(0, 26, 0, 0), COLOR16(0, 28, 0, 0), COLOR16(0, 16, 0, 0),
COLOR16(0, 0, 0, 0), COLOR16(0, 2, 0, 0), COLOR16(0, 4, 0, 0),
COLOR16(0, 6, 0, 0), COLOR16(0, 8, 0, 0), COLOR16(0, 10, 0, 0),
COLOR16(0, 12, 0, 0), COLOR16(0, 14, 0, 0), COLOR16(0, 16, 0, 0),
COLOR16(0, 18, 0, 0), COLOR16(0, 20, 0, 0), COLOR16(0, 22, 0, 0),
COLOR16(0, 24, 0, 0), COLOR16(0, 26, 0, 0), COLOR16(0, 28, 0, 0),
COLOR16(0, 14, 0, 0), COLOR16(0, 0, 0, 0), COLOR16(0, 2, 0, 0),
COLOR16(0, 4, 0, 0), COLOR16(0, 6, 0, 0), COLOR16(0, 8, 0, 0),
COLOR16(0, 10, 0, 0), COLOR16(0, 12, 0, 0), COLOR16(0, 14, 0, 0),
COLOR16(0, 16, 0, 0), COLOR16(0, 18, 0, 0), COLOR16(0, 20, 0, 0),
COLOR16(0, 22, 0, 0), COLOR16(0, 24, 0, 0), COLOR16(0, 26, 0, 0),
COLOR16(0, 28, 0, 0), COLOR16(0, 12, 0, 0), COLOR16(0, 0, 0, 0),
COLOR16(0, 2, 0, 0), COLOR16(0, 4, 0, 0), COLOR16(0, 6, 0, 0),
COLOR16(0, 8, 0, 0), COLOR16(0, 10, 0, 0), COLOR16(0, 12, 0, 0),
COLOR16(0, 14, 0, 0), COLOR16(0, 16, 0, 0), COLOR16(0, 18, 0, 0),
COLOR16(0, 20, 0, 0), COLOR16(0, 22, 0, 0), COLOR16(0, 24, 0, 0),
COLOR16(0, 26, 0, 0), COLOR16(0, 28, 0, 0), COLOR16(0, 10, 0, 0),
COLOR16(0, 0, 0, 0), COLOR16(0, 2, 0, 0), COLOR16(0, 4, 0, 0),
COLOR16(0, 6, 0, 0), COLOR16(0, 8, 0, 0), COLOR16(0, 10, 0, 0),
COLOR16(0, 12, 0, 0), COLOR16(0, 14, 0, 0), COLOR16(0, 16, 0, 0),
COLOR16(0, 18, 0, 0), COLOR16(0, 20, 0, 0), COLOR16(0, 22, 0, 0),
COLOR16(0, 24, 0, 0), COLOR16(0, 26, 0, 0), COLOR16(0, 28, 0, 0),
COLOR16(0, 8, 0, 0), COLOR16(0, 0, 0, 0), COLOR16(0, 2, 0, 0),
COLOR16(0, 4, 0, 0), COLOR16(0, 6, 0, 0), COLOR16(0, 8, 0, 0),
COLOR16(0, 10, 0, 0), COLOR16(0, 12, 0, 0), COLOR16(0, 14, 0, 0),
COLOR16(0, 16, 0, 0), COLOR16(0, 18, 0, 0), COLOR16(0, 20, 0, 0),
COLOR16(0, 22, 0, 0), COLOR16(0, 24, 0, 0), COLOR16(0, 26, 0, 0),
COLOR16(0, 28, 0, 0), COLOR16(0, 6, 0, 0)};
static Point16 D_7B000_8017A260[24][3] = {
{{0x40, 0x40}, {0x50, 0x20}, {0x60, 0x40}}, // 0
{{0x50, 0x20}, {0x60, 0x09}, {0x77, 0x20}}, // 1
{{0x50, 0x20}, {0x77, 0x20}, {0x60, 0x40}}, // 2
{{0x60, 0x40}, {0x77, 0x20}, {0x7f, 0x40}}, // 3
{{0x40, 0x40}, {0x30, 0x20}, {0x50, 0x20}}, // 4
{{0x30, 0x20}, {0x20, 0x09}, {0x40, 0x00}}, // 5
{{0x30, 0x20}, {0x40, 0x00}, {0x50, 0x20}}, // 6
{{0x50, 0x20}, {0x40, 0x00}, {0x60, 0x09}}, // 7
{{0x40, 0x40}, {0x20, 0x40}, {0x30, 0x20}}, // 8
{{0x20, 0x40}, {0x00, 0x40}, {0x09, 0x20}}, // 9
{{0x20, 0x40}, {0x09, 0x20}, {0x30, 0x20}}, // 10
{{0x30, 0x20}, {0x09, 0x20}, {0x20, 0x09}}, // 11
{{0x40, 0x40}, {0x30, 0x60}, {0x20, 0x40}}, // 12
{{0x30, 0x60}, {0x20, 0x77}, {0x09, 0x60}}, // 13
{{0x30, 0x60}, {0x09, 0x60}, {0x20, 0x40}}, // 14
{{0x20, 0x40}, {0x09, 0x60}, {0x00, 0x40}}, // 15
{{0x40, 0x40}, {0x50, 0x60}, {0x30, 0x60}}, // 16
{{0x50, 0x60}, {0x60, 0x77}, {0x40, 0x7f}}, // 17
{{0x50, 0x60}, {0x40, 0x7f}, {0x30, 0x60}}, // 18
{{0x30, 0x60}, {0x40, 0x7f}, {0x20, 0x77}}, // 19
{{0x40, 0x40}, {0x60, 0x40}, {0x50, 0x60}}, // 20
{{0x60, 0x40}, {0x7f, 0x40}, {0x77, 0x60}}, // 21
{{0x60, 0x40}, {0x77, 0x60}, {0x50, 0x60}}, // 22
{{0x50, 0x60}, {0x77, 0x60}, {0x60, 0x77}}, // 23
};
static Point16 unused_8017A380[] = {
{0x60, 0x48}, {0x20, 0x40}, {0x80, 0x48}, {0x20, 0x40},
{0, 0}, {0x1, 0}, {0, 0}, {-1, 0}};
static u16* g_WeaponCluts[] = {D_7B000_8017A040, D_7B000_8017A040};
static s32 g_HandId = HAND_ID;
#include "shared.h"
extern SVECTOR D_7B000_8017B0F4[LEN(D_7B000_8017A260)][4];
extern PrimWeapon017 D_7B000_8017B3F4[LEN(D_7B000_8017A260)];
void EntityWeaponAttack(Entity* self) {
const int PrimCount = 25;
PrimWeapon017* dest;
Point16* coords;
Point16* tri_point;
SVECTOR* vectors;
Primitive* prim;
@ -71,7 +192,8 @@ void EntityWeaponAttack(Entity* self) {
flag = 0;
switch (self->step) {
case 0:
self->primIndex = g_api.AllocPrimitives(PRIM_GT3, PrimCount);
self->primIndex =
g_api.AllocPrimitives(PRIM_GT3, LEN(D_7B000_8017A260) + 1);
if (self->primIndex == -1) {
DestroyEntity(self);
return;
@ -84,19 +206,19 @@ void EntityWeaponAttack(Entity* self) {
self->ext.weapon.lifetime = 24;
vectors = D_7B000_8017B0F4;
coords = D_7B000_8017A260;
tri_point = D_7B000_8017A260;
for (i = 0; i < (PrimCount - 1); i++) {
x = (coords[0].x + coords[1].x + coords[2].x) / 3;
y = (coords[0].y + coords[1].y + coords[2].y) / 3;
for (i = 0; i < LEN(D_7B000_8017A260); i++) {
x = (tri_point[0].x + tri_point[1].x + tri_point[2].x) / 3;
y = (tri_point[0].y + tri_point[1].y + tri_point[2].y) / 3;
for (j = 0; j < 3; j++) {
vectors->vx = coords->x - x;
vectors->vy = coords->y - y;
vectors->vx = tri_point->x - x;
vectors->vy = tri_point->y - y;
vectors->vz = 0;
vectors++;
coords++;
tri_point++;
}
vectors->vx = x - 0x40;
@ -113,9 +235,9 @@ void EntityWeaponAttack(Entity* self) {
prim = &g_PrimBuf[self->primIndex];
prim->tpage = 0x19;
prim->clut = clut;
prim->u0 = prim->u2 = (s32)uOffset;
prim->u0 = prim->u2 = (s32)uOffset; // cast needed to match psp
prim->u1 = prim->u3 = uOffset + 0x7F;
prim->v0 = prim->v1 = (s32)vOffset;
prim->v0 = prim->v1 = (s32)vOffset; // cast needed to match psp
prim->v2 = prim->v3 = vOffset + 0x7F;
prim->x0 = prim->x2 = 0x40;
prim->x1 = prim->x3 = 0xC0;
@ -132,18 +254,18 @@ void EntityWeaponAttack(Entity* self) {
prim = prim->next;
vectors = D_7B000_8017B0F4;
coords = D_7B000_8017A260;
tri_point = D_7B000_8017A260;
for (i = 0; i < (PrimCount - 1); i++) {
prim->u0 = coords[0].x + uOffset;
prim->v0 = coords[0].y + vOffset;
prim->u1 = coords[1].x + uOffset;
prim->v1 = coords[1].y + vOffset;
prim->u2 = coords[2].x + uOffset;
prim->v2 = coords[2].y + vOffset;
for (i = 0; i < LEN(D_7B000_8017A260); i++) {
prim->u0 = tri_point[0].x + uOffset;
prim->v0 = tri_point[0].y + vOffset;
prim->u1 = tri_point[1].x + uOffset;
prim->v1 = tri_point[1].y + vOffset;
prim->u2 = tri_point[2].x + uOffset;
prim->v2 = tri_point[2].y + vOffset;
vectors += 4;
coords += 3;
tri_point += 3;
prim->clut = clut;
prim->tpage = 0x19;
@ -164,10 +286,10 @@ void EntityWeaponAttack(Entity* self) {
if (--self->ext.weapon.lifetime == 0) {
self->hitboxState = 0;
vectors = D_7B000_8017B10C;
vectors = &D_7B000_8017B0F4[0][3];
dest = D_7B000_8017B3F4;
for (i = 0; i < (PrimCount - 1); i++) {
for (i = 0; i < LEN(D_7B000_8017A260); i++) {
s16 angle;
dest->x0 = vectors->vx << 0x10;
dest->x1 = vectors->vy << 0x10;
@ -199,7 +321,7 @@ void EntityWeaponAttack(Entity* self) {
case 2:
flag = 1;
dest = D_7B000_8017B3F4;
for (i = 0; i < (PrimCount - 1); i++) {
for (i = 0; i < LEN(D_7B000_8017A260); i++) {
dest->x0 += dest->y0;
dest->x1 += dest->y1;
dest->x2 += dest->y2;
@ -231,8 +353,8 @@ void EntityWeaponAttack(Entity* self) {
prim->drawMode |= DRAW_HIDE;
prim = prim->next;
for (j = 0; j < (PrimCount - 1); j++) {
vectors = &D_7B000_8017B0F4[j * 4];
for (j = 0; j < LEN(D_7B000_8017A260); j++) {
vectors = &D_7B000_8017B0F4[j];
dest = &D_7B000_8017B3F4[j];
vector.vx = dest->u0;