forked from Ports/perfect_dark
add flag to ignore line-of-sight hits for transparent background surfaces
This commit is contained in:
1 parent
8ea7e7b410
commit
550f1d3182
3 files changed
+15
-5
No files matched your search
@@ -4590,6 +4590,10 @@ bool bgTestHitInRoom(struct coord *frompos, struct coord *topos, s32 roomnum, st
|
||||
numbatches = g_Rooms[roomnum].numvtxbatches;
|
||||
|
||||
for (i = 0; i < numbatches; batch++, i++) {
|
||||
#ifndef PLATFORM_N64
|
||||
if (hitthing->ignore_xlu && batch->type == VTXBATCHTYPE_XLU)
|
||||
continue;
|
||||
#endif
|
||||
j = bg0f1612e4(&batch->bbmin, &batch->bbmax, &from, &dist, &sp94, &hitthing->pos);
|
||||
|
||||
if (j == 0) {
|
||||
|
||||
+8
-5
@@ -983,7 +983,7 @@ struct prop *shotCalculateHits(s32 handnum, bool isshooting, struct coord *gunpo
|
||||
bool shotTestLos(struct coord *gunpos2d, struct coord *gundir2d, struct coord *gunpos3d, struct coord *gundir3d, struct coord *endpos3d)
|
||||
{
|
||||
struct prop **propptr;
|
||||
struct hitthing sp664;
|
||||
struct hitthing hitthing;
|
||||
struct coord delta;
|
||||
struct shotdata shotdata;
|
||||
s32 i;
|
||||
@@ -993,6 +993,9 @@ bool shotTestLos(struct coord *gunpos2d, struct coord *gundir2d, struct coord *g
|
||||
RoomNum *roomsptr;
|
||||
struct prop *prop;
|
||||
|
||||
// ignore transparent surfaces
|
||||
hitthing.ignore_xlu = 1;
|
||||
|
||||
shotdata.gunpos3d.x = gunpos3d->x;
|
||||
shotdata.gunpos3d.y = gunpos3d->y;
|
||||
shotdata.gunpos3d.z = gunpos3d->z;
|
||||
@@ -1040,11 +1043,11 @@ bool shotTestLos(struct coord *gunpos2d, struct coord *gundir2d, struct coord *g
|
||||
|
||||
// Check for BG hits first
|
||||
for (i = 0; rooms[i] != -1; i++) {
|
||||
if (bgTestHitInRoom(&shotdata.gunpos3d, endpos3d, rooms[i], &sp664)) {
|
||||
if (bgTestHitInRoom(&shotdata.gunpos3d, endpos3d, rooms[i], &hitthing)) {
|
||||
// check if it's far enough away from the end point
|
||||
if (fabsf(sp664.pos.x - endpos3d->x) >= 0.1f ||
|
||||
fabsf(sp664.pos.y - endpos3d->y) >= 0.1f ||
|
||||
fabsf(sp664.pos.z - endpos3d->z) >= 0.1f) {
|
||||
if (fabsf(hitthing.pos.x - endpos3d->x) >= 0.1f ||
|
||||
fabsf(hitthing.pos.y - endpos3d->y) >= 0.1f ||
|
||||
fabsf(hitthing.pos.z - endpos3d->z) >= 0.1f) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5750,6 +5750,9 @@ struct hitthing {
|
||||
s16 unk28;
|
||||
s16 texturenum;
|
||||
s16 unk2c;
|
||||
#ifndef PLATFORM_N64
|
||||
s16 ignore_xlu;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct hit {
|
||||
|
||||
Reference in new issue
Block a user