react-gbajs v1.0.4
GBA emulator on your React project - easy and powerful to use!
Just three steps to set it up ✨
1 - Apply GbaProvider
import { GbaProvider } from 'react-gbajs'
const App = () => (
<GbaProvider>
...
</GbaProvider>
)2 - Get play function from GbaContext and call it with the game ROM
import { useContext } from 'react'
import { GbaContext } from 'react-gbajs'
const ButtonStartEmulator = () => {
const {
play,
} = useContext(GbaContext)
const startEmulator = () => {
const gameRom = getGameRom()
play({ newRomBuffer: gameRom })
}
return (
<button onClick={() => startEmulator()}>
Start Emulator
</button>
)
}3 - And render the emulator using the default export
import ReactGbaJs from 'react-gbajs'
const Emulator = () => (
<ReactGbaJs />
)Done! 🎉
Check a full example in /sample.
How it works
This package is a React wrapper for GBA.js.
GBA.js is vendored, with new features over the original version:
- save and restore state
- freeze address with a given value
Who is using
Features
GbaContext
GbaContext exports the following properties:
play({ newRomBuffer, restoreState }): boolean
Use this function to start or restart the emulator.
Pass at newRomBuffer the game's ROM to load it:
play({ newRomBuffer: myGameRom })You can also fill the property restoreState to restore to a previous state saved using saveState. If both are present, the emulator will be reset loading the ROM, and then restored to the given state:
play({ newRomBuffer: myGameRom, restoreState: someState })If you pass only restoreState, the previous ROM will be re-loaded and will start on the given state. If there is no ROM previously loaded, it won't work.
play({ restoreState: someState })saveState()
Return the serializable state of the emulator.
addFreezeAddress({ address: number, size: 8 | 16 | 32, value: number })
Freeze an address with the given value.
removeFreezeAddress(address: number)
Remove the freeze value on the given address.
frozenAddresses()
Return the list of the addresses frozen in the following format:
{
[address in number]: { size: 8 | 16 | 32, value: number }
}<ReactGbaJs />
<ReactGbaJs /> has the following props:
volume={number} (optional)
Should be a number between 0 (default, muted) or 1 (max volume).
onFpsReported={((fps: number) => void)} (optional)
Callback called every time that an FPS is reported.
scale={number} (optional)
Set the emulator scale. Default value is 1, which has width 240px and height 160px.
onLogReceived={(level: 'error' | 'warn' | 'stub' | 'info', message: string) => void} (optional)
Callback called every time that a log is received within the levels set as true by the prop watchLogLevels.
watchLogLevels={{ error?: boolean, warn?: boolean, stub?: boolean, info?: boolean }} (optional)
Set when the callback onLogReceived should be called. By default the value is { error: true }.
Contribution
1 - Clone this repository
> git clone git@github.com:macabeus/react-gbajs.git
> cd react-gbajs2 - Install its dependencies
> npm i3 - Build and watch the project
> npm run start4 - In another terminal window, go to the /sample project, install its dependencies, and then build and watch it
> cd sample
> npm i
> npm run startFinished! Now you can develop the package and test it in real-time 🎉
Thanks
@endrift for GBA.js. @felix.rodent for the logo.
2 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago