Merge branch 'ark-arrow' into 'master'

Ark Arrows

See merge request KartKrew/Kart!1402
This commit is contained in:
James R 2023-08-16 06:04:21 +00:00
commit a3ced9240f
9 changed files with 222 additions and 160 deletions

View file

@ -4000,39 +4000,49 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
"S_LAMPPOST", "S_LAMPPOST",
"S_MOSSYTREE", "S_MOSSYTREE",
// Lost Colony symbol signs // Ark Arrows
"S_SYMBOL_0", "S_ARKARROW_0",
"S_SYMBOL_1", "S_ARKARROW_1",
"S_SYMBOL_2", "S_ARKARROW_2",
"S_SYMBOL_3", "S_ARKARROW_3",
"S_SYMBOL_4", "S_ARKARROW_4",
"S_SYMBOL_5", "S_ARKARROW_5",
"S_SYMBOL_6", "S_ARKARROW_6",
"S_SYMBOL_7", "S_ARKARROW_7",
"S_SYMBOL_8", "S_ARKARROW_8",
"S_SYMBOL_9", "S_ARKARROW_9",
"S_SYMBOL_A", "S_ARKARROW_10",
"S_SYMBOL_B", "S_ARKARROW_11",
"S_SYMBOL_C", "S_ARKARROW_12",
"S_SYMBOL_D", "S_ARKARROW_13",
"S_SYMBOL_E", "S_ARKARROW_14",
"S_SYMBOL_F", "S_ARKARROW_15",
"S_SYMBOL_G", "S_ARKARROW_16",
"S_SYMBOL_H", "S_ARKARROW_17",
"S_SYMBOL_I", "S_ARKARROW_18",
"S_SYMBOL_J", "S_ARKARROW_19",
"S_SYMBOL_K", "S_ARKARROW_20",
"S_SYMBOL_L", "S_ARKARROW_21",
"S_SYMBOL_M", "S_ARKARROW_22",
"S_SYMBOL_N", "S_ARKARROW_23",
"S_SYMBOL_O", "S_ARKARROW_24",
"S_SYMBOL_P", "S_ARKARROW_25",
"S_SYMBOL_Q", "S_ARKARROW_26",
"S_SYMBOL_R", "S_ARKARROW_27",
"S_SYMBOL_S", "S_ARKARROW_28",
"S_SYMBOL_T", "S_ARKARROW_29",
"S_SYMBOL_U", "S_ARKARROW_30",
"S_SYMBOL_V", "S_ARKARROW_31",
"S_ARKARROW_32",
"S_ARKARROW_33",
"S_ARKARROW_34",
"S_ARKARROW_35",
"S_ARKARROW_36",
"S_ARKARROW_37",
"S_ARKARROW_38",
"S_ARKARROW_39",
"S_ARKARROW_40",
"S_ARKARROW_41",
"S_BUMP1", "S_BUMP1",
"S_BUMP2", "S_BUMP2",
@ -5601,7 +5611,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
"MT_LAMPPOST", "MT_LAMPPOST",
"MT_MOSSYTREE", "MT_MOSSYTREE",
"MT_SYMBOL", "MT_ARKARROW", // Ark Arrows
"MT_BUMP", "MT_BUMP",

View file

