mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-08-19 14:13:40 -04:00
Holiday Modding Event - Bomb Arrows (#4573)
* Bomb Arrows: Turn arrows into bomb arrows * Bomb Arrows: Drain bombs when fired * Bomb Arrows: Equip Over Bow * Bomb Arrows: Item icons and ammo counts * Bomb Arrows: Save files * Bomb Arrows: Fix equip and ammo display bugs * Bomb Arrows: Interactions with multi-arrows * Bomb Arrows: Fix fuse graphics
This commit is contained in:
@@ -4941,6 +4941,11 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) {
|
||||
}
|
||||
|
||||
ammo = AMMO(i);
|
||||
if (CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0) &&
|
||||
gSaveContext.equips.buttonItems[button] == ITEM_BOW &&
|
||||
AMMO(ITEM_BOMB) != 0 && AMMO(ITEM_BOMB) < AMMO(ITEM_BOW)) {
|
||||
ammo = AMMO(ITEM_BOMB);
|
||||
}
|
||||
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
|
||||
@@ -4953,6 +4958,11 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) {
|
||||
if (ammo < 0) {
|
||||
ammo = 0;
|
||||
}
|
||||
} else if (gSaveContext.equips.buttonItems[button] == ITEM_BOW &&
|
||||
CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
|
||||
if (AMMO(ITEM_BOMB) != 0 && ammo == MIN(CUR_CAPACITY(UPG_QUIVER), CUR_CAPACITY(UPG_BOMB_BAG))) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, alpha);
|
||||
}
|
||||
} else if (((i == ITEM_BOW) && (AMMO(i) == CUR_CAPACITY(UPG_QUIVER))) ||
|
||||
((i == ITEM_BOMB) && (AMMO(i) == CUR_CAPACITY(UPG_BOMB_BAG))) ||
|
||||
((i == ITEM_SLINGSHOT) && (AMMO(i) == CUR_CAPACITY(UPG_BULLET_BAG))) ||
|
||||
@@ -5572,6 +5582,9 @@ void Interface_Draw(PlayState* play) {
|
||||
if (gSaveContext.equips.buttonItems[1] < 0xF0) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cLeftAlpha);
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
|
||||
if (gSaveContext.equips.buttonItems[1] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 1);
|
||||
}
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[1]], 1);
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
@@ -5585,6 +5598,9 @@ void Interface_Draw(PlayState* play) {
|
||||
if (gSaveContext.equips.buttonItems[2] < 0xF0) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cDownAlpha);
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
|
||||
if (gSaveContext.equips.buttonItems[2] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 2);
|
||||
}
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[2]], 2);
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
@@ -5598,6 +5614,9 @@ void Interface_Draw(PlayState* play) {
|
||||
if (gSaveContext.equips.buttonItems[3] < 0xF0) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cRightAlpha);
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
|
||||
if (gSaveContext.equips.buttonItems[3] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 3);
|
||||
}
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[3]], 3);
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
@@ -5664,6 +5683,9 @@ void Interface_Draw(PlayState* play) {
|
||||
if (gSaveContext.equips.buttonItems[4] < 0xF0) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->dpadUpAlpha);
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
|
||||
if (gSaveContext.equips.buttonItems[4] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 4);
|
||||
}
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[4]], 4);
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
@@ -5675,6 +5697,9 @@ void Interface_Draw(PlayState* play) {
|
||||
if (gSaveContext.equips.buttonItems[5] < 0xF0) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->dpadDownAlpha);
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
|
||||
if (gSaveContext.equips.buttonItems[5] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 5);
|
||||
}
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[5]], 5);
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
@@ -5686,6 +5711,9 @@ void Interface_Draw(PlayState* play) {
|
||||
if (gSaveContext.equips.buttonItems[6] < 0xF0) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->dpadLeftAlpha);
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
|
||||
if (gSaveContext.equips.buttonItems[6] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 6);
|
||||
}
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[6]], 6);
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
@@ -5697,6 +5725,9 @@ void Interface_Draw(PlayState* play) {
|
||||
if (gSaveContext.equips.buttonItems[7] < 0xF0) {
|
||||
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->dpadRightAlpha);
|
||||
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
|
||||
if (gSaveContext.equips.buttonItems[7] == ITEM_BOW && CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0)) {
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[ITEM_BOMB], 7);
|
||||
}
|
||||
Interface_DrawItemIconTexture(play, gItemIcons[gSaveContext.equips.buttonItems[7]], 7);
|
||||
gDPPipeSync(OVERLAY_DISP++);
|
||||
gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
|
||||
|
||||
@@ -287,7 +287,12 @@ void EnBom_Update(Actor* thisx, PlayState* play2) {
|
||||
|
||||
// spawn spark effect on even frames
|
||||
effPos = thisx->world.pos;
|
||||
effPos.y += 17.0f;
|
||||
if (CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0) &&
|
||||
thisx->parent && thisx->parent->id == ACTOR_EN_ARROW) {
|
||||
effPos.y += 5.0f;
|
||||
} else {
|
||||
effPos.y += 17.0f;
|
||||
}
|
||||
if ((play->gameplayFrames % 2) == 0) {
|
||||
EffectSsGSpk_SpawnFuse(play, thisx, &effPos, &effVelocity, &effAccel);
|
||||
}
|
||||
|
||||
@@ -1192,6 +1192,21 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) {
|
||||
}
|
||||
}
|
||||
|
||||
if (CVarGetInteger("gHoliday.lilDavid.BombArrows.Enabled", 0)) {
|
||||
if (pauseCtx->equipTargetSlot == SLOT_BOW) {
|
||||
CVarSetInteger("gHoliday.lilDavid.BombArrows.Active", 0);
|
||||
}
|
||||
u8 equipped_slot = gSaveContext.equips.cButtonSlots[pauseCtx->equipTargetCBtn];
|
||||
if (!CVarGetInteger("gHoliday.lilDavid.BombArrows.Active", 0) &&
|
||||
pauseCtx->equipTargetItem == ITEM_BOMB && equipped_slot == SLOT_BOW)
|
||||
{
|
||||
CVarSetInteger("gHoliday.lilDavid.BombArrows.Active", 1);
|
||||
pauseCtx->equipTargetItem = ITEM_BOW;
|
||||
pauseCtx->equipTargetSlot = SLOT_BOW;
|
||||
Audio_PlaySoundGeneral(NA_SE_SY_SET_FIRE_ARROW, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
}
|
||||
}
|
||||
|
||||
// If the item is on another button already, swap the two
|
||||
uint16_t targetButtonIndex = pauseCtx->equipTargetCBtn + 1;
|
||||
for (uint16_t otherSlotIndex = 0; otherSlotIndex < ARRAY_COUNT(gSaveContext.equips.cButtonSlots);
|
||||
|
||||
Reference in New Issue
Block a user