public void AddObjectGeolayoutScript(byte modelID, Geolayoutscript script) { dicGeolayoutScripts.Add(modelID, script); AddScriptNode( (int)modelID, $"{TextFromValue(modelID, charCount:3)} ({TextFromValue(script.FirstOrDefault()?.RomAddress ?? 0)})", nGeolayoutScripts.Text + modelID.ToString(), nGeolayoutScripts); }
public void Read(RomManager rommgr, int segAddress) { if (!Closed) { Close(); } Closed = false; Geolayoutscript.Clear(); Geopointers.Clear(); GeopointerOffsets.Clear(); Geolayoutscript = new Geolayoutscript(); Geolayoutscript.Read(rommgr, segAddress); var ToRemove = new List <GeolayoutCommand>(); int cIndex = 0; var curMdlScale = System.Numerics.Vector3.One; var curMdlOffset = System.Numerics.Vector3.Zero; foreach (GeolayoutCommand fec in Geolayoutscript) { var c = fec; var switchExpr = c.CommandType; switch (switchExpr) { case GeolayoutCommandTypes.CameraPreset: CameraPreset = (CameraPresets)cgCameraPreset.GetCameraPreset(ref c); break; case GeolayoutCommandTypes.x18: var switchExpr1 = (uint)cgx18.GetAsmPointer(ref c); switch (switchExpr1) { case 0x802761D0: { EnvironmentEffect = (EnvironmentEffects)cgx18.GetParam1(ref c); break; } } break; case GeolayoutCommandTypes.LoadDisplaylist: if (Geopointers.Count == 0) { IndexForGeopointers = cIndex; } Geopointers.Add(new Geopointer(cgLoadDisplayList.GetDrawingLayer(ref c), cgLoadDisplayList.GetSegGeopointer(ref c), curMdlScale, curMdlOffset)); break; } cIndex += 1; } // Remove Geopointercommands RemoveOldGeopointerCommands(); }
public void AddAreaGeolayoutScript(byte areaID, Geolayoutscript script) { int id = areaID * -1; dicGeolayoutScripts.Add(id, script); AddScriptNode( id, $"Area {TextFromValue(areaID)} ({TextFromValue(script.FirstOrDefault()?.RomAddress ?? 0)})", nGeolayoutScripts.Text + id.ToString(), nGeolayoutScripts); }
public void Write(Stream s, int StartOffset) { NewGeoOffset = StartOffset; var commandsToRemove = new List <GeolayoutCommand>(); int tIndexForGeoPointer = IndexForGeopointers; // Einstellungen übernehmen int currentPosition = 0; foreach (GeolayoutCommand fec in Geolayoutscript) { var c = fec; var switchExpr = c.CommandType; switch (switchExpr) { case GeolayoutCommandTypes.CameraPreset: cgCameraPreset.SetCameraPreset(ref c, Conversions.ToByte(CameraPreset)); break; case GeolayoutCommandTypes.x18: var switchExpr1 = cgx18.GetAsmPointer(ref c); switch ((GeoAsmPointer)switchExpr1) { case GeoAsmPointer.EnvironmentEffect: { cgx18.SetParam1(ref c, (ushort)EnvironmentEffect); break; } } break; } currentPosition += (int)c.Length; // If Not IndexForGeopointersFound Then IndexForGeopointers += 1 } // Insert Geopointers foreach (Geopointer g in Geopointers) { var tcommand = new GeolayoutCommand(new byte[] { 0x15, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }); cgLoadDisplayList.SetDrawingLayer(ref tcommand, g.Layer); cgLoadDisplayList.SetSegGeopointer(ref tcommand, g.SegPointer); Geolayoutscript.Insert(tIndexForGeoPointer, tcommand); tIndexForGeoPointer += 1; } // Write Geolayout to ROM Geolayoutscript.Write(s, StartOffset); // Remove Geopointercommands again RemoveOldGeopointerCommands(); }
private void RemoveOldGeopointerCommands() { var ToRemove = new List <GeolayoutCommand>(); foreach (GeolayoutCommand c in Geolayoutscript) { if (c.CommandType == GeolayoutCommandTypes.LoadDisplaylist) { ToRemove.Add(c); } } foreach (GeolayoutCommand cmd in ToRemove) { Geolayoutscript.Remove(cmd); cmd.Close(); } }