dsda: process longtics and fix turning speed

rename some enum values
contains hack to work around export problems with dsda_Flag()
This commit is contained in:
feos 2025-02-23 02:21:20 +03:00
parent 804717c71a
commit fe29eb12dd
9 changed files with 98 additions and 49 deletions

Binary file not shown.

View File

@ -19,7 +19,7 @@ namespace BizHawk.Client.Common
DSDA.DoomSyncSettings syncSettings = new()
{
InputFormat = DoomControllerTypes.Heretic,
MultiplayerMode = DSDA.MultiplayerMode.M0,
MultiplayerMode = DSDA.MultiplayerMode.Single_Coop,
MonstersRespawn = false,
FastMonsters = false,
NoMonsters = false,

View File

@ -19,7 +19,7 @@ namespace BizHawk.Client.Common
DSDA.DoomSyncSettings syncSettings = new()
{
InputFormat = DoomControllerTypes.Hexen,
MultiplayerMode = DSDA.MultiplayerMode.M0,
MultiplayerMode = DSDA.MultiplayerMode.Single_Coop,
MonstersRespawn = false,
FastMonsters = false,
NoMonsters = false,

View File

@ -45,6 +45,10 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
{
int mouseTurningDelta = _player1LastMouseTurningValue - mouseTurningSpeed;
player1Inputs._TurningSpeed += mouseTurningDelta * _syncSettings.MouseTurnSensitivity;
if (_syncSettings.TurningResolution == TurningResolution.Shorttics)
{
player1Inputs._TurningSpeed >>= 8;
}
}
_player1LastMouseTurningValue = mouseTurningSpeed;
@ -89,6 +93,10 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
{
int mouseTurningDelta = _player2LastMouseTurningValue - mouseTurningSpeed;
player2Inputs._TurningSpeed += mouseTurningDelta * _syncSettings.MouseTurnSensitivity;
if (_syncSettings.TurningResolution == TurningResolution.Shorttics)
{
player2Inputs._TurningSpeed >>= 8;
}
}
_player2LastMouseTurningValue = mouseTurningSpeed;
@ -133,6 +141,10 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
{
int mouseTurningDelta = _player3LastMouseTurningValue - mouseTurningSpeed;
player3Inputs._TurningSpeed += mouseTurningDelta * _syncSettings.MouseTurnSensitivity;
if (_syncSettings.TurningResolution == TurningResolution.Shorttics)
{
player3Inputs._TurningSpeed >>= 8;
}
}
_player3LastMouseTurningValue = mouseTurningSpeed;
@ -177,6 +189,10 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
{
int mouseTurningDelta = _player4LastMouseTurningValue - mouseTurningSpeed;
player4Inputs._TurningSpeed += mouseTurningDelta * _syncSettings.MouseTurnSensitivity;
if (_syncSettings.TurningResolution == TurningResolution.Shorttics)
{
player4Inputs._TurningSpeed >>= 8;
}
}
_player4LastMouseTurningValue = mouseTurningSpeed;

View File

@ -63,27 +63,34 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
S4 = 4,
[Display(Name = "5 - Nightmare!")]
S5 = 5
}
public enum TurningResolution : int
{
[Display(Name = "16-bit integer (\"longtics\")")]
Longtics = 1,
[Display(Name = "8-bit integer (\"shorttics\")")]
Shorttics = 2,
}
public enum MultiplayerMode : int
{
[Display(Name = "0 - Single Player / Coop")]
M0 = 0,
Single_Coop = 0,
[Display(Name = "1 - Deathmatch")]
M1 = 1,
Deathmatch = 1,
[Display(Name = "2 - Altdeath")]
M2 = 2
Altdeath = 2
}
public enum HexenClass : int
{
[Display(Name = "Fighter")]
C1 = 1,
[Display(Name = "FighterFighter")]
Fighter = 1,
[Display(Name = "Cleric")]
C2 = 2,
Cleric = 2,
[Display(Name = "Mage")]
C3 = 3
Mage = 3
}
public const int TURBO_AUTO = -1;
@ -181,7 +188,7 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
[DisplayName("Multiplayer Mode")]
[Description("Indicates the multiplayer mode")]
[DefaultValue(MultiplayerMode.M0)]
[DefaultValue(MultiplayerMode.Single_Coop)]
[TypeConverter(typeof(DescribableEnumConverter))]
public MultiplayerMode MultiplayerMode { get; set; }
@ -219,25 +226,25 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
[DisplayName("Player 1 Hexen Class")]
[Description("The Hexen class to use for player 1. Has no effect for Doom / Heretic")]
[DefaultValue(HexenClass.C1)]
[DefaultValue(HexenClass.Fighter)]
[TypeConverter(typeof(DescribableEnumConverter))]
public HexenClass Player1Class { get; set; }
[DisplayName("Player 2 Hexen Class")]
[Description("The Hexen class to use for player 2. Has no effect for Doom / Heretic")]
[DefaultValue(HexenClass.C1)]
[DefaultValue(HexenClass.Fighter)]
[TypeConverter(typeof(DescribableEnumConverter))]
public HexenClass Player2Class { get; set; }
[DisplayName("Player 3 Hexen Class")]
[Description("The Hexen class to use for player 3. Has no effect for Doom / Heretic")]
[DefaultValue(HexenClass.C1)]
[DefaultValue(HexenClass.Fighter)]
[TypeConverter(typeof(DescribableEnumConverter))]
public HexenClass Player3Class { get; set; }
[DisplayName("Player 4 Hexen Class")]
[Description("The Hexen class to use for player 4. Has no effect for Doom / Heretic")]
[DefaultValue(HexenClass.C1)]
[DefaultValue(HexenClass.Fighter)]
[TypeConverter(typeof(DescribableEnumConverter))]
public HexenClass Player4Class { get; set; }
@ -251,6 +258,16 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
[DefaultValue(true)]
public bool StrictMode { get; set; }
[DisplayName("Auto Run")]
[Description("")]
[DefaultValue(true)]
public bool AutoRun { get; set; }
[DisplayName("Turning Resolution")]
[Description("\"shorttics\" refers to decreased turning resolution used for demos, whereas \"longtics\" refers to the regular turning resolution outside of a demo-recording environment.")]
[DefaultValue(TurningResolution.Longtics)]
public TurningResolution TurningResolution { get; set; }
[DisplayName("Prevent Level Exit")]
[Description("Level exit triggers won't have an effect. This is useful for debugging / optimizing / botting purposes.")]
[DefaultValue(false)]

View File

@ -100,29 +100,7 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
}
var initSettings = _syncSettings.GetNativeSettings(lp.Game);
_args = new List<string>
{
"dsda",
};
_args.AddRange([ "-skill", $"{(int) _syncSettings.SkillLevel}" ]);
_args.AddRange([ "-warp", $"{_syncSettings.InitialEpisode}", $"{_syncSettings.InitialMap}" ]);
_args.AddRange([ "-complevel", $"{(int) _syncSettings.CompatibilityMode}" ]);
ConditionalArg(!_syncSettings.StrictMode, "-tas");
ConditionalArg(_syncSettings.MonstersRespawn, "-respawn");
ConditionalArg(_syncSettings.NoMonsters, "-nomonsters");
ConditionalArg(_syncSettings.ChainEpisodes, "-chain_episodes");
ConditionalArg(_syncSettings.MultiplayerMode == MultiplayerMode.M1, "-deathmatch");
ConditionalArg(_syncSettings.MultiplayerMode == MultiplayerMode.M2, "-altdeath");
ConditionalArg(_syncSettings.Turbo > 0, $"-turbo {_syncSettings.Turbo}");
ConditionalArg((initSettings._Player1Present + initSettings._Player2Present + initSettings._Player3Present + initSettings._Player4Present) > 1, "-solo-net");
Console.WriteLine();
Console.WriteLine(string.Join(" ", _args));
Console.WriteLine();
CreateArguments(initSettings);
var initResult = Core.dsda_init(ref initSettings, _args.Count, _args.ToArray());
if (!initResult) throw new Exception($"{nameof(Core.dsda_init)}() failed");
@ -148,6 +126,28 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
}
}
private void CreateArguments(CInterface.InitSettings initSettings)
{
_args = new List<string>
{
"dsda",
};
_args.AddRange([ "-skill", $"{(int)_syncSettings.SkillLevel}" ]);
_args.AddRange([ "-warp", $"{_syncSettings.InitialEpisode}", $"{_syncSettings.InitialMap}" ]);
_args.AddRange([ "-complevel", $"{(int)_syncSettings.CompatibilityMode}" ]);
ConditionalArg(!_syncSettings.StrictMode, "-tas");
ConditionalArg(_syncSettings.MonstersRespawn, "-respawn");
ConditionalArg(_syncSettings.NoMonsters, "-nomonsters");
ConditionalArg(_syncSettings.ChainEpisodes, "-chain_episodes");
ConditionalArg(_syncSettings.TurningResolution == TurningResolution.Longtics, "-longtics");
ConditionalArg(_syncSettings.MultiplayerMode == MultiplayerMode.Deathmatch, "-deathmatch");
ConditionalArg(_syncSettings.MultiplayerMode == MultiplayerMode.Altdeath, "-altdeath");
ConditionalArg(_syncSettings.Turbo > 0, $"-turbo {_syncSettings.Turbo}");
ConditionalArg((initSettings._Player1Present + initSettings._Player2Present + initSettings._Player3Present + initSettings._Player4Present) > 1, "-solo-net");
}
private void ConditionalArg(bool condition, string setting)
{
if (condition)

View File

@ -38,7 +38,7 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
.AddAxis($"P{PortNum} Turning Speed", (-128).RangeTo(127), 0)
.AddAxis($"P{PortNum} Weapon Select", (0).RangeTo(7), 0)
.AddAxis($"P{PortNum} Mouse Running", (-128).RangeTo(127), 0)
.AddAxis($"P{PortNum} Mouse Turning", (-128).RangeTo(127), 0)
.AddAxis($"P{PortNum} Mouse Turning", (-32768).RangeTo(32767), 0)
.MakeImmutable();
}
@ -115,12 +115,12 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
{
if (c.IsPressed($"P{PortNum} Key Turn Left"))
{
x = c.IsPressed($"P{PortNum} Key Shift Run") ? 5 : 2;
x = c.IsPressed($"P{PortNum} Key Shift Run") ? 1280 : 320;
}
if (c.IsPressed($"P{PortNum} Key Turn Right"))
{
x = c.IsPressed($"P{PortNum} Key Shift Run") ? -5 : -2;
x = c.IsPressed($"P{PortNum} Key Shift Run") ? -1280 : -320;
}
}

