mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-16 16:51:08 +00:00
exported actGetRespawnTime as a first simple test case.
This commit is contained in:
parent
79ae66d5ec
commit
11caee7477
7 changed files with 187 additions and 116 deletions
|
@ -5414,60 +5414,6 @@ DBloodActor* actFireMissile(DBloodActor* actor, double xyoff, double zoff, DVect
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int actGetRespawnTime(DBloodActor* actor)
|
||||
{
|
||||
if (!actor->hasX()) return -1;
|
||||
|
||||
if (actor->IsDudeActor() && !actor->IsPlayerActor())
|
||||
{
|
||||
if (actor->xspr.respawn == 2 || (actor->xspr.respawn != 1 && gGameOptions.nMonsterSettings == 2))
|
||||
return gGameOptions.nMonsterRespawnTime;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (actor->IsWeaponActor())
|
||||
{
|
||||
if (actor->xspr.respawn == 3 || gGameOptions.nWeaponSettings == 1) return 0;
|
||||
else if (actor->xspr.respawn != 1 && gGameOptions.nWeaponSettings != 0)
|
||||
return gGameOptions.nWeaponRespawnTime;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (actor->IsAmmoActor())
|
||||
{
|
||||
if (actor->xspr.respawn == 2 || (actor->xspr.respawn != 1 && gGameOptions.nWeaponSettings != 0))
|
||||
return gGameOptions.nWeaponRespawnTime;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (actor->IsItemActor())
|
||||
{
|
||||
if (actor->xspr.respawn == 3 && gGameOptions.nGameType == 1) return 0;
|
||||
else if (actor->xspr.respawn == 2 || (actor->xspr.respawn != 1 && gGameOptions.nItemSettings != 0))
|
||||
{
|
||||
switch (actor->GetType())
|
||||
{
|
||||
case kItemShadowCloak:
|
||||
case kItemTwoGuns:
|
||||
case kItemReflectShots:
|
||||
return gGameOptions.nSpecialRespawnTime;
|
||||
case kItemDeathMask:
|
||||
return gGameOptions.nSpecialRespawnTime << 1;
|
||||
default:
|
||||
return gGameOptions.nItemRespawnTime;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool actCheckRespawn(DBloodActor* actor)
|
||||
{
|
||||
if (actor->hasX())
|
||||
|
|
|
@ -317,5 +317,24 @@ DBloodActor* actDropObject(DBloodActor* actor, int nType)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int actGetRespawnTime(DBloodActor* actor)
|
||||
{
|
||||
IFVIRTUALPTR(actor, DBloodActor, getRespawnTime)
|
||||
{
|
||||
int time;
|
||||
VMReturn ret(&time);
|
||||
VMValue param[] = { actor };
|
||||
VMCall(func, param, 1, &ret, 1);
|
||||
return time;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
END_BLD_NS
|
||||
|
|
|
@ -1,53 +1,72 @@
|
|||
class BloodDudeCultistTommy : BloodActor {}
|
||||
class BloodDudeCultistShotgun : BloodActor {}
|
||||
class BloodDudeZombieAxeNormal : BloodActor {}
|
||||
class BloodDudeZombieButcher : BloodActor {}
|
||||
class BloodDudeZombieAxeBuried : BloodActor {}
|
||||
class BloodDudeGargoyleFlesh : BloodActor {}
|
||||
class BloodDudeGargoyleStone : BloodActor {}
|
||||
class BloodDudeGargoyleStatueFlesh : BloodActor {}
|
||||
class BloodDudeGargoyleStatueStone : BloodActor {}
|
||||
class BloodDudePhantasm : BloodActor {}
|
||||
class BloodDudeHellHound : BloodActor {}
|
||||
class BloodDudeHand : BloodActor {}
|
||||
class BloodDudeSpiderBrown : BloodActor {}
|
||||
class BloodDudeSpiderRed : BloodActor {}
|
||||
class BloodDudeSpiderBlack : BloodActor {}
|
||||
class BloodDudeSpiderMother : BloodActor {}
|
||||
class BloodDudeGillBeast : BloodActor {}
|
||||
class BloodDudeBoneEel : BloodActor {}
|
||||
class BloodDudeBat : BloodActor {}
|
||||
class BloodDudeRat : BloodActor {}
|
||||
class BloodDudePodGreen : BloodActor {}
|
||||
class BloodDudeTentacleGreen : BloodActor {}
|
||||
class BloodDudePodFire : BloodActor {}
|
||||
class BloodDudeTentacleFire : BloodActor {}
|
||||
class BloodDudePodMother : BloodActor {}
|
||||
class BloodDudeTentacleMother : BloodActor {}
|
||||
class BloodDudeCerberusTwoHead : BloodActor {}
|
||||
class BloodDudeCerberusOneHead : BloodActor {}
|
||||
class BloodDudeTchernobog : BloodActor {}
|
||||
class BloodDudeCultistTommyProne : BloodActor {}
|
||||
class BloodDudePlayer1 : BloodActor {}
|
||||
class BloodDudePlayer2 : BloodActor {}
|
||||
class BloodDudePlayer3 : BloodActor {}
|
||||
class BloodDudePlayer4 : BloodActor {}
|
||||
class BloodDudePlayer5 : BloodActor {}
|
||||
class BloodDudePlayer6 : BloodActor {}
|
||||
class BloodDudePlayer7 : BloodActor {}
|
||||
class BloodDudePlayer8 : BloodActor {}
|
||||
class BloodDudeBurningInnocent : BloodActor {}
|
||||
class BloodDudeBurningCultist : BloodActor {}
|
||||
class BloodDudeBurningZombieAxe : BloodActor {}
|
||||
class BloodDudeBurningZombieButcher : BloodActor {}
|
||||
class BloodDudeCultistReserved : BloodActor {} // unused
|
||||
class BloodDudeZombieAxeLaying : BloodActor {}
|
||||
class BloodDudeInnocent : BloodActor {}
|
||||
class BloodDudeCultistShotgunProne : BloodActor {}
|
||||
class BloodDudeCultistTesla : BloodActor {}
|
||||
class BloodDudeCultistTNT : BloodActor {}
|
||||
class BloodDudeCultistBeast : BloodActor {}
|
||||
class BloodDudeTinyCaleb : BloodActor {}
|
||||
class BloodDudeBeast : BloodActor {}
|
||||
class BloodDudeBurningTinyCaleb : BloodActor {}
|
||||
class BloodDudeBurningBeast : BloodActor {}
|
||||
class BloodDudeBase : Bloodactor
|
||||
{
|
||||
override int getRespawnTime()
|
||||
{
|
||||
if (!self.hasX) return -1;
|
||||
if (self.xspr.respawn == 2 || (self.xspr.respawn != 1 && gGameOptions.nMonsterSettings == Blood.MONSTERSETTINGS_2))
|
||||
return gGameOptions.nMonsterRespawnTime;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
class BloodPlayerBase : BloodDudeBase
|
||||
{
|
||||
override int getRespawnTime()
|
||||
{
|
||||
return -1; // no respawn for players.
|
||||
}
|
||||
}
|
||||
|
||||
class BloodDudeCultistTommy : BloodDudeBase {}
|
||||
class BloodDudeCultistShotgun : BloodDudeBase {}
|
||||
class BloodDudeZombieAxeNormal : BloodDudeBase {}
|
||||
class BloodDudeZombieButcher : BloodDudeBase {}
|
||||
class BloodDudeZombieAxeBuried : BloodDudeBase {}
|
||||
class BloodDudeGargoyleFlesh : BloodDudeBase {}
|
||||
class BloodDudeGargoyleStone : BloodDudeBase {}
|
||||
class BloodDudeGargoyleStatueFlesh : BloodDudeBase {}
|
||||
class BloodDudeGargoyleStatueStone : BloodDudeBase {}
|
||||
class BloodDudePhantasm : BloodDudeBase {}
|
||||
class BloodDudeHellHound : BloodDudeBase {}
|
||||
class BloodDudeHand : BloodDudeBase {}
|
||||
class BloodDudeSpiderBrown : BloodDudeBase {}
|
||||
class BloodDudeSpiderRed : BloodDudeBase {}
|
||||
class BloodDudeSpiderBlack : BloodDudeBase {}
|
||||
class BloodDudeSpiderMother : BloodDudeBase {}
|
||||
class BloodDudeGillBeast : BloodDudeBase {}
|
||||
class BloodDudeBoneEel : BloodDudeBase {}
|
||||
class BloodDudeBat : BloodDudeBase {}
|
||||
class BloodDudeRat : BloodDudeBase {}
|
||||
class BloodDudePodGreen : BloodDudeBase {}
|
||||
class BloodDudeTentacleGreen : BloodDudeBase {}
|
||||
class BloodDudePodFire : BloodDudeBase {}
|
||||
class BloodDudeTentacleFire : BloodDudeBase {}
|
||||
class BloodDudePodMother : BloodDudeBase {}
|
||||
class BloodDudeTentacleMother : BloodDudeBase {}
|
||||
class BloodDudeCerberusTwoHead : BloodDudeBase {}
|
||||
class BloodDudeCerberusOneHead : BloodDudeBase {}
|
||||
class BloodDudeTchernobog : BloodDudeBase {}
|
||||
class BloodDudeCultistTommyProne : BloodDudeBase {}
|
||||
class BloodDudePlayer1 : BloodPlayerBase {}
|
||||
class BloodDudePlayer2 : BloodPlayerBase {}
|
||||
class BloodDudePlayer3 : BloodPlayerBase {}
|
||||
class BloodDudePlayer4 : BloodPlayerBase {}
|
||||
class BloodDudePlayer5 : BloodPlayerBase {}
|
||||
class BloodDudePlayer6 : BloodPlayerBase {}
|
||||
class BloodDudePlayer7 : BloodPlayerBase {}
|
||||
class BloodDudePlayer8 : BloodPlayerBase {}
|
||||
class BloodDudeBurningInnocent : BloodDudeBase {}
|
||||
class BloodDudeBurningCultist : BloodDudeBase {}
|
||||
class BloodDudeBurningZombieAxe : BloodDudeBase {}
|
||||
class BloodDudeBurningZombieButcher : BloodDudeBase {}
|
||||
class BloodDudeCultistReserved : BloodDudeBase {} // unused
|
||||
class BloodDudeZombieAxeLaying : BloodDudeBase {}
|
||||
class BloodDudeInnocent : BloodDudeBase {}
|
||||
class BloodDudeCultistShotgunProne : BloodDudeBase {}
|
||||
class BloodDudeCultistTesla : BloodDudeBase {}
|
||||
class BloodDudeCultistTNT : BloodDudeBase {}
|
||||
class BloodDudeCultistBeast : BloodDudeBase {}
|
||||
class BloodDudeTinyCaleb : BloodDudeBase {}
|
||||
class BloodDudeBeast : BloodDudeBase {}
|
||||
class BloodDudeBurningTinyCaleb : BloodDudeBase {}
|
||||
class BloodDudeBurningBeast : BloodDudeBase {}
|
||||
|
|
|
@ -1,9 +1,35 @@
|
|||
class BloodItemBase : BloodActor
|
||||
{
|
||||
meta int packslot;
|
||||
meta int respawntype;
|
||||
Property prefix: none;
|
||||
property packslot: packslot;
|
||||
property respawntype: respawntype;
|
||||
|
||||
default
|
||||
{
|
||||
respawntype 0;
|
||||
}
|
||||
|
||||
|
||||
override int getRespawnTime()
|
||||
{
|
||||
if (!self.hasX) return -1;
|
||||
if (self.xspr.respawn == 3 && gGameOptions.nGameType == Blood.kSinglePlayer) return 0;
|
||||
else if (self.xspr.respawn == 2 || (self.xspr.respawn != 1 && gGameOptions.nItemSettings != Blood.ITEMSETTINGS_0))
|
||||
{
|
||||
switch (self.respawntype)
|
||||
{
|
||||
case 1:
|
||||
return gGameOptions.nSpecialRespawnTime;
|
||||
case 2:
|
||||
return gGameOptions.nSpecialRespawnTime << 1;
|
||||
default:
|
||||
return gGameOptions.nItemRespawnTime;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
class BloodKeyBase : BloodItemBase
|
||||
|
@ -159,6 +185,7 @@ class BloodItemShadowCloak : BloodItemBase
|
|||
pic "ShadowCloakIcon";
|
||||
shade -8;
|
||||
scale 0.625, 0.625;
|
||||
respawntype 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -169,6 +196,7 @@ class BloodItemDeathMask : BloodItemBase
|
|||
pic "DeathMaskIcon";
|
||||
shade -8;
|
||||
scale 0.625, 0.625;
|
||||
respawntype 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -190,6 +218,7 @@ class BloodItemTwoGuns : BloodItemBase
|
|||
pic "GunsAkimboIcon";
|
||||
shade -8;
|
||||
scale 0.625, 0.625;
|
||||
respawntype 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -232,6 +261,7 @@ class BloodItemReflectShots : BloodItemBase
|
|||
pic "ReflectiveIcon";
|
||||
shade -8;
|
||||
scale 0.625, 0.625;
|
||||
respawntype 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,15 @@ class BloodWeaponBase : BloodActor
|
|||
property count: count;
|
||||
property type: type;
|
||||
property ammotype: ammotype;
|
||||
|
||||
override int getRespawnTime()
|
||||
{
|
||||
if (!self.hasX) return -1;
|
||||
if (self.xspr.respawn == 2 || (self.xspr.respawn != 1 && gGameOptions.nWeaponSettings != Blood.WEAPONSETTINGS_0))
|
||||
return gGameOptions.nWeaponRespawnTime;
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class BloodWeaponSawedoff : BloodWeaponBase
|
||||
|
@ -138,6 +147,16 @@ class BloodAmmoBase : BloodActor
|
|||
property count: count;
|
||||
property type: type;
|
||||
property weapontype: weapontype;
|
||||
|
||||
override int getRespawnTime()
|
||||
{
|
||||
if (!self.hasX) return -1;
|
||||
if (self.xspr.respawn == 3 || gGameOptions.nWeaponSettings == Blood.WEAPONSETTINGS_1) return 0;
|
||||
else if (self.xspr.respawn != 1 && gGameOptions.nWeaponSettings != Blood.WEAPONSETTINGS_0)
|
||||
return gGameOptions.nWeaponRespawnTime;
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class BloodAmmoSprayCan : BloodAmmoBase
|
||||
|
|
|
@ -96,13 +96,6 @@ class BloodActor : CoreActor native
|
|||
property shade: defshade;
|
||||
property pal: defpal;
|
||||
|
||||
enum GAME_TYPE
|
||||
{
|
||||
kSingleplayer = 1,
|
||||
kDeathmatch = 2,
|
||||
kTeamplay = 3
|
||||
}
|
||||
|
||||
enum STAT_ID {
|
||||
kStatDecoration = 0,
|
||||
kStatFX = 1,
|
||||
|
@ -181,6 +174,12 @@ class BloodActor : CoreActor native
|
|||
native void evPostActorCallback(int delta, int callback);
|
||||
native double, double getActorExtents();
|
||||
|
||||
|
||||
virtual int getRespawnTime()
|
||||
{
|
||||
return -1; // no respawn by default.
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
|
@ -225,11 +224,11 @@ class BloodActor : CoreActor native
|
|||
spawned.cstat &= ~CSTAT_SPRITE_BLOCK_ALL;
|
||||
spawned.shade = spawned.defshade;
|
||||
|
||||
if (itemtype is 'BloodKeyBase' && gGameOptions.nGameType == kSingleplayer)
|
||||
if (itemtype is 'BloodKeyBase' && gGameOptions.nGameType == Blood.kSingleplayer)
|
||||
{
|
||||
spawned.xspr.respawn = 3;
|
||||
}
|
||||
if (itemtype is 'BloodFlagBase' && gGameOptions.nGameType == kTeamplay)
|
||||
if (itemtype is 'BloodFlagBase' && gGameOptions.nGameType == Blood.kTeamplay)
|
||||
{
|
||||
spawned.evPostActorCallback(1800, kCallbackReturnFlag);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,45 @@
|
|||
// contains all global Blood definitions
|
||||
struct Blood native
|
||||
{
|
||||
enum DIFFICULTY
|
||||
{
|
||||
DIFFICULTY_0 = 0,
|
||||
DIFFICULTY_1,
|
||||
DIFFICULTY_2,
|
||||
DIFFICULTY_3,
|
||||
DIFFICULTY_4,
|
||||
};
|
||||
|
||||
enum MONSTERSETTINGS
|
||||
{
|
||||
MONSTERSETTINGS_0 = 0,
|
||||
MONSTERSETTINGS_1,
|
||||
MONSTERSETTINGS_2,
|
||||
};
|
||||
|
||||
enum WEAPONSETTINGS
|
||||
{
|
||||
WEAPONSETTINGS_0 = 0,
|
||||
WEAPONSETTINGS_1,
|
||||
WEAPONSETTINGS_2,
|
||||
WEAPONSETTINGS_3,
|
||||
};
|
||||
|
||||
enum ITEMSETTINGS
|
||||
{
|
||||
ITEMSETTINGS_0 = 0,
|
||||
ITEMSETTINGS_1,
|
||||
ITEMSETTINGS_2,
|
||||
};
|
||||
|
||||
enum GAME_TYPE
|
||||
{
|
||||
kSingleplayer = 1,
|
||||
kDeathmatch = 2,
|
||||
kTeamplay = 3
|
||||
}
|
||||
|
||||
|
||||
// POWERUPS /////////////////////////////////////////////////////
|
||||
enum EPowerupType {
|
||||
kPwUpFeatherFall = 12,
|
||||
|
|
Loading…
Reference in a new issue