/// <summary> /// Patch object data for new color values. /// </summary> public void PatchObjects() { var playerActor = RomData.MMFileList[38]; PatchHumanEnergyColors(ObjUtils.GetObjectData(1)); PatchDekuEnergyColors(playerActor.Data); PatchGoronEnergyColors(ObjUtils.GetObjectData(0x14C)); PatchZoraEnergyColors(ObjUtils.GetObjectData(0x14D)); PatchFierceDeityEnergyColors(playerActor.Data); }
private Character DeterminePlayerModel() { var data = ObjUtils.GetObjectData(0x11); if (data[0x107] == 0x05) { return(Character.LinkMM); } if (data[0x107] == 0x07) { return(Character.LinkOOT); } if (data[0xC6] == 0x02) { return(Character.AdultLink); } if (data[0xC5] == 0x15) { return(Character.Kafei); } throw new InvalidOperationException("Unable to determine player's model."); }
private void WriteTunicColor() { Color t = _settings.TunicColor; byte[] color = { t.R, t.G, t.B }; var otherTunics = ResourceUtils.GetAddresses(Values.AddrsDirectory + "tunic-forms"); TunicUtils.UpdateFormTunics(otherTunics, _settings.TunicColor); var playerModel = DeterminePlayerModel(); var characterIndex = (int)playerModel; var locations = ResourceUtils.GetAddresses($"{Values.AddrsDirectory}tunic-{characterIndex}"); var objectIndex = playerModel == Character.Kafei ? 0x1C : 0x11; var objectData = ObjUtils.GetObjectData(objectIndex); for (int j = 0; j < locations.Count; j++) { ReadWriteUtils.WriteFileAddr(locations[j], color, objectData); } ObjUtils.InsertObj(objectData, objectIndex); }