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
3 changes: 3 additions & 0 deletions src/SB/Core/x/containers.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,12 @@ template <class T, U32 N> struct fixed_queue
T _buffer[N + 1];

void reset();
void front();
void pop_front();
void push_front(const T& element);
void push_back();
bool full() const;
void back();
void pop_back();
bool empty() const;
};
Expand Down
18 changes: 8 additions & 10 deletions src/SB/Core/x/xFX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -264,16 +264,14 @@ void xFX_SceneEnter(RpWorld* world)

if (ent->model)
{
// non-matching: strings are getting cached for some reason

U32 bubble;

bubble = (ent->id == xStrHash(_stringBase0_7));
bubble |= (ent->id == xStrHash(_stringBase0_7 + 13));
bubble |= (ent->id == xStrHash(_stringBase0_7 + 28));
bubble |= (ent->id == xStrHash(_stringBase0_7 + 42));
bubble |= (ent->id == xStrHash(_stringBase0_7 + 62));
bubble |= (ent->id == xStrHash(_stringBase0_7 + 75));
U32 bubble = 0;

bubble |= (ent->id == xStrHash("bubble buddy"));
bubble |= (ent->id == xStrHash("bubble missile"));
bubble |= (ent->id == xStrHash("bubble helmet"));
bubble |= (ent->id == xStrHash("bubble bowling ball"));
bubble |= (ent->id == xStrHash("bubble shoeL"));
bubble |= (ent->id == xStrHash("bubble shoeR"));

if (bubble)
{
Expand Down
2 changes: 2 additions & 0 deletions src/SB/Game/zNPCTypeCommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
#include "xSFX.h"
#include "xstransvc.h"
#include "xDraw.h"
#include "xstransvc.h"
#include "xDraw.h"

#include "zNPCSndTable.h"
#include "zMovePoint.h"
Expand Down
145 changes: 145 additions & 0 deletions src/SB/Game/zNPCTypeDutchman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ namespace
tweak_callback cb_sound;

void register_tweaks(bool init, xModelAssetParam* ap, U32 apsize, const char*);
void load(xModelAssetParam*, U32);
};

struct sound_data_type
Expand Down Expand Up @@ -1275,6 +1276,16 @@ void zNPCDutchman::RenderExtra()
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)&oldcmp);
}

void zNPCDutchman::ParseINI()
{
zNPCCommon::ParseINI();
cfg_npc->snd_traxShare = g_sndTrax_Dutchman;
NPCS_SndTablePrepare(g_sndTrax_Dutchman);
cfg_npc->snd_trax = g_sndTrax_Dutchman;
NPCS_SndTablePrepare(g_sndTrax_Dutchman);
tweak.load(parmdata, pdatsize);
}

void zNPCDutchman::SelfSetup()
{
xBehaveMgr* bmgr = xBehaveMgr_GetSelf();
Expand Down Expand Up @@ -1414,6 +1425,15 @@ void zNPCDutchman::update_animation(float)
{
}

void zNPCDutchman::update_camera(F32 dt)
{
zCameraDisableTracking(CO_BOSS);
if ((zCameraIsTrackingDisabled() & -9) == 0)
{
boss_cam.update(dt);
}
}

void zNPCDutchman::kill_wave(zNPCDutchman::wave_data& wave)
{
kill_sound(1, wave.sound_handle);
Expand Down Expand Up @@ -1483,15 +1503,140 @@ void zNPCDutchman::dissolve(F32 delay)
}
}

void zNPCDutchman::coalesce(F32 delay)
{
reappear();
if (delay <= 0.0f)
{
flag.fade = FADE_NONE;
disable_emitter(*fadein_emitter);
disable_emitter(*dissolve_emitter);
set_alpha(1.0f);
stop_eye_glow();
stop_hand_trail();
if (fade.sound_handle != 0)
{
kill_sound(2, fade.sound_handle);
fade.sound_handle = 0;
}
}
else
{
flag.fade = FADE_COALESCE;
fade.time = 0.0f;
fade.duration = delay;
fade.iduration = 1.0f / fade.duration;
enable_emitter(*fadein_emitter);
enable_emitter(*dissolve_emitter);
set_alpha(0.0f);
start_eye_glow();
start_hand_trail();
if (fade.sound_handle != 0)
{
set_volume(2, fade.sound_handle, 1.0f);
}
}
}

