* Minor thumbnail improvements
- set standard name if only one entry is in the playlist
- use first database name for thumbnails if core has multiple
* Fix playlist thumbnail downloader
Playlist thumbnail downloader function was missed from the flexible
thumbnail name update, now it is added.
Auto savestate (and its optional thumbnail) is generated on core unload
(quit, netplay start, etc). This ends up using the task-queue, which in
many cases deadlocks and/or causes a crash due to its asynchronous
nature.
Given that this is a state that must be generated before quiting or
reloading the core, it makes no sense to use the task queue, it should
be a synchronous job like for instance SRAM saving.
This should fix#15248 (tested by @schmurtzm)
* Simplify autosave command function
* Simplify and split save and savestate logic
save.c contains "SRAM" saves and their logic, which uses no task/queue.
Add logic to handle 3 possible thumbnail names, in following order:
- most exact name derived from content file (same name, with .png extension)
- usual name derived from playlist (usually coming from database)
- shortened name up to first bracket, chopping off region/publisher etc. info
For local file system, names are checked always.
For thumbnail downloads, names are checked each time the item comes up
in the playlist, meaning that it may take going back and forth 3 times
for a thumbnail to appear. However, as a positive change, failed thumbnail
downloads are not repeated for the same playlist, which was not the case
earlier.
* Rename the `MIN_MATCH` defined by xdelta3 to `XD3_MIN_MATCH`
- zlib defines its own macro by that name, but with a different value
* Don't redefine `SIZEOF_ARRAY` in xdelta3 if it already exists
* Don't define ssize_t in xdelta3, rely on libretro's definition instead
* Enable xdelta3 support in MSVC 2015-2019
* Fix some invalid MSBuild condition syntax
* Always build xdelta with XD3_USE_LARGESIZET as 1
* Fix an `#if` in task_patch.c
* Enable `HAVE_XDELTA` in the UWP build
* First crack at fixing Xdelta support for Android
* 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
* Add some enums that were excluded by the cherry-pick
* 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
* Reintegrate xdelta support
* 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
* Slight cleanups
* Remove a stray comma that was hindering C89 builds
* Add XDelta support to CHANGES.md
* Change how the xdelta patch's name is computed
- To be in line with other recent refactoring
* Fix an incorrect merge
- Whoops, this part was from before I figured out how to get the size of a patched file
* Explain the song-and-dance behind computing a patched file's size
* Define some XDelta3-related constants to 0 on 32-bit platforms
* Adjust some Xdelta-related macro definitions
- Exclude the encoder, since we're not making patches
- Move some #defines to after inclusion of <stdint.h>, to fix undefined behavior
- Remove _WIN32_WINNT overrides, since they were for code that we're not using
* Fix Xdelta support
* Wrap an encoder-only function in `#if XD3_ENCODER`
* AI service rework
* File missing
* Fixed C89 build
* Fixed usage of inline for C89 build
* Fixed an overlay unloading bug
Made sure to unload the overlay on release and when the server returns empty values in automatic modes.
* Fixed forward decl (c89)
* Fixed OpenGL texture loading
Moved image display to the main thread for now
* Changed some formatting slightly
* Fixed struct variable order and put brackets on newlines
* Moved pointer, fixed retroarch.cfg, and replaced strlcat with strlcpy
* Fixed catenation issue
* Fixed a few other catenation issues
* Fixed one more concatenation issue
* Fixed concatenation issue
* Fixed a few other concatenation issues
* Fixed one more concatenation issue
* potential fix for parsing issue
---------
Co-authored-by: Xunkar <329857+xunkar@users.noreply.github.com>
* Enqueue replay record/playback until next frame
This fixes a bug where stdin commands activated via polling would
trigger replay record/playback in the middle of a frame, then input
checking would pull from them before the next frame came around---it
only makes sense to change the active replay in between frames, not
during them.
* fix comment syntax
Add keyboard overlay preset, keyboard submenu, and osk_toggle hotkey. Use overlay caching for osk_toggle.
For now, keyboard menu has only preset path, auto-scale toggle, and opacity.
Related fixes:
- input_keyboard_event: Don't check hotkey binds when device is RETRO_DEVICE_POINTER
- Add input_keymaps_translate_rk_to_ascii() for correct character input to input_keyboard_event
- input_overlay_poll: Delay clearing INPUT_OVERLAY_BLOCKED flag until there is no overlay input (Avoids stray input after osk_toggle)
- Send keyboard events for modifiers before other keys (for correct modifier+key input if hitboxes overlap)
Adds overlay_cache_ptr to keep a disabled overlay in memory when it's expected to be shown again.
Most input_overlay_deinit calls are replaced with input_overlay_unload, which caches the overlay unless initing/deiniting core or disabling overlays.
Loading a cached overlay is done as a swap, intended for osk_toggle.
Related updates:
- Fewer parameters for the overlay loading task. Use current settings when enabling an overlay
- Add input_overlay_check_mouse_cursor() to preserve show/hide mouse behavior
- Don't apply input_overlay_show_mouse_cursor in windowed mode (controlled by mouse grab only)
- Remove some dead code
Adds a new libretro interface for a core to send and receive custom network packets for implementing a communication based multiplayer system instead of using the default state serialization based multiplayer. Connection management is still done by the frontend while a core gains the ability to easily support tunneling of multi-console data communication traffic.
assignments for strings longer than 2 chars
- Use strlcpy concatenation instead of strlcat
- Make sure that what remains of iteration of the '_len' variable
for manual char assignment
is done in a safer way so mistakes are less possible
usage of strlcpy (when position/offset of previous strlcpy/snprintf call
is known. strlcat implementation in libretro-common makes implicit strlen
call, using strlcpy avoids this
* Reduce a bunch of local char variables by use of said clever usage,
should save up on local stack size usage
* 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"
* Add View feature
Add saving of a filter set in the Explore menu into a so called "View" file which then gets listed alongside playlists.
This also adds the ability to filter a category by range in the Explore menu and not just filter on exact matches.
* Menu improvements for explore and views
* Collapse ozone sidebar in view
* Fix problems with the sidebar in explore/view
* Ignore view files in the Qt playlists menu
* Add missing semicolon
* Support downloading thumbnails in views
* * Use flags for rarch_state
* Get rid of ^M linebreaks in retroarch_types.h
* Buildfixes for consoles
* (audio driver) use flags instead of bools
* (video) Use flags instead of bools
* Rewrite input driver state bools into flags
if condition variable is signaled, the loop is ran another
last time so we can do a final check/save before stopping the thread.
Old commit courtesy of tobiasjakobi
* Reduce snprintf and/or use them only for concatenating the
string formatting of numbers/values
* Reduce snprintfs
* Use snprintf for concatenation at parts
* * We don't need to NULL-terminate strings that get passed to strlcpy/strlcat
and friends
* Use snprintf for concatenation in certain instances
* Do away with some string intermediary copies where we can avoid it
* Fix warning unused variable
* * Reduce snprintf calls
* Rewrite snprintf calls into strlcpy where possible
* Use snprintf for concatenation when necessary
* Do away with some string intermediary copies in task_translation.c
* run_translation_service - make switch slightly smaller
(menu_displaylist.c) Some optimizations:
* Make sure val_d is never bigger than 16, it should just
contain a number. 16 is more than plenty (and probably too big even)
* Hose val_d out of loops if its value never changes inside the loop
* Attempt to avoid calling msg_hash_to_str inside loops unnecessarily
(snprintf) Try to reduce or simplify snprintf calls, only tend to
use it for processing integers/numbers and avoid it for regular
string concatenation (NOTE: we try to be a bit safer about it to
address earlier cited criticism, although we don't consider concatenating
3 or 4 characters at the end to be insecure)
(msg_hash_to_str) Try to avoid duplicate calls to the same localized
string when we can just cache the results once instead locally
Avoids the internal strlen call inside strdup, and strdup is a deprecated
function starting from MSVC2005 anyways.
NOTE: Do NOT pass STRLEN_CONST as n parameter to strldup, it needs to
be at least +1 character higher than the strlen return value of the same
string
* steam.c - cleanups:
* Use string_to_lower from libretro-common/stdstring.c instead of
its own version
* Some stylistic changes
* Rewrite strncpy calls into strlcpy/strlcat/manual assignment
* Make it C89 compliant
* Some unused variables
- unsafe strcpy/strcat/sprintf were used, so pass 'len' parameters
to detect_{system} functions so that we can use the safer strlcpy/strlcat
calls instead
- thanks to strlcat/strlcpy return values, we can do less string concatenations
and get the same results
- some other miscellanous cleanups
as deprecated.
* Use fill_pathname_join_special in the vast majority of cases where
we can ensure out_path is a new empty string
* Get rid of some extension concatenation with strlcat where encountered
* Some general cleanups with NULL termination of strings that get immediately
passed to strlcpy/strlcpy-adjacent functions