You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

161 lines
3.9 KiB
C#

using NetMFAPatcher.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NetMFAPatcher.Chunks
{
class AppHeader:ChunkLoader
{
int size;
int windowWidth;
int windowHeight;
int initialScore;
int initialLives;
public int numberOfFrames;
public override void Read()
{
reader = new ByteIO(chunk.chunk_data);
Logger.Log(reader.Tell().ToString());
size = reader.ReadInt32();
var flags = reader.ReadInt16();//raw,need convert
var new_flags = reader.ReadInt16();//read flags or no balls
var graphics_mode = reader.ReadInt16();//i am serious
var otherflags = reader.ReadInt16();//last chance to get balls back
windowWidth = reader.ReadInt16();
windowHeight = reader.ReadInt16();
initialScore = (int)(reader.ReadUInt32() ^ 0xffffffff);
initialLives = (int)(reader.ReadUInt32() ^ 0xffffffff);
var controls = new Controls(reader);
controls.Read();
//controls.Print();
var borderColor = reader.ReadBytes(4);
borderColor.Log(true,"X2");
numberOfFrames = reader.ReadInt32();
var frameRate = reader.ReadInt32();
var windowsMenuIndex = reader.ReadSByte();
}
public override void Print()
{
Logger.Log($"ScreenRes: {windowWidth}x{windowHeight}");
Logger.Log($"Score: {initialScore}, Lives: {initialLives}");
Logger.Log($"Frame count: {numberOfFrames}");
Logger.Log("");
}
}
public class Controls
{
public List<PlayerControl> items;
ByteIO reader;
public Controls(ByteIO reader) { this.reader = reader; }
public void Read()
{
items = new List<PlayerControl>();
for (int i = 0; i <4; i++)
{
var item = new PlayerControl(reader);
items.Add(item);
item.Read();
}
}
public void Print()
{
Logger.Log("Controls: ");
foreach(var item in items)
{
item.Print();
}
}
}
public class PlayerControl
{
int controlType = 0;
ByteIO reader;
Keys keys;
public PlayerControl(ByteIO reader) { this.reader = reader; }
public void Read()
{
keys = new Keys(reader);
controlType = reader.ReadInt16();
keys.Read();
}
public void Print()
{
Logger.Log("PlayerControl:");
Logger.Log($"ControlType: {controlType}");
keys.Print();
}
}
public class Keys
{
int up;
int down;
int left;
int right;
int button1;
int button2;
int button3;
int button4;
ByteIO reader;
public Keys(ByteIO reader) { this.reader = reader; }
public void Read()
{
up = reader.ReadInt16();
down = reader.ReadInt16();
left = reader.ReadInt16();
right = reader.ReadInt16();
button1 = reader.ReadInt16();
button2 = reader.ReadInt16();
button3 = reader.ReadInt16();
button4 = reader.ReadInt16();
}
public void Print()
{
Logger.Log($"Up: {up}");
Logger.Log($"Down: {down}");
Logger.Log($"Left: {left}");
Logger.Log($"Right: {right}");
Logger.Log($"Button1: {button1}");
Logger.Log($"Button2: {button2}");
Logger.Log($"Button3: {button3}");
Logger.Log($"Button4: {button4}");
}
}
}