dsda: reduce copypaste
This commit is contained in:
parent
f444d6b0a5
commit
72070a63de
|
@ -9,202 +9,88 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
|
||||||
|
|
||||||
public ControllerDefinition ControllerDefinition => _controllerDeck.Definition;
|
public ControllerDefinition ControllerDefinition => _controllerDeck.Definition;
|
||||||
|
|
||||||
|
private delegate int ReadPot(IController c, int pot);
|
||||||
|
private delegate byte ReadPort(IController c);
|
||||||
|
|
||||||
public bool FrameAdvance(IController controller, bool renderVideo, bool renderAudio)
|
public bool FrameAdvance(IController controller, bool renderVideo, bool renderAudio)
|
||||||
{
|
{
|
||||||
// Declaring inputs
|
// Declaring inputs
|
||||||
PackedPlayerInput player1Inputs = new PackedPlayerInput();
|
PackedPlayerInput[] players = [
|
||||||
PackedPlayerInput player2Inputs = new PackedPlayerInput();
|
new PackedPlayerInput(),
|
||||||
PackedPlayerInput player3Inputs = new PackedPlayerInput();
|
new PackedPlayerInput(),
|
||||||
PackedPlayerInput player4Inputs = new PackedPlayerInput();
|
new PackedPlayerInput(),
|
||||||
|
new PackedPlayerInput()
|
||||||
|
];
|
||||||
|
|
||||||
if (_syncSettings.Player1Present)
|
ReadPot[] potReaders =
|
||||||
|
[
|
||||||
|
_controllerDeck.ReadPot1,
|
||||||
|
_controllerDeck.ReadPot2,
|
||||||
|
_controllerDeck.ReadPot3,
|
||||||
|
_controllerDeck.ReadPot4,
|
||||||
|
];
|
||||||
|
|
||||||
|
ReadPort[] portReaders =
|
||||||
|
[
|
||||||
|
_controllerDeck.ReadPort1,
|
||||||
|
_controllerDeck.ReadPort2,
|
||||||
|
_controllerDeck.ReadPort3,
|
||||||
|
_controllerDeck.ReadPort4,
|
||||||
|
];
|
||||||
|
|
||||||
|
int playersPresent = Convert.ToInt32(_syncSettings.Player1Present)
|
||||||
|
| Convert.ToInt32(_syncSettings.Player2Present) << 1
|
||||||
|
| Convert.ToInt32(_syncSettings.Player3Present) << 2
|
||||||
|
| Convert.ToInt32(_syncSettings.Player4Present) << 3;
|
||||||
|
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
player1Inputs._RunSpeed = _controllerDeck.ReadPot1(controller, 0);
|
if ((playersPresent & (1 << i)) is not 0)
|
||||||
player1Inputs._StrafingSpeed = _controllerDeck.ReadPot1(controller, 1);
|
|
||||||
player1Inputs._TurningSpeed = _controllerDeck.ReadPot1(controller, 2);
|
|
||||||
player1Inputs._WeaponSelect = _controllerDeck.ReadPot1(controller, 3);
|
|
||||||
var actionsBitfield = _controllerDeck.ReadPort1(controller);
|
|
||||||
player1Inputs._Fire = actionsBitfield & 0b00001;
|
|
||||||
player1Inputs._Action = (actionsBitfield & 0b00010) >> 1;
|
|
||||||
player1Inputs._AltWeapon = (actionsBitfield & 0b00100) >> 2;
|
|
||||||
|
|
||||||
// Handling mouse-driven running
|
|
||||||
int mouseRunningSpeed = _controllerDeck.ReadPot1(controller, 4);
|
|
||||||
if (_player1LastMouseRunningValue > MOUSE_NO_INPUT)
|
|
||||||
{
|
{
|
||||||
int mouseRunningDelta = _player1LastMouseRunningValue - mouseRunningSpeed;
|
players[i]._RunSpeed = potReaders[i](controller, 0);
|
||||||
player1Inputs._RunSpeed += mouseRunningDelta * _syncSettings.MouseRunSensitivity;
|
players[i]._StrafingSpeed = potReaders[i](controller, 1);
|
||||||
if (player1Inputs._RunSpeed > 50) player1Inputs._RunSpeed = 50;
|
players[i]._TurningSpeed = potReaders[i](controller, 2);
|
||||||
if (player1Inputs._RunSpeed < -50) player1Inputs._RunSpeed = -50;
|
players[i]._WeaponSelect = potReaders[i](controller, 3);
|
||||||
}
|
|
||||||
_player1LastMouseRunningValue = mouseRunningSpeed;
|
|
||||||
|
|
||||||
// Handling mouse-driven turning
|
var actionsBitfield = portReaders[i](controller);
|
||||||
int mouseTurningSpeed = _controllerDeck.ReadPot1(controller, 5);
|
players[i]._Fire = actionsBitfield & 0b00001;
|
||||||
if (_player1LastMouseTurningValue > MOUSE_NO_INPUT)
|
players[i]._Action = (actionsBitfield & 0b00010) >> 1;
|
||||||
{
|
players[i]._AltWeapon = (actionsBitfield & 0b00100) >> 2;
|
||||||
int mouseTurningDelta = _player1LastMouseTurningValue - mouseTurningSpeed;
|
|
||||||
player1Inputs._TurningSpeed += mouseTurningDelta * _syncSettings.MouseTurnSensitivity;
|
// Handling mouse-driven running
|
||||||
if (_syncSettings.TurningResolution == TurningResolution.Shorttics)
|
int mouseRunningSpeed = potReaders[i](controller, 4);
|
||||||
|
if (_lastMouseRunningValues[i] > MOUSE_NO_INPUT)
|
||||||
{
|
{
|
||||||
player1Inputs._TurningSpeed >>= 8;
|
int mouseRunningDelta = _lastMouseRunningValues[i] - mouseRunningSpeed;
|
||||||
|
players[i]._RunSpeed += mouseRunningDelta * _syncSettings.MouseRunSensitivity;
|
||||||
|
if (players[i]._RunSpeed > 50) players[i]._RunSpeed = 50;
|
||||||
|
if (players[i]._RunSpeed < -50) players[i]._RunSpeed = -50;
|
||||||
}
|
}
|
||||||
}
|
_lastMouseRunningValues[i] = mouseRunningSpeed;
|
||||||
_player1LastMouseTurningValue = mouseTurningSpeed;
|
|
||||||
|
|
||||||
// Raven Games
|
// Handling mouse-driven turning
|
||||||
if (_syncSettings.InputFormat is DoomControllerTypes.Heretic or DoomControllerTypes.Hexen)
|
int mouseTurningSpeed = potReaders[i](controller, 5);
|
||||||
{
|
if (_lastMouseTurningValues[i] > MOUSE_NO_INPUT)
|
||||||
player1Inputs._FlyLook = _controllerDeck.ReadPot1(controller, 6);
|
|
||||||
player1Inputs._ArtifactUse = _controllerDeck.ReadPot1(controller, 7);
|
|
||||||
if (_syncSettings.InputFormat is DoomControllerTypes.Hexen)
|
|
||||||
{
|
{
|
||||||
player1Inputs._Jump = (actionsBitfield & 0b01000) >> 3;
|
int mouseTurningDelta = _lastMouseTurningValues[i] - mouseTurningSpeed;
|
||||||
player1Inputs._EndPlayer = (actionsBitfield & 0b10000) >> 4;
|
players[i]._TurningSpeed += mouseTurningDelta * _syncSettings.MouseTurnSensitivity;
|
||||||
|
if (_syncSettings.TurningResolution == TurningResolution.Shorttics)
|
||||||
|
{
|
||||||
|
players[i]._TurningSpeed >>= 8;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
_lastMouseTurningValues[i] = mouseTurningSpeed;
|
||||||
}
|
|
||||||
|
|
||||||
if (_syncSettings.Player2Present)
|
// Raven Games
|
||||||
{
|
if (_syncSettings.InputFormat is DoomControllerTypes.Heretic or DoomControllerTypes.Hexen)
|
||||||
player2Inputs._RunSpeed = _controllerDeck.ReadPot2(controller, 0);
|
|
||||||
player2Inputs._StrafingSpeed = _controllerDeck.ReadPot2(controller, 1);
|
|
||||||
player2Inputs._TurningSpeed = _controllerDeck.ReadPot2(controller, 2);
|
|
||||||
player2Inputs._WeaponSelect = _controllerDeck.ReadPot2(controller, 3);
|
|
||||||
var actionsBitfield = _controllerDeck.ReadPort2(controller);
|
|
||||||
player2Inputs._Fire = actionsBitfield & 0b00001;
|
|
||||||
player2Inputs._Action = (actionsBitfield & 0b00010) >> 1;
|
|
||||||
player2Inputs._AltWeapon = (actionsBitfield & 0b00100) >> 2;
|
|
||||||
|
|
||||||
// Handling mouse-driven running
|
|
||||||
int mouseRunningSpeed = _controllerDeck.ReadPot2(controller, 4);
|
|
||||||
if (_player2LastMouseRunningValue > MOUSE_NO_INPUT)
|
|
||||||
{
|
|
||||||
int mouseRunningDelta = _player2LastMouseRunningValue - mouseRunningSpeed;
|
|
||||||
player2Inputs._RunSpeed += mouseRunningDelta * _syncSettings.MouseRunSensitivity;
|
|
||||||
if (player2Inputs._RunSpeed > 50) player2Inputs._RunSpeed = 50;
|
|
||||||
if (player2Inputs._RunSpeed < -50) player2Inputs._RunSpeed = -50;
|
|
||||||
}
|
|
||||||
_player2LastMouseRunningValue = mouseRunningSpeed;
|
|
||||||
|
|
||||||
// Handling mouse-driven turning
|
|
||||||
int mouseTurningSpeed = _controllerDeck.ReadPot2(controller, 5);
|
|
||||||
if (_player2LastMouseTurningValue > MOUSE_NO_INPUT)
|
|
||||||
{
|
|
||||||
int mouseTurningDelta = _player2LastMouseTurningValue - mouseTurningSpeed;
|
|
||||||
player2Inputs._TurningSpeed += mouseTurningDelta * _syncSettings.MouseTurnSensitivity;
|
|
||||||
if (_syncSettings.TurningResolution == TurningResolution.Shorttics)
|
|
||||||
{
|
{
|
||||||
player2Inputs._TurningSpeed >>= 8;
|
players[i]._FlyLook = potReaders[i](controller, 6);
|
||||||
}
|
players[i]._ArtifactUse = potReaders[i](controller, 7);
|
||||||
}
|
if (_syncSettings.InputFormat is DoomControllerTypes.Hexen)
|
||||||
_player2LastMouseTurningValue = mouseTurningSpeed;
|
{
|
||||||
|
players[i]._Jump = (actionsBitfield & 0b01000) >> 3;
|
||||||
// Raven Games
|
players[i]._EndPlayer = (actionsBitfield & 0b10000) >> 4;
|
||||||
if (_syncSettings.InputFormat is DoomControllerTypes.Heretic or DoomControllerTypes.Hexen)
|
}
|
||||||
{
|
|
||||||
player2Inputs._FlyLook = _controllerDeck.ReadPot2(controller, 4);
|
|
||||||
player2Inputs._ArtifactUse = _controllerDeck.ReadPot2(controller, 5);
|
|
||||||
if (_syncSettings.InputFormat is DoomControllerTypes.Hexen)
|
|
||||||
{
|
|
||||||
player2Inputs._Jump = (actionsBitfield & 0b01000) >> 3;
|
|
||||||
player2Inputs._EndPlayer = (actionsBitfield & 0b10000) >> 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_syncSettings.Player3Present)
|
|
||||||
{
|
|
||||||
player3Inputs._RunSpeed = _controllerDeck.ReadPot3(controller, 0);
|
|
||||||
player3Inputs._StrafingSpeed = _controllerDeck.ReadPot3(controller, 1);
|
|
||||||
player3Inputs._TurningSpeed = _controllerDeck.ReadPot3(controller, 2);
|
|
||||||
player3Inputs._WeaponSelect = _controllerDeck.ReadPot3(controller, 3);
|
|
||||||
var actionsBitfield = _controllerDeck.ReadPort3(controller);
|
|
||||||
player3Inputs._Fire = actionsBitfield & 0b00001;
|
|
||||||
player3Inputs._Action = (actionsBitfield & 0b00010) >> 1;
|
|
||||||
player3Inputs._AltWeapon = (actionsBitfield & 0b00100) >> 2;
|
|
||||||
|
|
||||||
// Handling mouse-driven running
|
|
||||||
int mouseRunningSpeed = _controllerDeck.ReadPot3(controller, 4);
|
|
||||||
if (_player3LastMouseRunningValue > MOUSE_NO_INPUT)
|
|
||||||
{
|
|
||||||
int mouseRunningDelta = _player3LastMouseRunningValue - mouseRunningSpeed;
|
|
||||||
player3Inputs._RunSpeed += mouseRunningDelta * _syncSettings.MouseRunSensitivity;
|
|
||||||
if (player3Inputs._RunSpeed > 50) player3Inputs._RunSpeed = 50;
|
|
||||||
if (player3Inputs._RunSpeed < -50) player3Inputs._RunSpeed = -50;
|
|
||||||
}
|
|
||||||
_player3LastMouseRunningValue = mouseRunningSpeed;
|
|
||||||
|
|
||||||
// Handling mouse-driven turning
|
|
||||||
int mouseTurningSpeed = _controllerDeck.ReadPot3(controller, 5);
|
|
||||||
if (_player3LastMouseTurningValue > MOUSE_NO_INPUT)
|
|
||||||
{
|
|
||||||
int mouseTurningDelta = _player3LastMouseTurningValue - mouseTurningSpeed;
|
|
||||||
player3Inputs._TurningSpeed += mouseTurningDelta * _syncSettings.MouseTurnSensitivity;
|
|
||||||
if (_syncSettings.TurningResolution == TurningResolution.Shorttics)
|
|
||||||
{
|
|
||||||
player3Inputs._TurningSpeed >>= 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_player3LastMouseTurningValue = mouseTurningSpeed;
|
|
||||||
|
|
||||||
// Raven Games
|
|
||||||
if (_syncSettings.InputFormat is DoomControllerTypes.Heretic or DoomControllerTypes.Hexen)
|
|
||||||
{
|
|
||||||
player3Inputs._FlyLook = _controllerDeck.ReadPot3(controller, 6);
|
|
||||||
player3Inputs._ArtifactUse = _controllerDeck.ReadPot3(controller, 7);
|
|
||||||
if (_syncSettings.InputFormat is DoomControllerTypes.Hexen)
|
|
||||||
{
|
|
||||||
player3Inputs._Jump = (actionsBitfield & 0b01000) >> 3;
|
|
||||||
player3Inputs._EndPlayer = (actionsBitfield & 0b10000) >> 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_syncSettings.Player4Present)
|
|
||||||
{
|
|
||||||
player4Inputs._RunSpeed = _controllerDeck.ReadPot4(controller, 0);
|
|
||||||
player4Inputs._StrafingSpeed = _controllerDeck.ReadPot4(controller, 1);
|
|
||||||
player4Inputs._TurningSpeed = _controllerDeck.ReadPot4(controller, 2);
|
|
||||||
player4Inputs._WeaponSelect = _controllerDeck.ReadPot4(controller, 3);
|
|
||||||
var actionsBitfield = _controllerDeck.ReadPort4(controller);
|
|
||||||
player4Inputs._Fire = actionsBitfield & 0b00001;
|
|
||||||
player4Inputs._Action = (actionsBitfield & 0b00010) >> 1;
|
|
||||||
player4Inputs._AltWeapon = (actionsBitfield & 0b00100) >> 2;
|
|
||||||
|
|
||||||
// Handling mouse-driven running
|
|
||||||
int mouseRunningSpeed = _controllerDeck.ReadPot4(controller, 4);
|
|
||||||
if (_player4LastMouseRunningValue > MOUSE_NO_INPUT)
|
|
||||||
{
|
|
||||||
int mouseRunningDelta = _player4LastMouseRunningValue - mouseRunningSpeed;
|
|
||||||
player4Inputs._RunSpeed += mouseRunningDelta * _syncSettings.MouseRunSensitivity;
|
|
||||||
if (player4Inputs._RunSpeed > 50) player4Inputs._RunSpeed = 50;
|
|
||||||
if (player4Inputs._RunSpeed < -50) player4Inputs._RunSpeed = -50;
|
|
||||||
}
|
|
||||||
_player4LastMouseRunningValue = mouseRunningSpeed;
|
|
||||||
|
|
||||||
// Handling mouse-driven turning
|
|
||||||
int mouseTurningSpeed = _controllerDeck.ReadPot4(controller, 5);
|
|
||||||
if (_player4LastMouseTurningValue > MOUSE_NO_INPUT)
|
|
||||||
{
|
|
||||||
int mouseTurningDelta = _player4LastMouseTurningValue - mouseTurningSpeed;
|
|
||||||
player4Inputs._TurningSpeed += mouseTurningDelta * _syncSettings.MouseTurnSensitivity;
|
|
||||||
if (_syncSettings.TurningResolution == TurningResolution.Shorttics)
|
|
||||||
{
|
|
||||||
player4Inputs._TurningSpeed >>= 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_player4LastMouseTurningValue = mouseTurningSpeed;
|
|
||||||
|
|
||||||
// Raven Games
|
|
||||||
if (_syncSettings.InputFormat is DoomControllerTypes.Heretic or DoomControllerTypes.Hexen)
|
|
||||||
{
|
|
||||||
player4Inputs._FlyLook = _controllerDeck.ReadPot4(controller, 4);
|
|
||||||
player4Inputs._ArtifactUse = _controllerDeck.ReadPot4(controller, 5);
|
|
||||||
if (_syncSettings.InputFormat is DoomControllerTypes.Hexen)
|
|
||||||
{
|
|
||||||
player4Inputs._Jump = (actionsBitfield & 0b01000) >> 3;
|
|
||||||
player4Inputs._EndPlayer = (actionsBitfield & 0b10000) >> 4;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,10 +101,10 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
|
||||||
renderInfo._PlayerPointOfView = _settings.DisplayPlayer - 1;
|
renderInfo._PlayerPointOfView = _settings.DisplayPlayer - 1;
|
||||||
|
|
||||||
Core.dsda_frame_advance(
|
Core.dsda_frame_advance(
|
||||||
ref player1Inputs,
|
ref players[0],
|
||||||
ref player2Inputs,
|
ref players[1],
|
||||||
ref player3Inputs,
|
ref players[2],
|
||||||
ref player4Inputs,
|
ref players[3],
|
||||||
ref renderInfo);
|
ref renderInfo);
|
||||||
|
|
||||||
if (renderVideo)
|
if (renderVideo)
|
||||||
|
|
|
@ -13,14 +13,14 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
|
||||||
_elf.LoadStateBinary(reader);
|
_elf.LoadStateBinary(reader);
|
||||||
|
|
||||||
// Getting last mouse positions
|
// Getting last mouse positions
|
||||||
_player1LastMouseRunningValue = reader.ReadInt32();
|
_lastMouseRunningValues[0] = reader.ReadInt32();
|
||||||
_player1LastMouseTurningValue = reader.ReadInt32();
|
_lastMouseTurningValues[0] = reader.ReadInt32();
|
||||||
_player2LastMouseRunningValue = reader.ReadInt32();
|
_lastMouseRunningValues[1] = reader.ReadInt32();
|
||||||
_player2LastMouseTurningValue = reader.ReadInt32();
|
_lastMouseTurningValues[1] = reader.ReadInt32();
|
||||||
_player3LastMouseRunningValue = reader.ReadInt32();
|
_lastMouseRunningValues[2] = reader.ReadInt32();
|
||||||
_player3LastMouseTurningValue = reader.ReadInt32();
|
_lastMouseTurningValues[2] = reader.ReadInt32();
|
||||||
_player4LastMouseRunningValue = reader.ReadInt32();
|
_lastMouseRunningValues[3] = reader.ReadInt32();
|
||||||
_player4LastMouseTurningValue = reader.ReadInt32();
|
_lastMouseTurningValues[3] = reader.ReadInt32();
|
||||||
|
|
||||||
Frame = reader.ReadInt32();
|
Frame = reader.ReadInt32();
|
||||||
// any managed pointers that we sent to the core need to be resent now!
|
// any managed pointers that we sent to the core need to be resent now!
|
||||||
|
@ -33,14 +33,14 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
|
||||||
_elf.SaveStateBinary(writer);
|
_elf.SaveStateBinary(writer);
|
||||||
|
|
||||||
// Writing last mouse positions
|
// Writing last mouse positions
|
||||||
writer.Write(_player1LastMouseRunningValue);
|
writer.Write(_lastMouseRunningValues[0]);
|
||||||
writer.Write(_player1LastMouseTurningValue);
|
writer.Write(_lastMouseTurningValues[0]);
|
||||||
writer.Write(_player2LastMouseRunningValue);
|
writer.Write(_lastMouseRunningValues[1]);
|
||||||
writer.Write(_player2LastMouseTurningValue);
|
writer.Write(_lastMouseTurningValues[1]);
|
||||||
writer.Write(_player3LastMouseRunningValue);
|
writer.Write(_lastMouseRunningValues[2]);
|
||||||
writer.Write(_player3LastMouseTurningValue);
|
writer.Write(_lastMouseTurningValues[2]);
|
||||||
writer.Write(_player4LastMouseRunningValue);
|
writer.Write(_lastMouseRunningValues[3]);
|
||||||
writer.Write(_player4LastMouseTurningValue);
|
writer.Write(_lastMouseTurningValues[3]);
|
||||||
|
|
||||||
writer.Write(Frame);
|
writer.Write(Frame);
|
||||||
}
|
}
|
||||||
|
|
|
@ -158,14 +158,18 @@ namespace BizHawk.Emulation.Cores.Computers.Doom
|
||||||
|
|
||||||
// Remembering mouse position
|
// Remembering mouse position
|
||||||
private const int MOUSE_NO_INPUT = -65535;
|
private const int MOUSE_NO_INPUT = -65535;
|
||||||
private int _player1LastMouseRunningValue = MOUSE_NO_INPUT;
|
private int[] _lastMouseRunningValues = [
|
||||||
private int _player1LastMouseTurningValue = MOUSE_NO_INPUT;
|
MOUSE_NO_INPUT,
|
||||||
private int _player2LastMouseRunningValue = MOUSE_NO_INPUT;
|
MOUSE_NO_INPUT,
|
||||||
private int _player2LastMouseTurningValue = MOUSE_NO_INPUT;
|
MOUSE_NO_INPUT,
|
||||||
private int _player3LastMouseRunningValue = MOUSE_NO_INPUT;
|
MOUSE_NO_INPUT
|
||||||
private int _player3LastMouseTurningValue = MOUSE_NO_INPUT;
|
];
|
||||||
private int _player4LastMouseRunningValue = MOUSE_NO_INPUT;
|
private int[] _lastMouseTurningValues = [
|
||||||
private int _player4LastMouseTurningValue = MOUSE_NO_INPUT;
|
MOUSE_NO_INPUT,
|
||||||
|
MOUSE_NO_INPUT,
|
||||||
|
MOUSE_NO_INPUT,
|
||||||
|
MOUSE_NO_INPUT
|
||||||
|
];
|
||||||
private List<string> _args;
|
private List<string> _args;
|
||||||
|
|
||||||
// IRegionable
|
// IRegionable
|
||||||
|
|
Loading…
Reference in New Issue