diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 0ef17a33..acc61162 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,3 +1,48 @@ +September 11, 2009 +- Added warning messages when loading maps that have non-zero values in + unused line argument fields, because these maps could potentially break + in the future if the argument is later assigned a meaning. (Hopefully + all the argument counts in actionspecials.h are accurate. I found a + few that were wrong.) + +September 10, 2009 +- Fixed: If a damaged actor has negative mass, it needs to have its damage + thrust set to maximum instead of 0. See Action Doom's broken glass + "CommanderKeens". +- Changed the SCROLLTYPE define so that any extra bits set cause it to default + to 7. This effects action.wad, MAP02, lines 12054 and 12059, which had them + at 128, so they no longer scrolled in r832+. + +September 9, 2009 +- Look for files in Mac-like places on Macs. +- Fixed: The non-Windows CreatePath can fail if part of the path already + exists, because mkdir will return an error code for trying to recreate + an existing directory. + +September 8, 2009 +- Because entryway timed it, here is a new version of R_PointToAngle2 that is + closer to the original. The old code was shorter but a little slower. The + new code is a bit faster than the original with VC++ and about the same + with GCC. Interestingly, GCC produces code for Killough's version that + performs about the same as the original, but when compiled with VC++, + Killough's is notably worse. + +September 8, 2009 (Changes by Graf Zahl) +- moved ENDOOM lump name definition into gameinfo. +- moved default item drop style into gameinfo. +- moved default respawn time into gameinfo. +- moved default inventory max amount into gameinfo. +- turned Heretic's blocking of the sector for LS_Plat_RaiseAndStayTx0 into + a parameter instead of having the game mode decide. + +September 7, 2009 +- Applied vertical SBARINFO inventory bar patch. + +September 7, 2009 (Changes by Graf Zahl) +- moved definition of games' default armor icons into gameinfo definition. +- fixed: The PNG loader for true color textures overwrote the IDAT size with + the IDAT id when reading the image. + September 6, 2009 (Changes by Graf Zahl) - fixed: Trying to pick up an object of the Ammo base class caused a crash. - changed line_t's sidenum into sidedef pointers. diff --git a/src/actionspecials.h b/src/actionspecials.h index d38a3c86..b185a7fa 100644 --- a/src/actionspecials.h +++ b/src/actionspecials.h @@ -1,233 +1,234 @@ -DEFINE_SPECIAL(Polyobj_StartLine, 1, -1, -1) -DEFINE_SPECIAL(Polyobj_RotateLeft, 2, 3, 3) -DEFINE_SPECIAL(Polyobj_RotateRight, 3, 3, 3) -DEFINE_SPECIAL(Polyobj_Move, 4, 4, 4) -DEFINE_SPECIAL(Polyobj_ExplicitLine, 5, -1, -1) -DEFINE_SPECIAL(Polyobj_MoveTimes8, 6, 4, 4) -DEFINE_SPECIAL(Polyobj_DoorSwing, 7, 4, 4) -DEFINE_SPECIAL(Polyobj_DoorSlide, 8, 5, 5) -DEFINE_SPECIAL(Line_Horizon, 9, -1, 0) // [RH] draw one-sided wall at horizon -DEFINE_SPECIAL(Door_Close, 10, 2, 2) -DEFINE_SPECIAL(Door_Open, 11, 2, 3) -DEFINE_SPECIAL(Door_Raise, 12, 3, 4) -DEFINE_SPECIAL(Door_LockedRaise, 13, 4, 5) -DEFINE_SPECIAL(Door_Animated, 14, 3, 3) -DEFINE_SPECIAL(Autosave, 15, 0, 0) // [RH] Save the game *now* -DEFINE_SPECIAL(Transfer_WallLight, 16, -1, -1) -DEFINE_SPECIAL(Thing_Raise, 17, 1, 1) -DEFINE_SPECIAL(StartConversation, 18, 1, 2) -DEFINE_SPECIAL(Thing_Stop, 19, 1, 1) -DEFINE_SPECIAL(Floor_LowerByValue, 20, 3, 3) -DEFINE_SPECIAL(Floor_LowerToLowest, 21, 2, 2) -DEFINE_SPECIAL(Floor_LowerToNearest, 22, 2, 2) -DEFINE_SPECIAL(Floor_RaiseByValue, 23, 3, 3) -DEFINE_SPECIAL(Floor_RaiseToHighest, 24, 2, 2) -DEFINE_SPECIAL(Floor_RaiseToNearest, 25, 2, 2) -DEFINE_SPECIAL(Stairs_BuildDown, 26, 5, 5) -DEFINE_SPECIAL(Stairs_BuildUp, 27, 5, 5) -DEFINE_SPECIAL(Floor_RaiseAndCrush, 28, 3, 4) -DEFINE_SPECIAL(Pillar_Build, 29, 3, 3) -DEFINE_SPECIAL(Pillar_Open, 30, 4, 4) -DEFINE_SPECIAL(Stairs_BuildDownSync, 31, 4, 4) -DEFINE_SPECIAL(Stairs_BuildUpSync, 32, 4, 4) -DEFINE_SPECIAL(ForceField, 33, 0, 0) // [RH] Strife's forcefield special (148) -DEFINE_SPECIAL(ClearForceField, 34, 1, 1) // [RH] Remove Strife's forcefield from tagged sectors -DEFINE_SPECIAL(Floor_RaiseByValueTimes8, 35, 3, 3) -DEFINE_SPECIAL(Floor_LowerByValueTimes8, 36, 3, 3) -DEFINE_SPECIAL(Floor_MoveToValue, 37, 3, 4) -DEFINE_SPECIAL(Ceiling_Waggle, 38, 5, 5) // [RH] Complement of Floor_Waggle -DEFINE_SPECIAL(Teleport_ZombieChanger, 39, 2, 2) // [RH] Needed for Strife -DEFINE_SPECIAL(Ceiling_LowerByValue, 40, 3, 3) -DEFINE_SPECIAL(Ceiling_RaiseByValue, 41, 3, 3) -DEFINE_SPECIAL(Ceiling_CrushAndRaise, 42, 3, 4) -DEFINE_SPECIAL(Ceiling_LowerAndCrush, 43, 3, 4) -DEFINE_SPECIAL(Ceiling_CrushStop, 44, 1, 1) -DEFINE_SPECIAL(Ceiling_CrushRaiseAndStay, 45, 3, 4) -DEFINE_SPECIAL(Floor_CrushStop, 46, 1, 1) -DEFINE_SPECIAL(Ceiling_MoveToValue, 47, 3, 4) -DEFINE_SPECIAL(Sector_Attach3dMidtex, 48, -1, -1) -DEFINE_SPECIAL(GlassBreak, 49, 0, 1) -DEFINE_SPECIAL(ExtraFloor_LightOnly, 50, -1, -1) -DEFINE_SPECIAL(Sector_SetLink, 51, 4, 4) -DEFINE_SPECIAL(Scroll_Wall, 52, 5, 5) -DEFINE_SPECIAL(Line_SetTextureOffset, 53, 5, 5) -DEFINE_SPECIAL(Sector_ChangeFlags, 54, 3, 3) +// special name, special number, min script args, max script args, num args on a line +DEFINE_SPECIAL(Polyobj_StartLine, 1, -1, -1, 4) +DEFINE_SPECIAL(Polyobj_RotateLeft, 2, 3, 3, 3) +DEFINE_SPECIAL(Polyobj_RotateRight, 3, 3, 3, 3) +DEFINE_SPECIAL(Polyobj_Move, 4, 4, 4, 4) +DEFINE_SPECIAL(Polyobj_ExplicitLine, 5, -1, -1, 5) +DEFINE_SPECIAL(Polyobj_MoveTimes8, 6, 4, 4, 4) +DEFINE_SPECIAL(Polyobj_DoorSwing, 7, 4, 4, 4) +DEFINE_SPECIAL(Polyobj_DoorSlide, 8, 5, 5, 5) +DEFINE_SPECIAL(Line_Horizon, 9, -1, 0, 0) // [RH] draw one-sided wall at horizon +DEFINE_SPECIAL(Door_Close, 10, 2, 3, 3) +DEFINE_SPECIAL(Door_Open, 11, 2, 3, 3) +DEFINE_SPECIAL(Door_Raise, 12, 3, 4, 4) +DEFINE_SPECIAL(Door_LockedRaise, 13, 4, 5, 5) +DEFINE_SPECIAL(Door_Animated, 14, 3, 3, 3) +DEFINE_SPECIAL(Autosave, 15, 0, 0, 0) // [RH] Save the game *now* +DEFINE_SPECIAL(Transfer_WallLight, 16, -1, -1, 2) +DEFINE_SPECIAL(Thing_Raise, 17, 1, 1, 1) +DEFINE_SPECIAL(StartConversation, 18, 1, 2, 2) +DEFINE_SPECIAL(Thing_Stop, 19, 1, 1, 1) +DEFINE_SPECIAL(Floor_LowerByValue, 20, 3, 3, 3) +DEFINE_SPECIAL(Floor_LowerToLowest, 21, 2, 2, 2) +DEFINE_SPECIAL(Floor_LowerToNearest, 22, 2, 2, 2) +DEFINE_SPECIAL(Floor_RaiseByValue, 23, 3, 3, 3) +DEFINE_SPECIAL(Floor_RaiseToHighest, 24, 2, 2, 2) +DEFINE_SPECIAL(Floor_RaiseToNearest, 25, 2, 2, 2) +DEFINE_SPECIAL(Stairs_BuildDown, 26, 5, 5, 5) +DEFINE_SPECIAL(Stairs_BuildUp, 27, 5, 5, 5) +DEFINE_SPECIAL(Floor_RaiseAndCrush, 28, 3, 4, 4) +DEFINE_SPECIAL(Pillar_Build, 29, 3, 3, 3) +DEFINE_SPECIAL(Pillar_Open, 30, 4, 4, 4) +DEFINE_SPECIAL(Stairs_BuildDownSync, 31, 4, 4, 4) +DEFINE_SPECIAL(Stairs_BuildUpSync, 32, 4, 4, 4) +DEFINE_SPECIAL(ForceField, 33, 0, 0, 0) // [RH] Strife's forcefield special (148) +DEFINE_SPECIAL(ClearForceField, 34, 1, 1, 1) // [RH] Remove Strife's forcefield from tagged sectors +DEFINE_SPECIAL(Floor_RaiseByValueTimes8, 35, 3, 3, 3) +DEFINE_SPECIAL(Floor_LowerByValueTimes8, 36, 3, 3, 3) +DEFINE_SPECIAL(Floor_MoveToValue, 37, 3, 4, 4) +DEFINE_SPECIAL(Ceiling_Waggle, 38, 5, 5, 4) // [RH] Complement of Floor_Waggle +DEFINE_SPECIAL(Teleport_ZombieChanger, 39, 2, 2, 2) // [RH] Needed for Strife +DEFINE_SPECIAL(Ceiling_LowerByValue, 40, 3, 3, 3) +DEFINE_SPECIAL(Ceiling_RaiseByValue, 41, 3, 3, 3) +DEFINE_SPECIAL(Ceiling_CrushAndRaise, 42, 3, 4, 4) +DEFINE_SPECIAL(Ceiling_LowerAndCrush, 43, 3, 4, 4) +DEFINE_SPECIAL(Ceiling_CrushStop, 44, 1, 1, 1) +DEFINE_SPECIAL(Ceiling_CrushRaiseAndStay, 45, 3, 4, 4) +DEFINE_SPECIAL(Floor_CrushStop, 46, 1, 1, 1) +DEFINE_SPECIAL(Ceiling_MoveToValue, 47, 3, 4, 4) +DEFINE_SPECIAL(Sector_Attach3dMidtex, 48, -1, -1, 3) +DEFINE_SPECIAL(GlassBreak, 49, 0, 1, 1) +DEFINE_SPECIAL(ExtraFloor_LightOnly, 50, -1, -1, 2) +DEFINE_SPECIAL(Sector_SetLink, 51, 4, 4, 4) +DEFINE_SPECIAL(Scroll_Wall, 52, 5, 5, 5) +DEFINE_SPECIAL(Line_SetTextureOffset, 53, 5, 5, 5) +DEFINE_SPECIAL(Sector_ChangeFlags, 54, 3, 3, 3) -DEFINE_SPECIAL(Plat_PerpetualRaise, 60, 3, 3) -DEFINE_SPECIAL(Plat_Stop, 61, 1, 1) -DEFINE_SPECIAL(Plat_DownWaitUpStay, 62, 3, 3) -DEFINE_SPECIAL(Plat_DownByValue, 63, 4, 4) -DEFINE_SPECIAL(Plat_UpWaitDownStay, 64, 3, 3) -DEFINE_SPECIAL(Plat_UpByValue, 65, 4, 4) -DEFINE_SPECIAL(Floor_LowerInstant, 66, 3, 3) -DEFINE_SPECIAL(Floor_RaiseInstant, 67, 3, 3) -DEFINE_SPECIAL(Floor_MoveToValueTimes8, 68, 4, 4) -DEFINE_SPECIAL(Ceiling_MoveToValueTimes8, 69, 4, 4) -DEFINE_SPECIAL(Teleport, 70, 1, 3) -DEFINE_SPECIAL(Teleport_NoFog, 71, 1, 3) -DEFINE_SPECIAL(ThrustThing, 72, 2, 4) -DEFINE_SPECIAL(DamageThing, 73, 1, 1) -DEFINE_SPECIAL(Teleport_NewMap, 74, 2, 3) -DEFINE_SPECIAL(Teleport_EndGame, 75, 0, 0) -DEFINE_SPECIAL(TeleportOther, 76, 3, 3) -DEFINE_SPECIAL(TeleportGroup, 77, 5, 5) -DEFINE_SPECIAL(TeleportInSector, 78, 4, 5) +DEFINE_SPECIAL(Plat_PerpetualRaise, 60, 3, 3, 3) +DEFINE_SPECIAL(Plat_Stop, 61, 1, 1, 1) +DEFINE_SPECIAL(Plat_DownWaitUpStay, 62, 3, 3, 3) +DEFINE_SPECIAL(Plat_DownByValue, 63, 4, 4, 4) +DEFINE_SPECIAL(Plat_UpWaitDownStay, 64, 3, 3, 3) +DEFINE_SPECIAL(Plat_UpByValue, 65, 4, 4, 4) +DEFINE_SPECIAL(Floor_LowerInstant, 66, 3, 3, 3) +DEFINE_SPECIAL(Floor_RaiseInstant, 67, 3, 3, 3) +DEFINE_SPECIAL(Floor_MoveToValueTimes8, 68, 4, 4, 4) +DEFINE_SPECIAL(Ceiling_MoveToValueTimes8, 69, 4, 4, 4) +DEFINE_SPECIAL(Teleport, 70, 1, 3, 3) +DEFINE_SPECIAL(Teleport_NoFog, 71, 1, 3, 3) +DEFINE_SPECIAL(ThrustThing, 72, 2, 4, 4) +DEFINE_SPECIAL(DamageThing, 73, 1, 2, 2) +DEFINE_SPECIAL(Teleport_NewMap, 74, 2, 3, 3) +DEFINE_SPECIAL(Teleport_EndGame, 75, 0, 0, 0) +DEFINE_SPECIAL(TeleportOther, 76, 3, 3, 3) +DEFINE_SPECIAL(TeleportGroup, 77, 5, 5, 5) +DEFINE_SPECIAL(TeleportInSector, 78, 4, 5, 5) -DEFINE_SPECIAL(ACS_Execute, 80, 1, 5) -DEFINE_SPECIAL(ACS_Suspend, 81, 2, 2) -DEFINE_SPECIAL(ACS_Terminate, 82, 2, 2) -DEFINE_SPECIAL(ACS_LockedExecute, 83, 5, 5) -DEFINE_SPECIAL(ACS_ExecuteWithResult, 84, 1, 4) -DEFINE_SPECIAL(ACS_LockedExecuteDoor, 85, 5, 5) +DEFINE_SPECIAL(ACS_Execute, 80, 1, 5, 5) +DEFINE_SPECIAL(ACS_Suspend, 81, 2, 2, 2) +DEFINE_SPECIAL(ACS_Terminate, 82, 2, 2, 2) +DEFINE_SPECIAL(ACS_LockedExecute, 83, 5, 5, 5) +DEFINE_SPECIAL(ACS_ExecuteWithResult, 84, 1, 4, 4) +DEFINE_SPECIAL(ACS_LockedExecuteDoor, 85, 5, 5, 5) -DEFINE_SPECIAL(Polyobj_OR_RotateLeft, 90, 3, 3) -DEFINE_SPECIAL(Polyobj_OR_RotateRight, 91, 3, 3) -DEFINE_SPECIAL(Polyobj_OR_Move, 92, 4, 4) -DEFINE_SPECIAL(Polyobj_OR_MoveTimes8, 93, 4, 4) -DEFINE_SPECIAL(Pillar_BuildAndCrush, 94, 4, 5) -DEFINE_SPECIAL(FloorAndCeiling_LowerByValue, 95, 3, 3) -DEFINE_SPECIAL(FloorAndCeiling_RaiseByValue, 96, 3, 3) +DEFINE_SPECIAL(Polyobj_OR_RotateLeft, 90, 3, 3, 3) +DEFINE_SPECIAL(Polyobj_OR_RotateRight, 91, 3, 3, 3) +DEFINE_SPECIAL(Polyobj_OR_Move, 92, 4, 4, 4) +DEFINE_SPECIAL(Polyobj_OR_MoveTimes8, 93, 4, 4, 4) +DEFINE_SPECIAL(Pillar_BuildAndCrush, 94, 4, 5, 5) +DEFINE_SPECIAL(FloorAndCeiling_LowerByValue, 95, 3, 3, 3) +DEFINE_SPECIAL(FloorAndCeiling_RaiseByValue, 96, 3, 3, 3) -DEFINE_SPECIAL(Scroll_Texture_Left, 100, -1, -1) -DEFINE_SPECIAL(Scroll_Texture_Right, 101, -1, -1) -DEFINE_SPECIAL(Scroll_Texture_Up, 102, -1, -1) -DEFINE_SPECIAL(Scroll_Texture_Down, 103, -1, -1) +DEFINE_SPECIAL(Scroll_Texture_Left, 100, -1, -1, 2) +DEFINE_SPECIAL(Scroll_Texture_Right, 101, -1, -1, 2) +DEFINE_SPECIAL(Scroll_Texture_Up, 102, -1, -1, 2) +DEFINE_SPECIAL(Scroll_Texture_Down, 103, -1, -1, 2) -DEFINE_SPECIAL(Light_ForceLightning, 109, 1, 1) -DEFINE_SPECIAL(Light_RaiseByValue, 110, 2, 2) -DEFINE_SPECIAL(Light_LowerByValue, 111, 2, 2) -DEFINE_SPECIAL(Light_ChangeToValue, 112, 2, 2) -DEFINE_SPECIAL(Light_Fade, 113, 3, 3) -DEFINE_SPECIAL(Light_Glow, 114, 4, 4) -DEFINE_SPECIAL(Light_Flicker, 115, 3, 3) -DEFINE_SPECIAL(Light_Strobe, 116, 5, 5) -DEFINE_SPECIAL(Light_Stop, 117, 1, 1) +DEFINE_SPECIAL(Light_ForceLightning, 109, 1, 1, 1) +DEFINE_SPECIAL(Light_RaiseByValue, 110, 2, 2, 2) +DEFINE_SPECIAL(Light_LowerByValue, 111, 2, 2, 2) +DEFINE_SPECIAL(Light_ChangeToValue, 112, 2, 2, 2) +DEFINE_SPECIAL(Light_Fade, 113, 3, 3, 3) +DEFINE_SPECIAL(Light_Glow, 114, 4, 4, 4) +DEFINE_SPECIAL(Light_Flicker, 115, 3, 3, 3) +DEFINE_SPECIAL(Light_Strobe, 116, 5, 5, 5) +DEFINE_SPECIAL(Light_Stop, 117, 1, 1, 1) -DEFINE_SPECIAL(Thing_Damage, 119, 2, 3) -DEFINE_SPECIAL(Radius_Quake, 120, 5, 5) // Earthquake -DEFINE_SPECIAL(Line_SetIdentification, 121, -1, -1) +DEFINE_SPECIAL(Thing_Damage, 119, 2, 3, 3) +DEFINE_SPECIAL(Radius_Quake, 120, 5, 5, 5) // Earthquake +DEFINE_SPECIAL(Line_SetIdentification, 121, -1, -1, 5) #if 0 // Skull Tag specials that might be added later Thing_SetGravity, 122, -1, -1) Thing_ReverseGravity, 123, -1, -1) Thing_RevertGravity, 124, -1, -1) #endif -DEFINE_SPECIAL(Thing_Move, 125, 2, 3) +DEFINE_SPECIAL(Thing_Move, 125, 2, 3, 3) #if 0 // Skull Tag special I doubt I will add Thing_SetSprite, 126, -1, -1) #endif -DEFINE_SPECIAL(Thing_SetSpecial, 127, 5, 5) -DEFINE_SPECIAL(ThrustThingZ, 128, 4, 4) -DEFINE_SPECIAL(UsePuzzleItem, 129, 1, 1) -DEFINE_SPECIAL(Thing_Activate, 130, 1, 1) -DEFINE_SPECIAL(Thing_Deactivate, 131, 1, 1) -DEFINE_SPECIAL(Thing_Remove, 132, 1, 1) -DEFINE_SPECIAL(Thing_Destroy, 133, 1, 2) -DEFINE_SPECIAL(Thing_Projectile, 134, 5, 5) -DEFINE_SPECIAL(Thing_Spawn, 135, 3, 4) -DEFINE_SPECIAL(Thing_ProjectileGravity, 136, 5, 5) -DEFINE_SPECIAL(Thing_SpawnNoFog, 137, 3, 4) -DEFINE_SPECIAL(Floor_Waggle, 138, 5, 5) -DEFINE_SPECIAL(Thing_SpawnFacing, 139, 2, 4) -DEFINE_SPECIAL(Sector_ChangeSound, 140, 2, 2) +DEFINE_SPECIAL(Thing_SetSpecial, 127, 5, 5, 5) +DEFINE_SPECIAL(ThrustThingZ, 128, 4, 4, 4) +DEFINE_SPECIAL(UsePuzzleItem, 129, 1, 1, 1) +DEFINE_SPECIAL(Thing_Activate, 130, 1, 1, 1) +DEFINE_SPECIAL(Thing_Deactivate, 131, 1, 1, 1) +DEFINE_SPECIAL(Thing_Remove, 132, 1, 1, 1) +DEFINE_SPECIAL(Thing_Destroy, 133, 1, 2, 2) +DEFINE_SPECIAL(Thing_Projectile, 134, 5, 5, 5) +DEFINE_SPECIAL(Thing_Spawn, 135, 3, 4, 4) +DEFINE_SPECIAL(Thing_ProjectileGravity, 136, 5, 5, 5) +DEFINE_SPECIAL(Thing_SpawnNoFog, 137, 3, 4, 4) +DEFINE_SPECIAL(Floor_Waggle, 138, 5, 5, 5) +DEFINE_SPECIAL(Thing_SpawnFacing, 139, 2, 4, 4) +DEFINE_SPECIAL(Sector_ChangeSound, 140, 2, 2, 2) -DEFINE_SPECIAL(Teleport_NoStop, 154, 2, 3) +DEFINE_SPECIAL(Teleport_NoStop, 154, 2, 3, 3) // GZDoom/Vavoom specials // Although ZDoom doesn't support them it's better to have them defined so that // WADs using them somewhere can at least be started without aborting due // to an error message. -DEFINE_SPECIAL(FS_Execute, 158, 1, 4) -DEFINE_SPECIAL(Sector_SetPlaneReflection, 159, 3, 3) -DEFINE_SPECIAL(Sector_Set3DFloor, 160, -1, -1) -DEFINE_SPECIAL(Sector_SetContents, 161, -1, -1) +DEFINE_SPECIAL(FS_Execute, 158, 1, 4, 4) +DEFINE_SPECIAL(Sector_SetPlaneReflection, 159, 3, 3, 3) +DEFINE_SPECIAL(Sector_Set3DFloor, 160, -1, -1, 5) +DEFINE_SPECIAL(Sector_SetContents, 161, -1, -1, 5) // It probably doesn't use 5 args. Oh well. // [RH] Begin new specials for ZDoom -DEFINE_SPECIAL(Generic_Crusher2, 169, 5, 5) -DEFINE_SPECIAL(Sector_SetCeilingScale2, 170, 3, 3) -DEFINE_SPECIAL(Sector_SetFloorScale2, 171, 3, 3) -DEFINE_SPECIAL(Plat_UpNearestWaitDownStay, 172, 3, 3) -DEFINE_SPECIAL(NoiseAlert, 173, 2, 2) -DEFINE_SPECIAL(SendToCommunicator, 174, 4, 4) -DEFINE_SPECIAL(Thing_ProjectileIntercept, 175, 5, 5) -DEFINE_SPECIAL(Thing_ChangeTID, 176, 2, 2) -DEFINE_SPECIAL(Thing_Hate, 177, 2, 3) -DEFINE_SPECIAL(Thing_ProjectileAimed, 178, 4, 5) -DEFINE_SPECIAL(ChangeSkill, 179, 1, 1) -DEFINE_SPECIAL(Thing_SetTranslation, 180, 2, 2) -DEFINE_SPECIAL(Plane_Align, 181, -1, -1) -DEFINE_SPECIAL(Line_Mirror, 182, -1, 0) -DEFINE_SPECIAL(Line_AlignCeiling, 183, 2, 2) -DEFINE_SPECIAL(Line_AlignFloor, 184, 2, 2) -DEFINE_SPECIAL(Sector_SetRotation, 185, 3, 3) -DEFINE_SPECIAL(Sector_SetCeilingPanning, 186, 5, 5) -DEFINE_SPECIAL(Sector_SetFloorPanning, 187, 5, 5) -DEFINE_SPECIAL(Sector_SetCeilingScale, 188, 5, 5) -DEFINE_SPECIAL(Sector_SetFloorScale, 189, 5, 5) -DEFINE_SPECIAL(Static_Init, 190, -1, -1) -DEFINE_SPECIAL(SetPlayerProperty, 191, 3, 3) -DEFINE_SPECIAL(Ceiling_LowerToHighestFloor, 192, 2, 2) -DEFINE_SPECIAL(Ceiling_LowerInstant, 193, 3, 3) -DEFINE_SPECIAL(Ceiling_RaiseInstant, 194, 3, 3) -DEFINE_SPECIAL(Ceiling_CrushRaiseAndStayA, 195, 4, 5) -DEFINE_SPECIAL(Ceiling_CrushAndRaiseA, 196, 4, 5) -DEFINE_SPECIAL(Ceiling_CrushAndRaiseSilentA, 197, 4, 5) -DEFINE_SPECIAL(Ceiling_RaiseByValueTimes8, 198, 3, 3) -DEFINE_SPECIAL(Ceiling_LowerByValueTimes8, 199, 3, 3) -DEFINE_SPECIAL(Generic_Floor, 200, 5, 5) -DEFINE_SPECIAL(Generic_Ceiling, 201, 5, 5) -DEFINE_SPECIAL(Generic_Door, 202, 5, 5) -DEFINE_SPECIAL(Generic_Lift, 203, 5, 5) -DEFINE_SPECIAL(Generic_Stairs, 204, 5, 5) -DEFINE_SPECIAL(Generic_Crusher, 205, 5, 5) -DEFINE_SPECIAL(Plat_DownWaitUpStayLip, 206, 4, 5) -DEFINE_SPECIAL(Plat_PerpetualRaiseLip, 207, 4, 4) -DEFINE_SPECIAL(TranslucentLine, 208, 2, 3) -DEFINE_SPECIAL(Transfer_Heights, 209, -1, -1) -DEFINE_SPECIAL(Transfer_FloorLight, 210, -1, -1) -DEFINE_SPECIAL(Transfer_CeilingLight, 211, -1, -1) -DEFINE_SPECIAL(Sector_SetColor, 212, 4, 5) -DEFINE_SPECIAL(Sector_SetFade, 213, 4, 4) -DEFINE_SPECIAL(Sector_SetDamage, 214, 3, 3) -DEFINE_SPECIAL(Teleport_Line, 215, 2, 2) -DEFINE_SPECIAL(Sector_SetGravity, 216, 3, 3) -DEFINE_SPECIAL(Stairs_BuildUpDoom, 217, 5, 5) -DEFINE_SPECIAL(Sector_SetWind, 218, 4, 4) -DEFINE_SPECIAL(Sector_SetFriction, 219, 2, 2) -DEFINE_SPECIAL(Sector_SetCurrent, 220, 4, 4) -DEFINE_SPECIAL(Scroll_Texture_Both, 221, 5, 5) -DEFINE_SPECIAL(Scroll_Texture_Model, 222, -1, -1) -DEFINE_SPECIAL(Scroll_Floor, 223, 4, 4) -DEFINE_SPECIAL(Scroll_Ceiling, 224, 4, 4) -DEFINE_SPECIAL(Scroll_Texture_Offsets, 225, -1, -1) -DEFINE_SPECIAL(ACS_ExecuteAlways, 226, 1, 5) -DEFINE_SPECIAL(PointPush_SetForce, 227, -1, -1) -DEFINE_SPECIAL(Plat_RaiseAndStayTx0, 228, 2, 2) -DEFINE_SPECIAL(Thing_SetGoal, 229, 3, 4) -DEFINE_SPECIAL(Plat_UpByValueStayTx, 230, 3, 3) -DEFINE_SPECIAL(Plat_ToggleCeiling, 231, 1, 1) -DEFINE_SPECIAL(Light_StrobeDoom, 232, 3, 3) -DEFINE_SPECIAL(Light_MinNeighbor, 233, 1, 1) -DEFINE_SPECIAL(Light_MaxNeighbor, 234, 1, 1) -DEFINE_SPECIAL(Floor_TransferTrigger, 235, 1, 1) -DEFINE_SPECIAL(Floor_TransferNumeric, 236, 1, 1) -DEFINE_SPECIAL(ChangeCamera, 237, 3, 3) -DEFINE_SPECIAL(Floor_RaiseToLowestCeiling, 238, 2, 2) -DEFINE_SPECIAL(Floor_RaiseByValueTxTy, 239, 3, 3) -DEFINE_SPECIAL(Floor_RaiseByTexture, 240, 2, 2) -DEFINE_SPECIAL(Floor_LowerToLowestTxTy, 241, 2, 2) -DEFINE_SPECIAL(Floor_LowerToHighest, 242, 3, 3) -DEFINE_SPECIAL(Exit_Normal, 243, 1, 1) -DEFINE_SPECIAL(Exit_Secret, 244, 1, 1) -DEFINE_SPECIAL(Elevator_RaiseToNearest, 245, 2, 2) -DEFINE_SPECIAL(Elevator_MoveToFloor, 246, 2, 2) -DEFINE_SPECIAL(Elevator_LowerToNearest, 247, 2, 2) -DEFINE_SPECIAL(HealThing, 248, 1, 2) -DEFINE_SPECIAL(Door_CloseWaitOpen, 249, 3, 4) -DEFINE_SPECIAL(Floor_Donut, 250, 3, 3) -DEFINE_SPECIAL(FloorAndCeiling_LowerRaise, 251, 3, 3) -DEFINE_SPECIAL(Ceiling_RaiseToNearest, 252, 2, 2) -DEFINE_SPECIAL(Ceiling_LowerToLowest, 253, 2, 2) -DEFINE_SPECIAL(Ceiling_LowerToFloor, 254, 2, 2) -DEFINE_SPECIAL(Ceiling_CrushRaiseAndStaySilA, 255, 4, 5) +DEFINE_SPECIAL(Generic_Crusher2, 169, 5, 5, 5) +DEFINE_SPECIAL(Sector_SetCeilingScale2, 170, 3, 3, 3) +DEFINE_SPECIAL(Sector_SetFloorScale2, 171, 3, 3, 3) +DEFINE_SPECIAL(Plat_UpNearestWaitDownStay, 172, 3, 3, 3) +DEFINE_SPECIAL(NoiseAlert, 173, 2, 2, 2) +DEFINE_SPECIAL(SendToCommunicator, 174, 4, 4, 4) +DEFINE_SPECIAL(Thing_ProjectileIntercept, 175, 5, 5, 5) +DEFINE_SPECIAL(Thing_ChangeTID, 176, 2, 2, 2) +DEFINE_SPECIAL(Thing_Hate, 177, 2, 3, 3) +DEFINE_SPECIAL(Thing_ProjectileAimed, 178, 4, 5, 5) +DEFINE_SPECIAL(ChangeSkill, 179, 1, 1, 1) +DEFINE_SPECIAL(Thing_SetTranslation, 180, 2, 2, 2) +DEFINE_SPECIAL(Plane_Align, 181, -1, -1, 2) +DEFINE_SPECIAL(Line_Mirror, 182, -1, 0, 0) +DEFINE_SPECIAL(Line_AlignCeiling, 183, 2, 2, 2) +DEFINE_SPECIAL(Line_AlignFloor, 184, 2, 2, 2) +DEFINE_SPECIAL(Sector_SetRotation, 185, 3, 3, 3) +DEFINE_SPECIAL(Sector_SetCeilingPanning, 186, 5, 5, 5) +DEFINE_SPECIAL(Sector_SetFloorPanning, 187, 5, 5, 5) +DEFINE_SPECIAL(Sector_SetCeilingScale, 188, 5, 5, 5) +DEFINE_SPECIAL(Sector_SetFloorScale, 189, 5, 5, 5) +DEFINE_SPECIAL(Static_Init, 190, -1, -1, 3) +DEFINE_SPECIAL(SetPlayerProperty, 191, 3, 3, 3) +DEFINE_SPECIAL(Ceiling_LowerToHighestFloor, 192, 2, 2, 2) +DEFINE_SPECIAL(Ceiling_LowerInstant, 193, 3, 3, 3) +DEFINE_SPECIAL(Ceiling_RaiseInstant, 194, 3, 3, 3) +DEFINE_SPECIAL(Ceiling_CrushRaiseAndStayA, 195, 4, 5, 5) +DEFINE_SPECIAL(Ceiling_CrushAndRaiseA, 196, 4, 5, 5) +DEFINE_SPECIAL(Ceiling_CrushAndRaiseSilentA, 197, 4, 5, 5) +DEFINE_SPECIAL(Ceiling_RaiseByValueTimes8, 198, 3, 3, 3) +DEFINE_SPECIAL(Ceiling_LowerByValueTimes8, 199, 3, 3, 3) +DEFINE_SPECIAL(Generic_Floor, 200, 5, 5, 5) +DEFINE_SPECIAL(Generic_Ceiling, 201, 5, 5, 5) +DEFINE_SPECIAL(Generic_Door, 202, 5, 5, 5) +DEFINE_SPECIAL(Generic_Lift, 203, 5, 5, 5) +DEFINE_SPECIAL(Generic_Stairs, 204, 5, 5, 5) +DEFINE_SPECIAL(Generic_Crusher, 205, 5, 5, 5) +DEFINE_SPECIAL(Plat_DownWaitUpStayLip, 206, 4, 5, 5) +DEFINE_SPECIAL(Plat_PerpetualRaiseLip, 207, 4, 4, 4) +DEFINE_SPECIAL(TranslucentLine, 208, 2, 3, 3) +DEFINE_SPECIAL(Transfer_Heights, 209, -1, -1, 2) +DEFINE_SPECIAL(Transfer_FloorLight, 210, -1, -1, 1) +DEFINE_SPECIAL(Transfer_CeilingLight, 211, -1, -1, 1) +DEFINE_SPECIAL(Sector_SetColor, 212, 4, 5, 5) +DEFINE_SPECIAL(Sector_SetFade, 213, 4, 4, 4) +DEFINE_SPECIAL(Sector_SetDamage, 214, 3, 3, 3) +DEFINE_SPECIAL(Teleport_Line, 215, 2, 3, 3) +DEFINE_SPECIAL(Sector_SetGravity, 216, 3, 3, 3) +DEFINE_SPECIAL(Stairs_BuildUpDoom, 217, 5, 5, 5) +DEFINE_SPECIAL(Sector_SetWind, 218, 4, 4, 4) +DEFINE_SPECIAL(Sector_SetFriction, 219, 2, 2, 2) +DEFINE_SPECIAL(Sector_SetCurrent, 220, 4, 4, 4) +DEFINE_SPECIAL(Scroll_Texture_Both, 221, 5, 5, 5) +DEFINE_SPECIAL(Scroll_Texture_Model, 222, -1, -1, 2) +DEFINE_SPECIAL(Scroll_Floor, 223, 4, 4, 5) +DEFINE_SPECIAL(Scroll_Ceiling, 224, 4, 4, 5) +DEFINE_SPECIAL(Scroll_Texture_Offsets, 225, -1, -1, 1) +DEFINE_SPECIAL(ACS_ExecuteAlways, 226, 1, 5, 5) +DEFINE_SPECIAL(PointPush_SetForce, 227, -1, -1, 4) +DEFINE_SPECIAL(Plat_RaiseAndStayTx0, 228, 2, 2, 2) +DEFINE_SPECIAL(Thing_SetGoal, 229, 3, 4, 4) +DEFINE_SPECIAL(Plat_UpByValueStayTx, 230, 3, 3, 3) +DEFINE_SPECIAL(Plat_ToggleCeiling, 231, 1, 1, 1) +DEFINE_SPECIAL(Light_StrobeDoom, 232, 3, 3, 3) +DEFINE_SPECIAL(Light_MinNeighbor, 233, 1, 1, 1) +DEFINE_SPECIAL(Light_MaxNeighbor, 234, 1, 1, 1) +DEFINE_SPECIAL(Floor_TransferTrigger, 235, 1, 1, 1) +DEFINE_SPECIAL(Floor_TransferNumeric, 236, 1, 1, 1) +DEFINE_SPECIAL(ChangeCamera, 237, 3, 3, 3) +DEFINE_SPECIAL(Floor_RaiseToLowestCeiling, 238, 2, 2, 2) +DEFINE_SPECIAL(Floor_RaiseByValueTxTy, 239, 3, 3, 3) +DEFINE_SPECIAL(Floor_RaiseByTexture, 240, 2, 2, 2) +DEFINE_SPECIAL(Floor_LowerToLowestTxTy, 241, 2, 2, 2) +DEFINE_SPECIAL(Floor_LowerToHighest, 242, 3, 3, 3) +DEFINE_SPECIAL(Exit_Normal, 243, 1, 1, 1) +DEFINE_SPECIAL(Exit_Secret, 244, 1, 1, 1) +DEFINE_SPECIAL(Elevator_RaiseToNearest, 245, 2, 2, 2) +DEFINE_SPECIAL(Elevator_MoveToFloor, 246, 2, 2, 2) +DEFINE_SPECIAL(Elevator_LowerToNearest, 247, 2, 2, 2) +DEFINE_SPECIAL(HealThing, 248, 1, 2, 2) +DEFINE_SPECIAL(Door_CloseWaitOpen, 249, 3, 4, 4) +DEFINE_SPECIAL(Floor_Donut, 250, 3, 3, 3) +DEFINE_SPECIAL(FloorAndCeiling_LowerRaise, 251, 3, 3, 3) +DEFINE_SPECIAL(Ceiling_RaiseToNearest, 252, 2, 2, 2) +DEFINE_SPECIAL(Ceiling_LowerToLowest, 253, 2, 2, 2) +DEFINE_SPECIAL(Ceiling_LowerToFloor, 254, 2, 2, 2) +DEFINE_SPECIAL(Ceiling_CrushRaiseAndStaySilA, 255, 4, 5, 5) #undef DEFINE_SPECIAL diff --git a/src/g_shared/a_armor.cpp b/src/g_shared/a_armor.cpp index cf3745e2..9e43ccfb 100644 --- a/src/g_shared/a_armor.cpp +++ b/src/g_shared/a_armor.cpp @@ -40,24 +40,13 @@ void ABasicArmor::Tick () AbsorbCount = 0; if (!Icon.isValid()) { - switch (gameinfo.gametype) - { - case GAME_Chex: - case GAME_Doom: - Icon = TexMan.CheckForTexture (SavePercent == FRACUNIT/3 ? "ARM1A0" : "ARM2A0", FTexture::TEX_Any); - break; + const char *icon = gameinfo.ArmorIcon1; - case GAME_Heretic: - Icon = TexMan.CheckForTexture (SavePercent == FRACUNIT/2 ? "SHLDA0" : "SHD2A0", FTexture::TEX_Any); - break; + if (SavePercent >= gameinfo.Armor2Percent && gameinfo.ArmorIcon2[0] != 0) + icon = gameinfo.ArmorIcon2; - case GAME_Strife: - Icon = TexMan.CheckForTexture (SavePercent == FRACUNIT/3 ? "I_ARM2" : "I_ARM1", FTexture::TEX_Any); - break; - - default: - break; - } + if (icon[0] != 0) + Icon = TexMan.CheckForTexture (icon, FTexture::TEX_Any); } } diff --git a/src/g_shared/sbarinfo.h b/src/g_shared/sbarinfo.h index 1d4a4ec4..ef36c50c 100644 --- a/src/g_shared/sbarinfo.h +++ b/src/g_shared/sbarinfo.h @@ -270,6 +270,7 @@ enum //drawinventorybar flags DRAWINVENTORYBAR_NOARROWS = 0x4, DRAWINVENTORYBAR_ALWAYSSHOWCOUNTER = 0x8, DRAWINVENTORYBAR_TRANSLUCENT = 0x10, + DRAWINVENTORYBAR_VERTICAL = 0x20, }; enum //drawgem flags @@ -404,7 +405,7 @@ private: void DrawFace(const char *defaultFace, int accuracy, int stateflags, SBarInfoCoordinate x, SBarInfoCoordinate y, int xOffset, int yOffset, int alpha, bool fullScreenOffsets); int updateState(bool xdth, bool animatedgodmode); void DrawInventoryBar(int type, int num, SBarInfoCoordinate x, SBarInfoCoordinate y, int xOffset, int yOffset, int alpha, bool fullScreenOffsets, bool alwaysshow, - SBarInfoCoordinate counterx, SBarInfoCoordinate countery, EColorRange translation, bool drawArtiboxes, bool noArrows, bool alwaysshowcounter, int bgalpha); + SBarInfoCoordinate counterx, SBarInfoCoordinate countery, EColorRange translation, bool drawArtiboxes, bool noArrows, bool alwaysshowcounter, int bgalpha, bool vertical); void DrawGem(FTexture* chain, FTexture* gem, int value, SBarInfoCoordinate x, SBarInfoCoordinate y, int xOffset, int yOffset, int alpha, bool fullScreenOffsets, int padleft, int padright, int chainsize, bool wiggle, bool translate); FRemapTable* getTranslation(); diff --git a/src/g_shared/sbarinfo_display.cpp b/src/g_shared/sbarinfo_display.cpp index d2d7ec81..77c52c60 100644 --- a/src/g_shared/sbarinfo_display.cpp +++ b/src/g_shared/sbarinfo_display.cpp @@ -765,6 +765,7 @@ void DSBarInfo::doCommands(SBarInfoBlock &block, int xOffset, int yOffset, int a bool artibox = true; bool noarrows = false; bool alwaysshowcounter = false; + bool vertical = false; int bgalpha = alpha; if((cmd.flags & DRAWINVENTORYBAR_ALWAYSSHOW)) alwaysshow = true; @@ -776,11 +777,13 @@ void DSBarInfo::doCommands(SBarInfoBlock &block, int xOffset, int yOffset, int a alwaysshowcounter = true; if(cmd.flags & DRAWINVENTORYBAR_TRANSLUCENT) bgalpha = fixed_t((((double) alpha / (double) FRACUNIT) * ((double) HX_SHADOW / (double) FRACUNIT)) * FRACUNIT); + if((cmd.flags & DRAWINVENTORYBAR_VERTICAL)) + vertical = true; if(drawingFont != cmd.font) { drawingFont = cmd.font; } - DrawInventoryBar(cmd.special, cmd.value, cmd.x, cmd.y, xOffset, yOffset, alpha, block.fullScreenOffsets, alwaysshow, cmd.sbcoord2, cmd.sbcoord3, cmd.translation, artibox, noarrows, alwaysshowcounter, bgalpha); + DrawInventoryBar(cmd.special, cmd.value, cmd.x, cmd.y, xOffset, yOffset, alpha, block.fullScreenOffsets, alwaysshow, cmd.sbcoord2, cmd.sbcoord3, cmd.translation, artibox, noarrows, alwaysshowcounter, bgalpha, vertical); break; } case SBARINFO_DRAWBAR: @@ -1650,11 +1653,15 @@ void DSBarInfo::DrawFace(const char *defaultFace, int accuracy, int stateflags, } void DSBarInfo::DrawInventoryBar(int type, int num, SBarInfoCoordinate x, SBarInfoCoordinate y, int xOffset, int yOffset, int alpha, bool fullScreenOffsets, bool alwaysshow, - SBarInfoCoordinate counterx, SBarInfoCoordinate countery, EColorRange translation, bool drawArtiboxes, bool noArrows, bool alwaysshowcounter, int bgalpha) + SBarInfoCoordinate counterx, SBarInfoCoordinate countery, EColorRange translation, bool drawArtiboxes, bool noArrows, bool alwaysshowcounter, int bgalpha, bool vertical) { //yes, there is some Copy & Paste here too AInventory *item; int i; - int spacing = (type != GAME_Strife) ? Images[invBarOffset + imgARTIBOX]->GetScaledWidth() + 1 : Images[invBarOffset + imgCURSOR]->GetScaledWidth() - 1; + int spacing = 0; + if(!vertical) + spacing = (type != GAME_Strife) ? Images[invBarOffset + imgARTIBOX]->GetScaledWidth() + 1 : Images[invBarOffset + imgCURSOR]->GetScaledWidth() - 1; + else + spacing = (type != GAME_Strife) ? Images[invBarOffset + imgARTIBOX]->GetScaledHeight() + 1 : Images[invBarOffset + imgCURSOR]->GetScaledHeight() - 1; // If the player has no artifacts, don't draw the bar CPlayer->mo->InvFirst = ValidateInvFirst(num); @@ -1662,54 +1669,57 @@ void DSBarInfo::DrawInventoryBar(int type, int num, SBarInfoCoordinate x, SBarIn { for(item = CPlayer->mo->InvFirst, i = 0; item != NULL && i < num; item = item->NextInv(), ++i) { - SBarInfoCoordinate rx = x + i*spacing; + SBarInfoCoordinate rx = x + (!vertical ? i*spacing : 0); + SBarInfoCoordinate ry = y + (vertical ? i*spacing : 0); if(drawArtiboxes) { - DrawGraphic(Images[invBarOffset + imgARTIBOX], rx, y, xOffset, yOffset, bgalpha, fullScreenOffsets); + DrawGraphic(Images[invBarOffset + imgARTIBOX], rx, ry, xOffset, yOffset, bgalpha, fullScreenOffsets); } if(type != GAME_Strife) //Strife draws the cursor before the icons - DrawGraphic(TexMan(item->Icon), rx, y, xOffset, yOffset, alpha, fullScreenOffsets, false, item->Amount <= 0); + DrawGraphic(TexMan(item->Icon), rx, ry, xOffset, yOffset, alpha, fullScreenOffsets, false, item->Amount <= 0); if(item == CPlayer->mo->InvSel) { if(type == GAME_Heretic) { - DrawGraphic(Images[invBarOffset + imgSELECTBOX], rx, y+29, xOffset, yOffset, alpha, fullScreenOffsets); + DrawGraphic(Images[invBarOffset + imgSELECTBOX], rx, ry+29, xOffset, yOffset, alpha, fullScreenOffsets); } else if(type == GAME_Hexen) { - DrawGraphic(Images[invBarOffset + imgSELECTBOX], rx, y-1, xOffset, yOffset, alpha, fullScreenOffsets); + DrawGraphic(Images[invBarOffset + imgSELECTBOX], rx, ry-1, xOffset, yOffset, alpha, fullScreenOffsets); } else if(type == GAME_Strife) { - DrawGraphic(Images[invBarOffset + imgCURSOR], rx-6, y-2, xOffset, yOffset, alpha, fullScreenOffsets); + DrawGraphic(Images[invBarOffset + imgCURSOR], rx-6, ry-2, xOffset, yOffset, alpha, fullScreenOffsets); } else { - DrawGraphic(Images[invBarOffset + imgSELECTBOX], rx, y, xOffset, yOffset, alpha, fullScreenOffsets); + DrawGraphic(Images[invBarOffset + imgSELECTBOX], rx, ry, xOffset, yOffset, alpha, fullScreenOffsets); } } if(type == GAME_Strife) - DrawGraphic(TexMan(item->Icon), rx, y, xOffset, yOffset, alpha, fullScreenOffsets, false, item->Amount <= 0); + DrawGraphic(TexMan(item->Icon), rx, ry, xOffset, yOffset, alpha, fullScreenOffsets, false, item->Amount <= 0); if(alwaysshowcounter || item->Amount != 1) { - DrawNumber(item->Amount, 3, counterx + (i*spacing), countery, xOffset, yOffset, alpha, fullScreenOffsets, translation); + DrawNumber(item->Amount, 3, counterx+(!vertical ? i*spacing : 0), countery+(vertical ? i*spacing : 0), xOffset, yOffset, alpha, fullScreenOffsets, translation); } } for (; i < num && drawArtiboxes; ++i) { - DrawGraphic(Images[invBarOffset + imgARTIBOX], x + (i*spacing), y, xOffset, yOffset, bgalpha, fullScreenOffsets); + DrawGraphic(Images[invBarOffset + imgARTIBOX], x + (!vertical ? (i*spacing) : 0), y + (vertical ? (i*spacing) : 0), xOffset, yOffset, bgalpha, fullScreenOffsets); } // Is there something to the left? if (!noArrows && CPlayer->mo->FirstInv() != CPlayer->mo->InvFirst) { + int offset = type != GAME_Strife ? -12 : 14; DrawGraphic(Images[!(gametic & 4) ? - invBarOffset + imgINVLFGEM1 : invBarOffset + imgINVLFGEM2], x + ((type != GAME_Strife) ? -12 : -14), y, xOffset, yOffset, alpha, fullScreenOffsets); + invBarOffset + imgINVLFGEM1 : invBarOffset + imgINVLFGEM2], x + (!vertical ? offset : 0), y + (vertical ? offset : 0), xOffset, yOffset, alpha, fullScreenOffsets); } // Is there something to the right? if (!noArrows && item != NULL) { + int offset = type != GAME_Strife ? num*31+2 : num*35-4; DrawGraphic(Images[!(gametic & 4) ? - invBarOffset + imgINVRTGEM1 : invBarOffset + imgINVRTGEM2], x + ((type != GAME_Strife) ? num*31+2 : num*35-4), y, xOffset, yOffset, alpha, fullScreenOffsets); + invBarOffset + imgINVRTGEM1 : invBarOffset + imgINVRTGEM2], x + (!vertical ? offset : 0), y + (vertical ? offset : 0), xOffset, yOffset, alpha, fullScreenOffsets); } } } diff --git a/src/g_shared/sbarinfo_parser.cpp b/src/g_shared/sbarinfo_parser.cpp index 0ad46df3..b6130826 100644 --- a/src/g_shared/sbarinfo_parser.cpp +++ b/src/g_shared/sbarinfo_parser.cpp @@ -805,7 +805,7 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block) else if(sc.Compare("Strife")) cmd.special = GAME_Strife; else - sc.ScriptError("Unkown style '%s'.", sc.String); + sc.ScriptError("Unknown style '%s'.", sc.String); sc.MustGetToken(','); while(sc.CheckToken(TK_Identifier)) @@ -830,6 +830,10 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block) { cmd.flags |= DRAWINVENTORYBAR_TRANSLUCENT; } + else if(sc.Compare("vertical")) + { + cmd.flags |= DRAWINVENTORYBAR_VERTICAL; + } else { sc.ScriptError("Unknown flag '%s'.", sc.String); diff --git a/src/gl/common/glc_dynlight.cpp b/src/gl/common/glc_dynlight.cpp index e219ac8b..e37140c9 100644 --- a/src/gl/common/glc_dynlight.cpp +++ b/src/gl/common/glc_dynlight.cpp @@ -103,6 +103,50 @@ void gl_ParseSkybox(FScanner &sc) TexMan.AddTexture(sb); } +//----------------------------------------------------------------------------- +// +// gl_ParseVavoomSkybox +// +//----------------------------------------------------------------------------- + +void gl_ParseVavoomSkybox(FScanner &sc) +{ + while (sc.GetString()) + { + int facecount=0; + int maplump = -1; + FSkyBox * sb = new FSkyBox; + uppercopy(sb->Name, sc.String); + sb->Name[8]=0; + sb->fliptop = true; + sc.MustGetStringName("{"); + while (!sc.CheckString("}")) + { + if (facecount<6) + { + sc.MustGetStringName("{"); + sc.MustGetStringName("map"); + sc.MustGetString(); + + maplump = Wads.CheckNumForFullName(sc.String, true); + if (maplump==-1) + Printf("Texture '%s' not found in Vavoom skybox '%s'\n", sc.String, sb->Name); + + sb->faces[facecount] = FTexture::CreateTexture(maplump, FTexture::TEX_Wall); + if (!sb->faces[facecount]) + Printf("Unable to create texture from '%s' in Vavoom skybox '%s'\n", sc.String, sb->Name); + sc.MustGetStringName("}"); + } + facecount++; + } + if (facecount != 6) + { + sc.ScriptError("%s: Vavoom skybox definition requires 6 faces", sb->Name); + } + sb->SetSize(); + TexMan.AddTexture(sb); + } +} //========================================================================== // @@ -1230,6 +1274,13 @@ void gl_LoadDynLightDefs(const char * defsLump) FScanner sc(workingLump); gl_DoParseDefs(sc, workingLump); } + lastLump = 0; + if ((stricmp(defsLump, "GLDEFS") == 0) && + ((workingLump = Wads.FindLump("SKYBOXES", &lastLump)) != -1)) + { + FScanner sc(workingLump); + gl_ParseVavoomSkybox(sc); + } } diff --git a/src/gl/old_renderer/gl1_walls.cpp b/src/gl/old_renderer/gl1_walls.cpp index 1042d668..444e1b63 100644 --- a/src/gl/old_renderer/gl1_walls.cpp +++ b/src/gl/old_renderer/gl1_walls.cpp @@ -336,8 +336,17 @@ void GLWall::SplitWall(sector_t * frontsector, bool translucent) #ifndef FLOAT_ENGINE if (iMass, 0.,mod == NAME_MDK? 10. : 32.); + double fltthrust; + + fltthrust = mod == NAME_MDK ? 10 : 32; + if (target->Mass > 0) + { + fltthrust = clamp((damage * 0.125 * kickback) / target->Mass, 0., fltthrust); + } thrust = FLOAT2FIXED(fltthrust); diff --git a/src/p_lnspec.cpp b/src/p_lnspec.cpp index c154ef81..b34ed487 100644 --- a/src/p_lnspec.cpp +++ b/src/p_lnspec.cpp @@ -3193,18 +3193,29 @@ lnSpecFunc LineSpecials[256] = LS_Ceiling_CrushRaiseAndStaySilA }; -struct FLineSpecial -{ - const char *name; - BYTE number; - SBYTE min_args; - SBYTE max_args; -}; - -#define DEFINE_SPECIAL(name, num, min, max) {#name, num, min, max}, -static FLineSpecial LineSpecialNames[]={ +#define DEFINE_SPECIAL(name, num, min, max, mmax) {#name, num, min, max, mmax}, +static FLineSpecial LineSpecialNames[] = { #include "actionspecials.h" }; +const FLineSpecial *LineSpecialsInfo[256]; + +static int STACK_ARGS lscmp (const void * a, const void * b) +{ + return stricmp( ((FLineSpecial*)a)->name, ((FLineSpecial*)b)->name); +} + +static struct InitLineSpecials +{ + InitLineSpecials() + { + qsort(LineSpecialNames, countof(LineSpecialNames), sizeof(FLineSpecial), lscmp); + for (size_t i = 0; i < countof(LineSpecialNames); ++i) + { + assert(LineSpecialsInfo[LineSpecialNames[i].number] == NULL); + LineSpecialsInfo[LineSpecialNames[i].number] = &LineSpecialNames[i]; + } + } +} DoInit; //========================================================================== // @@ -3213,22 +3224,9 @@ static FLineSpecial LineSpecialNames[]={ // Finds a line special and also returns the min and max argument count. // //========================================================================== -static int STACK_ARGS lscmp (const void * a, const void * b) -{ - return stricmp( ((FLineSpecial*)a)->name, ((FLineSpecial*)b)->name); -} - int P_FindLineSpecial (const char *string, int *min_args, int *max_args) { - static bool sorted=false; - - if (!sorted) - { - qsort(LineSpecialNames, countof(LineSpecialNames), sizeof(FLineSpecial), lscmp); - sorted = true; - } - int min = 0, max = countof(LineSpecialNames) - 1; while (min <= max) @@ -3252,4 +3250,3 @@ int P_FindLineSpecial (const char *string, int *min_args, int *max_args) } return 0; } - diff --git a/src/p_lnspec.h b/src/p_lnspec.h index e298adcb..49594724 100644 --- a/src/p_lnspec.h +++ b/src/p_lnspec.h @@ -37,12 +37,23 @@ #include "doomtype.h" -#define DEFINE_SPECIAL(name, num, min, max) name = num, +#define DEFINE_SPECIAL(name, num, min, max, map) name = num, typedef enum { #include "actionspecials.h" } linespecial_t; +struct FLineSpecial +{ + const char *name; + BYTE number; + SBYTE min_args; + SBYTE max_args; + BYTE map_args; +}; + +extern const FLineSpecial *LineSpecialsInfo[256]; + typedef enum { Init_Gravity = 0, Init_Color = 1, diff --git a/src/p_spec.cpp b/src/p_spec.cpp index d70129d0..4dfd9e4c 100644 --- a/src/p_spec.cpp +++ b/src/p_spec.cpp @@ -972,7 +972,8 @@ void P_SpawnSpecials (void) P_SpawnFriction(); // phares 3/12/98: New friction model using linedefs P_SpawnPushers(); // phares 3/20/98: New pusher model using linedefs - for (i=0; ispecial; + // Check for undefined parameters that are non-zero and output messages for them. + // We don't report for specials we don't understand. + if (special != 0) + { + int max = LineSpecialsInfo[special] != NULL ? LineSpecialsInfo[special]->map_args : countof(l->args); + for (int arg = max; arg < countof(l->args); ++arg) + { + if (l->args[arg] != 0) + { + Printf("Line %d (type %d:%s), arg %d is %d (should be 0)\n", + i, special, LineSpecialsInfo[special]->name, arg+1, l->args[arg]); + } + } + } + // killough 3/7/98: Types 245-249 are same as 250-254 except that the // first side's sector's heights cause scrolling when they change, and // this linedef controls the direction and speed of the scrolling. The diff --git a/src/thingdef/thingdef_properties.cpp b/src/thingdef/thingdef_properties.cpp index dced3cf0..8ebf70d9 100644 --- a/src/thingdef/thingdef_properties.cpp +++ b/src/thingdef/thingdef_properties.cpp @@ -1258,7 +1258,7 @@ DEFINE_CLASS_PROPERTY(maxamount, I, Inventory) //========================================================================== DEFINE_CLASS_PROPERTY(defmaxamount, 0, Inventory) { - defaults->MaxAmount = gameinfo.gametype == GAME_Heretic ? 16 : 25; + defaults->MaxAmount = gameinfo.definventorymaxamount; } diff --git a/src/win32/st_start.cpp b/src/win32/st_start.cpp index d2f2d041..d343fb2b 100644 --- a/src/win32/st_start.cpp +++ b/src/win32/st_start.cpp @@ -1090,10 +1090,12 @@ void ST_Endoom() { if (showendoom == 0) exit(0); - int endoom_lump = Wads.CheckNumForName ( - gameinfo.gametype & GAME_DoomChex ? "ENDOOM" : - gameinfo.gametype == GAME_Heretic? "ENDTEXT" : - gameinfo.gametype == GAME_Strife? "ENDSTRF" : NULL); + if (gameinfo.Endoom[0] == 0) + { + exit(0); + } + + int endoom_lump = Wads.CheckNumForName (gameinfo.Endoom); BYTE endoom_screen[4000]; BYTE *font;