This commit is contained in:
adelikat 2015-07-20 20:10:04 -04:00
commit dbd545c0cd
13 changed files with 397 additions and 100 deletions

View File

@ -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:

View File

@ -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);

View File

@ -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);
}
}
}

View File

@ -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();
}
}
}

View File

@ -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

View File

@ -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

View File

@ -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; }
}
}

View File

@ -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)

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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