From fad406c4c92074492a4be7500ec4e0da828d47b3 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 19 Aug 2018 01:14:15 +0200 Subject: [PATCH] - got rid of FNameNoInit and made the default constructor of FName non-initializing. This setup has been a constant source of problems so now I reviewed all uses of FName to make sure that everything that needs to be initialized is done manually. This also merges the player_t constructor into the class definition as default values. --- src/actor.h | 14 +- src/c_console.cpp | 2 +- src/d_netinfo.cpp | 8 +- src/d_player.h | 164 +++++++++++----------- src/decallib.cpp | 4 +- src/dobjtype.h | 4 +- src/doomdata.h | 2 +- src/edata.cpp | 2 +- src/events.h | 2 +- src/g_level.h | 7 +- src/g_mapinfo.cpp | 5 +- src/g_statusbar/sbar.h | 2 +- src/g_statusbar/sbarinfo_commands.cpp | 2 +- src/g_statusbar/shared_sbar.cpp | 2 +- src/info.cpp | 4 +- src/intermission/intermission.h | 4 +- src/menu/menu.h | 4 +- src/menu/menudef.cpp | 8 +- src/name.h | 16 +-- src/p_conversation.h | 2 +- src/p_interaction.cpp | 13 +- src/p_map.cpp | 5 +- src/p_mobj.cpp | 10 +- src/p_states.cpp | 20 ++- src/p_terrain.cpp | 6 +- src/p_udmf.cpp | 7 +- src/p_udmf.h | 2 +- src/p_usdf.cpp | 4 +- src/p_user.cpp | 76 ---------- src/r_defs.h | 6 +- src/s_sndseq.cpp | 6 +- src/sc_man.cpp | 7 +- src/sc_man.h | 1 - src/scripting/backend/codegen.cpp | 10 +- src/scripting/backend/codegen.h | 2 +- src/scripting/decorate/olddecorations.cpp | 3 +- src/scripting/decorate/thingdef_exp.cpp | 2 +- src/scripting/decorate/thingdef_parse.cpp | 8 +- src/scripting/thingdef_properties.cpp | 12 +- src/scripting/types.cpp | 4 +- src/scripting/types.h | 6 +- src/scripting/zscript/zcc_parser.cpp | 2 +- src/serializer.cpp | 2 +- src/textures/animations.cpp | 1 + src/umapinfo.cpp | 2 +- src/v_font.h | 2 +- src/zstring.h | 1 - 47 files changed, 177 insertions(+), 301 deletions(-) diff --git a/src/actor.h b/src/actor.h index 71295794a..7fb4e4cc8 100644 --- a/src/actor.h +++ b/src/actor.h @@ -1141,7 +1141,7 @@ public: uint8_t WeaveIndexZ; int skillrespawncount; int TIDtoHate; // TID of things to hate (0 if none) - FNameNoInit Species; // For monster families + FName Species; // For monster families TObjPtr alternative; // (Un)Morphed actors stored here. Those with the MF_UNMORPHED flag are the originals. TObjPtr tracer; // Thing being chased/attacked for tracers TObjPtr master; // Thing which spawned this one (prevents mutual attacks) @@ -1184,12 +1184,12 @@ public: line_t *BlockingLine; // Line that blocked the last move int PoisonDamage; // Damage received per tic from poison. - FNameNoInit PoisonDamageType; // Damage type dealt by poison. + FName PoisonDamageType; // Damage type dealt by poison. int PoisonDuration; // Duration left for receiving poison damage. int PoisonPeriod; // How often poison damage is applied. (Every X tics.) int PoisonDamageReceived; // Damage received per tic from poison. - FNameNoInit PoisonDamageTypeReceived; // Damage type received by poison. + FName PoisonDamageTypeReceived; // Damage type received by poison. int PoisonDurationReceived; // Duration left for receiving poison damage. int PoisonPeriodReceived; // How often poison damage is applied. (Every X tics.) TObjPtr Poisoner; // Last source of received poison damage. @@ -1229,13 +1229,13 @@ public: int32_t Mass; int16_t PainChance; int PainThreshold; - FNameNoInit DamageType; - FNameNoInit DamageTypeReceived; + FName DamageType; + FName DamageTypeReceived; double DamageFactor; double DamageMultiply; - FNameNoInit PainType; - FNameNoInit DeathType; + FName PainType; + FName DeathType; PClassActor *TeleFogSourceType; PClassActor *TeleFogDestType; int RipperLevel; diff --git a/src/c_console.cpp b/src/c_console.cpp index da38a25e9..bc552c3b8 100644 --- a/src/c_console.cpp +++ b/src/c_console.cpp @@ -1807,7 +1807,7 @@ struct TabData FName TabName; TabData() - : UseCount(0) + : UseCount(0), TabName(NAME_None) { } diff --git a/src/d_netinfo.cpp b/src/d_netinfo.cpp index 2bc59fe71..ef68ebf4e 100644 --- a/src/d_netinfo.cpp +++ b/src/d_netinfo.cpp @@ -756,7 +756,7 @@ void D_ReadUserInfoStrings (int pnum, uint8_t **stream, bool update) const char *breakpt; FString value; bool compact; - FName keyname; + FName keyname = NAME_None; unsigned int infotype = 0; if (*ptr++ != '\\') @@ -925,8 +925,6 @@ void WriteUserInfo(FSerializer &arc, userinfo_t &info) void ReadUserInfo(FSerializer &arc, userinfo_t &info, FString &skin) { - FName name; - FBaseCVar **cvar; UCVarValue val; const char *key; const char *str; @@ -938,8 +936,8 @@ void ReadUserInfo(FSerializer &arc, userinfo_t &info, FString &skin) while ((key = arc.GetKey())) { arc.StringPtr(nullptr, str); - name = key; - cvar = info.CheckKey(name); + FName name = key; + FBaseCVar **cvar = info.CheckKey(name); if (cvar != NULL && *cvar != NULL) { switch (name) diff --git a/src/d_player.h b/src/d_player.h index 189b0973b..1ae74de32 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -141,7 +141,7 @@ public: double SideMove1, SideMove2; FTextureID ScoreIcon; int SpawnMask; - FNameNoInit MorphWeapon; + FName MorphWeapon; double AttackZOffset; // attack height, relative to player center double UseRange; // [NS] Distance at which player can +use double AirCapacity; // Multiplier for air supply underwater. @@ -155,10 +155,10 @@ public: double ViewBob; // Former class properties that were moved into the object to get rid of the meta class. - FNameNoInit SoundClass; // Sound class - FNameNoInit Face; // Doom status bar face (when used) - FNameNoInit Portrait; - FNameNoInit Slot[10]; + FName SoundClass; // Sound class + FName Face; // Doom status bar face (when used) + FName Portrait; + FName Slot[10]; double HexenArmor[5]; uint8_t ColorRangeStart; // Skin color range uint8_t ColorRangeEnd; @@ -372,7 +372,7 @@ void WriteUserInfo(FSerializer &arc, userinfo_t &info); class player_t { public: - player_t(); + player_t() = default; ~player_t(); player_t &operator= (const player_t &p); @@ -384,117 +384,117 @@ public: void SetLogText (const char *text); void SendPitchLimits() const; - APlayerPawn *mo; - uint8_t playerstate; - ticcmd_t cmd; + APlayerPawn *mo = nullptr; + uint8_t playerstate = 0; + ticcmd_t cmd = {}; usercmd_t original_cmd; uint32_t original_oldbuttons; userinfo_t userinfo; // [RH] who is this? - PClassActor *cls; // class of associated PlayerPawn + PClassActor *cls = nullptr; // class of associated PlayerPawn - float DesiredFOV; // desired field of vision - float FOV; // current field of vision - double viewz; // focal origin above r.z - double viewheight; // base height above floor for viewz - double deltaviewheight; // squat speed. - double bob; // bounded/scaled total velocity + float DesiredFOV = 0; // desired field of vision + float FOV = 0; // current field of vision + double viewz = 0; // focal origin above r.z + double viewheight = 0; // base height above floor for viewz + double deltaviewheight = 0; // squat speed. + double bob = 0; // bounded/scaled total velocity // killough 10/98: used for realistic bobbing (i.e. not simply overall speed) // mo->velx and mo->vely represent true velocity experienced by player. // This only represents the thrust that the player applies himself. // This avoids anomalies with such things as Boom ice and conveyors. - DVector2 Vel; + DVector2 Vel = { 0,0 }; - bool centering; - uint8_t turnticks; + bool centering = false; + uint8_t turnticks = 0; - bool attackdown; - bool usedown; - uint32_t oldbuttons; - int health; // only used between levels, mo->health + bool attackdown = false; + bool usedown = false; + uint32_t oldbuttons = false; + int health = 0; // only used between levels, mo->health // is used during levels - int inventorytics; - uint8_t CurrentPlayerClass; // class # for this player instance + int inventorytics = 0; + uint8_t CurrentPlayerClass = 0; // class # for this player instance - int frags[MAXPLAYERS]; // kills of other players - int fragcount; // [RH] Cumulative frags for this player - int lastkilltime; // [RH] For multikills - uint8_t multicount; - uint8_t spreecount; // [RH] Keep track of killing sprees - uint16_t WeaponState; + int frags[MAXPLAYERS] = {}; // kills of other players + int fragcount = 0; // [RH] Cumulative frags for this player + int lastkilltime = 0; // [RH] For multikills + uint8_t multicount = 0; + uint8_t spreecount = 0; // [RH] Keep track of killing sprees + uint16_t WeaponState = 0; - AWeapon *ReadyWeapon; - AWeapon *PendingWeapon; // WP_NOCHANGE if not changing - TObjPtr psprites; // view sprites (gun, etc) + AWeapon *ReadyWeapon = nullptr; + AWeapon *PendingWeapon = nullptr; // WP_NOCHANGE if not changing + TObjPtr psprites = nullptr; // view sprites (gun, etc) - int cheats; // bit flags - int timefreezer; // Player has an active time freezer - short refire; // refired shots are less accurate - short inconsistant; - bool waiting; - int killcount, itemcount, secretcount; // for intermission - int damagecount, bonuscount;// for screen flashing - int hazardcount; // for delayed Strife damage - int hazardinterval; // Frequency of damage infliction - FName hazardtype; // Damage type of last hazardous damage encounter. - int poisoncount; // screen flash for poison damage - FName poisontype; // type of poison damage to apply - FName poisonpaintype; // type of Pain state to enter for poison damage - TObjPtr poisoner; // NULL for non-player actors - TObjPtr attacker; // who did damage (NULL for floors) - int extralight; // so gun flashes light up areas - short fixedcolormap; // can be set to REDCOLORMAP, etc. - short fixedlightlevel; - int morphTics; // player is a chicken/pig if > 0 - PClassActor *MorphedPlayerClass; // [MH] (for SBARINFO) class # for this player instance when morphed - int MorphStyle; // which effects to apply for this player instance when morphed - PClassActor *MorphExitFlash; // flash to apply when demorphing (cache of value given to P_MorphPlayer) - TObjPtr PremorphWeapon; // ready weapon before morphing - int chickenPeck; // chicken peck countdown - int jumpTics; // delay the next jump for a moment - bool onground; // Identifies if this player is on the ground or other object + int cheats = 0; // bit flags + int timefreezer = 0; // Player has an active time freezer + short refire = 0; // refired shots are less accurate + short inconsistant = 0; + bool waiting = 0; + int killcount = 0, itemcount = 0, secretcount = 0; // for intermission + int damagecount = 0, bonuscount = 0;// for screen flashing + int hazardcount = 0; // for delayed Strife damage + int hazardinterval = 0; // Frequency of damage infliction + FName hazardtype = NAME_None; // Damage type of last hazardous damage encounter. + int poisoncount = 0; // screen flash for poison damage + FName poisontype = NAME_None; // type of poison damage to apply + FName poisonpaintype = NAME_None; // type of Pain state to enter for poison damage + TObjPtr poisoner = nullptr; // NULL for non-player actors + TObjPtr attacker = nullptr; // who did damage (NULL for floors) + int extralight = 0; // so gun flashes light up areas + short fixedcolormap = 0; // can be set to REDCOLORMAP, etc. + short fixedlightlevel = 0; + int morphTics = 0; // player is a chicken/pig if > 0 + PClassActor *MorphedPlayerClass = nullptr; // [MH] (for SBARINFO) class # for this player instance when morphed + int MorphStyle = 0; // which effects to apply for this player instance when morphed + PClassActor *MorphExitFlash = nullptr; // flash to apply when demorphing (cache of value given to P_MorphPlayer) + TObjPtr PremorphWeapon = nullptr; // ready weapon before morphing + int chickenPeck = 0; // chicken peck countdown + int jumpTics = 0; // delay the next jump for a moment + bool onground = 0; // Identifies if this player is on the ground or other object - int respawn_time; // [RH] delay respawning until this tic - TObjPtr camera; // [RH] Whose eyes this player sees through + int respawn_time = 0; // [RH] delay respawning until this tic + TObjPtr camera = nullptr; // [RH] Whose eyes this player sees through - int air_finished; // [RH] Time when you start drowning + int air_finished = 0; // [RH] Time when you start drowning - FName LastDamageType; // [RH] For damage-specific pain and death sounds + FName LastDamageType = NAME_None; // [RH] For damage-specific pain and death sounds - TObjPtr MUSINFOactor; // For MUSINFO purposes - int8_t MUSINFOtics; + TObjPtr MUSINFOactor = nullptr; // For MUSINFO purposes + int8_t MUSINFOtics = 0; - bool settings_controller; // Player can control game settings. - int8_t crouching; - int8_t crouchdir; + bool settings_controller = false; // Player can control game settings. + int8_t crouching = 0; + int8_t crouchdir = 0; //Added by MC: - TObjPtr Bot; + TObjPtr Bot = nullptr; - float BlendR; // [RH] Final blending values - float BlendG; - float BlendB; - float BlendA; + float BlendR = 0; // [RH] Final blending values + float BlendG = 0; + float BlendB = 0; + float BlendA = 0; FString LogText; // [RH] Log for Strife - DAngle MinPitch; // Viewpitch limits (negative is up, positive is down) - DAngle MaxPitch; + DAngle MinPitch = 0.; // Viewpitch limits (negative is up, positive is down) + DAngle MaxPitch = 0.; - double crouchfactor; - double crouchoffset; - double crouchviewdelta; + double crouchfactor = 0; + double crouchoffset = 0; + double crouchviewdelta = 0; FWeaponSlots weapons; // [CW] I moved these here for multiplayer conversation support. - TObjPtr ConversationNPC, ConversationPC; - DAngle ConversationNPCAngle; - bool ConversationFaceTalker; + TObjPtr ConversationNPC = nullptr, ConversationPC = nullptr; + DAngle ConversationNPCAngle = 0.; + bool ConversationFaceTalker = false; double GetDeltaViewHeight() const { diff --git a/src/decallib.cpp b/src/decallib.cpp index 3b5daef5a..71ac662d3 100644 --- a/src/decallib.cpp +++ b/src/decallib.cpp @@ -1037,8 +1037,8 @@ FDecalLib::FTranslation *FDecalLib::GenerateTranslation (uint32_t start, uint32_ } FDecalBase::FDecalBase () + : Name(NAME_None) { - Name = NAME_None; } FDecalBase::~FDecalBase () @@ -1152,8 +1152,8 @@ const FDecalTemplate *FDecalGroup::GetDecal () const } FDecalAnimator::FDecalAnimator (const char *name) + : Name(name) { - Name = name; } FDecalAnimator::~FDecalAnimator () diff --git a/src/dobjtype.h b/src/dobjtype.h index 212174005..3445e02ba 100644 --- a/src/dobjtype.h +++ b/src/dobjtype.h @@ -58,8 +58,8 @@ public: uint8_t *Meta = nullptr; // Per-class static script data unsigned Size = sizeof(DObject); unsigned MetaSize = 0; - FName TypeName; - FName SourceLumpName; + FName TypeName = NAME_None; + FName SourceLumpName = NAME_None; bool bRuntimeClass = false; // class was defined at run-time, not compile-time bool bDecorateClass = false; // may be subject to some idiosyncracies due to DECORATE backwards compatibility bool bAbstract = false; diff --git a/src/doomdata.h b/src/doomdata.h index 38a65ca50..eb54f5f32 100644 --- a/src/doomdata.h +++ b/src/doomdata.h @@ -373,7 +373,7 @@ struct FMapThing uint32_t RenderStyle; int FloatbobPhase; int friendlyseeblocks; - FNameNoInit arg0str; + FName arg0str; }; diff --git a/src/edata.cpp b/src/edata.cpp index 15f3241cf..ee60356a7 100644 --- a/src/edata.cpp +++ b/src/edata.cpp @@ -120,7 +120,7 @@ struct EDSector int damageamount; int damageinterval; - FNameNoInit damagetype; + FName damagetype; uint8_t leaky; uint8_t leakyadd; uint8_t leakyremove; diff --git a/src/events.h b/src/events.h index 1fbf271dc..54d975566 100755 --- a/src/events.h +++ b/src/events.h @@ -204,7 +204,7 @@ struct FWorldEvent AActor* Inflictor = nullptr; // can be null - for damagemobj AActor* DamageSource = nullptr; // can be null int Damage = 0; - FName DamageType; + FName DamageType = NAME_None; int DamageFlags = 0; DAngle DamageAngle; // for line(pre)activated diff --git a/src/g_level.h b/src/g_level.h index b717bdbcf..98bdb4229 100644 --- a/src/g_level.h +++ b/src/g_level.h @@ -264,9 +264,8 @@ struct level_info_t; struct FOptionalMapinfoData { - FOptionalMapinfoData *Next; - FName identifier; - FOptionalMapinfoData() { Next = NULL; identifier = NAME_None; } + FOptionalMapinfoData *Next = nullptr; + FName identifier = NAME_None; virtual ~FOptionalMapinfoData() {} virtual FOptionalMapinfoData *Clone() const = 0; }; @@ -572,7 +571,7 @@ typedef TMap SkillActorReplacement; struct FSkillInfo { - FName Name; + FName Name = NAME_None; double AmmoFactor, DoubleAmmoFactor, DropAmmoFactor; double DamageFactor; double ArmorFactor; diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index 9eb80ae09..d621b231c 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -259,10 +259,13 @@ void level_info_t::Reset() compatflags = compatflags2 = 0; compatmask = compatmask2 = 0; Translator = ""; - RedirectType = 0; + RedirectType = NAME_None; RedirectMapName = ""; EnterPic = ""; ExitPic = ""; + Intermission = NAME_None; + deathsequence = NAME_None; + slideshow = NAME_None; InterMusic = ""; intermusicorder = 0; SoundInfo = ""; diff --git a/src/g_statusbar/sbar.h b/src/g_statusbar/sbar.h index a98111a29..968c91760 100644 --- a/src/g_statusbar/sbar.h +++ b/src/g_statusbar/sbar.h @@ -252,7 +252,7 @@ struct FMugShotState unsigned int Position; int Time; int Random; - FName State; + FName State = NAME_None; TArray Frames; FMugShotState(FName name); diff --git a/src/g_statusbar/sbarinfo_commands.cpp b/src/g_statusbar/sbarinfo_commands.cpp index 199a0fe9d..15b0663af 100644 --- a/src/g_statusbar/sbarinfo_commands.cpp +++ b/src/g_statusbar/sbarinfo_commands.cpp @@ -667,7 +667,7 @@ class CommandDrawSwitchableImage : public CommandDrawImage Operator conditionalOperator[2]; FString inventoryItem[2]; int armorType[2]; - FName keySpecies[2]; + FName keySpecies[2] = { NAME_None, NAME_None }; }; //////////////////////////////////////////////////////////////////////////////// diff --git a/src/g_statusbar/shared_sbar.cpp b/src/g_statusbar/shared_sbar.cpp index 7236bc39b..6be4abf9f 100644 --- a/src/g_statusbar/shared_sbar.cpp +++ b/src/g_statusbar/shared_sbar.cpp @@ -319,7 +319,7 @@ void ST_CreateStatusBar(bool bTitleLevel) } if (StatusBar == nullptr) { - FName defname; + FName defname = NAME_None; if (gameinfo.gametype & GAME_DoomChex) defname = "DoomStatusBar"; else if (gameinfo.gametype == GAME_Heretic) defname = "HereticStatusBar"; diff --git a/src/info.cpp b/src/info.cpp index f31abf953..0ff3928cd 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -408,7 +408,7 @@ void PClassActor::RegisterIDs() PClassActor *PClassActor::GetReplacement(bool lookskill) { - FName skillrepname; + FName skillrepname = NAME_None; if (lookskill && AllSkills.Size() > (unsigned)gameskill) { @@ -470,7 +470,7 @@ DEFINE_ACTION_FUNCTION(AActor, GetReplacement) PClassActor *PClassActor::GetReplacee(bool lookskill) { - FName skillrepname; + FName skillrepname = NAME_None; if (lookskill && AllSkills.Size() > (unsigned)gameskill) { diff --git a/src/intermission/intermission.h b/src/intermission/intermission.h index a73d18a12..f159ebb7a 100644 --- a/src/intermission/intermission.h +++ b/src/intermission/intermission.h @@ -122,7 +122,7 @@ struct FIntermissionActionCast : public FIntermissionAction typedef FIntermissionAction Super; FString mName; - FName mCastClass; + FName mCastClass = NAME_None; TArray mCastSounds; FIntermissionActionCast(); @@ -144,7 +144,7 @@ struct FIntermissionActionScroller : public FIntermissionAction struct FIntermissionDescriptor { - FName mLink; + FName mLink = NAME_None; TDeletingArray mActions; }; diff --git a/src/menu/menu.h b/src/menu/menu.h index 2091bd823..904ea0080 100644 --- a/src/menu/menu.h +++ b/src/menu/menu.h @@ -121,7 +121,7 @@ class DMenuDescriptor : public DObject { DECLARE_CLASS(DMenuDescriptor, DObject) public: - FName mMenuName; + FName mMenuName = NAME_None; FString mNetgameMessage; PClass *mClass = nullptr; bool mProtected = false; @@ -287,7 +287,7 @@ class DMenuItemBase : public DObject DECLARE_CLASS(DMenuItemBase, DObject) public: double mXpos, mYpos; - FNameNoInit mAction; + FName mAction; bool mEnabled; bool Activate(); diff --git a/src/menu/menudef.cpp b/src/menu/menudef.cpp index 5cbc88549..19217e527 100644 --- a/src/menu/menudef.cpp +++ b/src/menu/menudef.cpp @@ -657,11 +657,9 @@ static void ParseListMenu(FScanner &sc) static void ParseOptionValue(FScanner &sc) { - FName optname; - FOptionValues *val = new FOptionValues; sc.MustGetString(); - optname = sc.String; + FName optname = sc.String; sc.MustGetStringName("{"); while (!sc.CheckString("}")) { @@ -689,11 +687,9 @@ static void ParseOptionValue(FScanner &sc) static void ParseOptionString(FScanner &sc) { - FName optname; - FOptionValues *val = new FOptionValues; sc.MustGetString(); - optname = sc.String; + FName optname = sc.String; sc.MustGetStringName("{"); while (!sc.CheckString("}")) { diff --git a/src/name.h b/src/name.h index 521a8e697..575e42d06 100644 --- a/src/name.h +++ b/src/name.h @@ -46,7 +46,7 @@ class FString; class FName { public: - FName () : Index(0) {} + FName() = default;// : Index(0) {} FName (const char *text) { Index = NameData.FindName (text, false); } FName (const char *text, bool noCreate) { Index = NameData.FindName (text, noCreate); } FName (const char *text, size_t textlen, bool noCreate) { Index = NameData.FindName (text, textlen, noCreate); } @@ -120,20 +120,6 @@ protected: }; static NameManager NameData; - - enum EDummy { NoInit }; - FName (EDummy) {} -}; - -class FNameNoInit : public FName -{ -public: - FNameNoInit() : FName(NoInit) {} - - FName &operator = (const char *text) { Index = NameData.FindName (text, false); return *this; } - FName &operator = (const FString &text); - FName &operator = (const FName &other) { Index = int(other); return *this; } - FName &operator = (ENamedName index) { Index = index; return *this; } }; #endif diff --git a/src/p_conversation.h b/src/p_conversation.h index bc2e56be1..2a516e06e 100644 --- a/src/p_conversation.h +++ b/src/p_conversation.h @@ -33,7 +33,7 @@ struct FStrifeDialogueNode FString Goodbye; // must init to null for binary scripts to work as intended FStrifeDialogueReply *Children = nullptr; - FName MenuClassName; + FName MenuClassName = NAME_None; FString UserData; }; diff --git a/src/p_interaction.cpp b/src/p_interaction.cpp index 159ec53dd..ab7dce496 100644 --- a/src/p_interaction.cpp +++ b/src/p_interaction.cpp @@ -182,25 +182,22 @@ void SexMessage (const char *from, char *to, int gender, const char *victim, con // void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker, int dmgflags, FName MeansOfDeath) { - FName mod; FString ret; - const char *message; - const char *messagename; char gendermessage[1024]; // No obituaries for non-players, voodoo dolls or when not wanted - if (self->player == NULL || self->player->mo != self || !show_obituaries) + if (self->player == nullptr || self->player->mo != self || !show_obituaries) return; // Treat voodoo dolls as unknown deaths if (inflictor && inflictor->player && inflictor->player->mo != inflictor) MeansOfDeath = NAME_None; - mod = MeansOfDeath; - message = NULL; - messagename = NULL; + FName mod = MeansOfDeath; + const char *message = nullptr; + const char *messagename = nullptr; - if (attacker == NULL || attacker->player != NULL) + if (attacker == nullptr || attacker->player != nullptr) { if (mod == NAME_Telefrag) { diff --git a/src/p_map.cpp b/src/p_map.cpp index 9ca345d9b..dacc7ae8b 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -4484,7 +4484,7 @@ DEFINE_ACTION_FUNCTION(AActor, AimLineAttack) struct Origin { AActor *Caller; - FNameNoInit PuffSpecies; + FName PuffSpecies; bool hitGhosts; bool MThruSpecies; bool ThruSpecies; @@ -5092,6 +5092,7 @@ AActor *P_LinePickActor(AActor *t1, DAngle angle, double distance, DAngle pitch, TData.MThruSpecies = false; TData.ThruActors = false; TData.ThruSpecies = false; + TData.PuffSpecies = NAME_None; if (Trace(t1->PosAtZ(shootz), t1->Sector, direction, distance, actorMask, wallMask, t1, trace, TRACE_NoSky | TRACE_PortalRestrict, CheckForActor, &TData)) @@ -5309,7 +5310,7 @@ struct RailData AActor *Caller; TArray RailHits; TArray PortalHits; - FNameNoInit PuffSpecies; + FName PuffSpecies; bool StopAtOne; bool StopAtInvul; bool ThruGhosts; diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 2f8b89a84..16396f29c 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -2171,13 +2171,9 @@ bool AActor::FloorBounceMissile (secplane_t &plane) // Set bounce state if (BounceFlags & BOUNCE_UseBounceState) { - FName names[2]; - FState *bouncestate; - - names[0] = NAME_Bounce; - names[1] = plane.fC() < 0 ? NAME_Ceiling : NAME_Floor; - bouncestate = FindState(2, names); - if (bouncestate != NULL) + FName names[2] = { NAME_Bounce, plane.fC() < 0 ? NAME_Ceiling : NAME_Floor }; + FState *bouncestate = FindState(2, names); + if (bouncestate != nullptr) { SetState(bouncestate); } diff --git a/src/p_states.cpp b/src/p_states.cpp index 8b5922470..addf8ad1d 100644 --- a/src/p_states.cpp +++ b/src/p_states.cpp @@ -196,7 +196,7 @@ bool AActor::HasSpecialDeathStates () const TArray &MakeStateNameList(const char * fname) { static TArray namelist(3); - FName firstpart, secondpart; + FName firstpart = NAME_None, secondpart = NAME_None; char *c; // Handle the old names for the existing death states @@ -256,21 +256,19 @@ TArray &MakeStateNameList(const char * fname) FState *PClassActor::FindState(int numnames, FName *names, bool exact) const { FStateLabels *labels = GetStateLabels(); - FState *best = NULL; + FState *best = nullptr; - if (labels != NULL) + if (labels != nullptr) { int count = 0; - FStateLabel *slabel = NULL; - FName label; // Find the best-matching label for this class. - while (labels != NULL && count < numnames) + while (labels != nullptr && count < numnames) { - label = *names++; - slabel = labels->FindLabel(label); + FName label = *names++; + FStateLabel *slabel = labels->FindLabel(label); - if (slabel != NULL) + if (slabel != nullptr) { count++; labels = slabel->Children; @@ -283,7 +281,7 @@ FState *PClassActor::FindState(int numnames, FName *names, bool exact) const } if (count < numnames && exact) { - return NULL; + return nullptr; } } return best; @@ -411,7 +409,7 @@ FStateDefine *FStateDefinitions::FindStateLabelInList(TArray & lis { FStateDefine def; def.Label = name; - def.State = NULL; + def.State = nullptr; def.DefineFlags = SDF_NEXT; return &list[list.Push(def)]; } diff --git a/src/p_terrain.cpp b/src/p_terrain.cpp index 8459ed27a..73756ec57 100644 --- a/src/p_terrain.cpp +++ b/src/p_terrain.cpp @@ -375,10 +375,9 @@ void ParseSplash (FScanner &sc) int splashnum; FSplashDef *splashdef; bool isnew = false; - FName name; sc.MustGetString (); - name = sc.String; + FName name = sc.String; splashnum = (int)FindSplash (name); if (splashnum < 0) { @@ -422,10 +421,9 @@ void ParseSplash (FScanner &sc) void ParseTerrain (FScanner &sc) { int terrainnum; - FName name; sc.MustGetString (); - name = sc.String; + FName name = sc.String; terrainnum = (int)P_FindTerrain (name); if (terrainnum < 0) { diff --git a/src/p_udmf.cpp b/src/p_udmf.cpp index 6acf9e37c..a2b45fe7f 100644 --- a/src/p_udmf.cpp +++ b/src/p_udmf.cpp @@ -462,7 +462,7 @@ class UDMFParser : public UDMFParserBase TArray ParsedVertices; TArray UDMFScrollers; - FDynamicColormap *fogMap, *normMap; + FDynamicColormap *fogMap = nullptr, *normMap = nullptr; FMissingTextureTracker &missingTex; public: @@ -470,7 +470,6 @@ public: : missingTex(missing) { linemap.Clear(); - fogMap = normMap = NULL; } void ReadUserKey(FUDMFKey &ukey) { @@ -1357,11 +1356,11 @@ public: // Brand new UDMF scroller properties double scroll_ceil_x = 0; double scroll_ceil_y = 0; - FName scroll_ceil_type; + FName scroll_ceil_type = NAME_None; double scroll_floor_x = 0; double scroll_floor_y = 0; - FName scroll_floor_type; + FName scroll_floor_type = NAME_None; memset(sec, 0, sizeof(*sec)); diff --git a/src/p_udmf.h b/src/p_udmf.h index dbc7eed54..8e0901755 100644 --- a/src/p_udmf.h +++ b/src/p_udmf.h @@ -8,7 +8,7 @@ class UDMFParserBase { protected: FScanner sc; - FName namespc; + FName namespc = NAME_None; int namespace_bits; FString parsedString; bool BadCoordinates = false; diff --git a/src/p_usdf.cpp b/src/p_usdf.cpp index cb375816f..4838d4b8d 100644 --- a/src/p_usdf.cpp +++ b/src/p_usdf.cpp @@ -400,9 +400,9 @@ class USDFParser : public UDMFParserBase bool ParseConversation() { - PClassActor *type = NULL; + PClassActor *type = nullptr; int dlgid = -1; - FName clsid; + FName clsid = NAME_None; unsigned int startpos = StrifeDialogues.Size(); while (!sc.CheckToken('}')) diff --git a/src/p_user.cpp b/src/p_user.cpp index a4f5ec439..29efe9001 100644 --- a/src/p_user.cpp +++ b/src/p_user.cpp @@ -301,82 +301,6 @@ CCMD (playerclasses) // 16 pixels of bob #define MAXBOB 16. -// The player_t constructor. Since LogText is not a POD, we cannot just -// memset it all to 0. -player_t::player_t() -: mo(0), - playerstate(0), - cls(0), - DesiredFOV(0), - FOV(0), - viewz(0), - viewheight(0), - deltaviewheight(0), - bob(0), - Vel(0, 0), - centering(0), - turnticks(0), - attackdown(0), - usedown(0), - oldbuttons(0), - health(0), - inventorytics(0), - CurrentPlayerClass(0), - fragcount(0), - lastkilltime(0), - multicount(0), - spreecount(0), - WeaponState(0), - ReadyWeapon(0), - PendingWeapon(0), - psprites(0), - cheats(0), - timefreezer(0), - refire(0), - inconsistant(0), - killcount(0), - itemcount(0), - secretcount(0), - damagecount(0), - bonuscount(0), - hazardcount(0), - poisoncount(0), - poisoner(0), - attacker(0), - extralight(0), - morphTics(0), - MorphedPlayerClass(0), - MorphStyle(0), - MorphExitFlash(0), - PremorphWeapon(0), - chickenPeck(0), - jumpTics(0), - onground(0), - respawn_time(0), - camera(0), - air_finished(0), - MUSINFOactor(0), - MUSINFOtics(-1), - crouching(0), - crouchdir(0), - Bot(0), - BlendR(0), - BlendG(0), - BlendB(0), - BlendA(0), - LogText(), - crouchfactor(0), - crouchoffset(0), - crouchviewdelta(0), - ConversationNPC(0), - ConversationPC(0), - ConversationNPCAngle(0.), - ConversationFaceTalker(0) -{ - memset (&cmd, 0, sizeof(cmd)); - memset (frags, 0, sizeof(frags)); -} - player_t::~player_t() { DestroyPSprites(); diff --git a/src/r_defs.h b/src/r_defs.h index 4422fbf8d..ffe526969 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -582,7 +582,7 @@ struct FTransform struct secspecial_t { - FNameNoInit damagetype; // [RH] Means-of-death for applied damage + FName damagetype; // [RH] Means-of-death for applied damage int damageamount; // [RH] Damage to do while standing on floor short special; short damageinterval; // Interval for damage application @@ -997,7 +997,7 @@ public: short seqType; // this sector's sound sequence int sky; - FNameNoInit SeqName; // Sound sequence name. Setting seqType non-negative will override this. + FName SeqName; // Sound sequence name. Setting seqType non-negative will override this. DVector2 centerspot; // origin for any sounds played by the sector int validcount; // if == validcount, already checked @@ -1047,7 +1047,7 @@ public: struct msecnode_t *touching_renderthings; // this is used to allow wide things to be rendered not only from their main sector. double gravity; // [RH] Sector gravity (1.0 is normal) - FNameNoInit damagetype; // [RH] Means-of-death for applied damage + FName damagetype; // [RH] Means-of-death for applied damage int damageamount; // [RH] Damage to do while standing on floor short damageinterval; // Interval for damage application short leakydamage; // chance of leaking through radiation suit diff --git a/src/s_sndseq.cpp b/src/s_sndseq.cpp index 6f99fad6e..a3937a01e 100644 --- a/src/s_sndseq.cpp +++ b/src/s_sndseq.cpp @@ -314,7 +314,7 @@ void DSeqNode::Serialize(FSerializer &arc) { int seqOffset; unsigned int i; - FName seqName; + FName seqName = NAME_None; int delayTics = 0; FSoundID id; float volume; @@ -571,8 +571,8 @@ void S_ParseSndSeq (int levellump) TArray ScriptTemp; int lastlump, lump; char seqtype = ':'; - FName seqname; - FName slot; + FName seqname = NAME_None; + FName slot = NAME_None; int stopsound; int delaybase; float volumebase; diff --git a/src/sc_man.cpp b/src/sc_man.cpp index 3399947cf..44fbdb42c 100644 --- a/src/sc_man.cpp +++ b/src/sc_man.cpp @@ -211,7 +211,6 @@ FScanner &FScanner::operator=(const FScanner &other) TokenType = other.TokenType; Number = other.Number; Float = other.Float; - Name = other.Name; Line = other.Line; End = other.End; Crossed = other.Crossed; @@ -619,11 +618,7 @@ bool FScanner::GetToken () { if (ScanString (true)) { - if (TokenType == TK_NameConst) - { - Name = FName(String); - } - else if (TokenType == TK_IntConst) + if (TokenType == TK_IntConst) { char *stopper; // Check for unsigned diff --git a/src/sc_man.h b/src/sc_man.h index 9962cbde0..9c4f34a22 100644 --- a/src/sc_man.h +++ b/src/sc_man.h @@ -82,7 +82,6 @@ public: int TokenType; int Number; double Float; - FName Name; int Line; bool End; bool Crossed; diff --git a/src/scripting/backend/codegen.cpp b/src/scripting/backend/codegen.cpp index 0e8bd619f..c8fcb1f09 100644 --- a/src/scripting/backend/codegen.cpp +++ b/src/scripting/backend/codegen.cpp @@ -9336,10 +9336,8 @@ ExpEmit FxFlopFunctionCall::Emit(VMFunctionBuilder *build) //========================================================================== FxVectorBuiltin::FxVectorBuiltin(FxExpression *self, FName name) - :FxExpression(EFX_VectorBuiltin, self->ScriptPosition) + :FxExpression(EFX_VectorBuiltin, self->ScriptPosition), Function(name), Self(self) { - Self = self; - Function = name; } FxVectorBuiltin::~FxVectorBuiltin() @@ -11136,7 +11134,7 @@ ExpEmit FxRuntimeStateIndex::Emit(VMFunctionBuilder *build) FxMultiNameState::FxMultiNameState(const char *_statestring, const FScriptPosition &pos, PClassActor *checkclass) :FxExpression(EFX_MultiNameState, pos) { - FName scopename; + FName scopename = NAME_None; FString statestring = _statestring; int scopeindex = statestring.IndexOf("::"); @@ -11145,10 +11143,6 @@ FxMultiNameState::FxMultiNameState(const char *_statestring, const FScriptPositi scopename = FName(statestring, scopeindex, false); statestring = statestring.Right(statestring.Len() - scopeindex - 2); } - else - { - scopename = NAME_None; - } names = MakeStateNameList(statestring); names.Insert(0, scopename); scope = checkclass; diff --git a/src/scripting/backend/codegen.h b/src/scripting/backend/codegen.h index 88ea7bcdd..092503282 100644 --- a/src/scripting/backend/codegen.h +++ b/src/scripting/backend/codegen.h @@ -369,7 +369,7 @@ public: class FxIdentifier : public FxExpression { public: - FName Identifier; + FName Identifier = NAME_None; bool noglobal = false; FxIdentifier(FName i, const FScriptPosition &p); diff --git a/src/scripting/decorate/olddecorations.cpp b/src/scripting/decorate/olddecorations.cpp index 62a00fe57..209bf393d 100644 --- a/src/scripting/decorate/olddecorations.cpp +++ b/src/scripting/decorate/olddecorations.cpp @@ -101,12 +101,11 @@ void ParseOldDecoration(FScanner &sc, EDefinitionType def, PNamespace *ns) FExtraInfo extra; PClassActor *type; PClassActor *parent; - FName typeName; parent = (def == DEF_Pickup) ? PClass::FindActor("FakeInventory") : RUNTIME_CLASS(AActor); sc.MustGetString(); - typeName = FName(sc.String); + FName typeName = FName(sc.String); type = DecoDerivedClass(FScriptPosition(sc), parent, typeName); ResetBaggage(&bag, parent); bag.Namespace = ns; diff --git a/src/scripting/decorate/thingdef_exp.cpp b/src/scripting/decorate/thingdef_exp.cpp index c94b98093..4a1a82922 100644 --- a/src/scripting/decorate/thingdef_exp.cpp +++ b/src/scripting/decorate/thingdef_exp.cpp @@ -421,7 +421,7 @@ static FxExpression *ParseExpression0 (FScanner &sc, PClassActor *cls) } else if (sc.CheckToken(TK_NameConst)) { - return new FxConstant(sc.Name, scpos); + return new FxConstant(FName(sc.String), scpos); } else if (sc.CheckToken(TK_StringConst)) { diff --git a/src/scripting/decorate/thingdef_parse.cpp b/src/scripting/decorate/thingdef_parse.cpp index 43330d58f..eb553028d 100644 --- a/src/scripting/decorate/thingdef_parse.cpp +++ b/src/scripting/decorate/thingdef_parse.cpp @@ -1029,9 +1029,7 @@ PClassActor *CreateNewActor(const FScriptPosition &sc, FName typeName, FName par //========================================================================== static PClassActor *ParseActorHeader(FScanner &sc, Baggage *bag) { - FName typeName; - FName parentName; - FName replaceName; + FName replaceName = NAME_None; bool native = false; int DoomEdNum = -1; @@ -1044,7 +1042,7 @@ static PClassActor *ParseActorHeader(FScanner &sc, Baggage *bag) *colon++ = 0; } - typeName = sc.String; + FName typeName = sc.String; // Do some tweaking so that a definition like 'Actor:Parent' which is read as a single token is recognized as well // without having resort to C-mode (which disallows periods in actor names.) @@ -1071,7 +1069,7 @@ static PClassActor *ParseActorHeader(FScanner &sc, Baggage *bag) sc.UnGet(); } - parentName = colon; + FName parentName = colon; // Check for "replaces" if (sc.CheckString ("replaces")) diff --git a/src/scripting/thingdef_properties.cpp b/src/scripting/thingdef_properties.cpp index e5338e37e..522a569ee 100644 --- a/src/scripting/thingdef_properties.cpp +++ b/src/scripting/thingdef_properties.cpp @@ -569,9 +569,8 @@ DEFINE_PROPERTY(painchance, ZI, Actor) } else { - FName painType; - if (!stricmp(str, "Normal")) painType = NAME_None; - else painType=str; + FName painType = NAME_None; + if (stricmp(str, "Normal")) painType = str; info->SetPainChance(painType, id); } @@ -897,15 +896,14 @@ DEFINE_PROPERTY(damagefactor, ZF, Actor) PROP_STRING_PARM(str, 0); PROP_DOUBLE_PARM(id, 1); - if (str == NULL) + if (str == nullptr) { defaults->DamageFactor = id; } else { - FName dmgType; - if (!stricmp(str, "Normal")) dmgType = NAME_None; - else dmgType=str; + FName dmgType = NAME_None; + if (stricmp(str, "Normal")) dmgType = str; info->SetDamageFactor(dmgType, id); } diff --git a/src/scripting/types.cpp b/src/scripting/types.cpp index 7aed2850c..269de5cc9 100644 --- a/src/scripting/types.cpp +++ b/src/scripting/types.cpp @@ -1593,10 +1593,8 @@ PClassPointer *NewClassPointer(PClass *restrict) //========================================================================== PEnum::PEnum(FName name, PTypeBase *outer) -: PInt(4, false) +: PInt(4, false), Outer(outer), EnumName(name) { - EnumName = name; - Outer = outer; Flags |= TYPE_IntNotInt; mDescriptiveName.Format("Enum<%s>", name.GetChars()); } diff --git a/src/scripting/types.h b/src/scripting/types.h index 0817aa99d..52f1fc464 100644 --- a/src/scripting/types.h +++ b/src/scripting/types.h @@ -238,10 +238,10 @@ protected: class PContainerType : public PCompoundType { public: - PTypeBase *Outer; // object this type is contained within - FName TypeName; // this type's name + PTypeBase *Outer = nullptr; // object this type is contained within + FName TypeName = NAME_None; // this type's name - PContainerType() : Outer(NULL) + PContainerType() { mDescriptiveName = "ContainerType"; Flags |= TYPE_Container; diff --git a/src/scripting/zscript/zcc_parser.cpp b/src/scripting/zscript/zcc_parser.cpp index 693ffcffa..5ddc9207d 100644 --- a/src/scripting/zscript/zcc_parser.cpp +++ b/src/scripting/zscript/zcc_parser.cpp @@ -274,7 +274,7 @@ static void ParseSingleFile(FScanner *pSC, const char *filename, int lump, void break; case TK_NameConst: - value.Int = sc.Name; + value.Int = FName(sc.String).GetIndex(); tokentype = ZCC_NAMECONST; break; diff --git a/src/serializer.cpp b/src/serializer.cpp index 58d5658d4..fe8864a33 100644 --- a/src/serializer.cpp +++ b/src/serializer.cpp @@ -2147,7 +2147,7 @@ template<> FSerializer &Serialize(FSerializer &arc, const char *key, FFont *&fon } else { - FName n; + FName n = NAME_None; arc(key, n); font = V_GetFont(n); if (font == nullptr) diff --git a/src/textures/animations.cpp b/src/textures/animations.cpp index b2c0e3e56..c1b8f5c48 100644 --- a/src/textures/animations.cpp +++ b/src/textures/animations.cpp @@ -789,6 +789,7 @@ void FTextureManager::ParseAnimatedDoor(FScanner &sc) sc.MustGetString(); anim.BaseTexture = CheckForTexture (sc.String, ETextureType::Wall, texflags); + anim.OpenSound = anim.CloseSound = NAME_None; if (!anim.BaseTexture.Exists()) { diff --git a/src/umapinfo.cpp b/src/umapinfo.cpp index d7997a083..3c1517632 100644 --- a/src/umapinfo.cpp +++ b/src/umapinfo.cpp @@ -403,7 +403,7 @@ void CommitUMapinfo(level_info_t *defaultinfo) if (map.nextmap[0]) levelinfo->NextMap = map.nextmap; else if (map.endpic[0]) { - FName name; + FName name = NAME_None; if (!stricmp(map.endpic, "$CAST")) { diff --git a/src/v_font.h b/src/v_font.h index 83ea5de19..383363ce8 100644 --- a/src/v_font.h +++ b/src/v_font.h @@ -130,7 +130,7 @@ protected: uint8_t *PatchRemap; int Lump; - FName FontName; + FName FontName = NAME_None; FFont *Next; static FFont *FirstFont; diff --git a/src/zstring.h b/src/zstring.h index c6cd44fc9..5ab267414 100644 --- a/src/zstring.h +++ b/src/zstring.h @@ -454,7 +454,6 @@ namespace StringFormat inline FName::FName(const FString &text) { Index = NameData.FindName (text.GetChars(), text.Len(), false); } inline FName::FName(const FString &text, bool noCreate) { Index = NameData.FindName (text.GetChars(), text.Len(), noCreate); } inline FName &FName::operator = (const FString &text) { Index = NameData.FindName (text.GetChars(), text.Len(), false); return *this; } -inline FName &FNameNoInit::operator = (const FString &text) { Index = NameData.FindName (text.GetChars(), text.Len(), false); return *this; } // Hash FStrings on their contents. (used by TMap) extern unsigned int SuperFastHash (const char *data, size_t len);