Merge branch 'master' of https://github.com/TASVideos/bizhawk
This commit is contained in:
commit
dbd545c0cd
|
@ -85,9 +85,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
Name = button.Name,
|
||||
Location = UIHelper.Scale(button.Location),
|
||||
Size = UIHelper.Scale(new Size(button.MaxValue + 79, button.MaxValue + 9)), // TODO: don't use hardcoded values here, at least make them defaults in the AnalogStick object itself
|
||||
RangeX = button.MaxValue,
|
||||
RangeY = button.MaxValue // TODO ability to pass in a different Y max
|
||||
Size = UIHelper.Scale(new Size(127 + 79, 127 + 9)),
|
||||
RangeX = new float[] { button.MinValue, button.MidValue, button.MaxValue },
|
||||
RangeY = new float[] { button.MinValueSec, button.MidValueSec, button.MaxValueSec },
|
||||
});
|
||||
break;
|
||||
case PadSchema.PadInputType.TargetedPair:
|
||||
|
|
|
@ -109,9 +109,9 @@
|
|||
this.MaxLabel.AutoSize = true;
|
||||
this.MaxLabel.Location = new System.Drawing.Point(138, 72);
|
||||
this.MaxLabel.Name = "MaxLabel";
|
||||
this.MaxLabel.Size = new System.Drawing.Size(27, 13);
|
||||
this.MaxLabel.Size = new System.Drawing.Size(47, 13);
|
||||
this.MaxLabel.TabIndex = 27;
|
||||
this.MaxLabel.Text = "Max";
|
||||
this.MaxLabel.Text = "Range%";
|
||||
//
|
||||
// MaxXNumeric
|
||||
//
|
||||
|
@ -161,9 +161,8 @@
|
|||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.AnalogStick.BackColor = System.Drawing.Color.Gray;
|
||||
this.AnalogStick.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
||||
this.AnalogStick.ClearCallback = null;
|
||||
this.AnalogStick.Location = new System.Drawing.Point(3, 3);
|
||||
this.AnalogStick.MaxX = 127;
|
||||
this.AnalogStick.MaxY = 127;
|
||||
this.AnalogStick.Name = "AnalogStick";
|
||||
this.AnalogStick.ReadOnly = false;
|
||||
this.AnalogStick.Size = new System.Drawing.Size(129, 129);
|
||||
|
|
|
@ -17,32 +17,33 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
InitializeComponent();
|
||||
AnalogStick.ClearCallback = ClearCallback;
|
||||
RangeX = 127;
|
||||
RangeY = 127;
|
||||
}
|
||||
|
||||
public int RangeX { get; set; }
|
||||
public int RangeY { get; set; }
|
||||
public float[] RangeX = new float[] { -128f, 0.0f, 127f };
|
||||
public float[] RangeY = new float[] { -128f, 0.0f, 127f };
|
||||
|
||||
|
||||
private void VirtualPadAnalogStick_Load(object sender, EventArgs e)
|
||||
{
|
||||
AnalogStick.Name = Name;
|
||||
AnalogStick.XName = Name;
|
||||
AnalogStick.YName = Name.Replace("X", "Y"); // TODO: allow schema to dictate this but this is a convenient default
|
||||
AnalogStick.MaxX = RangeX;
|
||||
AnalogStick.MaxY = RangeY;
|
||||
AnalogStick.SetRangeX(RangeX);
|
||||
AnalogStick.SetRangeY(RangeY);
|
||||
|
||||
ManualX.Minimum = AnalogStick.MinX;
|
||||
ManualX.Maximum = AnalogStick.MaxX;
|
||||
ManualX.Minimum = (decimal)RangeX[0];
|
||||
ManualX.Maximum = (decimal)RangeX[2];
|
||||
|
||||
ManualY.Minimum = AnalogStick.MinY;
|
||||
ManualY.Maximum = AnalogStick.MaxY;
|
||||
ManualY.Minimum = (decimal)RangeX[0];
|
||||
ManualY.Maximum = (decimal)RangeX[2];
|
||||
|
||||
MaxXNumeric.Maximum = RangeX;
|
||||
MaxXNumeric.Value = RangeX;
|
||||
MaxXNumeric.Minimum = 1;
|
||||
MaxXNumeric.Maximum = 100;
|
||||
MaxXNumeric.Value = 100;
|
||||
|
||||
MaxYNumeric.Maximum = RangeY;
|
||||
MaxYNumeric.Value = RangeY; // Note: these trigger change events that change the analog stick too
|
||||
MaxYNumeric.Minimum = 1;
|
||||
MaxYNumeric.Maximum = 100;
|
||||
MaxYNumeric.Value = 100; // Note: these trigger change events that change the analog stick too
|
||||
}
|
||||
|
||||
#region IVirtualPadControl Implementation
|
||||
|
@ -233,8 +234,8 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (!_programmaticallyUpdatingNumerics)
|
||||
{
|
||||
AnalogStick.MaxX = (int)MaxXNumeric.Value;
|
||||
AnalogStick.MaxY = (int)MaxYNumeric.Value;
|
||||
//blehh,... this damn feature
|
||||
AnalogStick.SetUserRange((float)MaxXNumeric.Value, (float)MaxYNumeric.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
using System.Drawing;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using BizHawk.Client.Common;
|
||||
using BizHawk.Emulation.Common;
|
||||
using System;
|
||||
|
||||
//Just because this code was mostly rewritten, dont think it isnt still awful
|
||||
|
||||
namespace BizHawk.Client.EmuHawk
|
||||
{
|
||||
|
@ -48,31 +50,140 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
private IController _previous = null;
|
||||
|
||||
public int MaxX
|
||||
float UserRangePercentageX = 100, UserRangePercentageY = 100;
|
||||
|
||||
public void SetUserRange(float rx, float ry)
|
||||
{
|
||||
get { return _maxX; }
|
||||
set
|
||||
{
|
||||
_maxX = value;
|
||||
CheckMax();
|
||||
}
|
||||
UserRangePercentageX = rx;
|
||||
UserRangePercentageY = ry;
|
||||
Rerange();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
public int MaxY
|
||||
public void SetRangeX(float[] range)
|
||||
{
|
||||
get { return _maxY; }
|
||||
set
|
||||
{
|
||||
_maxY = value;
|
||||
CheckMax();
|
||||
}
|
||||
for (int i = 0; i < 3; i++) ActualRangeX[i] = range[i];
|
||||
Rerange();
|
||||
}
|
||||
|
||||
private int _maxX = 127;
|
||||
private int _maxY = 127;
|
||||
public void SetRangeY(float[] range)
|
||||
{
|
||||
for (int i = 0; i < 3; i++) ActualRangeY[i] = range[i];
|
||||
Rerange();
|
||||
}
|
||||
|
||||
public int MinX { get { return 0 - MaxX - 1; } }
|
||||
public int MinY { get { return 0 - MaxY - 1; } }
|
||||
public float[] RangeX = new float[] { -128f, 0.0f, 127f };
|
||||
public float[] RangeY = new float[] { -128f, 0.0f, 127f };
|
||||
public float[] ActualRangeX = new float[] { -128f, 0.0f, 127f };
|
||||
public float[] ActualRangeY = new float[] { -128f, 0.0f, 127f };
|
||||
|
||||
float flipx = 1, flipy = 1;
|
||||
|
||||
void Rerange()
|
||||
{
|
||||
//baseline:
|
||||
//Array.Copy(ActualRangeX, RangeX, 3);
|
||||
//Array.Copy(ActualRangeY, RangeY, 3);
|
||||
|
||||
float rx = ActualRangeX[2] - ActualRangeX[0];
|
||||
float ry = ActualRangeY[2] - ActualRangeY[0];
|
||||
float midx = rx / 2 + ActualRangeX[0];
|
||||
float midy = ry / 2 + ActualRangeY[0];
|
||||
rx *= UserRangePercentageX / 100;
|
||||
ry *= UserRangePercentageY / 100;
|
||||
float minx = midx - rx / 2;
|
||||
float maxx = minx + rx;
|
||||
float miny = midy - ry / 2;
|
||||
float maxy = miny + ry;
|
||||
|
||||
if (minx > maxx)
|
||||
{
|
||||
float temp = minx;
|
||||
minx = maxx;
|
||||
maxx = temp;
|
||||
flipx = -1;
|
||||
}
|
||||
|
||||
if (miny > maxy)
|
||||
{
|
||||
float temp = miny;
|
||||
miny = maxy;
|
||||
maxy = temp;
|
||||
flipy = -1;
|
||||
}
|
||||
|
||||
//Range?[1] isn't really used
|
||||
RangeX[0] = minx;
|
||||
RangeX[2] = maxx;
|
||||
RangeY[0] = miny;
|
||||
RangeY[2] = maxy;
|
||||
|
||||
Clamp();
|
||||
}
|
||||
|
||||
//dont count on this working. it's never been tested.
|
||||
//but it kind of must be, or else nothing here would work...
|
||||
public float ScaleX = 0.5f;
|
||||
public float ScaleY = 0.5f;
|
||||
|
||||
int MinX { get { return (int)(RangeX[0]); } }
|
||||
int MinY { get { return (int)(RangeY[0]); } }
|
||||
int MaxX { get { return (int)(RangeX[2]); } }
|
||||
int MaxY { get { return (int)(RangeY[2]); } }
|
||||
int RangeSizeX { get { return (int)(MaxX - MinX + 1); } }
|
||||
int RangeSizeY { get { return (int)(MaxY - MinY + 1); } }
|
||||
|
||||
int PixelSizeX { get { return (int)(RangeSizeX * ScaleX); } }
|
||||
int PixelSizeY { get { return (int)(RangeSizeY * ScaleY); } }
|
||||
int PixelMinX { get { return (Size.Width - PixelSizeX) / 2; } }
|
||||
int PixelMinY { get { return (Size.Height - PixelSizeY) / 2; } }
|
||||
int PixelMidX { get { return PixelMinX + PixelSizeX / 2; } }
|
||||
int PixelMidY { get { return PixelMinY + PixelSizeY / 2; } }
|
||||
int PixelMaxX { get { return PixelMinX + PixelSizeX - 1; } }
|
||||
int PixelMaxY { get { return PixelMinY + PixelSizeY - 1; } }
|
||||
|
||||
private int RealToGfxX(int val)
|
||||
{
|
||||
int v = val;
|
||||
if (flipx == -1)
|
||||
v = (MaxX - val) + MinX;
|
||||
v = (int)(((float)v - MinX) * ScaleX);
|
||||
v += PixelMinX;
|
||||
return v;
|
||||
}
|
||||
|
||||
private int RealToGfxY(int val)
|
||||
{
|
||||
int v = val;
|
||||
if (flipy == -1)
|
||||
v = (MaxY - val) + MinY;
|
||||
v = (int)(((float)v - MinY) * ScaleY);
|
||||
v += PixelMinY;
|
||||
return v;
|
||||
}
|
||||
|
||||
private int GfxToRealX(int val)
|
||||
{
|
||||
val -= PixelMinX;
|
||||
float v = ((float)val / ScaleX + MinX);
|
||||
if (v < MinX) v = MinX;
|
||||
if (v > MaxX) v = MaxX;
|
||||
if (flipx == -1)
|
||||
v = (MaxX - v) + MinX;
|
||||
return (int)v;
|
||||
}
|
||||
|
||||
private int GfxToRealY(int val)
|
||||
{
|
||||
val -= PixelMinY;
|
||||
float v;
|
||||
v = ((float)val / ScaleY + MinY);
|
||||
if (v < MinX) v = MinX;
|
||||
if (v > MaxX) v = MaxX;
|
||||
if(flipy == -1)
|
||||
v = (MaxY - v) + MinY;
|
||||
return (int)v;
|
||||
}
|
||||
|
||||
private readonly Brush WhiteBrush = Brushes.White;
|
||||
private readonly Brush GrayBrush = Brushes.LightGray;
|
||||
|
@ -98,7 +209,7 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
public AnalogStickPanel()
|
||||
{
|
||||
Size = new Size(MaxX + 1, MaxY + 1);
|
||||
Size = new Size(PixelSizeX + 1, PixelSizeY + 1);
|
||||
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
||||
SetStyle(ControlStyles.UserPaint, true);
|
||||
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
|
||||
|
@ -126,30 +237,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
}
|
||||
}
|
||||
|
||||
private int RealToGfx(int val)
|
||||
{
|
||||
return (val + MaxX) / 2;
|
||||
}
|
||||
|
||||
private int GfxToReal(int val, bool isX) // isX is a hack
|
||||
{
|
||||
var max = isX ? MaxX : MaxY;
|
||||
var min = isX ? MinX : MinY;
|
||||
|
||||
var ret = (val * 2);
|
||||
if (ret > max)
|
||||
{
|
||||
ret = max;
|
||||
}
|
||||
|
||||
if (ret < min)
|
||||
{
|
||||
ret = min;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
private void SetAnalog()
|
||||
{
|
||||
var xn = HasValue ? X : (int?)null;
|
||||
|
@ -160,35 +247,33 @@ namespace BizHawk.Client.EmuHawk
|
|||
Refresh();
|
||||
}
|
||||
|
||||
private int MidX { get { return (int)((MaxX + 0.5) / 2); } }
|
||||
private int MidY { get { return (int)((MaxY + 0.5) / 2); } }
|
||||
|
||||
private void AnalogControlPanel_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
unchecked
|
||||
{
|
||||
// Background
|
||||
e.Graphics.Clear(Color.Black);
|
||||
e.Graphics.FillRectangle(GrayBrush, 0, 0, MaxX, MaxY);
|
||||
e.Graphics.FillEllipse(ReadOnly ? OffWhiteBrush : WhiteBrush, 0, 0, MaxX - 1, MaxY - 3);
|
||||
e.Graphics.DrawEllipse(BlackPen, 0, 0, MaxX - 1, MaxY - 3);
|
||||
e.Graphics.DrawLine(BlackPen, MidX, 0, MidX, MaxY);
|
||||
e.Graphics.DrawLine(BlackPen, 0, MidY, MaxX, MidY);
|
||||
|
||||
e.Graphics.FillRectangle(GrayBrush, PixelMinX, PixelMinY, PixelMaxX - PixelMinX, PixelMaxY- PixelMinY);
|
||||
e.Graphics.FillEllipse(ReadOnly ? OffWhiteBrush : WhiteBrush, PixelMinX, PixelMinY, PixelMaxX - PixelMinX - 2, PixelMaxY - PixelMinY - 3);
|
||||
e.Graphics.DrawEllipse(BlackPen, PixelMinX, PixelMinY, PixelMaxX - PixelMinX - 2, PixelMaxY - PixelMinY - 3);
|
||||
e.Graphics.DrawLine(BlackPen, PixelMidX, 0, PixelMidX, PixelMaxY);
|
||||
e.Graphics.DrawLine(BlackPen, 0, PixelMidY, PixelMaxX, PixelMidY);
|
||||
|
||||
// Previous frame
|
||||
if (_previous != null)
|
||||
{
|
||||
var pX = (int)_previous.GetFloat(XName);
|
||||
var pY = (int)_previous.GetFloat(YName);
|
||||
e.Graphics.DrawLine(GrayPen, MidX, MidY, RealToGfx(pX), MaxY - RealToGfx(pY));
|
||||
e.Graphics.DrawImage(GrayDot, RealToGfx(pX) - 3, MaxY - RealToGfx(pY) - 3);
|
||||
e.Graphics.DrawLine(GrayPen, PixelMidX, PixelMidY, RealToGfxX(pX), RealToGfxY(pY));
|
||||
e.Graphics.DrawImage(GrayDot, RealToGfxX(pX) - 3, RealToGfxY(MaxY) - RealToGfxY(pY) - 3);
|
||||
}
|
||||
|
||||
// Line
|
||||
if (HasValue)
|
||||
{
|
||||
e.Graphics.DrawLine(BluePen, MidX, MidY, RealToGfx(X), MaxY - RealToGfx(Y));
|
||||
e.Graphics.DrawImage(ReadOnly ? GrayDot : Dot, RealToGfx(X) - 3, MaxY - RealToGfx(Y) - 3);
|
||||
e.Graphics.DrawLine(BluePen, PixelMidX, PixelMidY, RealToGfxX(X), RealToGfxY(Y));
|
||||
e.Graphics.DrawImage(ReadOnly ? GrayDot : Dot, RealToGfxX(X) - 3, RealToGfxY(Y) - 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -199,8 +284,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
X = GfxToReal(e.X - MidX, true);
|
||||
Y = GfxToReal(-(e.Y - MidY), false);
|
||||
X = GfxToRealX(e.X);
|
||||
Y = GfxToRealY(e.Y);
|
||||
Clamp();
|
||||
HasValue = true;
|
||||
SetAnalog();
|
||||
}
|
||||
|
@ -237,8 +323,9 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
X = GfxToReal(e.X - MidX, true);
|
||||
Y = GfxToReal(-(e.Y - MidY), false);
|
||||
X = GfxToRealX(e.X);
|
||||
Y = GfxToRealY(e.Y);
|
||||
Clamp();
|
||||
HasValue = true;
|
||||
}
|
||||
if (e.Button == MouseButtons.Right)
|
||||
|
@ -282,12 +369,13 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
X = xval;
|
||||
Y = yval;
|
||||
Clamp();
|
||||
HasValue = true;
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void CheckMax()
|
||||
private void Clamp()
|
||||
{
|
||||
if (X > MaxX)
|
||||
{
|
||||
|
@ -306,8 +394,6 @@ namespace BizHawk.Client.EmuHawk
|
|||
{
|
||||
Y = MinY;
|
||||
}
|
||||
|
||||
Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -134,7 +134,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
new PadSchema.ButtonScema
|
||||
{
|
||||
Name = "P" + controller + " X Axis",
|
||||
MinValue = -128,
|
||||
MidValue = 0,
|
||||
MaxValue = 127,
|
||||
MinValueSec = 127,
|
||||
MidValueSec = 0,
|
||||
MaxValueSec = -128,
|
||||
DisplayName = "",
|
||||
Location = new Point(6, 14),
|
||||
Type = PadSchema.PadInputType.AnalogStick
|
||||
|
|
|
@ -164,7 +164,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
new PadSchema.ButtonScema
|
||||
{
|
||||
Name = "P" + controller + " LStick X",
|
||||
MaxValue = 127,
|
||||
MinValue = 0,
|
||||
MidValue = 128,
|
||||
MaxValue = 255,
|
||||
MinValueSec = 0,
|
||||
MidValueSec = 128,
|
||||
MaxValueSec = 255,
|
||||
DisplayName = "",
|
||||
Location = new Point(3, 120),
|
||||
Type = PadSchema.PadInputType.AnalogStick
|
||||
|
@ -172,7 +177,12 @@ namespace BizHawk.Client.EmuHawk
|
|||
new PadSchema.ButtonScema
|
||||
{
|
||||
Name = "P" + controller + " RStick X",
|
||||
MaxValue = 127,
|
||||
MinValue = 0,
|
||||
MidValue = 128,
|
||||
MaxValue = 255,
|
||||
MinValueSec = 0,
|
||||
MidValueSec = 128,
|
||||
MaxValueSec = 255,
|
||||
DisplayName = "",
|
||||
Location = new Point(210, 120),
|
||||
Type = PadSchema.PadInputType.AnalogStick
|
||||
|
|
|
@ -31,7 +31,11 @@ namespace BizHawk.Client.EmuHawk
|
|||
public Size TargetSize { get; set; } // Specifically for TargetedPair, specifies the screen size
|
||||
public string[] SecondaryNames { get; set; } // Any other buttons necessary to operate (such as the Y axis)
|
||||
public int MaxValue { get; set; } // For non-boolean values, specifies the maximum value the button allows
|
||||
public int MidValue { get; set; } // For non-boolean values, specifies the mid (zero) value for the button
|
||||
public int MinValue { get; set; } // For non-boolean values, specifies the minimum value the button allows
|
||||
public int MaxValueSec { get; set; }
|
||||
public int MidValueSec { get; set; }
|
||||
public int MinValueSec { get; set; }
|
||||
public object OwnerEmulator { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -67,7 +67,9 @@ namespace BizHawk.Emulation.DiscSystem.CUE
|
|||
/// <summary>
|
||||
/// Performs cue-intelligent logic to acquire a file requested by the cue.
|
||||
/// Returns the resulting full path(s).
|
||||
/// If there are multiple options, it returns them all
|
||||
/// If there are multiple options, it returns them all.
|
||||
/// Returns the requested path first in the list (if it was found) for more simple use.
|
||||
/// Kind of an unusual design, I know. Consider them sorted by confidence.
|
||||
/// </summary>
|
||||
public List<string> Resolve(string path)
|
||||
{
|
||||
|
@ -109,8 +111,13 @@ namespace BizHawk.Emulation.DiscSystem.CUE
|
|||
//match files with another extension added on (likely to be mygame.bin.ecm)
|
||||
cmp = string.Compare(fragment, targetFile, !caseSensitive);
|
||||
if (cmp == 0)
|
||||
results.Add(fi.FileInfo);
|
||||
|
||||
{
|
||||
//take care to add an exact match at the beginning
|
||||
if (fi.FullName.ToLowerInvariant() == Path.Combine(baseDir,path).ToLowerInvariant())
|
||||
results.Insert(0, fi.FileInfo);
|
||||
else
|
||||
results.Add(fi.FileInfo);
|
||||
}
|
||||
}
|
||||
var ret = new List<string>();
|
||||
foreach (var fi in results)
|
||||
|
|
|
@ -87,15 +87,22 @@ namespace BizHawk.Emulation.DiscSystem
|
|||
//an emulator frontend will likely just guess TurboCD if the disc is UnknownFormat
|
||||
//(we can also have a gameDB!)
|
||||
|
||||
var discView = EDiscStreamView.DiscStreamView_Mode1_2048;
|
||||
if (disc.TOC.Session1Format == SessionFormat.Type20_CDXA)
|
||||
discView = EDiscStreamView.DiscStreamView_Mode2_Form1_2048;
|
||||
|
||||
var iso = new ISOFile();
|
||||
bool isIso = iso.Parse(new DiscStream(disc, EDiscStreamView.DiscStreamView_Mode1_2048, 0));
|
||||
bool isIso = iso.Parse(new DiscStream(disc, discView, 0));
|
||||
|
||||
if (isIso)
|
||||
{
|
||||
var appId = System.Text.Encoding.ASCII.GetString(iso.VolumeDescriptors[0].ApplicationIdentifier).TrimEnd('\0', ' ');
|
||||
//NOTE: PSX magical drop F (JP SLPS_02337) doesn't have the correct iso PVD fields
|
||||
//if (appId == "PLAYSTATION")
|
||||
// return DiscType.SonyPSX;
|
||||
|
||||
//for example: PSX magical drop F (JP SLPS_02337) doesn't have the correct iso PVD fields
|
||||
//but, some PSX games (junky rips) don't have the 'licensed by string' so we'll hope they get caught here
|
||||
if (appId == "PLAYSTATION")
|
||||
return DiscType.SonyPSX;
|
||||
|
||||
if(appId == "PSP GAME")
|
||||
return DiscType.SonyPSP;
|
||||
|
||||
|
|
|
@ -65,16 +65,24 @@ namespace BizHawk.Emulation.DiscSystem
|
|||
|
||||
public DiscStream(Disc disc, EDiscStreamView view, int from_lba)
|
||||
{
|
||||
if (view != EDiscStreamView.DiscStreamView_Mode1_2048)
|
||||
throw new NotSupportedException("disc streams of not mode 1 are currently unsupported");
|
||||
|
||||
SectorSize = 2048;
|
||||
Disc = disc;
|
||||
NumSectors = disc.Session1.LeadoutLBA;
|
||||
dsr = new DiscSectorReader(disc);
|
||||
|
||||
//following the provided view
|
||||
dsr.Policy.UserData2048Mode = DiscSectorReaderPolicy.EUserData2048Mode.AssumeMode1;
|
||||
switch (view)
|
||||
{
|
||||
case EDiscStreamView.DiscStreamView_Mode1_2048:
|
||||
dsr.Policy.UserData2048Mode = DiscSectorReaderPolicy.EUserData2048Mode.AssumeMode1;
|
||||
break;
|
||||
case EDiscStreamView.DiscStreamView_Mode2_Form1_2048:
|
||||
dsr.Policy.UserData2048Mode = DiscSectorReaderPolicy.EUserData2048Mode.AssumeMode2_Form1;
|
||||
break;
|
||||
default:
|
||||
throw new NotSupportedException("Unsupported EDiscStreamView");
|
||||
}
|
||||
|
||||
|
||||
currPosition = from_lba * SectorSize;
|
||||
cachedSector = -1;
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
--Splatterhouse 2 (JPN) Collision box viewer v1.0
|
||||
--Author Pasky
|
||||
--For use with Bizhawk
|
||||
|
||||
|
||||
local cx = 0
|
||||
local player = false
|
||||
local attack = false
|
||||
local weapon = false
|
||||
local function camera()
|
||||
cx = mainmemory.read_u16_be(0x9E)
|
||||
end
|
||||
|
||||
local function drawAxis(x1,y1,x2,y2)
|
||||
local x = ((x2 - x1) / 2) + x1
|
||||
local y = ((y2 - y1) / 2) + y1
|
||||
local xrad = (x2 - x1) / 2
|
||||
local yrad = (y2 - y1) / 2
|
||||
gui.drawLine(x-xrad,y,x+xrad,y)
|
||||
gui.drawLine(x,y-yrad,x,y+yrad)
|
||||
end
|
||||
|
||||
local function touch_collision()
|
||||
|
||||
local A6 = bit.band(emu.getregister("M68K A6"),0xFFFF)
|
||||
local e = {0,0,0,0}
|
||||
local p = {0,0,0,0}
|
||||
|
||||
for i = 0,3,1 do
|
||||
e[i] = mainmemory.read_s16_be(A6 - 0x0A - (i * 2))
|
||||
p[i] = mainmemory.read_s16_be(A6 - 0x02 - (i * 2))
|
||||
end
|
||||
gui.drawBox(e[0]-cx,e[2],e[1]-cx,e[3],0xFFFF0000,0x40FF0000)
|
||||
if player == false then
|
||||
gui.drawBox(p[0]-cx,p[2],p[1]-cx,p[3],0xFF0000FF,0x400000FF)
|
||||
if mainmemory.read_u16_be(0xEA) > 0 then
|
||||
drawAxis(p[0]-cx,p[2],p[1]-cx,p[3])
|
||||
end
|
||||
player = true
|
||||
end
|
||||
end
|
||||
|
||||
local function attack_collision()
|
||||
local A6 = bit.band(emu.getregister("M68K A6"),0xFFFF)
|
||||
local a = {0,0,0,0}
|
||||
for i = 0,3,1 do
|
||||
a[i] = mainmemory.read_s16_be(A6 - 0x1A - (i * 2))
|
||||
end
|
||||
if attack == false then
|
||||
gui.drawBox(a[0]-cx,a[2],a[1]-cx,a[3],0xFFFFFFFF,0x40FFFFFF)
|
||||
attack = true
|
||||
end
|
||||
end
|
||||
|
||||
local function weapon_collision()
|
||||
local A6 = bit.band(emu.getregister("M68K A6"),0xFFFF)
|
||||
local w = {0,0,0,0}
|
||||
for i = 0,3,1 do
|
||||
w[i] = mainmemory.read_s16_be(A6 - 0x12 - (i * 2))
|
||||
end
|
||||
if weapon == false then
|
||||
gui.drawBox(w[0]-cx,w[2],w[1]-cx,w[3],0xFFFFFFFF,0x40FFFFFF)
|
||||
weapon = true
|
||||
end
|
||||
end
|
||||
|
||||
local function reset()
|
||||
player = false
|
||||
attack = false
|
||||
weapon = false
|
||||
end
|
||||
|
||||
event.onmemoryexecute(touch_collision,0x14508)
|
||||
event.onmemoryexecute(attack_collision,0x143E0)
|
||||
event.onmemoryexecute(weapon_collision,0x1420A)
|
||||
|
||||
while true do
|
||||
camera()
|
||||
emu.frameadvance()
|
||||
reset()
|
||||
end
|
|
@ -0,0 +1,84 @@
|
|||
--Splatterhouse 2 (USA) Collision box viewer
|
||||
--Author Pasky
|
||||
--For use with Bizhawk
|
||||
|
||||
|
||||
local cx = 0
|
||||
local player = false
|
||||
local attack = false
|
||||
local weapon = false
|
||||
|
||||
local function camera()
|
||||
cx = mainmemory.read_u16_be(0x9E)
|
||||
end
|
||||
|
||||
local function drawAxis(x1,y1,x2,y2)
|
||||
local x = ((x2 - x1) / 2) + x1
|
||||
local y = ((y2 - y1) / 2) + y1
|
||||
local xrad = (x2 - x1) / 2
|
||||
local yrad = (y2 - y1) / 2
|
||||
gui.drawLine(x-xrad,y,x+xrad,y)
|
||||
gui.drawLine(x,y-yrad,x,y+yrad)
|
||||
end
|
||||
|
||||
local function touch_collision()
|
||||
|
||||
local A6 = bit.band(emu.getregister("M68K A6"),0xFFFF)
|
||||
local e = {0,0,0,0}
|
||||
local p = {0,0,0,0}
|
||||
|
||||
for i = 0,3,1 do
|
||||
e[i] = mainmemory.read_s16_be(A6 - 0x0A - (i * 2))
|
||||
p[i] = mainmemory.read_s16_be(A6 - 0x02 - (i * 2))
|
||||
end
|
||||
gui.drawBox(e[0]-cx,e[2],e[1]-cx,e[3],0xFFFF0000,0x40FF0000)
|
||||
if player == false then
|
||||
gui.drawBox(p[0]-cx,p[2],p[1]-cx,p[3],0xFF0000FF,0x400000FF)
|
||||
if mainmemory.read_u16_be(0xEA) > 0 then
|
||||
drawAxis(p[0]-cx,p[2],p[1]-cx,p[3])
|
||||
end
|
||||
player = true
|
||||
end
|
||||
end
|
||||
|
||||
local function attack_collision()
|
||||
local A6 = bit.band(emu.getregister("M68K A6"),0xFFFF)
|
||||
local a = {0,0,0,0}
|
||||
for i = 0,3,1 do
|
||||
a[i] = mainmemory.read_s16_be(A6 - 0x1A - (i * 2))
|
||||
end
|
||||
if attack == false then
|
||||
gui.drawBox(a[0]-cx,a[2],a[1]-cx,a[3],0xFFFFFFFF,0x40FFFFFF)
|
||||
attack = true
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
local function weapon_collision()
|
||||
local A6 = bit.band(emu.getregister("M68K A6"),0xFFFF)
|
||||
local w = {0,0,0,0}
|
||||
for i = 0,3,1 do
|
||||
w[i] = mainmemory.read_s16_be(A6 - 0x12 - (i * 2))
|
||||
end
|
||||
if weapon == false then
|
||||
gui.drawBox(w[0]-cx,w[2],w[1]-cx,w[3],0xFFFFFFFF,0x40FFFFFF)
|
||||
weapon = true
|
||||
end
|
||||
end
|
||||
|
||||
local function reset()
|
||||
player = false
|
||||
attack = false
|
||||
weapon = false
|
||||
end
|
||||
|
||||
|
||||
event.onmemoryexecute(touch_collision,0x1494E)
|
||||
event.onmemoryexecute(attack_collision,0x14826)
|
||||
event.onmemoryexecute(weapon_collision,0x14650)
|
||||
|
||||
while true do
|
||||
camera()
|
||||
emu.frameadvance()
|
||||
reset()
|
||||
end
|
|
@ -148,6 +148,11 @@ EDD7A45A7F27E396B6D686F1861642D509863132 Datach - SD Gundam - Gundam Wars NES
|
|||
74218AAE93E4FEBFB2284BCF15811453418A2029 Datach - Yuu Yuu Hakusho - Bakutou Ankoku Bujutsu Kai NES board=MAPPER157
|
||||
6F3C65BD945FE13305A7A39D8CD884A5BF314A8F Datach - Crayon Shin Chan - Ora to Poi Poi NES board=MAPPER157
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;bad PSX (not many, so collecting here for now);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;licensed by sony... string erased:
|
||||
C94257E7 B Looney Tunes - Sheep Raider (STATiC Dump) PSX dh=00000000
|
||||
|
||||
#include gamedb_neshomebrew.txt
|
||||
#include gamedb_vs.txt
|
||||
#include gamedb_user.txt
|
||||
|
|
Loading…
Reference in New Issue