-
Notifications
You must be signed in to change notification settings - Fork 1
Partial changelog for ApiHawk
YoshiRulz edited this page Sep 21, 2025
·
62 revisions
2.11 to 2.11.1 dev (note: changes to ApiHawk in dev builds may not make it into the next release):
- (none yet)
2.10 to 2.11:
- Renamed
ICommApi.HTTP.ExecPosttoExecPostAsForm. commit - Relaxed type of
ICommApi.HTTP.Post'scontentparam, and added an optional parambool sendAdvanceRequest. commit 1, commit 2
2.9.1 to 2.10:
- meta: The .NET 8 SDK is now required for working with BizHawk. The VS installer will automatically include this with VS2022 updates.
- Fix confusing failures when an
ApiContainerprop is accidentally marked with[RequiredApi]/[OptionalApi]. commit - Ext. tools now receive
ToolFormUpdateType.Generalevents regularly while paused (and while unpaused! you should have been checking the enum anyway). commit- If you're subclassing
ToolFormBase, this will have no impact on your existing code, but you can choose to overrideGeneralUpdateto make use of it.
- If you're subclassing
- Fix signature of
IMemoryApi.WriteFloat(thevalueparam is nowfloatand notdouble—the implementation was converting it to afloatanyway). commit - Add an overload
IGuiApi.WithSurface(DisplaySurfaceID, Action<IGuiApi>)and deprecate the old one. commit- For the time being, there will be no difference between using the lambda parameter as instructed, and discarding it and continuing to make calls to whatever
IGuiApiinstance you were using.
- For the time being, there will be no difference between using the lambda parameter as instructed, and discarding it and continuing to make calls to whatever
- Remove the deprecated
IGameInfoApilibrary. commit - Remove the deprecated attributes
[RomWhitelist],[SingleRom(CoreSystem, string)], and[SingleSystem(CoreSystem)]. commit - Rewrite most of
GuiApi(the implementation ofIGuiApi). Parity with the old implementation is a goal, but there may be bugs. TODO link commit(s)
2.9 to 2.9.1:
- (no changes)
2.8 to 2.9:
- Change return type of
IEmulationApi.GetRegistersandIMovieApi.GetHeaderfromDictionarytoIReadOnlyDictionary, and change return type ofIMovie.GetCommentsandIMovie.GetSubtitlesfromListtoIReadOnlyList. commit - Remove useless yield methods from
IEmulationApi. commit - Merge
IGameInfoApiintoIEmulationApi.IGameInfoApiwill remain with a deprecation warning for a while. commit - Deprecate constructors for
ExternalToolApplicability.*attributes which take aCoreSystemenum in favour of new overloads which take astring. commit- You should use the constants in
VSystemID.Raw, like in the HelloWorld sample (see linked commit), rather than string literals.
- You should use the constants in
- Rename
RomWhitelisttoRomList. commit - Change return type of
IEmulationApi.Disassembleto(string, int)tuple. commit - Change
SocketServer.SendScreenshotto include the same length prefix in its sent message asSendString. commit - Add
IUserDataApi.Keys. commit - Change the return type of
IMemoryApi.ReadByteRangefromList<byte>toIReadOnlyList<byte>, the type of thememoryblockparam ofIMemoryApi.WriteByteRangefromList<byte>toIReadOnlyList<byte>, and the return type ofIMemoryApi.GetMemoryDomainListfromList<string>toIReadOnlyCollection<string>. commit - Change the return type of
IEmuClientApi.LoadState,IEmuClientApi.OpenRom,ISaveStateApi.Load, andISaveStateApi.LoadSlotfromvoidtobool. commit 1, commit 2 - Deprecate IGuiApi.DrawText in favour of new method PixelText (to match Lua). commit
- Change
ApiContainer.MemoryEventsandApiContainer.MemorySaveStateto returnnullinstead of throwing if the loaded core doesn't support the necessary features. commit
2.7 to 2.8:
- meta: The .NET 6 SDK is now required for working with BizHawk. The VS installer will automatically include this with VS2019 updates.
- Use
int?inIJoypadApi.SetAnalogoverloads (instead ofobject) to matchSetoverloads. commit - Add optional
durationparam toIGuiApi.AddMessage(overrides config for a single call). commit - Add
IInputApi.GetPressedButtons, deprecatingIInputApi.Get. commit - Add
IInputApi.GetPressedAxes. commit - Change return type of
IInputApi.GetMousefromDictionarytoIReadOnlyDictionary. commit
2.6.3 to 2.7:
- Add
IEmuClientApi.GetApproxFramerate. commit - Encode screenshots as JPEG if file extension is
".jpg". commit - Add
VSystemID.Rawclass (to complement theCoreNamesclass). You can use it when applying[ExternalToolApplicability.*]to your tool, or when callingIEmulationApi.GetSystemId. commit - Replace
Dictionary/IDictionarywithIReadOnlyDictionaryin these methods' signatures:IGameInfo.GetOptions,IJoypadApi.Get,IJoypadApi.GetImmediate,IJoypadApi.GetWithMovie,IJoypadApi.Set,IJoypadApi.SetAnalog, andIMovieApi.GetInput. commit - Merged various
IGameInfoApimethods into a singleIGameInfo? GetGameInfo()which then has the same properties exposed. commit
2.6.2 to 2.6.3:
- Add
ICommApi.MMF.ReadBytesFromFile. commit - Allow using most of
ICommApi.MMFw/o passing--mmfon the command-line. commit
2.6.1 to 2.6.2:
- Remove methods
IEmuClientApi.GetInputandIEmuClientApi.SetInput. If you were using these, you may find a lot of missing types when updating.IInputApi(host) andIJoypadApi(virtual), which were the preferred choice, are now the only public APIs for input. commit - Change encoding used by
SocketServerfrom ASCII to UTF-8. commit - Add params to
SocketServer.SendStringandSocketServer.ReceiveMessagefor overriding the default encoding. commit - Change
SocketServer.SendStringto prefix the sent message with length, and changeSocketServer.ReceiveMessage(now renamedReceiveString) to expect the same. commit- You can still use
SocketServer.SendBytesto send arbitrary messages, though at that point you might as well ditch the whole wrapper. It's only needed for Lua. -
SocketServer.SendScreenshotwas missed, so it does not prefix the sent message with length, though it does expect the received message to be prefixed.
- You can still use
- Refactor some
abstractproperties inIToolForm(superinterface ofIExternalToolForm). commit- This is to make the semantics of "hidden"/"background" tools clearer. If you plan making your tool run in the background, look to the sole example of RAM Watch (in the linked commit).
- If your tool has
EmuHawk.ToolFormBaseas a supertype, no change is required.
2.6 to 2.6.1:
- (no changes)
2.5.2 to 2.6:
- meta: The .NET 5 SDK is now required for working with BizHawk. The VS installer will automatically include this with VS2019 updates.
- Add get-only prop
IToolApi.AvailableToolsof typeIEnumerable<Type>. commit - Allow disabling frame skip by passing
0toIEmuClient.FrameSkip. commit - Remove parameter from internal-use method
IEmuClient.OnRomLoaded, and remove internal-use methodIEmuClient.UpdateEmulatorAndVP. commit - Allow ext. tools to have a single prop
ApiContainer? _apiContainerwhich is set by EmuHawk, so multiple[RequiredApi]props can be replaced with one. commit - Change
Type IToolApi.GetTool()toIToolForm IToolApi.GetTool()(it now returns the tool instance as expected, instead of the type). commit - Add get-only prop
IMemoryApi.MainMemoryNameof typestring. As the main memory domain isn't always the first one, using this prop will guarantee using the correct domain (this brings feature-parity with Lua as themainmemorylib has always done this). commit - Removed
ClientApi(the static one). Make sure you're using an instance ofIEmuClientApi! commit - Removed
[BizHawkExternalTool]and[BizHawkExternalToolUsage](previously deprecated in favour of[ExternalTool]and[ExternalToolApplicability.*]). commit - Added an enum param to most
IGuiApimethods, which is the surface on which to draw. Passing this for every draw call is a bit annoying though, so there's also... commit - Added
IGuiApi.WithSurface, which takes an enum (the surface) and anAction(put your draw calls in here, leaving the surface as the defaultnull). commit - Deprecated
IGuiApi.DrawNew,IGuiApi.DrawFinish, andIGuiApi.HasGUISurface. commit
2.5.1 to 2.5.2:
- (no changes)
2.5 to 2.5.1:
- Change signatures of some
IJoypadApimethods to useIDictionary<,>instead ofDictionary<,>. commit - Change signatures of some
IJoypadApimethods to useint?instead offloat?orfloat. commit
2.4.2 to 2.5:
-
IToolForm(whichIExternalToolForminherits from) was changed so all the update callbacks are now consolidated. This should make it easier to manage once-per-frame processing. commit 1, commit 2 - You can now ship dependencies! A
string[]parameterLoadAssemblyFileswas added to[ExternalTool], just put the filenames in there. Make sure your users put the extra assemblies in the ext. tool dir alongside your tool before they try loading it. commit - (no commits for these sorry, they're all over the place)
- Rename API types:
-
IComm⟹ICommApi -
IEmu⟹IEmulationApi -
IGameInfo⟹IGameInfoApi -
IGui⟹IGuiApi -
IInput⟹IInputApi -
IInputMovie⟹IMovieApi -
IJoypad⟹IJoypadApi -
IMem⟹IMemoryApi -
IMemEvents⟹IMemoryEventsApi -
IMemorySaveState⟹IMemorySaveStateApi -
ISaveState⟹ISaveStateApi -
ISql⟹ISQLiteApi -
ITool⟹IToolApi -
IUserData⟹IUserDataApi
-
- Replace
ClientApiwithIEmuClientApi(which is anIExternalApi; a staticClientApiis still present to make migration easier). - Remove most of
ICommApi(fmr.IComm), and expose the helper classes which were previously used in their implementations. - As usual, a bunch of types were moved around (mostly from
BizHawk.Client.EmuHawktoBizHawk.Client.Common). You may have to update yourusings or<Reference/>s.
- Rename API types:
- Add overloads for
IGuiApi.DrawImage/IGuiApi.DrawImageRegion(fmr.IGui.DrawImage/IGui.DrawImageRegion) that takeImages instead of filenames. commit -
IMovieApi.Length(fmr.IInputMovie.Length) now returnsintinstead ofdouble. commit - Remove
IEmuClientApi.UnpauseEmulation(fmr.ClientApi.UnpauseEmulation). It was a duplicate ofIEmuClientApi.Unpause, so use that. commit - Rename
IEmuClientApi.SetExtraPadding(fmr.ClientApi.SetExtraPadding) toSetClientExtraPadding. commit - Remove
IEmuClientApi.CloseEmulatorWithCode(fmr.ClientApi.CloseEmulatorWithCode).IEmuClientApi.CloseEmulatornow takes an optional exit code. commit - Remove
IEmuClientApi.RunningSystem(fmr.ClientApi.RunningSystem). This probably won't affect anyone, asIEmulationApi.GetSystemIdis more accurate and has been available for a while. commit
2.4 to 2.4.2:
- meta:
BizHawk.Client.EmuHawkand some other assemblies were updated from .NET Framework 4.6.1 to 4.8; however most are now .NET Standard 2.0 (this is only relevant if your VS installation is older and is missing the new targeting packs) - some ApiHawk types changed namespace to either
BizHawk.Client.CommonorBizHawk.Client.EmuHawk(theBizHawk.Client.ApiHawknamespace and assembly was removed entirely): commit 1, commit 2 - attributes are nicer; using a new attribute, IETFs can be called anything: commit 1, commit 2, commit 3
- IETFs can be in any namespace
- return type of
IEmu.PutSettingswas changed fromboolto a flag-type enumPutSettingsDirtyBits - return types of
IInput.GetMouse,IInputMovie.GetInput,IJoypad.Get,IJoypad.GetImmediate, andISql.ReadCommandnow useobjectinstead ofdynamic - return type of
IGui.GetPaddingwas changed fromPaddingtoValueTuple<int, int, int, int> - some bugs were fixed idk check the commit history