void zNPCDutchman::reset_blob_mat()
{
// Decomp.me says 90%
F32 temp;
F32 temp2;

temp = isin(tweak.flame.blob_pitch);
temp2 = icos(tweak.flame.blob_pitch);
flames.blob_mat.right.assign(1.0f, 0.0f, 0.0f);
flames.blob_mat.up.assign(0.0f, temp2, temp);
flames.blob_mat.at.assign(0.0f, -temp, temp2);
}

void zNPCDutchman::reset_lasso_anim()
{
xAnimPlaySetState(0, lassdata->holdGuideAnim, 0);
}

void zNPCDutchman::update_fade(F32 delay)
{
F32 frac;
if (flag.fade != FADE_TELEPORT)
{
if (flag.fade < 1)
{
if (flag.fade < 4)
{
fade.time = fade.time + delay;
if (fade.time >= fade.duration)
{
flag.fade = FADE_TELEPORT;
disable_emitter(*fadeout_emitter);
set_alpha(0.0f);
vanish();
set_volume(2, fade.sound_handle, 1.0f);
}
else
{
frac = fade.time * fade.iduration;
set_alpha(1.0f - frac);
set_volume(2, fade.sound_handle, frac);
}
}
}
else if (flag.fade < 4)
{
fade.time = fade.time + delay;
if (fade.time >= fade.duration)
{
flag.fade = FADE_NONE;
disable_emitter(*fadein_emitter);
disable_emitter(*dissolve_emitter);
set_alpha(1.0f);
stop_eye_glow();
stop_hand_trail();
reappear();
kill_sound(2, fade.sound_handle);
fade.sound_handle = 0;
}
else
{
frac = fade.time * fade.iduration;
set_alpha(frac);
set_volume(2, fade.sound_handle, 1.0f - frac);
}
}
}
}

void zNPCDutchman::add_splash(const xVec3&, float)
{
}

void zNPCDutchman::start_fight()
{
if (flag.fighting == 0 && life <= 0)
{
flag.fighting = 1;
psy_instinct->GoalSet(0, 0);
zCameraDisableTracking(CO_BOSS);
boss_cam.start(globals.camera);
boss_cam.set_targets((xVec3&)globals.player.ent.model->Mat->pos, (xVec3&)model->Mat->pos,
2.0f);
}
}

void zNPCDutchman::set_life(S32 lf)
{
life = range_limit<S32>(life, 0, 3);
if (life < lf)
{
flag.hurting = 1;
for (S32 i = life; i < life; i++)
{
zEntEvent((xBase*)lf, (xBase*)lf, 0x1d7); // Haven't found 0x1d7. only 0x1d8 and 0x1d4
}
}
}

void zNPCDutchman::start_beam()
{
if ((flag.beaming) != 0)
Expand Down
2 changes: 2 additions & 0 deletions src/SB/Game/zNPCTypeDutchman.h
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ struct zNPCDutchman : zNPCSubBoss
S32* handled);
void Render();
void RenderExtra();
void ParseINI();
void SelfSetup();
void render_debug();
void update_turn(F32);
Expand Down Expand Up @@ -208,6 +209,7 @@ struct zNPCDutchman : zNPCSubBoss
void refresh_reticle();
void update_hand_trail(F32);
void dissolve(F32);
void coalesce(F32);
void reset_lasso_anim();
void update_fade(F32);
void update_slime(F32);
Expand Down
2 changes: 1 addition & 1 deletion src/SB/Game/zNPCTypeKingJelly.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1583,7 +1583,7 @@ S32 zNPCGoalKJTaunt::Exit(float dt, void* updCtxt)

S32 zNPCGoalKJDamage::Process(en_trantype* trantype, F32 dt, void* updCtxt, xScene* xscn)
{
// TODO
zNPCKingJelly& kj = *(zNPCKingJelly*)this->psyche->clt_owner;
return 0;
}

Expand Down
Loading