@ -646,7 +646,7 @@ char sprnames[NUMSPRITES + 1][5] =
"CRAB", // Crystal Abyss mobs "CRAB", // Crystal Abyss mobs
"BRNG", // Chaotix Big Ring "BRNG", // Chaotix Big Ring
// Lost Colony symbol signs // Ark Arrows
"SYM0", "SYM0",
"SYM1", "SYM1",
"SYM2", "SYM2",
@ -679,6 +679,16 @@ char sprnames[NUMSPRITES + 1][5] =
"SYMT", "SYMT",
"SYMU", "SYMU",
"SYMV", "SYMV",
"SYMW",
"SYMX",
"SYMY",
"SYMZ",
"ARK0",
"ARK1",
"ARK2",
"ARK3",
"ARK4",
"ARK5",
"BUMP", // Player/shell bump "BUMP", // Player/shell bump
"FLEN", // Shell hit graphics stuff "FLEN", // Shell hit graphics stuff
@ -4687,39 +4697,49 @@ state_t states[NUMSTATES] =
{SPR_CRAB, 10, -1, {NULL}, 0, 0, S_NULL}, // S_LAMPPOST {SPR_CRAB, 10, -1, {NULL}, 0, 0, S_NULL}, // S_LAMPPOST
{SPR_CRAB, 11, -1, {NULL}, 0, 0, S_NULL}, // S_MOSSYTREE {SPR_CRAB, 11, -1, {NULL}, 0, 0, S_NULL}, // S_MOSSYTREE
// Lost Colony symbol signs // Ark Arrows
{SPR_SYM0, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_0 {SPR_SYM0, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_0
{SPR_SYM1, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_1 {SPR_SYM1, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_1
{SPR_SYM2, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_2 {SPR_SYM2, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_2
{SPR_SYM3, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_3 {SPR_SYM3, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_3
{SPR_SYM4, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_4 {SPR_SYM4, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_4
{SPR_SYM5, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_5 {SPR_SYM5, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_5
{SPR_SYM6, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_6 {SPR_SYM6, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_6
{SPR_SYM7, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_7 {SPR_SYM7, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_7
{SPR_SYM8, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_8 {SPR_SYM8, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_8
{SPR_SYM9, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_9 {SPR_SYM9, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_9
{SPR_SYMA, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_A {SPR_SYMA, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_10
{SPR_SYMB, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_B {SPR_SYMB, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_11
{SPR_SYMC, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_C {SPR_SYMC, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_12
{SPR_SYMD, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_D {SPR_SYMD, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_13
{SPR_SYME, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_E {SPR_SYME, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_14
{SPR_SYMF, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_F {SPR_SYMF, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_15
{SPR_SYMG, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_G {SPR_SYMG, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_16
{SPR_SYMH, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_H {SPR_SYMH, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_17
{SPR_SYMI, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_I {SPR_SYMI, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_18
{SPR_SYMJ, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_J {SPR_SYMJ, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_19
{SPR_SYMK, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_K {SPR_SYMK, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_20
{SPR_SYML, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_L {SPR_SYML, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_21
{SPR_SYMM, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_M {SPR_SYMM, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_22
{SPR_SYMN, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_N {SPR_SYMN, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_23
{SPR_SYMO, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_O {SPR_SYMO, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_24
{SPR_SYMP, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_P {SPR_SYMP, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_25
{SPR_SYMQ, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_Q {SPR_SYMQ, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_26
{SPR_SYMR, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_R {SPR_SYMR, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_27
{SPR_SYMS, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_S {SPR_SYMS, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_28
{SPR_SYMT, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_T {SPR_SYMT, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_29
{SPR_SYMU, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_U {SPR_SYMU, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_30
{SPR_SYMV, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_SYMBOL_V {SPR_SYMV, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_31
{SPR_SYMW, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_32
{SPR_SYMX, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_33
{SPR_SYMY, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_34
{SPR_SYMZ, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_35
{SPR_ARK0, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_36
{SPR_ARK1, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_37
{SPR_ARK2, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_38
{SPR_ARK3, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_39
{SPR_ARK4, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_40
{SPR_ARK5, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 15, 2, S_NULL}, // S_ARKARROW_41
{SPR_BUMP, FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_BUMP2}, // S_BUMP1 {SPR_BUMP, FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_BUMP2}, // S_BUMP1
{SPR_BUMP, FF_FULLBRIGHT|1, 3, {NULL}, 0, 0, S_BUMP3}, // S_BUMP2 {SPR_BUMP, FF_FULLBRIGHT|1, 3, {NULL}, 0, 0, S_BUMP3}, // S_BUMP2
@ -26355,9 +26375,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_SYMBOL { // MT_ARKARROW
4094, // doomednum 4094, // doomednum
S_SYMBOL_0, // spawnstate S_ARKARROW_0, // spawnstate
1000, // spawnhealth 1000, // spawnhealth
S_NULL, // seestate S_NULL, // seestate
sfx_None, // seesound sfx_None, // seesound

View file

@ -1199,7 +1199,7 @@ typedef enum sprite
SPR_CRAB, // Crystal Abyss mobs SPR_CRAB, // Crystal Abyss mobs
SPR_BRNG, // Chaotix Big Ring SPR_BRNG, // Chaotix Big Ring
// Lost Colony symbol signs // Ark Arrows
SPR_SYM0, SPR_SYM0,
SPR_SYM1, SPR_SYM1,
SPR_SYM2, SPR_SYM2,
@ -1232,6 +1232,17 @@ typedef enum sprite
SPR_SYMT, SPR_SYMT,
SPR_SYMU, SPR_SYMU,
SPR_SYMV, SPR_SYMV,
SPR_SYMW,
SPR_SYMX,
SPR_SYMY,
SPR_SYMZ,
SPR_ARK0,
SPR_ARK1,
SPR_ARK2,
SPR_ARK3,
SPR_ARK4,
SPR_ARK5,
SPR_BUMP, // Player/shell bump SPR_BUMP, // Player/shell bump
SPR_FLEN, // Shell hit graphics stuff SPR_FLEN, // Shell hit graphics stuff
@ -5142,39 +5153,49 @@ typedef enum state
S_LAMPPOST, S_LAMPPOST,
S_MOSSYTREE, S_MOSSYTREE,
// Lost Colony symbol signs // Ark Arrows
S_SYMBOL_0, S_ARKARROW_0,
S_SYMBOL_1, S_ARKARROW_1,
S_SYMBOL_2, S_ARKARROW_2,
S_SYMBOL_3, S_ARKARROW_3,
S_SYMBOL_4, S_ARKARROW_4,
S_SYMBOL_5, S_ARKARROW_5,
S_SYMBOL_6, S_ARKARROW_6,
S_SYMBOL_7, S_ARKARROW_7,
S_SYMBOL_8, S_ARKARROW_8,
S_SYMBOL_9, S_ARKARROW_9,
S_SYMBOL_A, S_ARKARROW_10,
S_SYMBOL_B, S_ARKARROW_11,
S_SYMBOL_C, S_ARKARROW_12,
S_SYMBOL_D, S_ARKARROW_13,
S_SYMBOL_E, S_ARKARROW_14,
S_SYMBOL_F, S_ARKARROW_15,
S_SYMBOL_G, S_ARKARROW_16,
S_SYMBOL_H, S_ARKARROW_17,
S_SYMBOL_I, S_ARKARROW_18,
S_SYMBOL_J, S_ARKARROW_19,
S_SYMBOL_K, S_ARKARROW_20,
S_SYMBOL_L, S_ARKARROW_21,
S_SYMBOL_M, S_ARKARROW_22,
S_SYMBOL_N, S_ARKARROW_23,
S_SYMBOL_O, S_ARKARROW_24,
S_SYMBOL_P, S_ARKARROW_25,
S_SYMBOL_Q, S_ARKARROW_26,
S_SYMBOL_R, S_ARKARROW_27,
S_SYMBOL_S, S_ARKARROW_28,
S_SYMBOL_T, S_ARKARROW_29,
S_SYMBOL_U, S_ARKARROW_30,
S_SYMBOL_V, S_ARKARROW_31,
S_ARKARROW_32,
S_ARKARROW_33,
S_ARKARROW_34,
S_ARKARROW_35,
S_ARKARROW_36,
S_ARKARROW_37,
S_ARKARROW_38,
S_ARKARROW_39,
S_ARKARROW_40,
S_ARKARROW_41,
S_BUMP1, S_BUMP1,
S_BUMP2, S_BUMP2,
@ -6778,7 +6799,7 @@ typedef enum mobj_type
MT_LAMPPOST, MT_LAMPPOST,
MT_MOSSYTREE, MT_MOSSYTREE,
MT_SYMBOL, // Lost Colony symbol signs MT_ARKARROW, // Ark Arrows
MT_BUMP, MT_BUMP,

View file

@ -183,10 +183,10 @@ void Obj_BattleUFOBeamThink(mobj_t *beam);
void Obj_SpawnPowerUpAura(player_t* player); void Obj_SpawnPowerUpAura(player_t* player);
void Obj_PowerUpAuraThink(mobj_t* mobj); void Obj_PowerUpAuraThink(mobj_t* mobj);
/* Lost Colony symbol signs */ /* Ark Arrows */
void Obj_SymbolSpawn(mobj_t *mobj); void Obj_ArkArrowSpawn(mobj_t *mobj);
void Obj_SymbolSetup(mobj_t *mobj, mapthing_t *mthing); void Obj_ArkArrowSetup(mobj_t *mobj, mapthing_t *mthing);
void Obj_SymbolThink(mobj_t *mobj); void Obj_ArkArrowThink(mobj_t *mobj);
/* Dash Rings */ /* Dash Rings */
void Obj_RegularDashRingSpawn(mobj_t *mobj); void Obj_RegularDashRingSpawn(mobj_t *mobj);

View file

@ -24,7 +24,7 @@ target_sources(SRB2SDL2 PRIVATE
super-flicky.cpp super-flicky.cpp
battle-ufo.cpp battle-ufo.cpp
powerup-aura.cpp powerup-aura.cpp
symbol.c ark-arrow.c
dash-rings.c dash-rings.c
sneaker-panel.c sneaker-panel.c
emerald.c emerald.c

49
src/objects/ark-arrow.c Normal file
View file

@ -0,0 +1,49 @@
#include "../p_local.h"
#include "../k_objects.h"
#define ARKARROW_SCALE (2<<FRACBITS)
#define ARKARROW_ZOFFSET (19<<FRACBITS)
#define ARKARROW_BOBRANGE (64<<FRACBITS)
#define ARKARROW_BOBSPEED (5<<FRACBITS)
#define ARKARROW_OPTIONS 42
void Obj_ArkArrowSpawn(mobj_t *mobj)
{
mobj->extravalue1 = mobj->z;
mobj->extravalue2 = FixedMul(mobj->x + mobj->y, mapobjectscale);
}
void Obj_ArkArrowSetup(mobj_t *mobj, mapthing_t *mthing)
{
const fixed_t oldHeight = mobj->height;
statenum_t stateNum = mobj->info->spawnstate + mthing->args[0];
if (stateNum - mobj->info->spawnstate >= ARKARROW_OPTIONS)
{
CONS_Alert(CONS_WARNING, "Ark Arrow with symbol ID %d is larger than maximum symbol ID (%d)!\n", stateNum, ARKARROW_OPTIONS - 1);
stateNum = mobj->info->spawnstate;
}
mobj->angle += ANGLE_90;
P_SetScale(mobj, mobj->destscale = 4 * FixedMul(mobj->scale, ARKARROW_SCALE));
mobj->z += 4 * FixedMul(mapobjectscale, ARKARROW_ZOFFSET) * P_MobjFlip(mobj);
if (mthing->options & MTF_OBJECTFLIP)
{
mobj->z += oldHeight - mobj->height;
}
mobj->extravalue1 = mobj->old_z = mobj->z;
P_SetMobjState(mobj, stateNum);
}
void Obj_ArkArrowThink(mobj_t *mobj)
{
fixed_t offset = FixedMul(mapobjectscale,
FixedMul(ARKARROW_BOBRANGE,
FixedMul(FINESINE(FixedAngle(leveltime * ARKARROW_BOBSPEED + mobj->extravalue2) >> ANGLETOFINESHIFT) + FRACUNIT, FRACUNIT >> 1)
)
);
mobj->z = mobj->extravalue1 + P_MobjFlip(mobj) * offset;
}

View file

@ -1,43 +0,0 @@
#include "../p_local.h"
#include "../k_objects.h"
#define SYMBOL_SCALE (2<<FRACBITS)
#define SYMBOL_ZOFFSET (19<<FRACBITS)
#define SYMBOL_BOBRANGE (64<<FRACBITS)
#define SYMBOL_BOBSPEED (5<<FRACBITS)
#define SYMBOL_OPTIONS 32
void Obj_SymbolSpawn(mobj_t *mobj)
{
mobj->extravalue1 = mobj->z;
mobj->extravalue2 = FixedMul(mobj->x + mobj->y, mapobjectscale);
}
void Obj_SymbolSetup(mobj_t *mobj, mapthing_t *mthing)
{
fixed_t oldHeight = mobj->height;
statenum_t stateNum = mobj->info->spawnstate + (mthing->args[0] % SYMBOL_OPTIONS);
mobj->angle += ANGLE_90;
P_SetScale(mobj, mobj->destscale = 4 * FixedMul(mobj->scale, SYMBOL_SCALE));
mobj->z += 4 * FixedMul(mapobjectscale, SYMBOL_ZOFFSET) * P_MobjFlip(mobj);
if (mthing->options & MTF_OBJECTFLIP)
{
mobj->z += oldHeight - mobj->height;
}
mobj->extravalue1 = mobj->old_z = mobj->z;
P_SetMobjState(mobj, stateNum);
}
void Obj_SymbolThink(mobj_t *mobj)
{
fixed_t offset = FixedMul(mapobjectscale,
FixedMul(SYMBOL_BOBRANGE,
FixedMul(FINESINE(FixedAngle(leveltime * SYMBOL_BOBSPEED + mobj->extravalue2) >> ANGLETOFINESHIFT) + FRACUNIT, FRACUNIT >> 1)
)
);
mobj->z = mobj->extravalue1 + P_MobjFlip(mobj) * offset;
}

View file

@ -6716,8 +6716,8 @@ static void P_MobjSceneryThink(mobj_t *mobj)
return; return;
} }
break; break;
case MT_SYMBOL: case MT_ARKARROW:
Obj_SymbolThink(mobj); Obj_ArkArrowThink(mobj);
break; break;
case MT_VWREF: case MT_VWREF:
case MT_VWREB: case MT_VWREB:
@ -10960,8 +10960,8 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
case MT_BATTLEUFO: case MT_BATTLEUFO:
Obj_SpawnBattleUFOLegs(mobj); Obj_SpawnBattleUFOLegs(mobj);
break; break;
case MT_SYMBOL: case MT_ARKARROW:
Obj_SymbolSpawn(mobj); Obj_ArkArrowSpawn(mobj);
break; break;
case MT_DASHRING: case MT_DASHRING:
Obj_RegularDashRingSpawn(mobj); Obj_RegularDashRingSpawn(mobj);
@ -13543,9 +13543,9 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj)
Obj_LinkBattleUFOSpawner(mobj); Obj_LinkBattleUFOSpawner(mobj);
break; break;
} }
case MT_SYMBOL: case MT_ARKARROW:
{ {
Obj_SymbolSetup(mobj, mthing); Obj_ArkArrowSetup(mobj, mthing);
break; break;
} }
case MT_DASHRING: case MT_DASHRING:

View file

@ -7250,13 +7250,18 @@ static void P_ConvertBinaryThingTypes(void)
case CEILING_SLOPE_THING: case CEILING_SLOPE_THING:
mapthings[i].args[0] = mapthings[i].extrainfo; mapthings[i].args[0] = mapthings[i].extrainfo;
break; break;
case 4094: // MT_SYMBOL case 4094: // MT_ARKARROW
mapthings[i].args[0] = mapthings[i].extrainfo; mapthings[i].args[0] = mapthings[i].extrainfo;
if (mapthings[i].options & MTF_OBJECTSPECIAL) if (mapthings[i].options & MTF_OBJECTSPECIAL)
{ {
// Special = add 16 to the symbol type // Special = add 16 to the symbol type
mapthings[i].args[0] += 16; mapthings[i].args[0] += 16;
} }
if (mapthings[i].options & MTF_AMBUSH)
{
// Ambush = add 32 to the symbol type
mapthings[i].args[0] += 32;
}
break; break;
default: default:
break; break;