Items in each list are organized with the top item being the priority with the exception of the Possible features list, which is just a collection of ideas.
If you are interested in learning more about Delta's development, follow @rileytestut on Twitter or become a Patron!
You can also find people to answer questions at the r/Delta_Emulator subreddit or the subreddit's Discord.
If you would like to provide feedback about Delta, click this form.
If you would like to report a bug, follow the instructions on this form.
Items in each list are organized with the top item being the priority with the exception of the Possible features list, which is just a collection of ideas.
If you are interested in learning more about Delta's development, follow @rileytestut on Twitter or become a Patron!
You can also find people to answer questions at the r/Delta_Emulator subreddit or the subreddit's Discord.
If you would like to provide feedback about Delta, click this form.
If you would like to report a bug, follow the instructions on this form.
@rileytestut1 's Delta: https://github.com/rileytestut/Delta
@lit_ritt 's Ignited https://github.com/LitRitt
@lonkle 's Deltroid: https://github.com/lonkelle/deltroid
Requires adding âseriesâ to the skin spec and if the current skin doesn't have this value, then this button will swap thru all installed skins and save them to the game being played.
This will allow for a `skin creator` to make a âsetâ theme for all consoles with the same label and users could install the bundle of skins at once and even - Delta could allow user to theme all their skins globally (choosing the âLit Orange Skin Seriesâ for example). Obviously every game gets its own skin choice so this is all about the âdefaultâ skins a game uses.
Skin Spec Update Cards
⢠https://trello.com/c/TLmArHhD/210-enhancement-allow-for-collections-in-the-skin-spec-so-a-user-can-change-multiple-consoles-skins-at-once?menu=filter&filter=skin
⢠https://trello.com/c/42VJujoS/87-ehancement-custom-skins-that-appear-when-a-controller-is-connected?menu=filter&filter=skin
⢠https://trello.com/c/dfDfkXdR/190-enhancement-a-special-dark-mode-flag-skin-in-the-spec-that-can-be-toggled-via-the-in-game-settings-menu?menu=filter&filter=skin
⢠https://trello.com/c/GfwUFmAW/209-enhancement-add-to-the-deltacore-spec-an-enhanced-version-of-all-default-skins-utilizing-all-special-buttons?menu=filter&filter=skin
PR Link: https://github.com/rileytestut/Delta/pull/131
I would say this also needs a "special" skin button to auto-open the Rewind States list, but the way Ian coded it actually makes the Rewind State page button-mappable via https://trello.com/c/BTvdcooT/237-enhancement-be-able-to-map-gamepad-buttons-to-in-game-menu-items
PR Link:
Backbone Controller
New Buttons: R3, L3, Options, Home (hold orange backbone button)
PS4 Controller
New Buttons: Playstation Button, Share, Trackpad button, Analog Triggers
Xbox Controller
New Buttons: Xbox Button, Analog Triggers, Select
As the Backbone can only be played in one singular orientation during gameplay, the orientation of the screen output should lock to left horizontal. The out of game Delta interfaces should honor the actual device orientation however since many users keep the Backone attached while using their phone right side up (at least I do a lot) to choose the game and settings.
PR: Ian Clawson
Bugfix: Joelle Stickney (added the condition so that it only locks when in left landscape rather than just locks the orientation as soon as the game starts or resumes).
TODO 1:: Current code doesnât check the external controller for the âconnectedToLightningâ flag even tho it's not called that, it's called something slightly different and I couldn't get it to work.
Apple documentation of boolean: https://developer.apple.com/documentation/gamecontroller/gccontroller/1458868-isattachedtodevice
var isAttachedToDevice: Bool { get }
Where it needs to go: https://github.com/lonkelle/Deltroid/blob/440c748709ec971f0e2eba6203660b93613002b8/Delta/Emulation/GameViewController.swift#L175
TODO 2: This ticket doesn't automatically rotate to the correct orientation, forcing left landscape orientation on the start of game (but does lock it as soon as it lands on the right orientation). This is technically possible, but is it really worth it? Only you, who are reading this rn, can decide.
TODO 3: There should be a toast notification for this like the gyro one in the screenshot on this card. I can't remember if I even tried to make this happen, but it's gotta be just copy and pasting whatever code toasts the gyro string.
FIX: When controller isnât connected it should rotate whenev.
PR Link:
PR Link:
Reference:
https://discord.com/channels/625766896230334465/625766896695771137/799696189275635743 (Patron Discord)
When user is at the per-game settings screen, or the global settings screen, there should be a switch for "Use Enhanced Version of Skin".
Maybe skin makers could use this in the spec too - but it seems more like a "built-in default skins" enhancement to me.
Series of Skin Spec Updates
⢠https://trello.com/c/TLmArHhD/210-enhancement-allow-for-collections-in-the-skin-spec-so-a-user-can-change-multiple-consoles-skins-at-once?menu=filter&filter=skin
⢠https://trello.com/c/42VJujoS/87-ehancement-custom-skins-that-appear-when-a-controller-is-connected?menu=filter&filter=skin
⢠https://trello.com/c/dfDfkXdR/190-enhancement-a-special-dark-mode-flag-skin-in-the-spec-that-can-be-toggled-via-the-in-game-settings-menu?menu=filter&filter=skin
⢠https://trello.com/c/GfwUFmAW/209-enhancement-add-to-the-deltacore-spec-an-enhanced-version-of-all-default-skins-utilizing-all-special-buttons?menu=filter&filter=skin
Right now, Delta/Deltroid only properly work when compiled straight to an iOS device. It would be fantastic for speeding up UI work if we could build and test in the Simulator as well.
Getting Simulator support on x86 Macs is relatively straightforward, however Delta relies on a few precompiled frameworks that don't support arm64 Macs. These libraries need to be either removed, or updated with later versions that do.
Tasks:
Systems build script to automatically build for iOS or Simulatorâ
Just like in GBA4iOS.
PR Link #1: https://github.com/rileytestut/Delta/pull/119
PR Link #2: https://github.com/rileytestut/DeltaCore/pull/31
Optimize for AirPlaying games. For example, when a device is displaying its screen through airplay, it adjusts to fit the screen size and hides the touch controls on the display.
PR Link: https://github.com/rileytestut/Delta/pull/126
Flows well into this card: https://trello.com/c/QsgLrwyd
This should definitely be a button option for this card: https://trello.com/c/JgDxONsL
PR Link: https://github.com/rileytestut/Delta/pull/100https://github.com/rileytestut/DeltaCore/pull/17
Should have been overridden by @ianclawson's PR for reducing threshold for analog to d-pad translations (?).
But maybe this could be used as a reference for this card:
PR Link: https://github.com/rileytestut/Delta/pull/100
This is NOT ready to be merged. As it is only half of the toggle switch code. The PR simply adds the "grey" dark mode. Work would have to be done to add a toggle switch in settings and switch between OLED (which is what we have now, as you can see from on the left side of the screenshot) and "grey) (right side of the screenshot).
This occurs when you have an in-game save and you either load or save a state. It rewrites the â.savâ file and corrupts it somehow. This happens with no other system and is game breaking if someone depends on in-game saves and just so happens to save / load a state at the wrong time (theyâll lose their in-game saves).
Just disconnect and reconnect an external controller while in game until the skin disappears but the controller doesnât do anything anyway. The only way to fix this is to go to Delta Settings and tap on the external controller (which is already automatically checked off despite not working) and once you manually tap it, it starts working in all of Delta.
Screenshot is to show what the Delta settings look like when an external controller canât control anything in Delta but it is still detected so the skin isnât displayed.
Tapping in Backbone one in the screenshot will remove the checkmark from the device leave screen and come back) as well as make the âCustomize Buttons...â button appear which is what it should look like. This problem happens intermittently - not sure about the conditions.
To test this, copy Mega Man 9âs first box art result from Google Search and try to paste it: https://www.google.com/search?q=mega+man+9+nes+box+art&prmd=isvxn&sxsrf=APq-WBum_sZxZ2yWjvNwdfijFq-Jee1NWQ:1643932640526&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiWycqo3uT1AhXfJzQIHeL7CqYQ_AUoAXoECAIQAQ&biw=375&bih=629&dpr=3
Contra uses this to lock while shooting and the weird part is, sometimes Delta thinks mode is being pressed and other times it doesnât depending on when you save your state and load it.
Sunset Riders also requires it, if you want to play multiplayer. Single player works fine without holding it down, I think, but you can't even select 2 player mode unless you held down Mode at boot. King of the Monsters requires you to hold down M at start too. Also I found that with my EA 4-Way-Play, I needed to hold down the Mode button on any 6-button controller plugged into the third port in order for that controller to work correctly, oddly enough. This is true in NHL '97, at least. Holding Mode was not necessary for controllers in the other three ports.
Also, some games do use the Mode button as a button ingame as a normal button that does something. The ones I know of that do this are as follows:
Technoclash (Genesis)
The Lost Vikings (Genesis)
Battlecorps (Sega CD)
Shadow Squadron (32X)
Star Wars Arcade (32X)
Metal Head (32X)
The Mortal Kombat games (MK3 and UMK3 perhaps? I forget) with Kombat Kode entry screens may use Mode as well for kombat kode entry.
Forgotten Worlds goes straight to the "game over" screen unless you hold the mode button down at boot up.
Cursed Night uses it for gravity.
Users can import directly from Delta itself or ANY other app except Files.app cannot share the file to Delta without the error shown on this card.
This appears to be related to file extensions cause I can zip / compress any file and then share with Delta and it works. But if itâs an .nes file, it doesnât work on some phones, but others it works fine.
I think itâs dependent on the iOS version tbh. iOS 15 hasnât had any issues like this on any of my three iPhones.
The joystick on the left of the controller does not properly receive input. Specifically, it can only register up and down movements unless on the exact horizontal axis.
NOTE: Synced custom artwork to the cloud does sync back to new installs despite the game not being in the DB anymore and when you import the âgame that didnât syncâ, itâs custom artwork will be there (likely because itâs a 1:1 per game so it likely doesnât need to be added to the DB since the file SHA1 will match the ROM.
You could allow a user to attach the orphan save to any game they want (or delete the save) to solve this.
This happens even if you "remap" an analog stick direction to it's pre-existing default mapping (read: N64). So, basically, if you map the left or right analog stick manually then the other side's analog stick will cease to function in that direction.
IMPORTANT: This happens even if you accidentally tap an analog stick and map it to a button, but then immediately fix it and assign it to a different button even before you hit save. That "mapping" stays in memory even tho you overwrite it and when you hit save, basically Delta then maps the analog stick in whatever direction to "no input".
Easy way to reproduce is to be in-game and plug and unplug the Backbone once or twice, Delta will get confused and start ignoring the plugged in controller.
Another easy way to reporoduce this is to get a call while playing and then you lose control. Even tho itâs a banner. It must be special. Also, Delta detects when Backbone disconnects when unplugged from the iPhone and then shows the proper overlay. But, when you plug the Backbone back in you have to close and reopen the game to get the overlay to disappear.
This isn't an iOS bug because the Backbone app still works perfectly even when Delta doesn't.
This appears to happen randomly when adding or deleting games
Pasting artwork on another game will place the right game thatâs supposed to be there in the blank spot again.
Looks like it pushes one game off to the very right and takes it from some middle column.
To reproduce this just switch from vertical and horizontal views with a console with a lot of games with cover art and one without. The one without the cover art is usually the one to âdisappearâ.
If Delta is not opened when AirDropped a skin, it'll crash. If Delta was opened, or is open in the background, Delta will import the skin fine.
I see this a lot with ROMs to. If Delta is already open and it receives a file it crashes intermittently.
I experience this a lot with ROMs as well.
LittRitt: "I saw you added the ability to use screens without an outputFrame, allowing for filters on default screens.
I think this conflicted with skin transparency because when utilizing this new feature, the landscape skin stays opaque."
Because itâll keep saying sync complete on the phone that added the game. But itâll show this error on every other Delta device.
Note: You can add more games to the âmasterâ install of Delta (the one that doesnât have sync errors, and Delta sync will sync the new ones but not pick up the one or missed so the other installs still have sink errors.
But you can only âre-importâ a game on a secondary device that isnât syncing up with the âmasterâ device that actually has the rom locally. Because Delta already thinks itâs synced the game to the cloud when it hasnât, itâs only syncing modified / new things like save states and SRAM changes.
Once you reimport into a secondary device itâll upload to the cloud and itâll sync to all other devices.
It should just return you to the main list of conflicts screen as soon as you hit the âResolve Conflictâ button (as shown in the screenshots attached).
This isn't supposed to happen because AltDaemon isn't honoring the fact that Delta is running and refuse to refresh (via it returning the Darwin notification call AltStore makes).
PokĂŠmon Adventure Red Chapter is the best example of this.
And what may be causing the âsync errorâ is that the PokĂŠmon Adventure Red Chapter rom hack both crashes Delta unless you preview another game that works twice (just open and close the contextual menu twice) before tapping into Red Chapter.
Reported by: Spidy
It appears as if the footer of DeSuMEâs in-game saves needs to be ignored and the desktop version of melonDS does this and successful imports DeSuME saves - but the Delta melonDS form doesnât account for this and fails to import.
Reference:
https://discord.com/channels/625766896230334465/625766896695771137/835532461701201930 (Mioâs Solution, Patron Discord)
https://discord.com/channels/625766896230334465/625766896695771137/835175642995228721 (Discussion, Patron Discord)
https://discord.com/channels/625766896230334465/625766896695771137/835122331336179733 (Discussion, Patron Discord)
This can be reproduced as referenced using the Time Gear in Pokemon Black. You should be the one to test and fix and PR this @lonkle - come on, do it.
Reference:
https://discord.com/channels/625766896230334465/625766896695771137/825082035915194419 (Discussion, Patron Discord)
https://discord.com/channels/625766896230334465/625766896695771137/825168853382070292 (Discussion, Patron Discord)
This will be solved with: https://trello.com/c/oNRmQR6x/118-enhancement-multi-process-support
The DSi Home Screen syncs over from the beta to public which should be caught and stopped.
Reference: https://discord.com/channels/625766896230334465/626109625900728340/834891635472465981 (Patron Discord)
Reference: https://discord.com/channels/625766896230334465/626109625900728340/834891440642457640 (Patron Discord)
The fix is in this thread I believe: https://github.com/gonetz/GLideN64/issues/366
Both Delta and Clip have this odd "transition from the main keyboard animation skip" in their keyboard extension. You press the globe, which shifts iOS over to your custom heyboard, everything looks fine. Then all-of-the-sudden it moves up like 60 pixels or so after 0.5 seconds and it's jarring visually.
It always has 1% of the bar filled anytime you navigate to the page.
Switching to mGBA fixes this and Ian has a PR for that so we all good here.
But isnât it wild that it crashes Delta only 90% of the time. Usually if I âpreview gameâ a few times it has a higher chance of not crashing Delta.
Discovery 3: Okay, I figured out "what files get left" and maybe how to reproduce. I always said it was random but it's not. When, you add 5 games, 3 cover arts to a second iPhone and it sync / uploads them. You then go to Files in the second phone and import a 6th game into Delta, which opens Delta and adds that game while it realizes it needs to grab the other 5 games (and 3 covers) from the cloud. But it needs to update add the new imported game first. So it does that, and then syncs the 5 other games. What happens here is that Harmony clears out the game folder and downloads the 5 games. So in total there will be 6 games and 3 covers in the "Games" folder. When exactly in this process that Harmony clears out current Games folder is unknown. But Delta continues to think everything is up to date (every time you open it or add to it, Harmony uploads and "Sync is Complete" with no failures). Tho obviously, if you open a game that's in the DB but not in the games folder it'll just crash. You can add new games to the faulty Delta and play them and they'll upload and sync to other devices, but pre-existing already-downloaded ROMs that were clear stay gone.
Discovery 2: This seems to be a problem with Harmony making large changes to already large libraries. Iâm over 1000 files and if I add 50 files on another device and a new device syncs, it could delete everything except for 6 files (this time, it leaves 2 - 6 files in the Games folder and properly updates everything else). Even if this is a bug we canât find. We can absolutely check if the Games folder matches the DB and âresetâ Harmony is Harmony thinks the sync is âcompleteâ (which every time Harmony deletes all the files, it still thinks that âSync is completeâ with no failures)
Discovery 1: This seems to happen when Harmony is syncing a number of files and then that sync gets interrupted. It starts back up when you rerun Delta and âSync Completesâ but it will have deleted most if not all ROMs and box covers in Games, but Delta Skins and Savestates will all have been synced correctly.
This has happened to me 6 times now (on two different phones and installs). I used Delta on my other device so it some syncing to do but insteadâŚdeletes all but 6 files (ROMs and custom artwork, pic in attachments of Files app).
Delta looks fine, just crashes on launch of any game except for the straggler ROMs that are left and most of the artwork is gone unless it matches to the DB or was one of the files Harmony kept for whatever reason.
I also have had 10GB free on my phone each time this happened so itâs not a storage issue.
Note that it still opens from other apps including files intermittently (sometime phones it does, other phones it doesnât, I think itâs the iOS version).
Core update fixes this or use FCEU core since itâs the most compatible I know of.
If users start another game or reset / restart the current game, reset the controller port assignments.
If the imported bundle ID of the skin is the same as the default skins.
All mapper 30 games donât work in Delta (and there are A LOT since itâs what NES Maker uses).
The only real âhackâ without switching to cores to FCEUX or Nestopia-UE is to tell the emu that itâs a mapper 2 chip and Nestopia will emulate it just fine (thereâs a few that require accurate mapper 30 emulation but 100s of mapper 30 games donât work rn and this would bring that down to like 10 that donât work).
On the fly, tell the emulator that the mapper is actually 7 and the only game that uses Mapper 218 (Magic Floors) will work.
Recursively search and list out the ROM extension files. If there is only one. Then import it.
If thereâs more than one, let the user choose which to import.
I think syncing the DB first always will solve this problem.
Basically make sure the DB stays in sync at all times. Because if I make a local save, I get an error on sync from the other device saying it couldnât match the save with a game record as locally it canât. Because the cloudâs DB updating for that one imported game got skipped on the other device for some reason but it still syncs and updates the DB with that games saves (possibly related to needing Harmony to import, upload, and download at the same time when I open it from the Files app importing a ROM and that bug is described here: https://trello.com/c/ZWv91OQx)
This could be impossible to work around. Tho I think you can ask iCloud to download it and then wait.
So that when Delta gets multiple errors over and over (like from: https://trello.com/c/4D6clzJx) you donât have to click through all (12 just now) of them just to finally get back to the interface.
Fix should be to use the public APIs available instead of the private API Delta is using for keyboard access rn.
I believe this has something to do with Harmony initializing as it happens more often in dead spots. But Harmony shouldnât cause this to hang. Delta is a local app.
CONFIRMED: If this happens, you force close, turn on airplane mode and start delta again, it opens right up.
The screenshot is one example. It says this about EVERY file.
It gets a lot but it missing quite a few. Oh and when 7Z is supported. That needs to be added to Delta. Maybe a file chooser to grab the ROM out since the nature of 7Z in old ROMs was to smush 15 dumps of the same game into 1 file and 7Z is perfect for that.
Preferred Core (permission from developer to use it in Delta attached to this card):
https://github.com/stenzek/duckstation
Delta's Genesis Core supports this, just enable the file extension .sms and give it it's own console page + slightly modified skin thatâs suitable for the master system.
One important thing to note is that this line here: https://github.com/ekeeke/Genesis-Plus-GX/blob/58758aef3d8e12189899d67344db3b95c6379561/gx/config.c#L113
needs to be:
config.ym2413 = 1; /* always ON */ (not "= 2" like it is now)
In order for Phantasy Star 1's Retransation (or any Rom Hack / Translation for any YM2413) to play using the YM2413 chip. Auto is more of a white list and doesn't take into account fan translations. Think of this very much like whitelisting every game to use it just the like GBA RTC. It doesn't hurt games but does help them if they use it.
@ianclawson After you explained the inner workings - it makes the most sense to leave it to him since heâll need multiple cores per console and multiple consoles per core support one day. I thought heâd designed it that way from the beginning but looks like this will be harder than at first glance.
Thanks, as always, for the insight!
@lonkle appreciate the offer! TBH tho I'm hesitant to work on anything new-core related ATM. So far as I can tell by looking through DeltaCore, even though the cores are indeed modular, DeltaCore isn't set up to handle anything but one-to-one core-to-console mapping. Getting Delta to have multiple, separately defined consoles to use the same core â and conversely, getting Delta to have a single defined console that works across multiple cores â would require more change than one might think underneath the hood.
Between that and all the many in-progress changes to DeltaCore that Riley already has underway, I think it's best I leave this to him.
@ianclawson You interested in adding a Sega Master System Delta console page / tab for the already existing Genesis Plus GX core to use? Iâve found thereâs more than a few cool SMS games.
Reference:
https://github.com/citra-emu/citra-android or https://github.com/OatmealDome/citra-android
Reference:
https://github.com/jpd002/Play-
Works with modern Virtual Reality goggles like Google Cardboard as described in this Github: https://github.com/tomkidd/VirtualBoyVR-iOS
Xemu is able to run on the Switch so iOS emulation is technically possible.
Reference:
https://github.com/mborgerson/xemu
Delta's Genesis Core supports this, just enable the file extension and give it it's own console page + slightly modified skin.
Keep track of completed achievements and notify user whenever an achievement is triggered.
A special category called hardcore achievements require direct partnership with the RA Team. Screenshots of our (Deltaâs) specific criteria for that are attached to this card but theyâve agreed to partner with us to allow for Hardcore achievement integration. Here's the criteria that was agreed upon for Delta for iOS.
Must be Disabled for RetroAchievement's Hardcore Mode
⢠State loading, including auto-resume on game load as per: https://trello.com/c/vSiYqBdV/142-setting-automatically-load-the-preview-save-state-or-last-autosave-on-game-load (though auto-resume may be allowed if the save state used for it is encrypted, gotta ask their team)
⢠Cheats that edit memory
⢠Region forcing to PAL for "natural" slowdown (I don't believe we ever do this)
⢠Any features specifically geared purely at providing gameplay advantages, such as our complex macros card: https://trello.com/c/6sEG4DlC/93-programmable-macro-button-replay-actions
⢠Rewinding, Slowdown, and frame advance via: https://trello.com/c/ApZolBei/146-enhancement-gaming-accessibility-features-like-slow-motion-slowdown-frame-by-frame-rewinding
Allowed for RA's Hardcore Mode as of 6/1/21; could change in the future)
⢠Delta's Sustain Button
⢠State saving (no reason to restrict this)
⢠Fast forward
⢠Turbo button functionality as per: https://trello.com/c/sgPxYfrn/57-rapid-press-turbo-button-functionality
⢠Any memory-triggered "features" (sometimes generically called "cheats") that do -not- edit memory/gameplay, such as overlay information, rumble triggers, external indicators (LED/sound), and similar - basically, cheats are still allowed but they cannot be allowed to edit memory / gameplay (currently unknown how to detect this - so disable all cheats)
⢠Texture replacements as per: https://trello.com/c/WegL4uBQ/122-add-ability-to-import-hd-texture-packs
⢠Game patching, but the post-patched ROM needs to send it's unique patched new hash has as per: https://trello.com/c/ikLnGqSQ/46-built-in-rom-hack-patching
⢠Disabling memory randomization on boot for static RNG as per: https://trello.com/c/h9cmpY9v/155-disabling-memory-randomization-on-core-boot-for-static-rng
⢠Toggling displayed layers in games as per: https://trello.com/c/2DgQ7U0B/216-enhancement-ability-to-in-the-delta-menu-show-the-game-optionally-disable-background-layers-sprites-effects-so-users-can-take-sc
Miscellaneous (but not explicitedly required)*
⢠To the best of our ability, to avoid any save state user cheating, for save state manipulation needs (such as using them for runahahead or switching from JIT to non-JIT interpreters), take into account RetroAchievement âvariablesâ called âHitsâ as described here: https://docs.retroachievements.org/Hit-Counts/
⢠Rapid spamming of emulator pause should be restricted (not possible without an external controller but still something to keep in mind).
⢠All API requests should include a proper identifying user agent specific to Delta, as well as Delta's version.
⢠Achievement logic should not be cached between sessions, to prevent caching bugs that may have been fixed.
⢠Following the above bullet point, offline functionality across sessions (when you start or reset a game into hardcore mode) should not be supported at this time.
⢠Hardcore mode SRAM files / Memory Cards should be encrypted and when Hardcore mode is invoked, Hardcore Mode Save Files will be decrypted and loaded instead of the softcore** "SRAM / Memory Card" files.
BONUS
⢠Add a "touchscreen used" indicator / flag for these achievements locally and continue discussions with RetroAchievements to add that to their servers so we can sync the data to it
This will be needed for an eventual ATV release but it would be nice on Touch devices as well.
A user can favorite a game from the contextual menu.
And this âDelta All-Consoles Homescreenâ contains multiple horizontally scrolling sections. The order of these rows should be customizable but hereâs an example:
Row 1: Most Recently Played
Row 2: Favorites
Row 3: Most Played Games (smart category based on game metadata a la: https://trello.com/c/je3UiPig/144-feature-smart-folders-collections-that-organize-games-by-play-time-or-most-frequent-played)
Row 3: Casual Games (a manual collection made by the user a la: )
Row 4: RPGs (a smart category added to this page by the user a la: )
Consideration: The UI in either situation will need to account for multiple consoleâs cover art ratio aspects maybe via this card:
Various video and graphical filters that can be applied to the video output of Delta.
Preferably can be used across all systems via a global preference but can be overwritten per game via https://trello.com/c/Ntdzp5BT
Borders like this could also be a consideration for this card: https://www.libretro.com/index.php/retroarch-introducing-the-mega-bezel/
Similar to the way GamePigeon works. Just imagine Delta running the same checksum-verified ROM between two friends for 30 seconds and getting to watch the other play their 30 second bit. And they can slowly beat a game together.
All you have to do is send the exact timing / duration of the inputs along with a single save state (just like what âDelta Recordingsâ would use as per ) to the other Delta instance and you can replicate what it does in that 30 seconds with very little data needed.
Allows users to download an event for games without using cheat codes. For example, a Pokemon Emerald event that will allow you to capture Mew.
Use AltServer (or AltDaemon for jailbroken users) as a WiFi proxy to get DS online to work to connect to DS Online Services which work both on our emulator as well as real DSes that still use online services.
Reference
https://discord.com/channels/625766896230334465/630156321802420225/841830784003604500
Note: When Delta creates a new soft-rom from a patch file, ask the user if they would like to import the in-game saves from the original ROM (as a lot of patches are just text changes and thus in-game saves won't be affected).
Note 2: Just like linking multi-disc games. The emulator needs to be able to link multiple of the same game ROMs so a user can add all permutations of said ROM like big / little endian, overdumps, etc. Because most ROM hacks require a specific ROM to be used but there's no point in adding multiple of the same game if the emulator can treat them "as one" and lookup their hacks accordingly.
Delta can receive any patch file and ask the user which ROM to associate it to. Delta then imports the patch file as if it were it's own ROM file in the Game Library even tho its just a patch file. Delta can then apply the patch at runtime. This way a copy of the ROM doesn't have to be stored - just the original rom referenced.
Thinking this further - there could be a âcollapse rom hacksâ setting that requires you to use the contextual menu to âchooseâ the patch you want to âsoft applyâ to the rom (this keeps your library clean). Think of the "Cheats" screen where you can apply multiple cheats, the screen would look exactly like this but each entry would be an patch file for the rom.
Patches have to be related to their parent ROMs by the user so a prompt should be given when "importing" a patch, the user will choose the rom, it'll instantly start and if the rom is headered and the user says âThis hack isnât working correctlyâ then try repatching it unheadered. In the end the user will have to confirm the rom is working as per the patch description.
If the user says it isnât working correctly the ask the user to try a different game or cancel importing the patch. It's a safe bet that if if the user is inputting buttons for awhile "playing", then Delta can assume the soft-patch is valid. But when the user quits the rom, or the user quits and resumes Delta, the app should prompt the user asking if the patch worked correctly and log that as "valid" or âinvalidâ.
FEATURES
⢠Auto populate hacks from RHDN based on checksum. Use RAchievements and a DB mirror of RHDN to match checksums - which you need to check all the checksums in the description and if any match occurs, itâs valid (rom hackers put the checksum in the wrong field all the time)
⢠Auto update hacks when they are updated (but keep the earlier versions patches in case the user wants to switch to a different version - as well as assign savestate to those specific patches so if you load a save state, itâll load the patch it was made with, but when starting a new game - use the latest version of the patch so the user can use SRAM to update their save state)
⢠Apply the patch in the background to make sure it doesnât crash before trying to apply it differently (header vs non-gendered)
⢠Import hacks and link them to a base rom manually chosen by the user
⢠Manually allow for sorting the DB of hacks / translations that are auto-populated from RHDN (with their title and version number)
⢠Store downloaded (played) patches in Delta's cloud
FORMATS
⢠.vcdiff which is just xdelta
⢠.dat which is just xdelta
⢠Zip files on RHDN contain more than one patch often times - so characters alone or in parenthesis / brackets - âUs / jp / e / j / uâ need to be taken into account to know which region to apply to which ROM.
External Core Simplified Proposal using a Shared App Group Container
⢠Delta is only thought of / used as a launcher and changes in Delta mean nothing to the other app and vice versa EXCEPT the external app would never change the filenames of the game files in the app group container and the dev would be instructed not to do so as it will break the link with Delta. I believe AFS allows for cloning without extra space usage so technically those files can reside both in the Shared App Group container and in the individual app's container if either Delta or the external app (Dolphin) would like to do that. The external app would be fed the game / rom file, SRAM / Memcard + savestate filename, and "callback URI" (In this case it simply needs to open Delta and instruct Delta to sync savestate / memcard files instantly upon re-opening) via arguments from Delta. The external core / app will launch into a "headless" mode which returns to Delta upon "quit game."
⢠So, in this case, Delta is used exclusively as the game management / launcher and the app dev agrees to let us deep link to instantly play the game in a "headless" mode and the user can use its in-game menu - but if exiting that in-game menu, the user gets sent back to Delta. Meaning only saves need to be accounted for since those will happen directly in their (Dolphin's) app.
⢠To solve that, we will include a shared app group (injected by installation via AltStore for "third party delta integrations" - you can use a whitelist or allow this to be a "source spec" feature for all apps to use). The user adds the games to Delta and Delta keeps them in that shared directory so that the external emu can instantly read the games and write the saves to the same directory matching Delta's SHA1 format. The external emu dev would then just have to agree to write their saves in that shared directory and a JPG savestate screenshot to that directory in the SHA format.
⢠The tricky part is that on Delta launch / resume - we have to do some extra logic where you do a comparison of the known files (which Delta will keep âclonesâ of in its own container) to see if they match the ones in the app group (Delta technically already does this for battery .sav files anyway tho), if the save-state / in-game save / savestate screenshot have changed, then translate that into Core Data which can then be synced with Harmony. Obviously this process would need to check for new save files and add them as well if they don't already exist within Delta's internal container.
Alternatively, you could add extra functions to AltKit (savestate_updated, ingame_save_updated, and return_to_delta) to let these external cores âtellâ Delta about their changes / actions so Delta can decide to make the updates to its CoreData table. After all, all of the current potential external cores are using AltKit anyway for AltJIT.
Note: This card was designed with a single core emulator in mind. A multicore emulator integration (like provenance) is out of scope of this card and I'm not sure we'd even want to ever do that rather than just focus on a "core translator" that me and Joe (the provenance dev) have been talking about lately. It would be able to automatically convert emulator core formats between OpenEmu, Provenance, Delta, etc. Core translator card here: https://trello.com/c/6Bsx6Aqh/369-feature-create-an-automatic-converter-to-allow-multi-core-emulators-to-share-cores-amongst-themselves-like-providence-and-delta
To bypass the 3 app limit, use AltDaemon / AltStore / to activate / deactivate before and after a user plays a game on an âexternal coreâ processor.
Note that OatmealDome already agreed to use this protocol if we develop it.
Supports both split screen and slide-over so you can play games while working on other tasks. Takes advantage of the larger screen size with full size skins and additional features.
Will also work as a macOS application as part of Project Catalyst.
For now, Iâm planning to focus on one major iPad âfeatureâ per beta (with misc. minor improvements scattered throughout).
Beta 1: Basic iPad support (a.k.a. checking the âSupports iPadâ box in Xcode and fixing up anything thatâs broken) (see screenshots above)
Beta 2: Split-view support (but still just one window at a time)
Beta 3: Multiple windows (+ maybe basic Mac support?)
Beta 4: iPad Redesign Pt 1 (focusing on most important screens)
Beta 5: iPad Redesign Pt 2 (finishing off the rest)
Beta 6+: ???
I mean, somehow Mesen speeds up the emulation of FDS loading screens. And auto-swaps disks too.
Reference of the latest codebases:
NES
https://github.com/OpenEmu/Nestopia-Core
https://github.com/libretro/nestopia
https://github.com/0ldsk00l/nestopia (this is the newest core but it only works on
Note: Nestopia UE (Undead Edition) is the newest. Which is whatâs being used coded by 0ldsk00l now and it supports all the newest homebrew games (and there are over 100 homebrew that donât work with the current core without some hackery I describe in other cards to support Mapper 30 without switching cores to FCEUX or Nestopia UE).
GB / GBC
https://github.com/sinamas/gambatte
SNES
https://github.com/OpenEmu/SNES9x-Core
https://github.com/snes9xgit/snes9x
Genesis
https://github.com/ekeeke/Genesis-Plus-GX
N64
https://github.com/mupen64plus/mupen64plus-core
GBA
https://github.com/visualboyadvance-m/visualboyadvance-m
DS
https://github.com/TASEmulators/desmume (legacy core)
https://github.com/Arisotura/melonDS
Most games work perfectly with Y and B, both being the B button for cancel and shoot.
This choice for each game should sync via Harmony.
Without this, you have to remember your button config per game and reconfigure it for all consoles each time you switch games.
Make sure to check sub folders as well I. This and the unzipping code to find the ROMs. In my experience Delta easily gets tripped up by sub folders.
And if thereâs more than one rom in the ZIP file, only take the first one. 7Z files have a tendency to include every known dump of a given rom file so importing them all would be bad. Just grab the first one and import it.
Either a slider ranging from 1-3x speeds or options to select 1.5x, 2x or 3x.
Include an "unlimited" option because some users need to really go as fast as the CPU allows (e.g. to hatch eggs in PokĂŠmon games).
https://github.com/noah978/CheatBase
as well as
https://github.com/libretro/libretro-database/tree/master/cht
NOTE: In the attachments are links for a specific type of game genie codes.
This feature will require a separate settings UI that is exposed as a button in the in-game menu. Please use the checklist below to see what "settings" a game could have / persist.
This preference in settings when enabled will automatically load the last game Delta played as well as automatically load the "Preview Save State" if this setting is on: https://trello.com/c/vSiYqBdV/142-have-a-preference-to-automatically-load-the-preview-save-state-or-last-autosave-on-game-load
Add a contextual menu to "Start from the Beginning" as well.
@ianclawson Built a prototype of this feature although itâs not committed.
Will make the smaller storage space in the Apple TV more usable especially when combined with https://trello.com/c/E8tlY72F/39-private-altserver-local-syncing-support
Series of Skin Spec Updates
⢠https://trello.com/c/TLmArHhD/210-enhancement-allow-for-collections-in-the-skin-spec-so-a-user-can-change-multiple-consoles-skins-at-once?menu=filter&filter=skin
⢠https://trello.com/c/42VJujoS/87-ehancement-custom-skins-that-appear-when-a-controller-is-connected?menu=filter&filter=skin
⢠https://trello.com/c/dfDfkXdR/190-enhancement-a-special-dark-mode-flag-skin-in-the-spec-that-can-be-toggled-via-the-in-game-settings-menu?menu=filter&filter=skin
⢠https://trello.com/c/GfwUFmAW/209-enhancement-add-to-the-deltacore-spec-an-enhanced-version-of-all-default-skins-utilizing-all-special-buttons?menu=filter&filter=skin
This falls in line with a series of adding to the deltaskin spec. This is "controller attached", and the other is "dark mode enabled / disabled" via: https://trello.com/c/dfDfkXdR/190-enhancement-a-special-dark-mode-flag-skin-in-the-spec-that-can-be-toggled-via-the-in-game-settings-menu
This could be a setting that only appears if you activate this first: https://trello.com/c/sxDFvHS6/157-keep-the-controller-skin-on-screen-despite-an-external-controller-being-connected
Also important, when the user hits the âmenuâ!button in this view on an external controller then go back to the game.
Similar to the sustain button feature, but instead of "holding" it rapidly "clicks."
Since the UI for this and the sustain button feature don't need to differ, you may be able to use the same UI and have an indicator between what buttons will be sustained while which buttons will be turbo-pressed, or both as some games may need that. So make sure, however this ends up being implemented - that both sustain and turbo can be assigned to single button.
If using Delta on the same device despite the bundle identifiers being different for stable, beta and alpha - you cannot keep data synced across them due to Delta using the same identifier for keychain access. Users run into this issue when they upgrade from Public to Beta but I run into it whenever I switch to any other channel to test bugs.
Solution
Give Delta an app group to share across all installations - this will be necessary when implementing https://trello.com/c/oNRmQR6x anyway. ADDITIONALLY, fix the broken keychain access when more than one Delta channel (alpha, beta, or public) accesses it - which can be solved via App Access Groups (https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps).
Reference
https://discord.com/channels/625766896230334465/625766896695771137/834141972343291924 (Patron Discord)
Confirmed By: @lonkle
Related: When this is completed, you can add an app group for this: https://trello.com/c/ptnpZwre/105-feature-allow-multiple-delta-channels-on-the-same-device-public-beta-alpha-to-share-files
This will allow for a crash resistant Delta. No longer will SNES games crash your world when you open and close the core 13 times in a row while testing. Because with multi-process support Delta can handle the crashed thread and immediately spin up a new one.
So we say, to the crashes that have haunted us - just like Mario says when you sleep your phone while playing Mario 64, bye bye. đ
Note
After implementing this, a custom File Provider Extension will be needed to continue being able to access iOS Files from within Delta (wait, other way around, or both) - take advantage of this and finish the Related Card (top of this card) at the same time for testers who run multiple versions of Delta at once.
Reference
https://discord.com/channels/625766896230334465/630156321802420225/836311798519955466
This would get rid of the current pop up to "Resume" or Restart for existing games as well, as those games don't have to load, they just "Resume". Just a preference where you choose one or the other and anytime that game loads, it automatically loads the save state as per this setting.
This plays perfectly into this PR as youâll still have a way to reset the game: https://trello.com/c/wQmkrxgB or https://trello.com/c/pQy8C66S/254-qol-add-a-resume-button-to-the-home-screen-when-a-user-exits-a-game
Holding, say, the special âfast forwardâ button down pops up an contextual menu while emulation is running to change fast forward speed a la https://trello.com/c/100N36tE. You can also tap it to toggle between the last known fast forward speed and normal speed.
The special âsave stateâ button can only be activated by holding the button down. Emulation will pause and a contextual menu with the labels âQuick Loadâ and âQuick Saveâ.
That is, of course, as long as the user doesn't have a special "Controller Connected" chosen skin that overrides this (at the per game level, this would be the default for all new games)
These should be synced but they're not:
⢠Skin choice per game
⢠Global console skin default choice in settings
Save RAM will have to detect when a greater than 10% size change occurs before and after a gaming session.
If Delta crashes after an automatic load second time, then enable a prompt like in the screenshot but with text saying this rom might have an issue and to try to restart the ROM or dismiss.
It would be a console setting. As you can see in the screenshot, there can be a bunch of cover art that doesnât line up vertically so a setting to "force aspect ratio" would fix that.
This makes graphically unplayable games like Trials of Manaâs text boxes(screenshot attached) work properly.
Snes9x supports this. It just needs to be configured.
Most would likely remap this to the menu button but a user should be able to map L1 + L2 + R1 + R2 + Start to âsoft resetâ or any âin-game menu item (like cheats screen, fast forward toggle, sustain button, etc) via https://trello.com/c/BTvdcoo
Thereâs a DB of poster art for every game out there and they share the same aspect ratio which looks good / uniform on the front end.
⢠A button to open the load states screen
⢠A button to open the save states screen
⢠A button to open the hold / turbo buttons screen
⢠A button to exit back to the Home Screen (bypassing the in-game menu)
⢠A button to open the cheats menu
⢠A button to toggle all cheats (which should be an in-game menu item as per https://trello.com/c/JgDxONsL/207-setting-customizable-in-game-menu-button-order-and-remove-add)
This is a perfect example of why we need visually pressed down buttons because a tap should keep it pressed down graphically as well.
This needs to be separate for controllers and skins as a whole as some external controllers are sensitive to accidental button taps so the âtapâ duration needs to take that into account.
Especially because that bar means you can't even tap on that entire horizontal bar anyway.
NOTE: Documents by Readdle (https://apps.apple.com/us/app/documents-file-reader-browser/id364901807) on the App Store doesnât even ask permissions for the iCloud Documents folder and somehow has access so maybe iCloud sync could literally be built right in using native techniques.
You simply open up a file chooser, pre-fill it with the Documents path, tell the user to make sure they have that synced with iCloud and then BAM, built in iCloud support.
Technically easier than the other methods tho not foolproof as their is no way of knowing if the user has the sync feature turned on or off for the Documents folder.
Plus side is this method allows users to sync with any app that provides a File Provider Extension. So technically you wouldnât need Dropbox / Google Drive syncing libraries built in anymore.
Out of Scope / Speculation: Technically, I believe it's feasible to "talk to" AltServer and then write a tiny test file to ~/Documents/Delta/test and if AltServer for Mac detects the file then awesome, if it doesn't then the next device that connects to Sync with the Files App (read: iCloud), it will check with AltServer and if AltServer says check for the test file, then the second Delta installation will and then will confirm it's working. Once any app finds, and reads the test file it didn't create itself, then it'll know that iCloud Sync is enabled for the Documents Folder - and it can write to the test file "success" so that all Delta's are aware that iCloud Syncing of the documents folder is, in fact, turned on.
Important Reference: https://developer.apple.com/documentation/uikit/view_controllers/providing_access_to_directories
Tapping the button obvi opens the in-game menu. But holding opens an "in game menu button) which is configurable but by default is rewind state opening
If a user doesnât make a save tho whether in-game or a save state, and played less than 5 minutes, donât add it to this list.
This would make auto saves a little more useful. Bonus points if you can long press a save state and revert it to a previous version (just like you do when handling conflicting files in Harmony sync).
Basically, whenever the SRAM file (.sav) gets modified all at once with a greater than 20% change. Which youâll have to poll for changes for and check the âpercentage SRAM changeâ for the lowest common denominator, because some games use some SRAM as a little extra RAM than just saving. Anyway, when that happens a greater than 20ish percent SRAM file change, immediately make an auto-save state on the left of the âAuto Savesâ section. The other auto-save-state on the right will continue to be âon close or crashâ.
Incredibly useful for 2D games playing with the analog stick as well as with certain external controllers (any game)
This feature is useful with old games that function incorrectly when two direction buttons are pressed at once (diagonals). Games like the Ys series canât accept two directional inputs at once so being able to make the joystick map to only one button at a time would be a good âmapped buttons per gameâ setting a la https://trello.com/c/ygzx2rC4/335-enhancement-allow-customization-of-mapped-external-controller-buttons-per-game
The important part of this card to consider is diagonals past a certain threshold should count as then holding the âotherâ. So if you hold down on the analog stick and you hit a down right diagonal then just counts that as a only ârightâ input. The same logic obviously expands to all directions.
This would make Mario 64 and all of its hacks extra playable and Zelda Spirit Tracks at the very least.
Honestly so many games this would work with.
When doing this, consider an optionally analog to touchscreen interface as detailed here: https://trello.com/c/Xibo9fsV
The amount of pixels is almost always divisible by 8 (NES uses an 8 by 8 pixel background tile system). So 8, 16, 24, 32 crop options for every border of the graphics output. I see a âsnap to gridâ system showing the use a screenshot of their current gameplay.
But just a contextual menu would work with those options for each side of the screen. Just make sure this specific setting can sync.
AS FAR AS I KNOW, the NES is the only console that needs this. But it needs it badly IMO.
PS. Make sure to code this in a way that Harmony can sync. Each games config will be different after all.
This allows for easier manual IPS patching of games.
For example, the Backbone needs to use a different button than âTrackPadâ
Paid ADP can activate the VPN on-demand. Free users will have to use an app (and paid users at first will too since we can just leave the connection active all the time).
Technically paid users with the networking entitlement can enable JIT themselves using a loop back VPN with no server involved but thatâs beyond the scope of this card.
Listen Riles, I know those things arenât âcore dataâ. But you can mirror those setting to Core Data (itâs just data) so you can still sync this shit.
GBA 100 ROM Saved: 1.9GB
DS 100 ROM Saved: 20GB
3DS 100 ROM Saved: 98GB
Suikoden 2 takes Suikoden 1 final save data for extra features for example.
Could be called DelSubstrate, jus' sayin'. Would work similar to modern consoles and how theyâre always downloading in the background from their online shops
This - to me - adds a "controller all iOS users have grown comfortable with because it's standard and why haven't I ended this quotation-ed statement yet". - @lonkle
https://developer.apple.com/documentation/gamecontroller/gcvirtualcontroller
External controller support is going to require DSU tho.
No input from controllers is allowed in the background on iOS. So for external controller in PiP we can piggyback on this: https://trello.com/c/8zBy4qjH/219-feature-integrate-a-dsu-client-into-delta-for-gc-controller-support
As for controller Delta on screen, well Riley figured out the sanest way to do so, which is to create a keyboard extension as shown here: https://trello.com/c/gZDtzKZo/218-enhancement-create-a-keyboard-extension-to-control-the-pip-delta-viewer
But make them per game mappable. Since I see many different use cases per game to map those buttons too.
https://github.com/rileytestut/Delta/pull/140
This feature combined with this PR https://trello.com/c/lY5nDpWN/234-qol-add-ios-14-page-control-select-action-for-multiple-pages-pr-romain-talleu makes for very intuitive navigation in-app.
https://github.com/rileytestut/Delta/pull/140
A changeable color palette with several options or even a custom one. It seems like thereâs only one hue in Delta that should be changeable so easy singular option in the global settings. A color picker would be the difficult part of this.
For instance if you save state at just the wrong time, the animation of loading a state could keep you trapped in an endless cycle of death. So maybe load state should always be immediate so you can use the controller to stay alive. Note that external controllers and touch screen special buttons donât have this problem if you quick load since quick load is immediate.
Perfect use for save state pics. But there is a DB of gameplay pics.
The user can choose to leave this disabled and continue gameplay
A good example would be adding a reset button to he list a la: https://trello.com/c/wQmkrxgB - or simply removing the cheat button because a user never uses it.
We also need a button for:
⢠Switch Skins
⢠A button to toggle all cheats on / off
More nice buttons:
⢠âShareâ (opens the rom with the share sheet)
Memory usage, framerate, cpu speed/clock, etc
Video of example attached to this card.
Like Lemuroid, or soon Provenance.
I'd recommend having a single setup like on Dropbox and then use synlinks to follow the format for the copies of the rest of the cloud syncing profiles.
Write up goes here using provs emu core tech swap with no screen etc. A
Goes along with https://trello.com/c/wcYFP8n9
An in game hub to select games and possibly socialize with other retro gamers using Discord or whatever APIs to connect people together.
Start the user as an avatar on a smartphone app which is Delta. Then if the user (meta) hits a button at the top left to "Enter Lobby" - it shifts to these hub world full of games and other social features.
Unbound Cloud is a website I've been working on for a while now that gives you additional Boxes to store Pokemon in! It also allows Wonder Trading or using the GTS to trade with anyone else in world! Another goal with this site is to support compatability between different modern ROM Hacks, since many don't connect properly ingame. It's not 100% ready for release yet, but the fact that I'm revealing it now means it's coming soonâ˘. When it does release, it'll start out with support for Unbound and a couple other hacks, and more will hopefully be added as time goes on (not including Fakemon support).
With an app group specifically for cores, this would genuinely be amazing. Any progress done in Providence, Delta could take advantage and vice versa since they could all use each other's cores at will.
In that same vein, why not also then make a "Share in-game save" contextual menu item for when you long press a game so you can directly share an .sav / .srm / .dsv file since those are universal and you could insta-share them with other emulators
Maybe add this to the contextual menu of Delta like real App Store apps do
This, just like the eReader adapter - requires porting the GB core to mGBA for link cable support and wireless adapter support for PokĂŠmon games particularly but all link supported games would benefit.
For online connectivity with this feature it requires some smart emulation where buttons are read in real-time but emulation itself is slowed so that it can handle a variable lag.
This is a big one but would involve a culmination of:
https://trello.com/c/hXhj0IyK/48-achievements-on-games
and
https://trello.com/c/dvNetZpL/149-discord-integration-to-show-others-what-game-youre-playing
and
https://trello.com/c/E4FLJGP5/127-integrate-gameplay-data-with-the-gametrack-app
and
https://trello.com/c/dBBeznL0
then only the online-status indicator would need to be resolved (which could be decentralized technically). Our current GameTrack partnership can be used as the focal point of username / interactions / friends (GameTrack, in and of itself is lite social network) and all games that are "Delta-marked" can be shown to other Delta users. God this social stream idea could take me awhile uhmm....will get into this later, have to talk more to joey about if he's willing to be work into this.
Flesh out this ticket later. -@lonkle
Latest Integration Idea: Have Joe place his database in a local folder âOn My Deviceâ and Delta can manipulate it r/w.
Allow Delta to rate games and sync its rating + the rest of a ROMs "stats" with GameTrack. Likewise creating a "ROM status" variable for the user to Play Next + Now Playing + Play Later smart categories via this card (https://trello.com/c/je3UiPig/144-feature-smart-folders-collections-that-organize-games-by-play-time-or-most-frequent-played) and then giving GameTrack that data would make for the perfect collaboration. This same data gives us even the series the game is in. So you can tag it / add it to its collection series automatically via this card: https://trello.com/c/sHuovM1s
Joe, the developer of https://apps.apple.com/us/app/gametrack/id1136800740 has shown interest (because I forced him to đ¤Ł) in working with us to give Delta the ability to sync userâs gameplay data with his app.
The goal here is to help Joe find a way to integrate with Delta without big infrastructure changes on his end. RESEARCH MOAR JOELLE!
Preliminary Research: GameTrack uses a one way Firebase API for cloud features so Delta canât write GameTrack data to that. Local data syncing is the only way forward here in GameTrackâs current form but have to learn about app to app integration methods.
Further Research: Joe is entertaining the idea of an automatic Harmony based solution rather than manual.
FURTHERRRRRR RESEARCH: What about a really unique approach using AltStore to distribute and then create an app group shared between Delta and GameTrack. Talk to Joe about this in depth.
Okay, so Joe hosts an external IPA of GameTrack to be installed with AltStore. AltStore notices GameTrack and Delta's IDs and adds a special app group to them (this can also be accomplished with a re-install of Delta, to add the app group) and GameTrack will detect this app group as will Delta and they share gameplay stats amongst each other.
Latest idea:
Make the user choose an âGameTrack-integration.sqlâ file from the GameTrack app to share stats. Make it so that the user canât choose the wrong file which may be by using a special extension. â.gtdâ for âgame track dataâ.
Show the current user prominently in all UI parts of the app so no one in a household accidentally plays as a different user.
Can use the Apple TV API to get the user, but this is a tvOS only feature for now so if we want it on iOS will have to have a setting in Global Settings to choose the user for other platforms.
This user will have Metadata and a centralized Delta server will gauge these for the social features of Delta.
In-game: This would be especially useful for games like Animal Crossing where you all live in one town on one memory card.
IMPORTANT: Youâll have to lock the âsharedâ saves on load so that only one person can play at a time (to prevent conflicts) and Harmony can just send a lock signal on the file on load. Meaning you canât play shared save off-line.
When user starts recording, Delta takes a save state snapshot and then records the button data until user ends recording.
BONUS: Have Delta always record in the same rolling interval that Rewind States use. That way you can âsave the last x seconds of gameplay as a Delta Recording.â
Since these are just a single save state, with button data timing / durations. The recordings will be really small.
Fun Fact: Super Smash Bros Brawl does something similar to this to record its matches.
NOTE: These homebrew ROMs we âdemoâ pack in have to be encrypted so homebrew partners can trust us with their rom(s).
The purchase will simply allow the user to extend their playtime if the full game beyond the x minutes allowed (which is decided by the homebrew dev if they partner with us) where they can even use save states to get just super far in that allotted amount of time till they have to beat the whole thing and purchase it.
Iâm thinking Orange Island, Lizard, for paid. Battle Kid, Xeno Crisis, etc for free homebrew pack-ins (which are just as good as real games tbh).
Iâm looking into paid homebrew, focusing on NES rn. The Witch nâ Wiz dev and Swords and Dune are who Iâm going to talk to first.
Unfortunately tho I wanted Battle Kid to be a part of this which is in the mock up, theyâre discontinued so we canât partner with them. Iâve contacted their publisher in hopes of striking a deal tho because itâs just money in their pocket if they say yes.
And we could make sure the user starts out with a save state at a place that makes sense. Like a âfirst save stateâ to bypass the intro of the demos and they can get right in the action (sort of like SPs on Nintendo Switch, which we could do those too but I donât like them).
Just like we can open game by their SHA right now in a Delta "deep link" URL.
As for your comment on the abuse. I think with the right implementation there would be no need room for abuse.
Example:
User plays the game for more than an hour and has received at least three achievements which makes step 3 trigger.
Emulator asks user if achievements are working when they exit the game next.
x game. If user says âyesâ, achievements stay enabled derived from the base gameâs data, and we add an âachievements compatible with base gameâ flag to that IPS hash locally.Seemed in my head that this would just give more data for a human to eventually review a specific IPS file to verify our usersâ reports.
NES
The NES has a very limited amount of colors and as such has undergone multiple palette choices across many emulators. So palette choice per game even wouldn't be crazy choice for an advanced setting and would fit right in with https://trello.com/c/Ntdzp5BT/94-per-game-settings-for-various-emulator-features and https://trello.com/c/gDJtN1wt/125-add-ability-for-power-users-to-toggle-more-advanced-emulator-settings
Attached is an NES palette file (.pal) a user should be able to associate with a specific game within Delta (the file attached is meant for Mario Bros 3).
GB / GBC
Games designed for the original Game Boy will play in color when played on the Game Boy Color or Game Boy Advance systems. The colors displayed on the screen are selected from one of 12 palettes, each with 7-10 colors. The 12 palettes can be selected from the Game Boy Color or Game Boy Advance system start-up screen.
https://www.nintendo.com/consumer/systems/gameboyadvance/colorchange.jsp
A user can fix improperly upscale pixel lines (very helpful with fonts) or stretch the screen to play a game using their entire screen.
Reference
https://reddit.com/r/Delta_Emulator/comments/nh73vp/has_there_ever_been_mention_of_aspect_ratio/
Could be useful in some games. But probably not. I can only think of the NES and itâs leftmost 16 pixels being able to be shown via a core setting. But thatâs hidden on purpose by the game dev. So I donât see how removing that would do anything. This seems like a silly suggestion. Unless Iâm wrong?
There are many directions to go with this. We could use OpenEmu's filter spec, we could design our own 'deltagraphics' format, we could use another emulators format.
Here's an are zipped .cgp files to show an example of this in the wild (and we could use this format too if it suits us better and / or is more popular).
Reference
https://discord.com/channels/625766896230334465/630156321802420225/837092046882865204 (Patron Discord)
Our core supports this: http://www.mupen64plus.org/wiki/index.php?title=HighResolutionTextures
Reference
https://discord.com/channels/625766896230334465/630156321802420225/837092046882865204 (Patron Discord)
This would have to be defined in the skin spec.
This is especially applicable to N64 as holding the controller in different ways was the point of the controller.
If you press a button inside the circle and don't take your thumb off the screen, it should act like the D-Pad does in that situation and keep the buttons pressed for as long as you keep your thumb on the screen regardless of where your thumb travels.
Video example attached.
I see some rare instances where this may be useful in some games.
Current Behavior: Whenever a D-Pad direction is being touched, if you extend your finger in such a way that it touches another button, it will then switch to that alternate input.
Proposed Behavior: If a user touches the D-Pad, it'll engage in a static mode, where the D-Pad will keep being utilized as long as the user doesn't lift his finger from the screen, therefore not changing input even if he/she accidentally touches another button. In other words, in any case that the users' finger drifts off the D-Pad, it won't disengage from that direction unless the finger is removed from the screen. This way, a game character stopping mid-journey unintentionally will be an occurrence of the past.
This will require some work on the skin spec but it'll be worth it.
DC: Typing of the Dead
Only appears on skins that specify the screen location. But you can take the screenshot of any "save state" preview on the console and just throw it in there.
Use a mapped button on the external controller to swap between screens.
Reference:
https://discord.com/channels/625766896230334465/625766896695771137/836352587195744306 (Patron Discord)
For example, an iPhone could open up Delta and connect as the controller for an Apple TV installation of Delta. The upper half of the screen could serve as the Apple TV remote touchpad to navigate between games. The bottom half has the buttons of an Apple TV remote while in the main menu, but then switches to the default controller skin after starting a game.
iOS devices could be used as a game controller for any other iOS installation of Delta as well.
There will need to be a flag for skins that are âfull screenâ skins that Delta will switch to automatically in this card:
A DSU client / server allows for controlling Delta with GC controllers if you connect those controllers to a DSU server on like a Rasberry Pi even (which might give you motivation for this card: Barebones Linux AltServer Support). But it also allows external controller support for PiP Delta emulation as well as detailed in this card: https://trello.com/c/qhbt1Q3j/178-feature-add-support-for-ios-15s-picture-in-picture-feature
PS4 Controller
⢠Trackpad support for PS4 Controller (the trackpad itself can be used as the touch screen for DS games as long as their was like a translucent cursor type thing before the user clicks or taps)
⢠Lightbar support for PS4 Controller: the dimmest possible user-chosen Delta accent color, which is ofc Delta purple by default (thereâs a PR to fix that) - also give the option to turn it off if user chooses
⢠WarioWare / Kirby Tilt / Yoshi Topsy Turvy support (using six axis gyro): https://developer.apple.com/documentation/gamecontroller/gcmotion
Main Reference
https://developer.apple.com/documentation/gamecontroller
All games use controller port 1 and 2 analog sticks although Star Wars Pod Racer uses Port 1 and Port 3âs analogue sticks to perform this trick.
Note that of the five games that support this pictures. Some use the first controller start button and others use the second controller start button so that would have to be taken into account. The video really explains it all better but Iâve written all the important bits in text.
Replace dpad with analog stick controlling x controller (port 2 or 3 depending on the game).
This will be very useful when w rebuild out our central repository of skins as per this card:
The example screenshot is this skin specially designed for Ace Attorney. (https://discord.com/channels/625714187078860810/627594786404302850/866778628179623986)
The Delta skin spec should have a "custom mirrored screen skin" that automatically is used per console when AirPlay is activated. This way, skin makers can maximize the controller (and touch screen) while users are AirPlaying their games.
If a skin maker uses a background like the picture attached (the phoneâs guts, artwork, a random wallpaper), seeing it move would sell the illusion of depth. Skins could have two layers: a fixed buttons layer and a moving background layer.
Suggested by Skin Maker: epicpal#2080
https://github.com/rileytestut/Delta/pull/84
This could be setup via a decentralized system (so that we stay out of distributing the skins directly).
AltBot can handle the links from Discord and connect them to Delta by auto generating a âskin sourceâ file from the skin download links.
Use the GB core and match GB roms to official borders via a DB like this: http://www.vgmuseum.com/features/sgb/ - or allow user's to custom enter game borders via: https://gbatemp.net/threads/incredible-super-gameboy-borders-collection-assistance-converting-png-to-bmp-compatible-with-gameyo.560725/
Likewise, see if there's a database of palette for SGB games palette choices and use those when people choose those ROMS.
Allows users to create custom actions to can trigger a series of buttons. For example, it can be used to run back and forth in pokemon in order to hatch an egg. Or rapidly click the A button.
This is like an advanced version of the sustain/hold button feature and should be able to integrate with this as well: https://trello.com/c/sgPxYfrn/57-rapid-press-turbo-button-functionality
Would work indistinguishable from the Switch. A mappable button + a special skin button.
The Switch is 30 seconds. But this could be configurable. I've been thinking this could open the Rewind State screen and you click "where" you want the recording to start. This would ofc mean that Delta will always buffer a recording going back as far as Rewind States do.
This won't be too data intensive if we just record button pushes / durations like Super Smash Bros Brawl does. Exporting as an actual video to share would be a necessity tho but internal recording will just need a save state + button pushes.
The user should be able to move and resize the buttons on a skin if the skin supports the "dynamic" buttons feature in the deltaskin spec. This is clearly an enhancement of the skin spec and is no small feat in the UI department either.
⢠Add Your Own: This includes adding your own buttons from the photo library.
⢠Mapping which Button: You can map the photo of the button by double clicking and choosing whichever one.
⢠Size: Allow for resizing of the existing (or added) buttons and / or removing them + making them more or less transparent (if applicable)
⢠Default button assets: We provide some existing button assets for users looking to create their own skins.
NOTE: If this works, itâll make platformers a lot more doable on a touchscreen.
Like when you move your thumb off the A button and move far to the left to reach the B button in your head but you pressed A at the very right threshold so you push far to the left on the skin but itâs still the A button because the skin dictates absolute button positioning. I think Delta could could do this more intelligently.
I think that Delta should register the user moved that far over on purpose to press the other button. Seems naturally but itâd have to be tested. I feel like this would work in a similar ârecenteringâ concept like analogue sticks function now on skins.
Series of Skin Spec Updates
⢠https://trello.com/c/TLmArHhD/210-enhancement-allow-for-collections-in-the-skin-spec-so-a-user-can-change-multiple-consoles-skins-at-once?menu=filter&filter=skin
⢠https://trello.com/c/42VJujoS/87-ehancement-custom-skins-that-appear-when-a-controller-is-connected?menu=filter&filter=skin
⢠https://trello.com/c/dfDfkXdR/190-enhancement-a-special-dark-mode-flag-skin-in-the-spec-that-can-be-toggled-via-the-in-game-settings-menu?menu=filter&filter=skin
⢠https://trello.com/c/GfwUFmAW/209-enhancement-add-to-the-deltacore-spec-an-enhanced-version-of-all-default-skins-utilizing-all-special-buttons?menu=filter&filter=skin
Basically, one .deltaskin would have two "themes", one light, one dark (and one "controller-attached too: https://trello.com/c/42VJujoS/87-ehancement-custom-skins-that-appear-when-a-controller-is-connected?menu=filter&filter=skin). The default could be based on system settings or global Delta settings but it could also be set on a game per game basis (whether you want the dark mode version of skins or the light mode).
Sure, a creator could just make a light and dark mode version of their own skins. But I don't see that happening. I think building this directly into the spec will encourage skin makers to build "light" + "dark" skin combo themes more often.
This would be a preference in settings.
BONUS
Have a button in the in-game Delta Main Menu screen to "Disconnect External x Controller"
IMPORTANT
MAke a conditional exception to this if the controller is plugged into the lighting port. iOS provides this information through the controller API.
Basically the goal is to make it so that when you hit a button, Delta sorta intelligently decides what button you meant to hit by how far the gap is from when you hit say the right âedgeâ of the last button. So say you hit the right edge of the B button on NES. Then your next press is the very left of the same B button according to the JSON tap boundaries. Well, Iâm saying Delta should be intelligent enough to know the x and y threshold of the tap is so different the user definitely meant to hit the button âclosestâ to where they tapped which would be the A button for NES.
Default the tap to R3 / L3 (whichever is unmapped and both if they are both mapped) but make the tap a customizable setting.
Onviously the touch screen could emulate the mouse to a certain degree.
Every Mapper 28 game actually uses the SNES Mouse if itâs emulated in the NES (IRL you have to build an adapter).
Likewise Mapper 28 allows for the use of the SNES controller on the NES. Not all games take advantage of this but all games that donât are coded to take X and Y inputs as A and B.
Hereâs an example of a modern game using it: https://khangames.itch.io/nescape
and
https://rainwarrior.itch.io/nesert-golfing
Reference Hardware: https://www.raphnet-tech.com/products/snes_to_nes_cable/index.php
Only Japanese games use this built-in feature (the the fanicomâs second hard-wired controller) but itâs pretty cool.
This will allow people to play one player games without passing the controller around.
In complete contrast to this feature: https://trello.com/c/jKZoOc7q
I believe these gestures should have a modifier button for this alternative functions but I wonder if there's a UI way to indicate to the user that because it's tragging from the gesture button that it's performing a gesture, ya know, JUST LIKE the swipe typing blue line of the keyboard. Yeah, and this option should be toggleable. Ill have to do some tests to find out what gestures pair with what. Stay tuned.
We'll, the fast forward button needs to be also modify the "sustained" buttons to befome turbo buttons somehow. Maybe on a button button cases. Have to think about this more.
In this, a skin maker could make the analog stick(s) travel at a FIXED speed regardless of how fast your thumb is moving. Video example attached.
It would be the save file from this state: https://trello.com/c/9GW4gnuK
In that same vein, deconstructing an existing deltaskin to PSD / TIF would be wonderful for editing.
A completely black screen is also a loading screen. That will be the easiest to detect ofc. But most completely black screens with a word or repetitive motion (spinning wheel for example) will be loading screens.
This could get deeper by getting users to crowd source loading screens by asking a user if they're turning the feature off for a game due to fast forwarding when the game isn't supposed to.
These recordings could also be "emulated ysper fast" and then exported as an actual video.
Like just a little text saying âJIT Enabledâ at the bottom right or something (mockup pictured)
This can be used for importing games, downloading custom skins, reading GameFAQs. Just makes the whole Delta experience more immersive.
Note
The duration of a background location "process" is entirely dependent on how taxing the background processing is (in this case, this should basically be a noop loop). iOS chooses to kill the process based on undetermined factors but they have to deal with memory, battery life, etc - but in all tests a GPS background service (if programmed to do literally nothing) always lasts at least 10 hours.
Reference
https://discord.com/channels/625766896230334465/630158257910185994/837467435607130154 (Patron Discussion)
https://discord.com/channels/625766896230334465/630158257910185994/837467425154531368 (Patron Notes)
âThis BIOS file is invalid or corrupted, please try a different file and make sure the filename is the same as the bios#.binâ
Most games don't use the feature, and some users don't like having iOS' microphone usage warning icon at the top when their playing games.
Fields can include:
You played this game x times this year.
Most App Store apps behave in the same way.
Going along with a user can beat. a game, how do they mark it beated?
They mark it with a locked save state. So remove the "Locked" status and divide it into these three lists (which will all be "Locked" save states):
⢠"Mark as Beaten" (user beats the game but doesn't want to "complete" it)
⢠"Mark as Play Later" (user wants to pick up the game later and wants a definitive save state to lock to go back to)
⢠"Mark as 100% Complete" (this status option only exists if the user already has marked their save state as beaten)
There can be multiple of each of these but they are designed to give the player a way to see their achievements (and revisit through the save state). And maybe make that "Beaten" save state a 100% Complete save state one day. Or finish exactly where they left off by bookmarking their spot with a Play Later save state.
Customizations:
⢠How often a new snapshot is taken
⢠How many to keep
The files will all still be their SHA1 counterparts. This will make it easy for users to find their saves and games and whatnot in the Files app because right now itâs nearly impossible to use the Finder integration for really much of anything due to its ambiguity.
This would have meant I didnât have to delete the Delta app and reinstall in this card: https://trello.com/c/ZWv91OQx
I suppose regular sharing might do. But syncing the Google Profilels or Dropbox profiles might be really useful, as well as sharing ROMs among themselves.
Hitting the menu button goes back to the map buttons screen.
And allow the user to create âtagsâ and add them to the rom. Things like âUnlicensedâ or âHomebrewâ would be good defaults to have but a user can make any.
Include an âAdvanced Settingsâ section in Delta to allow a user to âempty all Delta dataâ which will flush its own container and itâs folder in the app group.
Converting to HEIC or keep original - whichever is smaller.
This happens a lot. People expect SRAM to not be tied with save states but they are for technical reasons. This is the closest I can think of to solving the âI saved in-game, but now thereâs an older save file in thereâ because, say, their loaded save state was made before they saved in game this reverting their saved game unexpectedly.
This would def be unneeded if this card is possible: https://trello.com/c/9GW4gnuK
Or open and start playing a specific save state. You get the idea.
Iâm attaching my Mega Man Zero 2 completed save to this ticket so you can test automating to Mega Man Zero 2.
Not just while it's in memory. The entire state of the emulator should resume from where a user left off no matter how long ago they opened the app.
PizzaBoy Pro on Android does this as an example.
Think of 1DM
Switch: .xci (cart), .nsp (digital), .nsz (compressed digital)
The uses these will look like all other games in the library, but if they arenât installed, their will be an extra interface deleting a previously cached installed game to the newly installed game.
NOW, post-install the âpackageâ file is ignored in the game library. This is very important for things like CIA game updates.
Console Compressed ROM Formats:
Disc-based (.iso / .bin)
⢠PSX: .chd (preferred) / .pbp [Converter: chdman]
⢠GC: .rvz (preferred) / .gcz (deprecated) / .ciso [Converter: Dolphin]
⢠Wii: .rvz (preferred) / .wia / .cso (not maxcso) / .wbfs [Converter: Dolphin, WIT]
⢠Sega CD: .chd (preferred) [Converter: chdman]
⢠PSP: .cso (preferred) [Converter: maxcso]
⢠PS2: .chd (preferred), .cso (common) [Converter: chdman, maxcso]
Cartridge / Download
⢠GBA: .gba (trimmed) [Converter: NDSTokyoTrim]
⢠DS: .ds (trimmed), .chd (compressed) [Converter: NDSTokyoTrim]
⢠3DS: .3ds (trimmed), .chd (compressed) [Converter: NDSTokyoTrim]
⢠Switch: .nsz (download), .xcz (cartridge)
⢠Everything Else: .7zip (works for small games, large games have long initial loading times which is why CHD is best for them)
Cloud syncing requires the least amount of space possible and 7z is a much better compressed archive format for storage. The consoles, on-device, need compressed file formats that are readable on-the-fly so many created their own formats and that's described here if youâre curious: https://trello.com/c/cCe86Mcr
Attached is a chart of speed vs best compression. Recommended algorithm: 7-Zip LZMA2 Default
Ideally, if a device is powerful enough it could read the 7Z on the fly but even then I feel takes too much work then doing it per download / upload of a game since cloud space is the real factor users have to consider.
Subject says it all? I donât know many who import via iTunes so maybe the long hold could be for going straight to the file chooser and tap should stay the chooser?
Why am I coding an integration for pCloud?
Because they've been around since 2013. Their API is easy to use, and the pricing is super affordable which is highly needed for users the bigger ROMs become
Series of Harmony Sync Choices
⢠https://trello.com/c/E8tlY72F/39-feature-private-altserver-local-syncing-support?menu=filter&filter=sync
⢠https://trello.com/c/g7H0DC6Z/211-enhancement-add-ftp-as-an-another-sync-choice?menu=filter&filter=sync
Related to this https://trello.com/c/sHuovM1s but instead of manual collections / folders - theyâre Smart Folders.
Smart options could be:
⢠Most frequently opened games
⢠Games with most time spent playing
⢠Highest rated (possibly using gamefaqs / metacritic)
⢠Last played
⢠Recently Added
This ties into the widget series: https://trello.com/c/EGoIGxPy/106-feature-recent-games-widget
This homescreen widget should actually be able to have a setting to choose from any Delta Collection (Folder) as per this card: https://trello.com/c/sHuovM1s
This will allow a user to overwrite their entire Delta Library with the library in the cloud so in case of an sync error - a user doesnât have to delete and re-install Delta to fix it.
This should also include the dates for completed or finished as well as a count for each for how many times it was beaten.
The user can switch these game statuses from the contextual menu.
Reference:
https://discord.com/channels/625766896230334465/626109625900728340/770492574041505822
⢠If user changes game name and the cover art is blank, then re-match with the VGDB and add the most relevant title based on console and name
⢠If user clicks to change cover art, auto fill in the games title and filter only that specific console's game covers
⢠Global setting like:
1) Automatically guess and populate cover art
2) If cover art canât be matched exactly, open up the artwork chooser with file name pre-filled (minus any parenthesis, brackets)
3) Just use a generic âblank cover artâ of a match canât be found and you can change it manually.
This ties into the widget series: https://trello.com/c/7ykKXOR0/143-feature-homescreen-widget-for-games-that-you-want-to-play-next
Create a Delta Widget with your most recently played game as the smallest size (V1), your most recent 4 / 8 games played as the medium size / large size respectively (V2)
Bonus
Allow users to customize the 4 / 8 games instead of it just being the most recent.
If there are more than 4 conflicts, itâs very likely an overall sync error - like a user logged out and back into Delta Sync or changed their Google password so they had to log back in or they switch between Delta versions (like testers do).
I think there should always be a âsync completely from cloudâ option in the âMerge Conflictâ pane when any conflicts happen and likewise âsync completely to cloud from local device optionâ.
This would resolve all conflicts at once with not much user frustration.
Choose multiple ROMs, zip files, and directories and Delta will recursively go through them and add all valid / non-duplicates.
Probably should add an undo button in case a 7Z has like every language rom in it.
Essentially a full backup of all the data stored in Delta.
Related to this card: https://trello.com/c/je3UiPig
Allow for games to be added into groups similar to the way iOS app icons work. Except you can add a game to more than one playlist. Thatâs imortant.
Think of them as âtagsâ and thatâs needed because a singular game could fall under many user collection groups. I mean this literally should work like music playlists in every sense.
Ability to save all cover locally and, in effect, the user's Harmony cloud.
This new section would join the "Auto Save", "Quick Save", and "Locked" special save state sections with a "Pinned" save state section - this is useful for those that use one save state for progress and the rest for experiments while theyâre gaming. I envision this as a section directly underneath Auto Save with a 2 pin limit.
Series of Harmony Sync Choices
⢠https://trello.com/c/E8tlY72F/39-feature-private-altserver-local-syncing-support?menu=filter&filter=sync
⢠https://trello.com/c/g7H0DC6Z/211-enhancement-add-ftp-as-an-another-sync-choice?menu=filter&filter=sync
Private server syncing support would allow for AltServer local file syncing rather than a cloud-based solution.
Alternative: Allows users to sync files with a self-hosted Nextcloud / ownCloud service.
I mean really removing anything inside brackets or parentheses and removing almost all special characters except for spaces (except trailing spaces) and punctuation if the punctuation is inside of the game title and not after the parenthesis.
This is the regex I use: (\d\d\d\d[^-].*-\s*)|(\s*\[[^()]*\])|(\s*\([^()]*\))|(\s*(?=(?:\.[^.]+)?$))|, The and it cleans all ROMs I've thrown against it so far.
It doesn't account for (Disc #) yet tho since that should be translated to (D#).
Provenance does this if you want an example. But when a user imports - and thereâs no exact match, users should have a setting in Settings âUse fuzzy logic to match games with their titles and artworkâ.
Then when a hash doesnât match but a title is 70% correct, you prompt the user about the name change, allowing them to edit it, and let them click on the artwork in that prompt to change it as well if theyâd like to.
This will be automated in multiple ways.
First, a user can manually link disc based games in the contextual menu.
Second, same titled games with either (D1) or (Disc 1) appended to their filename but the title is the same amongst the disc auto-collapse into one entry.
I'll add database here:
https://superfamicom.org/info/granhistoria-genshi-sekaiki for example
https://www.mobygames.com/game-group/console-generation-exclusive-snes/offset,0/so,1d/
Another database: https://nesdir.github.io/26D3082C_USA.html
Solbrain/Shatterhand co-op hack is the best example and can be found here.
This could be a separate folder in the Cores folder to add the "music packs".
For example, the pictured attached is an example of advanced settings for NES games like being able to bypass, artificially, the limit of 8 sprites on NES.
Lunar's Disc switching screens are attached to this. There's two methods to solve this. In the screenshot I was using Google's OCR to scope out the word "Disc" and that does work so OCR is an option if we use it to check if the game is on a Disc Switch Splash Screen (and which disc number it wants us to insert). The alternative and preferable method would be to gather all the splash screens and we can use them to compare with the games output and if they match, switch discs.
Every switch disc screen could be boiled down to a video output frame checksum (or series of them) and each could correspond to a different disc.
The OCR could ofc just read "disc #" and tell Delta the number but checksums of splash screens would be best.
This function should be completely navigable via controller. It should also keep a cache of the currently viewed page and scroll position per game so it will work offline and merely pushing a mapped controllers special button or button combo should toggle the appearance of the in-app browser. This external controller button will automatically be configurably mapped via https://trello.com/c/BTvdcooT
UNDO QUICK SAVE
Every Auto Save made doesn't overwrite the last one temporarily, until a new one is made (likewise account for accidental multiple quick save button clicks), and the in-game menu should add a dynamic button that appears for those few minutes that says "Undo Quick Save" (not unlike the feature for https://trello.com/c/Q61t99su/223-qol-classic-square-enix-soft-reset-global-controller-combination-for-all-games where you dynamically add a "Undo Reset" button.
If using a controller, then the user, after making the mistake, can hold down the quick-save-state mapped button and the Quick Save that was just created will be removed and replaced with the original. This should be indicated to the user through some kind of on-screen indicator that they Undid the Quick Save
UNDO QUICK LOAD
On every quick load, an "auto" save state will be created (account for accidental multiple quick load button clicks). If a user quick loads on accident and then realizes this and then holds down the load button after the accident, then Delta will load the auto save it made right before the load. Likewise to the solution for quick save undo-ing, there will also be a button in the in-game menu that appears for, say, a minute that says "Undo Quick Load"
Alternatively, rewinding will rewind the user back before the quick load, but unfortunately not all users will have that mapped so the "undo" solution had to use the same button.
This is mainly for homebrew but also for Blaster Master.
https://www.reddit.com/r/emulation/comments/79nb9m/nestopia_has_trouble_running_special_mapper_rom/
There are two save states at the top and modular control over when they are overwritten would be beneficial:
⢠On return to Delta Homescreen
⢠On return to Springboard
⢠On crash / force quit / termination for any other reason
⢠On Delta app resume
⢠On opening the Delta in-game menu
Rewinding is already taken care of by Ian via: https://trello.com/c/Pavxk0HL/199-feature-rewind-to-a-recent-point-in-gameplay-pr-ian-clawson
This includes artwork. Also, automatically fill game title in the search bar when user taps to add custom artwork from VGDB.
(and if game is renamed try again if there wasnât a header / hash match initially)
Along with Yoshi Topsy Turvy and WarioWare (tho WarioWare might already work). This could use the gyro in the iPhone and PS4 Controller when using an external controller.
Core switch would be needed to support these peripherals. https://github.com/mgba-emu/mgba/
This new section would join the "Auto Save", "Quick Save", and "Locked" special save state sections with a "Pinned" save state section - this is useful for those that use one save state for progress and the rest for experiments while theyâre gaming. I envision this as a section directly underneath Auto Save with a 2 pin limit.
Bonus if the game auto-loads via: https://trello.com/c/vSiYqBdV
Unknown what causes them but if you hack Diamond and remove itâs internal frame limiter then it fixes this bug which I found odd. On top of that, when it dips down to 10fps, all a user needs to do is go to tin game menu and then resume and itâs 30FPS again.
Homebrew uses it as well as a list of GBA games - the predominant ones being:
Drill Dozer and WarioWare: Twisted! And Mario Advance 4
But the whole list is:
Drill Dozer
Mario & Luigi: Superstar Saga
PokĂŠmon Pinball: Ruby & Sapphire
Shikakui Atama wo Marukusuru Advance: Kokugo Sansu Rika Shakai
Shikakui Atama wo Marukusuru Advance: Kanji Keisan
Summon Night Craft Sword Monogatari: Hajimari no Ishi
Super Mario Advance 4: Super Mario Bros. 3
For example weeks 1 thru 4 of Zelda: Ancient Stone Tablet
Possibly thru IPS patches for "touchscreen" levels of difficulty.
Iâve found in games like Spirit Tracks. That itâs a lot easier to navigate when the screens are flipped and the âtouch screenâ is actually the normal DS screen. I just flipped the screens by changing a skin. But I found the same skin was also useful for The World Ends With You.
The DS was made for a style which doesn't work well with an entire finger, especially for games like Zelda: Spirit Tracks where you can only move by running on the same screen you're touching, but touching it makes it so you can't see where youâre going. I found if you swap the screens but make the touch screen the âwrong screenâ, then it actually makes for a better experience. I assume this is the same for other games (it helped a lot with The World Ends With You as well).
Also, use OCR to detect swap disk screens and loading screens to swap / fast forward in an automated way. Mesen may be needed for this.
Extensions of ROMs are .bs and .fig
Looks like Mupen64 supports dynamic recompilation (JIT). Enable it?
Could research this while figuring out current N64 bugs listed here: https://trello.com/c/O3OhNfIA
I know Provenance has N64 JIT. Gotta look into what core they use.
The newest JIT rewrite currently might have some BUILD bugs but it's built into mupen64-plus so it can still be used by Delta if you can build it: https://github.com/mupen64plus/mupen64plus-core/issues/879
PROMPT: âThis save state is based on a core that is not your default core for this console, Delta will temporarily switch cores, but itâs recommended you make an in-game save and reset the game to go to your default core, then load your in-game save, then save state again and delete this one.â
The SRAM stays the same anyway and this could def play into this card somehow intelligently: https://trello.com/c/wcYFP8n9
True emulation of the Super Gameboy allowing for additional functionality (color enhancement and 4:3 borders) can only be accomplished by switching cores as gambette doesn't have plans to support it, mGBA on the other hand, does. And with my switching cores seamlessly card - https://trello.com/c/wcYFP8n9/198-feature-make-all-emulator-core-switches-in-the-future-foolproof-save-wise - then switching cores might not be the worst thing in the world. Plus mGBA comes with other enhancements: https://trello.com/c/CYlK8DsU/109-look-into-switching-gba-core-to-mgba-for-future-gba-dolphin-connectivity-and-e-reader-emulation
Note: Even emulator core version updates can break save states - particularly for newer systems as they are quite actively developed. So this may be needed for random core updates in the future as well.
Okay, so, whenever a user globally changes an emulator core (like Desume to melonDS for example) - any game with current save states gets its core locked in place - so all changing the core does is change the default core that's used for roms that don't have save states. After which, the roms where the emulator core is locked (any core with a pre-existing save state) should only be allowed to switch out of that core to another core on a game by game basis. Let me explain.
Premise
Basically, add a preference in the in-game menu config that says "Switch Cores".
User Prompt: "You can only move one save state to the new core, so please select which save state you would like to move to the new emulator core."
*user selects their preferred state*
User Prompt: "This save state will now load with the current emulator core. The next time you make an in-game save, a prompt will ask you to confirm switching to the new core and the system will reset for you to load your new in-game save."
*user goes and makes an in game save as instructed*
*Delta detects the in-game save has been made and automatically prompts the user again about switching cores, if they say yes, Delta stops the rom, switches cores, and starts the rom up*
Note: If user quits Delta or exits the game before this process is finished they have to restart - but during this user-guiding core-switch process the "Swap Core" button will be greyed out and the text switched to Swapping Core.
As soon as the user gets to the loading screen and selects their file, Delta can detect that a la https://trello.com/c/syjoBf8i/175-enhancement-when-importing-a-save-ram-file-as-soon-as-the-emulator-core-accesses-the-sram-file-wait-a-few-seconds-and-save-state - and do an automatic save state right as soon as they load their in-game state in the new core.
Boom, they have a save-state exported over to another core and we guided there each step intelligently.
This would require building an emulator core for bsnes-hd tho.
This may sound crazy, but that means, to the user, the user imported the save and they don't have to really understand what kind of save it was if they come back to it later (since it'll literally be SRAM and a save state automatically). It'll be in the "Save State" section and in the normal "SRAM" in-game section. It's a QoL thing, but user's get confused man.
https://www.libretro.com/index.php/category/runahead/
AND
https://near.sh/articles/input/run-ahead
void Emulator::runFrameAhead(unsigned int runAhead) { if(runAhead == 0) return runFrame(); //sanity check //poll the input states of the controller buttons input.poll(); emulator.run(); //video and audio frames discarded (not sent to the monitor and speakers) //capture the system state so that we can restore it later auto saveState = emulator.serialize(); //we can run-ahead as many frames as we want while(runAhead > 1) { emulator.run(); //these frames are also discarded runAhead--; } //here we run the final frame auto [videoFrame, audioFrames] = emulator.run(); //the final frame is rendered video.output(videoFrame); audio.output(audioFrames); //lastly, we restore the save state we saved earlier emulator.unserialize(saveState); } These preferences / enhancements will contain settings that help test various aspects of Delta, including emulation performance and skin layouts.
Global settings could include:
⢠Display FPS during gameplay
⢠Skin debugging (Ian already PRed this)
⢠Change skin layout between any supported layouts (this allows creators to test every layout in their skin, without having each individual device)
⢠Option to delete all cloud files and do a fresh sync to help fix sync failures
Per console settings could include:
⢠Internal Resolution
⢠Their raw emulator ini files if they exist
⢠FPs display override
Per game settings could include:
⢠Internal Resolution
⢠Their raw emulator ini files if they exist
⢠FPs display override
Note: Everything should be synced to the cloud and always allow the user to reset their ini core files if they mess up
Switching between this cores for users easily is explained here: https://trello.com/c/wcYFP8n9/198-feature-make-all-emulator-core-switches-in-the-future-foolproof-save-wise
We'd need to enhance the modular emulator core protocol so that emulator cores can truly be plug and play. We can base this on the way RetroArch works with it's modular core system: https://github.com/libretro/RetroArch
Retroarch appears to pre-compile all of it's cores (but you can also download them after the fact so I'm not sure on this). But technically using dynamic codesigning we could add / remove cores at will without having to re-sign. But, even if we needed to re-sign, that's literally the point of AltStore / AltDaemon / AltServer, so we're more than capable of doing so automatically if we wanted this "download external core on-demand" feature but I donât see why we wouldnât include all cores precompiled cause techniques to do otherwise is very hard and I donât understand how RetroArch has that feature on iOS. They donât even know how it works (I asked).
Console and Core List
PSX
https://github.com/notaz/pcsx_rearmed
https://github.com/stenzek/duckstation
https://github.com/libretro/beetle-psx-libretro
PSP
https://github.com/hrydgard/ppsspp
3DS
https://github.com/citra-emu/citra-android
https://github.com/OatmealDome/citra-android
Gamecube / Wii
https://github.com/OatmealDome/dolphin
DOS
https://github.com/MattAndrzejczuk/MSDOS-for-iOS
Better performance and fixes issues with mario kart and the billboard. less input lag. Fixes various graphical issues like Z-fighting (can cause migraines to people) in the distance.
Core Source: https://github.com/Themaister/parallel-rdp
Reference: https://www.libretro.com/index.php/parallel-n64-low-level-rdp-upscaling-is-finally-here/
mGBA is the only known GBA emulator that is able to connect to Dolphin and be used as if it was connected to a GameCube.
mGBA also is the exclusive emulator that supports GBA eReader a la: https://twitter.com/luigiblood/status/1376477364427837440?s=21
Reference:
https://github.com/mgba-emu/mgba
This interpreted (slower) version of JIT is still faster than no JIT at all and doesnât require an AltServer connection. Could look into this when bored.
Reference: https://twitter.com/snfernandez/status/1383394958317551616?s=21
melonDS branch with camera support: https://github.com/Arisotura/melonDS/tree/dsi_camera
Blog post about it: http://melonds.kuribo64.net/comments.php?id=126
Adds support for Delta displaying across chromecast or similar casting devices.
Allowing users to manage multiple save files and switch between them, set default, etc.
Similar to the gba4ios startup intro.
Use OCR (Optical Character Recognition) in Delta to provide a text-to-speech interface built into the app for the blind or those with poor eyesight. Allows certain games to be accessible in ways not currently available on any other iOS emulator.
https://developer.apple.com/documentation/vision https://developer.apple.com/documentation/avfoundation/avspeechsynthesizer
PIP doesnât have access to the GPU.
A whitelist of games is included in the plugin.
https://twitter.com/dariosamo/status/1532736513183731713?s=21&t=F6ieESRR6HSr5KedSJXUxw
Star Ocean 7Z: 3.69GB which unzips to:
Star Ocean (Disc 1).ISO: 4gb
Star Ocean (Disc 2.iso: 4GB
You get the idea.
Almost all multi-disc games benefit from compressing them as ONE archive. Delta would have to do that when uploading or downloading from the cloud.
Lots of reported missing graphics that often makes the games unplayable. The most reported ones are listed below. You could look into switching or updating the N64 core and while youâre at it, look into this: https://trello.com/c/ukydPGUF
This is best handled upstream and merged as part of a core update. But making a note of it here for reference and for Delta user's to follow our upstream GBA core team's ticket for this feature: https://github.com/visualboyadvance-m/visualboyadvance-m/issues/810
Feel like this would have to be some kind of OatmealDome collab.
Just needs to be rebuilt, IPA exported, and then distributed for users to install via the new version of AltStore as listed here: https://trello.com/c/Obz2CEFJ
Ability to use graphics filters to alter the appearance of games - such as various graphical effects (mirroring / blurring / stretching). This helps with different color schemes on systems like NES and GB if you run through Core Graphic Filters but the full palette preset card is here https://trello.com/c/YbMKOdBc.
Added to: 1.2b
Added with v1.2b
For games that require a more specific skin (for example: fighting games with tight precision required) to play, a skin can be assigned to override the default skin for that system.
Added with v1.2b
Added with v1.2b2
Exports the save file of one game at a time.
Contributor: https://github.com/ericlewis
Added with v1.2b2
Allows for the use of melonDS JIT compilation for massive speed boosts on supported devices. Only works on devices iOS 14-14.3
This technique uses a quirk in the Xcode debugging software to enable JIT in the app when AltServer is present.
Initial version will include the ability for AltServer to enable this manually for other apps but this will be enabled automatically as needed for Delta along with a simple library for other developers (like UTM or Dolphinâs devs) to achieve the same automated functionality as detailed here: https://trello.com/c/YNjfbtX2
Important
Mobile Device Service might need to be restarted when Delta requests JIT from AltServer, this can be done manually over SSH (and the Shortcuts app) - but AltServer will eventually be able to do this on-demand: https://trello.com/c/s9PxKHy6
Sidenote
Public users can set up this technique manually using spidey123222 and jkcoxsonâs guide (from the Delta Discord): https://docs.google.com/document/d/11_jju27qzhH_epq9XS1SlIlaBDPfvekRRYs5NS_ze_U/edit
Reference(s)
https://discord.com/channels/625766896230334465/630158257910185994/837467425154531368 (Patron Discord)
𤣠𤣠đ¤Ł