View File

@ -160,7 +160,20 @@ ECL_EXPORT int dsda_init(InitSettings *settings, int argc, char **argv)
// Initializing DSDA core
headlessMain(argc, argv);
printf("DSDA Initialized\n");
printf("DSDA Initialized\n");
switch(compatibility_level) {
case prboom_6_compatibility:
longtics = 1;
break;
case mbf21_compatibility:
longtics = 1;
shorttics = !dsda_Flag(dsda_arg_longtics);
break;
default:
longtics = dsda_Flag(dsda_arg_longtics);
break;
}
// Initializing audio
I_SetSoundCap();

View File

@ -9,6 +9,10 @@
#include "d_player.h"
#include "w_wad.h"
#include "p_mobj.h"
#include "doomstat.h"
#include "g_game.h"
#include "dsda/args.h"
extern "C"
{
@ -41,23 +45,18 @@ extern "C"
unsigned char * I_CaptureAudio (int* nsamples);
void I_InitSound(void);
void I_SetSoundCap (void);
}
// Players information
extern "C" int enableOutput;
extern "C" player_t players[MAX_MAXPLAYERS];
extern "C" int preventLevelExit;
extern "C" int preventGameEnd;
extern "C" int reachedLevelExit;
extern "C" int reachedGameEnd;
extern "C" int gamemap;
extern "C" int gametic;
extern "C" dboolean playeringame[MAX_MAXPLAYERS];
extern "C" int consoleplayer;
extern "C" int displayplayer;
extern "C" pclass_t PlayerClass[MAX_MAXPLAYERS];
extern int numthings;
extern mobj_t **mobj_ptrs;
extern dsda_arg_t arg_value[dsda_arg_count];
#define PALETTE_SIZE 256
uint32_t _convertedPaletteBuffer[PALETTE_SIZE];
@ -103,4 +102,8 @@ struct PackedRenderInfo
int _RenderVideo;
int _RenderAudio;
int _PlayerPointOfView;
} __attribute__((packed));
} __attribute__((packed));
dboolean dsda_Flag(dsda_arg_identifier_t id) {
return arg_value[id].found;
}