* Rewind during recording isn't visibly busted anymore but it doesn't rewind the replay properly during playback or record, inputs get clobbered; check frame pos/ptr stuff.
* Fix rewinding during movie recording and playback?
* change bsv file suffix to replay, update strings
* add trivial RPLY block to save states
* WIP rerecording support, doesn't load states properly yet--issue with checking identifiers?
* Fixed a type error to get time identifiers working right, ready for testing
* handle case where state without replay data is loaded during replay
* cleanups
* whitespace cleanup
* Cleanups, change replay file format magic, fix logic around future states
* Remove failed future message
* Add play-replay-from-slot command, fix load-state-from-slot to use given slot
* build fixes
* Fix race conditions in emscripten build and incorrect replay state incrementing
* Style fix for single line if
---------
Co-authored-by: Joseph C. Osborn <jcoa2018@pomona.edu>
* Add bsv replay controls (not yet fully implemented), remove toggle
see notes in task_movie.c, make sure command.c calls the right
functions, check retroarch.c and other todos.
bsv files are also now stored with states, not saves.
* Compilation fixes
* Added command impls for play and record replay, and some code in load state to do the right thing there
* Guard some parts of the new code with HAVE_BSV_MOVIE
* wip, menu fixes
* more menu fixes, osd for movie errors, halt recording properly
* Menu and label fixes
* move bsvs to own file suffix series under savestates, fix recording and playback command validity checks
* Fix replay autoincrement
* fix endif placement, whoops
---------
Co-authored-by: Joseph C. Osborn <jcoa2018@pomona.edu>
Prevent double free and null dereference when the controller is quickly reconnected.
Handle error when controller device query returns null instead of crashing.
This relaxes a warning about save state sizes for cores like
dosbox-pure that don't report accurate save state sizes.
Before, the warning would be issued and the state would not be loaded;
now, the warning is issued and the state is loaded anyway.
Co-authored-by: Joseph C. Osborn <jcoa2018@pomona.edu>
* BSV ergonomics improvements
- Date stamp toggled recordings instead of overwriting or using save
slot number
- Properly stop movie on playback EOF; also pause emulation
- Add recording flag to match playback flag in bsv state enum
- Rename bsv "movie path" to "movie auto path" to clarify role
- Allow stopping movie playback before EOF using record toggle hotkey
---------
Co-authored-by: Joseph C. Osborn <jcoa2018@pomona.edu>
* Allow for both -e and -R to start a BSV file recording at a state
The key issue is that loading a state takes some time, and the BSV
recording shouldn't start until that's done.
The minimal patch for this would just be a change to runloop.c which
moves movie initialization after entry state loading, throwing in a
task_queue_wait(). This makes for some awkward repeated autoload OSD
messages and doesn't solve the underlying issue.
Most of this change puts BSV recording start/stop into tasks, like
saving and loading are tasks; this was important to centralize BSV
operations a bit more and is the first part of a refactoring towards
more robust input recording. The necessary wait is introduced in the
begin-recording callback.
Co-authored-by: Joseph C. Osborn <jcoa2018@pomona.edu>
* Add xdelta in deps
* Include <assert.h> in xdelta3.h
- Otherwise the static_assert calls can fail
* Build xdelta3 in Makefile.common
* Add xdelta support to the softpatching infrastructure
- The patching itself isn't fully implemented yet
* Adjust how xdelta3.h checks the sizes of some types
- Now checks max values instead of relying on autotools
* First crack at xdelta softpatching support
- There may be undiscovered edge cases or bugs
* Add xdelta in deps
* Include <assert.h> in xdelta3.h
- Otherwise the static_assert calls can fail
* Build xdelta3 in Makefile.common
* Add xdelta support to the softpatching infrastructure
- The patching itself isn't fully implemented yet
* Adjust how xdelta3.h checks the sizes of some types
- Now checks max values instead of relying on autotools
* First crack at xdelta softpatching support
- There may be undiscovered edge cases or bugs
* Remove trailing commas from the enums I modified
- C89 doesn't allow them
* Remove stray whitespace
* Adjust SIZE macros in xdelta3.h
- Move them outside the XD3_USE_LARGEFILE64 block
- Add more SIZE declarations
- Make SIZEOF_UNSIGNED_LONG_LONG contingent on the presence of ULLONG_MAX
* Add some RARCH_DBG calls for xdelta patching
* Enable support for xdelta's secondary compressors
- Necessary for some patches
* Fix some format specifiers
* Remove unnecessary files from xdelta
* Include xdelta3.h with a relative path
* Add xdelta3 headers to HEADERS variable
* Gate Xdelta support behind HAVE_XDELTA
- HAVE_XDELTA is on by default
- HAVE_PATCH is still required for HAVE_XDELTA to be meaningful
- Support is mostly contingent on the availability of LZMA
- Anything modern should be okay
- Legacy platforms (e.g. DOS) may need to have Xdelta support disabled
- At least until some other solution can be found
* Disable HAVE_XDELTA on platforms where the build recently failed
- These come from looking at the failed builds on GitHub
- These are guesses, and may turn out to be wrong
* Fix a potential memory leak
- Whoops, looks like I need to call two cleanup functions
- xd3_close_stream exists separately from xd3_free_stream
* Split the --help printout for --xdelta into its own strlcat call
- GCC was complaining about #ifdefs within macro arguments being non-portable
* Fix some incorrect printf format specifiers
* Modify Xdelta to adhere to C89
- It's mostly using RetroArch's INLINE macro instead of the inline keyword
Allows stretching hitboxes and handling their overlap
reach_up, reach_down, reach_left, reach_right:
- Stretches in one direction:
reach_x, reach_y
- Stretches symmetrically
exclusive:
- If true, blocks input from overlapped hitboxes
range_mod_exclusive:
- Similar, but only applies when this hitbox is extended by range_mod
- After range_mod takes effect, has priority over 'exclusive'
E.g. This creates a D-Pad area and extends its hitbox left & right 50%, up 15%, and down 30%. Then applies range_mod_exclusive:
overlay0_desc0 = "dpad_area,0.15,0.57,rect,0.166228,0.295516"
overlay0_desc0_reach_x = 1.5
overlay0_desc0_reach_up = 1.15
overlay0_desc0_reach_down = 1.3
overlay0_desc0_range_mod = 2.0
overlay0_desc0_range_mod_exclusive = true
- New descriptors: 'dpad_area' and 'abxy_area'
- Each has a diagonal sensitivity setting, 100% being 8-way symmetry
- Buttons can be redefined in the cfg file
E.g. This would create a d-pad area, then redefine it to use analog directions:
overlay0_desc0 = "dpad_area,0.85,0.57,rect,0.166228,0.295516"
overlay0_desc0_up = "r_y_minus"
overlay0_desc0_down = "r_y_plus"
overlay0_desc0_left = "r_x_minus"
overlay0_desc0_right = "r_x_plus"