Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ def MatchingFor(*versions):
Object(Matching, "SB/Game/zCameraFly.cpp"),
Object(Matching, "SB/Core/x/xCurveAsset.cpp"),
Object(NonMatching, "SB/Core/x/xDecal.cpp", extra_cflags=["-sym on"]),
Object(NonMatching, "SB/Core/x/xLaserBolt.cpp"),
Object(NonMatching, "SB/Core/x/xLaserBolt.cpp", extra_cflags=["-sym on"]),
Object(NonMatching, "SB/Game/zCameraTweak.cpp"),
Object(NonMatching, "SB/Core/x/xPtankPool.cpp"),
Object(Equivalent, "SB/Core/gc/iTRC.cpp"),
Expand Down
6 changes: 4 additions & 2 deletions src/SB/Core/gc/iParMgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
struct tagiRenderArrays
{
// total size: 0x5280
public:
public:
U16 m_index[960]; // offset 0x0, size 0x780
RxObjSpace3DVertex m_vertex[480]; // offset 0x780, size 0x4380
F32 m_vertexTZ[480]; // offset 0x4B00, size 0x780
Expand All @@ -18,7 +18,7 @@ struct tagiRenderArrays
struct tagiRenderInput
{
// total size: 0x80
public:
public:
U16* m_index; // offset 0x0, size 0x4
RxObjSpace3DVertex* m_vertex; // offset 0x4, size 0x4
F32* m_vertexTZ; // offset 0x8, size 0x4
Expand All @@ -32,6 +32,8 @@ struct tagiRenderInput
xVec4 m_camViewU; // offset 0x70, size 0x10
};

extern tagiRenderInput gRenderBuffer;

void iParMgrInit();
void iParMgrUpdate(F32 elapsedTime);
void iParMgrRender();
Expand Down
56 changes: 47 additions & 9 deletions src/SB/Core/x/xLaserBolt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,23 @@
#include "xString.h"
#include "xstransvc.h"
#include "iParMgr.h"
#include "zEvent.h"
#include "zBase.h"
#include "zNPCTypeCommon.h"
#include "zEntDestructObj.h"

#include <types.h>

extern tagiRenderInput gRenderBuffer;
extern F32 lbl_803CF7A4; // 0.0f
extern F32 lbl_803CF7A8; // 255f
void xLaserBoltEmitter::init(u32 max_bolts, const char* texture_name)
{
this->bolt_raster = NULL;
memset(fxsize, 0, sizeof(fxsize));
this->bolts.init(max_bolts);
debug_init(texture_name);
}


void xLaserBoltEmitter::set_texture(char* name)
void xLaserBoltEmitter::set_texture(const char* name)
{
set_texture(xStrHash(name));
}
Expand All @@ -36,23 +45,30 @@ void xLaserBoltEmitter::set_texture(RwRaster* raster)
this->bolt_raster = raster;
}

void xLaserBoltEmitter::reset()
{
}

void xLaserBoltEmitter::refresh_config()
{
F32 alpha;
if (this->cfg.kill_dist <= this->cfg.fade_dist)
{
alpha = lbl_803CF7A4;
alpha = 0.0f;
}
else
{
alpha = lbl_803CF7A8 / (this->cfg.kill_dist - this->cfg.fade_dist);
alpha = 255.0f / (this->cfg.kill_dist - this->cfg.fade_dist);
}
this->ialpha = alpha;
}

void xLaserBoltEmitter::attach_effects(fx_when_enum when, effect_data* fx, size_t fxsize)
{
// TODO!!!
this->fx[when] = fx;
this->fxsize[when] = fxsize;
reset_fx(when);
debug_refresh_effects(when);
}

RxObjSpace3DVertex* xLaserBoltEmitter::get_vert_buffer(S32& dat)
Expand All @@ -61,9 +77,31 @@ RxObjSpace3DVertex* xLaserBoltEmitter::get_vert_buffer(S32& dat)
return gRenderBuffer.m_vertex;
}

void xLaserBoltEmitter::apply_damage(xLaserBoltEmitter::bolt& b)
{
if (b.hit_ent->baseType == eBaseTypeNPC)
{
zNPCCommon* npc = (zNPCCommon*)b.hit_ent;
npc->Damage(DMGTYP_PROJECTILE, NULL, &b.dir);
}
else if (b.hit_ent->baseType == eBaseTypeDestructObj)
{
zEntDestructObj_Hit((zEntDestructObj*)b.hit_ent, 0x40000);
}
else
{
zEntEvent(b.hit_ent, eEventHit, cfg.damage, 0.0f, 0.0f, 0.0f);
}
}

// WIP.
void xLaserBoltEmitter::reset_fx(fx_when_enum when)
{
U32* sizePtr = &this->fxsize[when];
effect_data** effect = &this->fx[when];
for (U32 i = 0; i < sizeof(fx); i++)
{
U32* sizePtr = &this->fxsize[when];
effect_data** effect = &this->fx[when];


}
}
52 changes: 26 additions & 26 deletions src/SB/Core/x/xLaserBolt.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,6 @@
#include <rwcore.h>
#include <types.h>

enum fx_when_enum
{
FX_WHEN_LAUNCH,
FX_WHEN_IMPACT,
FX_WHEN_BIRTH,
FX_WHEN_DEATH,
FX_WHEN_HEAD,
FX_WHEN_TAIL,
FX_WHEN_KILL,
MAX_FX_WHEN
};

enum fx_type_enum
{
FX_TYPE_PARTICLE,
Expand All @@ -44,6 +32,18 @@ enum fx_orient_enum

struct xLaserBoltEmitter
{
enum fx_when_enum
{
FX_WHEN_LAUNCH,
FX_WHEN_IMPACT,
FX_WHEN_BIRTH,
FX_WHEN_DEATH,
FX_WHEN_HEAD,
FX_WHEN_TAIL,
FX_WHEN_KILL,
MAX_FX_WHEN
};

struct config
{
F32 radius;
Expand All @@ -61,16 +61,6 @@ struct xLaserBoltEmitter
};

struct bolt;

struct static_queue
{
U32 _first;
U32 _size;
U32 _max_size;
U32 _max_size_mask;
bolt* _buffer;
};

struct effect_data
{
struct effect_callback
Expand Down Expand Up @@ -107,15 +97,15 @@ struct xLaserBoltEmitter
};

config cfg;
static_queue bolts;
static_queue<bolt> bolts;
F32 ialpha;
RwRaster* bolt_raster;
S32 start_collide;
effect_data* fx[7];
U32 fxsize[7];

void init(U32 max_bolts, const char*);
void set_texture(char* name);
void init(u32 max_bolts, const char* texture_name);
void set_texture(const char* name);
void set_texture(U32 aid);
void set_texture(RwTexture* tex);
void set_texture(RwRaster* raster);
Expand All @@ -129,10 +119,20 @@ struct xLaserBoltEmitter
void collide_update(bolt& b);
RxObjSpace3DVertex* render(bolt& b, RxObjSpace3DVertex* vert);
RxObjSpace3DVertex* get_vert_buffer(S32& dat);
void applyDamage(bolt& b);
void apply_damage(bolt& b);
void reset_fx(fx_when_enum when);

U32 visible() const;

void debug_init(const char* texture_name)
{

}

void debug_refresh_effects(fx_when_enum when)
{

}
};

#endif