diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..4eb2283c --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +text eol=lf \ No newline at end of file diff --git a/.github/workflows/cooker-selfhosted.yml b/.github/workflows/cooker-selfhosted.yml index 0dbf3ad4..677268e5 100644 --- a/.github/workflows/cooker-selfhosted.yml +++ b/.github/workflows/cooker-selfhosted.yml @@ -4,6 +4,14 @@ on: push: branches: - cooker* + paths: + - '.github/workflows/**' + - 'emu-configs/**' + - 'es-configs/**' + - 'rd-submodules/**' + - '*.sh' + - 'net.retrodeck.retrodeck.yml' + - 'net.retrodeck.retrodeck.appdata.xml' pull_request: branches: - cooker* @@ -21,14 +29,23 @@ jobs: - name: Remove stuck mounts run: sudo umount -f /home/ubuntu/actions-runner/_work/RetroDECK/RetroDECK/.flatpak-builder/rofiles/* continue-on-error: true - - - name: Generate build ID - id: generating_buildid - run: echo "##[set-output name=build-id;]$(echo "$( git rev-parse --short HEAD )")" - + - uses: actions/checkout@v3 - - name: Initialize enviornment + - name: Generate build ID + run: | + word1=$(shuf -n 1 ${GITHUB_WORKSPACE}/automation_tools/codename_wordlist.txt) + capitalized_word1="$(tr '[:lower:]' '[:upper:]' <<< ${word1:0:1})${word1:1}" + word2=$(shuf -n 1 ${GITHUB_WORKSPACE}/automation_tools/codename_wordlist.txt) + capitalized_word2="$(tr '[:lower:]' '[:upper:]' <<< ${word2:0:1})${word2:1}" + result=$capitalized_word1$capitalized_word2 + echo $result > ${GITHUB_WORKSPACE}/buildid + ls -lah ${GITHUB_WORKSPACE} # DEBUG + cat ${GITHUB_WORKSPACE}/buildid # DEBUG + echo "buildid=$result" >> $GITHUB_ENV + echo "VersionID is $result" + + - name: Initialize environment run: | git pull git submodule init @@ -38,12 +55,12 @@ jobs: flatpak install --user -y --noninteractive \ org.kde.Sdk//6.3 \ org.kde.Platform//6.3 \ - org.freedesktop.Platform.ffmpeg-full/x86_64/21.08 \ + org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 \ io.qt.qtwebengine.BaseApp/x86_64/6.3 \ org.freedesktop.Sdk.Extension.llvm13 \ - org.freedesktop.Sdk.Extension.dotnet6/x86_64/21.08 - echo ${GITHUB_WORKSPACE} #DEBUG - df -h ${GITHUB_WORKSPACE} #DEBUG + org.freedesktop.Sdk.Extension.dotnet6/x86_64/22.08 \ + runtime/org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 + /bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh # Run pre-build automation tasks - name: Build flatpak run: | @@ -70,7 +87,7 @@ jobs: - name: Publish the flatpak in a new cooker release uses: ncipollo/release-action@v1 with: - tag: "${{ env.GITHUB_REF_SLUG }}-${{ steps.generating_buildid.outputs.build-id }}" + tag: "${{ env.GITHUB_REF_SLUG }}-${{ env.buildid }}" body: | # Release Notes (Cooker) This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}. @@ -93,4 +110,4 @@ jobs: with: name: retrodeck-flatpak path: RetroDECK.flatpak - continue-on-error: true \ No newline at end of file + continue-on-error: true diff --git a/.github/workflows/main-selfhosted.yml b/.github/workflows/main-selfhosted.yml index 212187c6..c1a115a0 100644 --- a/.github/workflows/main-selfhosted.yml +++ b/.github/workflows/main-selfhosted.yml @@ -46,10 +46,12 @@ jobs: flatpak install --user -y --noninteractive \ org.kde.Sdk//6.3 \ org.kde.Platform//6.3 \ - org.freedesktop.Platform.ffmpeg-full/x86_64/21.08 \ + org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 \ io.qt.qtwebengine.BaseApp/x86_64/6.3 \ org.freedesktop.Sdk.Extension.llvm13 \ - org.freedesktop.Sdk.Extension.dotnet6/x86_64/21.08 + org.freedesktop.Sdk.Extension.dotnet6/x86_64/22.08 \ + runtime/org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 + /bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh # Run pre-build automation tasks - name: Build flatpak run: | @@ -102,4 +104,4 @@ jobs: with: name: retrodeck-flatpak path: RetroDECK.flatpak - continue-on-error: true \ No newline at end of file + continue-on-error: true diff --git a/automation_tools/automation_task_list.cfg b/automation_tools/automation_task_list.cfg new file mode 100644 index 00000000..f1624f43 --- /dev/null +++ b/automation_tools/automation_task_list.cfg @@ -0,0 +1,11 @@ +# The proper format for this file is +# ACTION^PLACEHOLDERTEXT^URL^REPO(Optional) +# hash^DOOMSHAPLACEHOLDER^https://buildbot.libretro.com/assets/cores/DOOM/Doom%20%28Shareware%29.zip +hash^VITASHAPLACEHOLDER^https://github.com/Vita3K/Vita3K/releases/download/continuous/ubuntu-latest.zip +hash^DUCKSTATIONSHAPLACEHOLDER^https://github.com/stenzek/duckstation/releases/download/preview/DuckStation-x64.AppImage +hash^SAMEDUCKSHAPLACEHOLDER^https://buildbot.libretro.com/nightly/linux/x86_64/latest/sameduck_libretro.so.zip +hash^PPSSPPBIOSHASHPLACEHOLDER^https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip +hash^MSXBIOSHASHPLACEHOLDER^http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip +hash^XEMUHDDHASHPLACEHOLDER^https://github.com/mborgerson/xemu-hdd-image/releases/latest/download/xbox_hdd.qcow2.zip +latestcommit^UNIVERSALDYNAMICINPUTCOMMITPLACEHOLDER^https://github.com/Venomalia/UniversalDynamicInput^main +outside_info^VERSIONPLACEHOLDER^${GITHUB_WORKSPACE}/buildid diff --git a/automation_tools/codename_wordlist.txt b/automation_tools/codename_wordlist.txt new file mode 100644 index 00000000..6faa556b --- /dev/null +++ b/automation_tools/codename_wordlist.txt @@ -0,0 +1,3319 @@ +aback +abase +abate +abaya +abbey +abbot +abets +abhor +abide +abode +abort +about +above +abuse +abuts +abyss +ached +aches +acids +acing +ackee +acorn +acres +acrid +acted +actin +actor +acute +adage +adapt +added +adder +addle +adept +adieu +adios +adits +adman +admin +admit +adobe +adobo +adopt +adore +adorn +adult +adzes +aegis +aeons +aerie +affix +afire +afoot +afore +after +again +agape +agate +agave +agent +aggro +agile +aging +aglow +agony +agora +agree +ahead +ahold +aided +aider +aides +ailed +aimed +aimer +aioli +aired +aisle +alarm +album +alder +aleph +alert +algae +algal +alias +alibi +alien +align +alike +alive +alkyd +alkyl +allay +alley +allot +allow +alloy +allyl +aloes +aloft +aloha +alone +along +aloof +aloud +alpha +altar +alter +altos +alums +amass +amaze +amber +ambit +amble +ambos +amend +amide +amine +amino +amiss +amity +amnio +among +amour +amped +ample +amply +amuse +ancho +angel +anger +angle +angry +angst +anima +anime +anion +anise +ankle +annas +annex +annoy +annul +anode +anole +antic +antis +antsy +anvil +aorta +apace +apart +aphid +apnea +apple +apply +apron +apses +apter +aptly +aquas +arbor +ardor +areal +areas +areca +arena +argon +argot +argue +argus +arias +arils +arise +armed +armor +aroma +arose +array +arrow +arses +arson +artsy +asana +ascot +ashen +ashes +aside +asked +asker +askew +aspen +aspic +assay +asses +asset +aster +astir +asura +atlas +atman +atoll +atoms +atone +atopy +attic +audio +audit +auger +aught +augur +aunts +aunty +aural +auras +autos +auxin +avail +avers +avert +avian +avoid +avows +await +awake +award +aware +awash +awful +awoke +axels +axial +axils +axing +axiom +axion +axles +axons +azide +azole +azure +babel +babes +babka +backs +bacon +baddy +badge +badly +bagel +baggy +bails +bairn +baits +baize +baked +baker +bakes +baldy +baled +baler +bales +balks +balky +balls +balms +balmy +balsa +banal +bands +bandy +banes +bangs +banjo +banks +barbs +bards +bared +barer +bares +barge +barks +barmy +barns +baron +barre +basal +based +baser +bases +basic +basil +basin +basis +basks +basso +bassy +baste +batch +bated +bathe +baths +batik +baton +batts +batty +bawdy +bawls +bayed +bayou +beach +beads +beady +beaks +beams +beamy +beans +beard +bears +beast +beats +beaus +beaut +beaux +bebop +becks +beech +beefs +beefy +beeps +beers +beery +beets +befit +began +beget +begin +begun +beige +being +belay +belch +belie +belle +bells +belly +below +belts +bench +bends +bendy +bento +bents +beret +bergs +berms +berry +berth +beryl +beset +bests +betas +betel +betta +bevel +bezel +bhaji +bible +bicep +biddy +bided +bides +bidet +bight +bigot +bijou +biked +biker +bikes +biles +bilge +bills +billy +bimbo +bindi +binds +binge +bingo +biome +biota +bipod +birch +birds +birth +bison +bitch +biter +bites +bitsy +bitty +black +blade +blame +bland +blank +blare +blase +blast +blaze +bleak +bleat +blebs +bleed +bleep +blend +bless +blimp +blind +bling +blini +blink +blips +bliss +blitz +bloat +blobs +block +blocs +blogs +bloke +blond +blood +bloom +bloop +blots +blown +blows +blued +blues +bluey +bluff +blunt +blurb +blurs +blurt +blush +board +boars +boast +boats +bobby +bocce +boche +boded +bodes +boffo +bogey +boggy +bogie +bogus +boils +bolas +boles +bolls +bolts +bolus +bombe +bombs +bonds +boned +boner +bones +boney +bongo +bongs +bonks +bonny +bonus +boobs +booby +booed +books +booms +boomy +boons +boors +boost +booth +boots +booty +booze +boozy +boppy +borax +bored +borer +bores +boric +borne +boron +bosom +boson +bossy +bosun +botch +bough +boule +bound +bouts +bowed +bowel +bower +bowls +boxed +boxer +boxes +boyar +boyos +bozos +brace +bract +brads +brags +braid +brain +brake +brand +brans +brash +brass +brats +brave +bravo +brawl +brawn +brays +braze +bread +break +bream +breed +brews +briar +bribe +brick +bride +brief +brier +brigs +brims +brine +bring +brink +briny +brisk +brits +broad +broch +broil +broke +brome +bronc +brood +brook +broom +broth +brown +brows +bruin +bruit +brunt +brush +brute +bubba +bucks +buddy +budge +buffs +buggy +bugle +build +built +bulbs +bulge +bulks +bulky +bulla +bulls +bully +bumps +bumpy +bunch +bunds +bundt +bunks +bunny +bunts +buoys +burbs +burgs +burka +burly +burns +burnt +burps +burqa +burro +burrs +bursa +burst +bused +buses +bushy +busts +busty +butch +butte +butts +buxom +buyer +buzzy +bylaw +byres +bytes +byway +cabal +cabby +caber +cabin +cable +cacao +cache +cacti +caddy +cadet +cadre +cafes +caged +cages +cagey +cairn +caked +cakes +cakey +calfs +calif +calla +calls +calms +calve +calyx +camel +cameo +campo +camps +campy +canal +candy +caned +canes +canid +canna +canny +canoe +canon +canto +caped +caper +capes +capon +capos +caput +carat +carbo +carbs +cards +cared +carer +cares +cargo +carob +carol +carom +carps +carry +carte +carts +carve +cased +cases +casks +caste +casts +catch +cater +catty +caulk +cause +caved +caver +caves +cavil +cease +cecal +cecum +cedar +ceded +cedes +ceili +celeb +cello +cells +celts +cents +chads +chafe +chaff +chain +chair +chalk +champ +chana +chant +chaos +chaps +chard +charm +chars +chart +chase +chasm +chats +cheap +cheat +check +cheek +cheep +cheer +chefs +chemo +chert +chess +chest +chews +chewy +chica +chick +chico +chide +chief +child +chile +chili +chill +chime +chimp +china +chine +ching +chino +chins +chips +chirp +chits +chive +chock +choir +choke +chomp +chops +chord +chore +chose +chows +chubs +chuck +chuff +chugs +chump +chums +chunk +churn +chute +cider +cigar +cinch +circa +cisco +cited +cites +civet +civic +civil +civvy +clack +clade +claim +clamp +clams +clang +clank +clans +claps +clash +clasp +class +clave +claws +clays +clean +clear +cleat +clefs +cleft +clerk +click +cliff +climb +clime +cline +cling +clink +clips +cloak +clock +clods +clogs +clomp +clone +close +cloth +clots +cloud +clout +clove +clown +clubs +cluck +clued +clues +clump +clung +clunk +coach +coals +coast +coati +coats +cobia +cobra +cocci +cocks +cocky +cocoa +codas +codec +coded +coder +codes +codex +codon +coeds +cohos +coifs +coils +coins +cokes +colas +colds +coles +colic +colin +colon +color +colts +comas +combo +combs +comer +comes +comet +comfy +comic +comma +commo +compo +comps +comte +conch +condo +coned +cones +conga +congo +conic +conks +cooed +cooks +cools +coops +coopt +coped +copes +copra +copse +coral +cords +cored +corer +cores +corgi +corks +corky +corms +corns +cornu +corny +corps +costs +cotta +couch +cough +could +count +coupe +coups +court +coven +cover +coves +covet +covey +cowed +cower +cowls +coyly +crabs +crack +craft +crags +cramp +crams +crane +crank +crape +craps +crash +crass +crate +crave +crawl +craws +craze +crazy +creak +cream +credo +creed +creek +creel +creep +creme +crepe +crept +cress +crest +crews +cribs +crick +cried +crier +cries +crime +crimp +crisp +crits +croak +crock +crocs +croft +crone +crony +crook +croon +crops +cross +croup +crowd +crown +crows +crude +cruel +cruet +crumb +cruse +crush +crust +crypt +cubby +cubed +cubes +cubic +cubit +cuddy +cuffs +culls +culpa +cults +cumin +cupid +cuppa +curbs +curds +cured +cures +curia +curio +curls +curly +curry +curse +curve +curvy +cushy +cusps +cuter +cutie +cutis +cutup +cycad +cycle +cyclo +cynic +cysts +czars +dacha +daddy +dados +daffy +daily +dairy +daisy +dales +dames +damns +damps +dance +dandy +dared +dares +darks +darns +darts +dashi +dated +dater +dates +datum +daubs +daunt +davit +dawns +dazed +deals +dealt +deans +dears +deary +death +debit +debts +debug +debut +decaf +decal +decay +decks +decor +decoy +decry +deeds +deems +deeps +deers +defer +deify +deign +deism +deist +deity +dekes +delay +delft +delis +dells +delta +delve +demon +demos +demur +denim +dense +dents +depot +depth +derby +desks +deter +detox +deuce +devil +dewar +dhikr +dhows +dials +diary +diced +dices +dicey +dicky +dicta +diets +digit +diked +dikes +dills +dilly +dimer +dimes +dimly +dinar +dined +diner +dines +dingo +dings +dingy +dinks +dinky +dinos +diode +dippy +direr +dirge +dirty +disco +discs +dishy +disks +ditch +ditsy +ditto +ditty +ditzy +divan +divas +dived +diver +dives +divot +divvy +dizzy +docks +dodge +dodgy +dodos +doers +doffs +doges +doggy +dogma +doing +doled +doles +dolls +dolly +dolor +dolts +domed +domes +donee +dongs +donna +donor +donut +dooms +doomy +doors +doozy +doped +dopes +dopey +dorks +dorky +dorms +dosas +dosed +doses +doted +dotes +dotty +doubt +dough +doula +douse +doves +dowdy +dowel +dower +downs +downy +dowry +dowse +doyen +dozed +dozen +dozer +dozes +drabs +draft +drags +drain +drake +drama +drams +drank +drape +drawl +drawn +draws +drays +dread +dream +dreck +dregs +dress +dribs +dried +drier +dries +drift +drill +drily +drink +drips +drive +droid +droll +drone +drool +droop +drops +dross +drove +drown +drugs +druid +drums +drunk +drupe +dryad +dryer +dryly +duals +ducal +ducat +duchy +ducks +ducky +ducts +dudes +duels +duets +duffs +dukes +dulls +dully +dulse +dumbo +dummy +dumps +dumpy +dunce +dunes +dunks +duomo +duped +dupes +dural +durum +dusks +dusky +dusts +dusty +dutch +duvet +dwarf +dweeb +dwell +dwelt +dyads +dyers +dying +dykes +eager +eagle +eared +earls +early +earns +earth +eased +easel +easer +eases +eaten +eater +eaves +ebbed +ebony +ebook +echos +eclat +edema +edged +edger +edges +edict +edify +edits +eejit +eerie +egged +egret +eider +eidos +eight +eject +ejido +eland +elbow +elder +elect +elegy +elide +elite +elope +elude +elute +elven +elves +email +embed +ember +emcee +emery +emirs +emits +emote +empty +enact +ended +endow +enema +enemy +enjoy +ennui +enoki +enrol +ensue +enter +entry +envoy +eosin +epics +epoch +epoxy +equal +equip +erase +erect +ergot +erode +erred +error +erupt +essay +ether +ethic +ethos +ethyl +etude +euros +evade +evens +event +every +evict +evils +evoke +ewers +exact +exalt +exams +excel +execs +exert +exile +exist +exits +expat +expel +expos +extol +extra +exude +exult +exurb +eying +eyrie +fable +faced +facer +faces +facet +facia +facts +faded +fader +fades +faery +fails +faint +fairs +fairy +faith +faked +faker +fakes +fakie +fakir +falls +famed +fancy +fangs +fanny +farce +fared +fares +farms +farts +fasts +fatal +fated +fates +fatso +fatty +fatwa +fault +fauna +fauns +favas +faves +favor +fawns +faxed +faxes +fazed +fazes +fears +feast +feats +fecal +feces +feeds +feels +feign +feint +fella +fells +felon +felts +femme +femur +fence +fends +feral +feria +ferns +ferny +ferry +fests +fetal +fetch +feted +fetes +fetid +fetus +feuds +fever +fewer +fiats +fiber +fibre +fiche +ficus +fiefs +field +fiend +fiery +fifes +fifth +fifty +fight +filch +filed +filer +files +filet +fills +filly +films +filmy +filth +final +finca +finch +finds +fined +finer +fines +finis +finks +fiord +fired +fires +firms +first +fishy +fists +fitly +fiver +fives +fixed +fixer +fixes +fizzy +fjord +flack +flags +flail +flair +flake +flaky +flame +flank +flans +flaps +flare +flash +flask +flats +flaws +flays +fleas +fleck +flees +fleet +flesh +flick +flier +flies +fling +float +flood +floor +flour +flown +flows +fluid +flyer +focal +focus +folks +fonts +foods +force +forms +forth +forty +forum +found +frame +fraud +fresh +fried +fries +front +frost +fruit +fuels +fully +funds +funny +gains +games +gamma +gases +gates +gauge +gears +genes +genre +ghost +giant +gifts +girls +given +gives +gland +glass +globe +glory +gloss +glove +glued +goals +goats +going +goods +grace +grade +grain +grams +grand +grant +grape +graph +grasp +grass +grave +great +greek +green +greet +grief +grill +grind +grips +gross +group +grove +grown +grows +guard +guess +guest +guide +guild +guilt +habit +hairs +halls +hands +handy +hangs +happy +harsh +hated +hates +haven +hawks +heads +heard +heart +heavy +hedge +heels +hello +helps +hence +herbs +highs +hills +hints +hired +hobby +holds +holes +holly +homes +honey +honor +hooks +hoped +hopes +horns +horse +hosts +hotel +hours +house +hover +human +humor +hurts +icons +ideal +ideas +idiot +image +imply +inbox +incur +index +indie +inner +input +intro +issue +items +inert +infer +infix +infos +infra +ingan +ingle +ingot +inion +inked +inker +inkle +inlay +inlet +inned +inner +innie +innit +inorb +input +inrun +insee +inset +inspo +intel +inter +intis +intra +intro +inula +inure +inurn +invar +inver +inwit +iodic +iodin +ionic +ioras +iotas +ippon +irade +iring +irked +iroko +irons +irony +isbas +ishes +isled +isles +islet +isnae +idler +idles +idlis +idola +idols +idyll +idyls +iftar +igapo +igged +igloo +iglus +ignis +ihram +ikans +ikats +ikons +ileac +ileal +ileum +ileus +iliac +iliad +ilial +ilium +iller +illth +image +imago +imams +imari +imaum +imbar +imbos +imbue +imide +imido +imids +imine +imino +imlis +immew +immit +immix +imped +impel +impis +imply +impot +impro +imshi +imshy +inane +inapt +inarm +inbox +inbye +incas +incel +incog +incur +incus +incut +index +india +indie +indol +indri +indue +inept +issei +issue +istle +itchy +items +ivied +ivies +ivory +ixias +ixnay +ixora +ixtle +izard +izars +izzat +jeans +jelly +jewel +joins +joint +jokes +judge +juice +juicy +jumps +jabot +jacal +jacks +jacky +jaded +jades +jager +jaggy +jails +jakes +jalap +jalee +jalor +jalur +jambe +jambs +jammy +janes +janky +japan +japed +japer +japes +jarls +jasey +jaspe +jatis +jatos +jaunt +jaups +jawan +jawed +jazzy +jeans +jebel +jedis +jeers +jefes +jehad +jello +jells +jelly +jemmy +jenny +keeps +kicks +kills +kinda +kinds +kings +knees +knife +knock +knots +known +knows +keeps +kills +kench +kilos +knelt +koala +knead +kayak +kevel +knack +knoll +kooky +kicks +kaput +khaki +knees +knock +krill +kudos +kempt +kiosk +knell +knife +krait +kites +keeve +kiddy +kneel +knobs +knurl +kaama +kabab +kabar +kabob +kacha +kacks +kadai +kades +kadis +kails +kaims +kaing +kains +kajal +kakas +kakis +kalam +kalas +kales +kalif +kalis +kalpa +kalua +kanae +kanal +kanas +kanat +kandy +kaneh +kanes +karns +karoo +karos +karri +karst +karsy +karts +karzy +kasha +katal +katas +katis +katti +kerry +kesar +kests +ketas +ketch +ketol +kevil +kexes +keyed +keyer +kibbe +kibbi +kibei +kibes +kibla +kicky +kiddo +kidel +kidge +kiefs +kiers +kieve +kiley +kilig +kilps +kilts +kilty +kinda +kinds +kindy +kines +kings +kingy +label +labor +lacks +lakes +lamps +lands +lanes +large +laser +lasts +later +laugh +layer +leads +leaks +learn +lease +least +leave +legal +lemon +level +lever +light +liked +likes +limbs +limit +lined +linen +liner +lines +links +lions +lists +lived +liver +lives +loads +loans +lobby +local +locks +lodge +logic +logos +looks +loops +loose +lords +loses +loved +lover +loves +lower +loyal +lucky +lunar +lunch +lungs +lying +lacey +lacis +lacka +lacks +laddu +laddy +laded +ladee +laden +lader +ladle +ladoo +lairs +lairy +laith +laity +laked +laker +lakes +lance +lanch +lande +lands +laned +lanes +lanky +lants +lapas +lapel +lapin +lapis +lapje +lappa +lappy +lapse +larch +lards +lardy +laree +larva +lased +laser +lases +lassi +lasso +lassy +lasts +latah +latch +later +leany +leaps +leapt +learn +lears +leary +lease +leash +least +leats +leave +leavy +leaze +leben +leccy +leche +ledes +leeps +leers +leery +leese +leets +leeze +lefte +lefts +lefty +legal +leger +leges +legge +leggo +macro +magic +major +maker +makes +males +maple +march +marks +marry +masks +match +mates +maths +matte +maybe +mayor +meals +means +meant +meats +medal +media +meets +melee +menus +mercy +merge +merit +merry +messy +metal +meter +metro +micro +midst +might +miles +minds +mines +minor +minus +mixed +mixer +mixes +model +modem +modes +moist +money +month +moral +motor +mount +mouse +mouth +moved +moves +movie +music +myths +nails +naked +named +names +nasal +nasty +naval +needs +nerve +never +newer +newly +nexus +nicer +niche +night +ninja +ninth +noble +nodes +noise +noisy +norms +north +notch +noted +notes +novel +nurse +nylon +oasis +occur +ocean +offer +often +older +olive +omega +onion +onset +opens +opera +opted +optic +orbit +order +organ +other +ought +ounce +outer +owned +owner +oxide +ocker +ocote +ocrea +octad +octal +octan +octas +octet +octic +octli +octyl +oculi +odahs +odals +odder +oddly +odeon +odeum +odist +odium +odoom +odors +odour +odsos +odums +odyle +odyls +oecus +ofays +offal +offed +offer +oflag +often +ofuro +ogams +ogees +oggin +ogham +ogive +ogled +ogler +ogles +ogmic +ogres +ohelo +ohias +ohing +ohmic +oicks +oidia +oiled +oiler +oints +oiran +ojime +okapi +okays +okehs +okies +oking +packs +pages +pains +paint +pairs +panel +panic +pants +paper +parks +parts +party +pasta +paste +patch +paths +patio +pause +peace +peach +peaks +pearl +pedal +peers +penis +penny +perks +pests +petty +phase +phone +photo +piano +picks +piece +piles +pills +pilot +pinch +pipes +pitch +pixel +pizza +place +plain +plane +plans +plant +plate +plays +plaza +plots +plugs +poems +point +poker +polar +poles +polls +pools +porch +pores +ports +posed +poses +posts +pouch +pound +power +press +price +pride +prime +print +prior +prize +probe +promo +prone +proof +props +proud +prove +proxy +psalm +pulls +pulse +pumps +punch +pupil +puppy +purse +queen +query +quest +queue +quick +quiet +quilt +quite +quote +qadis +qaids +qajaq +qanat +qapik +qibla +qilas +qipao +qophs +qorma +quabs +quack +quads +quaff +quags +quail +quair +quais +quake +quaky +quale +qualm +qualy +quank +quant +quare +quark +quarl +quart +quash +queek +queem +queen +queer +quell +queme +quena +quern +query +queso +quest +quete +queue +queyn +queys +queyu +quibs +quich +races +racks +radar +radio +rails +rainy +raise +rally +ranch +range +ranks +rapid +rated +rates +ratio +razor +reach +react +reads +ready +realm +rebel +refer +reign +relax +relay +renal +renew +reply +reset +resin +retro +rider +rides +ridge +rifle +right +rigid +rings +rinse +risen +rises +risks +risky +rival +river +roads +robot +rocks +rocky +rogue +roles +rolls +roman +rooms +roots +ropes +roses +rough +round +route +royal +rugby +ruins +ruled +ruler +rules +rural +rakee +raker +rakes +rakhi +rakia +rakis +rakki +raksi +rakus +rales +ralli +rally +ralph +ramal +ramee +ramen +rames +ramet +ramie +ramin +ramis +rammy +ramon +ramps +ramus +ranas +rance +ranch +rando +rands +randy +ranee +ranes +ranga +range +rangi +rangy +ranid +ranis +ranke +ranks +sadly +safer +salad +sales +salon +sandy +satin +sauce +saved +saves +scale +scalp +scans +scare +scarf +scary +scene +scent +scoop +scope +score +scout +scrap +screw +seals +seams +seats +seeds +seeks +seems +sells +sends +sense +serum +serve +setup +seven +sewer +shade +shaft +shake +shall +shame +shape +share +shark +sharp +sheep +sheer +sheet +shelf +shell +shift +shine +shiny +ships +shirt +shock +shoes +shook +shoot +shops +shore +short +shots +shown +shows +sides +siege +sight +sigma +signs +silly +since +sites +sixth +sized +sizes +skies +skill +skins +skirt +skull +slate +slave +sleek +sleep +slept +slice +slide +slope +slots +small +smart +smell +smile +smoke +snack +snake +sneak +socks +soils +solar +solid +solve +songs +sonic +sorry +sorts +souls +sound +south +space +spare +spark +speak +specs +speed +spell +spend +spent +sperm +spice +spicy +spike +spine +spite +split +spoke +spoon +sport +spots +spray +spurs +squad +stack +staff +stage +stain +stake +stamp +stand +stark +stars +start +state +stats +stays +steak +steal +steam +steel +steep +steer +stems +steps +stick +stiff +still +stock +stole +stone +stood +stool +stops +store +storm +story +stove +strap +straw +strip +stuck +study +stuff +style +sucks +sugar +suite +suits +sunny +super +surge +sushi +swear +sweat +sweet +swept +swift +swing +swiss +sword +syrup +table +taken +takes +tales +talks +tanks +tapes +tasks +taste +tasty +taxes +teach +teams +tears +teens +teeth +tells +tempo +tends +tenth +tents +terms +tests +texts +thank +theft +their +theme +there +these +thick +thief +thigh +thing +think +third +those +three +threw +throw +thumb +tiger +tight +tiles +timer +times +tired +tires +title +toast +today +token +tones +tools +tooth +topic +torch +total +touch +tough +tours +towel +tower +towns +toxic +trace +track +tract +trade +trail +train +trait +trans +traps +trash +treat +trees +trend +trial +tribe +trick +tried +tries +trips +trout +truck +truly +trump +trunk +trust +truth +tubes +tumor +tuned +tunes +turbo +turns +tutor +tweet +twice +twins +twist +types +tyres +ultra +uncle +under +union +unite +units +unity +until +upper +upset +urban +urged +urine +usage +users +using +usual +unsaw +unsay +unsee +unset +unsew +unsub +untag +untax +untie +until +unwed +unwet +unwit +unwon +unzip +upbow +upbye +updos +updry +upend +upjet +uplay +upled +uplit +upped +upper +upran +uprun +upsee +upset +upsey +upter +uptie +uraei +urali +uraos +urare +urari +urase +urate +urban +urbex +urbia +urdee +ureal +ureas +uredo +ureic +ureid +urena +urged +urger +urges +urial +urine +vague +valid +value +valve +vapor +vault +vegan +veins +vents +venue +verse +video +views +villa +vinyl +viral +virus +visas +visit +vital +vivid +vocal +vodka +voice +volts +voted +voter +votes +verbs +verde +verge +verra +verre +verry +versa +verse +verso +verst +verte +verts +vertu +verve +vespa +vesta +vests +vetch +veuve +veves +vexed +vexer +vexes +vexil +vezir +vials +viand +vibed +vibes +vibex +vibey +vicar +vices +vichy +vicus +wages +wagon +waist +walks +walls +wants +warns +waste +watch +water +watts +waves +wears +weeds +weeks +weigh +weird +wells +welsh +whale +wheat +wheel +where +which +while +white +whole +whose +wider +widow +width +winds +wines +wings +wiped +wired +wires +witch +wives +woman +women +woods +words +works +world +worms +worry +worse +worst +worth +would +wound +wrath +wrist +write +wrong +wrote +waacs +wacke +wacko +wacks +wacky +wadds +waddy +waded +wader +wades +wadis +wafer +waffs +wafts +waged +wager +wages +wagga +wagon +wahoo +waide +waifs +wails +wains +wairs +waist +waits +waive +wakas +waked +waken +waker +wakes +wakfs +waldo +walds +waled +waler +wales +walis +walks +walla +walls +wally +walty +waltz +wamed +wames +wamus +wands +wanes +waney +wangs +wanks +wanky +wanle +wanly +wanna +wants +wanty +wanze +waqfs +warbs +xebec +xenia +xenic +xenon +xeric +xerox +xerus +xoana +xrays +xylan +xylem +xylic +xylol +xylyl +xysti +xysts +yacht +yards +years +yeast +yield +young +yours +youth +yummy +yacca +yacht +yacka +yacks +yadda +yadim +yaffs +yager +yagis +yagna +yahoo +yajes +yajna +yakka +yakow +yales +yamen +yampa +yampy +yamun +yandy +yangs +yanks +yapok +yapon +yapps +yappy +yarak +yarco +yards +yarer +yarfa +yarks +yarns +yarra +yarrs +yarta +yarto +yasss +yates +yatra +yauds +yauld +yaups +yawed +yawey +yawls +yawns +zones +zebra +zests +zesty +zetas +zorse +zouks +zowee +zowie +zacks +zaddy +zafus +zaida +zaide +zaidy +zaire +zakah +zakat +zamac +zamak +zaman +zambo +zamia +zamis +zanja +zante +zanza +zanze +zappy +zarda +zarfs +zaris +zatar +zatis +zawns +zaxes +zayde +zerks +zeros +zests +zesty +zetas +zexes +zezes +zhlob +zhlub +zhomo +zhush +zhuzh +zibet +ziffs +zigan +zikrs +zilas +zilch +zilla +zills +zimbi +zimbs +zinco +zincs +zincy +zineb +zines +zings +zingy +zinke +zinky +zinos +zippo +zippy +ziram +zitis +zitti +zitty +zizel +zizit +zlote +zloty +zoaea +zobos +zobus +zocco +zoeae +zoeal diff --git a/automation_tools/pre_build_automation.sh b/automation_tools/pre_build_automation.sh new file mode 100644 index 00000000..637c3f95 --- /dev/null +++ b/automation_tools/pre_build_automation.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +# For the file paths to work correctly, call this script with this command from the cloned repo folder root: +# sh automation_tools/pre_build_automation.sh +# Different actions need different information in the task list file +# hash: Finds the SHA256 hash of a file online and updates the placeholder in the manifest. +# Needs the URL of the file, in this line format: hash^PLACEHOLDERTEXT^url +# latestcommit: Finds the most recent commit of a git repo and updated the placeholder in the manifest. +# Needs the URL of the repo and the branch to find the latest commit from, in this line format: latestcommit^PLACEHOLDERTEXT^url^branch +# latestappimage: Finds the download URL and SHA256 hash of the latest AppImage release from a git repo +# Needs the API URL of the repo, in this line format: latestappimage^PLACEHOLDERTEXT^https://api.github.com/repos///releases/latest +# As this command updates two different placeholders (one for the URL, one for the file hash) in the manifest, +# the URL that would be used in the above example is "PLACEHOLDERTEXT" and the hash placeholder text would be "HASHPLACEHOLDERTEXT" +# The "HASH" prefix of the placeholder text is hardcoded in the script + +rd_manifest=${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml +automation_task_list=${GITHUB_WORKSPACE}/automation_tools/automation_task_list.cfg + +echo "Manifest location: $rd_manifest" +echo "Automation task list location: $automation_task_list" +echo +echo "Task list contents:" +cat "$automation_task_list" +echo + +while IFS="^" read -r action placeholder url branch +do + if [[ ! $action == "#"* ]] && [[ ! -z "$action" ]]; then + if [[ "$action" == "hash" ]]; then + echo + echo "Placeholder text: $placeholder" + echo "URL to hash: $url" + echo + hash=$(curl -sL "$url" | sha256sum | cut -d ' ' -f1) + echo "Hash found: $hash" + /bin/sed -i 's^'"$placeholder"'^'"$hash"'^' $rd_manifest + elif [[ "$action" == "latestcommit" ]]; then + echo + echo "Placeholder text: $placeholder" + echo "Repo to get latest commit from: $url branch: $branch" + echo + commit=$(git ls-remote "$url" "$branch" | cut -f1) + echo "Commit found: $commit" + /bin/sed -i 's^'"$placeholder"'^'"$commit"'^' $rd_manifest + elif [[ "$action" == "latestappimage" ]]; then + echo + echo "Placeholder text: $placeholder" + echo "Repo to look for AppImage releases: $url" + echo + appimageurl=$(curl -s "$url" | grep browser_download_url | grep "\.AppImage\"" | cut -d : -f 2,3 | tr -d \" | sed -n 1p | tr -d ' ') + echo "AppImage URL found: $appimageurl" + /bin/sed -i 's^'"$placeholder"'^'"$appimageurl"'^' $rd_manifest + appimagehash=$(curl -sL "$appimageurl" | sha256sum | cut -d ' ' -f1) + echo "AppImage hash found: $appimagehash" + /bin/sed -i 's^'"HASHFOR$placeholder"'^'"$appimagehash"'^' $rd_manifest + elif [[ "$action" == "outside_info" ]]; then + if [[ "$url" = \$* ]]; then # If value is a reference to a variable name + eval url="$url" + fi + echo + echo "Placeholder text: $placeholder" + echo "Information being injected: $(cat $url)" + echo + /bin/sed -i 's^'"$placeholder"'^'"$(cat $url)"'^' $rd_manifest + fi + fi +done < "$automation_task_list" diff --git a/docs/wiki/steamdeck/layout/graphics/DS - Menu.png b/docs/wiki/steamdeck/layout/graphics/DS - Menu.png new file mode 100644 index 00000000..2d54213a Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/DS - Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/Disp_Graph_Menu.png b/docs/wiki/steamdeck/layout/graphics/Disp_Graph_Menu.png new file mode 100644 index 00000000..73684ea6 Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/Disp_Graph_Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/Emu_Spec_Menu.png b/docs/wiki/steamdeck/layout/graphics/Emu_Spec_Menu.png new file mode 100644 index 00000000..9015a072 Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/Emu_Spec_Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/GC_Wii_Menu.png b/docs/wiki/steamdeck/layout/graphics/GC_Wii_Menu.png new file mode 100644 index 00000000..1d1598af Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/GC_Wii_Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/General_Menu.png b/docs/wiki/steamdeck/layout/graphics/General_Menu.png new file mode 100644 index 00000000..6ea53822 Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/General_Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/MAME_Menu.png b/docs/wiki/steamdeck/layout/graphics/MAME_Menu.png new file mode 100644 index 00000000..93287a4f Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/MAME_Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/Main_Menu.png b/docs/wiki/steamdeck/layout/graphics/Main_Menu.png new file mode 100644 index 00000000..bbf43d03 Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/Main_Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/Quick_Menu.png b/docs/wiki/steamdeck/layout/graphics/Quick_Menu.png new file mode 100644 index 00000000..fb09918e Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/Quick_Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/RetroArch_ Menu.png b/docs/wiki/steamdeck/layout/graphics/RetroArch_ Menu.png new file mode 100644 index 00000000..3d5ec715 Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/RetroArch_ Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/Speed_Menu.png b/docs/wiki/steamdeck/layout/graphics/Speed_Menu.png new file mode 100644 index 00000000..e86c48e2 Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/Speed_Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/State_Menu.png b/docs/wiki/steamdeck/layout/graphics/State_Menu.png new file mode 100644 index 00000000..1e363ac8 Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/State_Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/SteamDeck_Menu.png b/docs/wiki/steamdeck/layout/graphics/SteamDeck_Menu.png new file mode 100644 index 00000000..49026c9c Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/SteamDeck_Menu.png differ diff --git a/docs/wiki/steamdeck/layout/graphics/Switch_Menu.png b/docs/wiki/steamdeck/layout/graphics/Switch_Menu.png new file mode 100644 index 00000000..1e2acd0f Binary files /dev/null and b/docs/wiki/steamdeck/layout/graphics/Switch_Menu.png differ diff --git a/emu-configs/PCSX2-QT/PCSX2.ini b/emu-configs/PCSX2-QT/PCSX2.ini deleted file mode 100644 index 7e428798..00000000 --- a/emu-configs/PCSX2-QT/PCSX2.ini +++ /dev/null @@ -1,446 +0,0 @@ -[UI] -SettingsVersion = 1 -InhibitScreensaver = true -ConfirmShutdown = false -StartPaused = false -PauseOnFocusLoss = false -StartFullscreen = true -DoubleClickTogglesFullscreen = true -HideMouseCursor = false -RenderToSeparateWindow = false -HideMainWindowWhenRunning = false -DisableWindowResize = false -Theme = darkfusion - - -[Folders] -Bios = RETRODECKHOMEDIR/roms/bios -Snapshots = RETRODECKHOMEDIR/screenshots -Savestates = RETRODECKHOMEDIR/states/ps2/pcsx2 -MemoryCards = RETRODECKHOMEDIR/saves/ps2/memcards -Logs = RETRODECKHOMEDIR/.logs -Cheats = /var/config/PCSX2/cheats -CheatsWS = /var/config/PCSX2/cheats_ws -CheatsNI = cheats_ni -Cache = /var/config/PCSX2/cache -Textures = /var/config/PCSX2/textures -InputProfiles = inputprofiles - - -[EmuCore] -CdvdVerboseReads = false -CdvdDumpBlocks = false -CdvdShareWrite = false -EnablePatches = true -EnableCheats = false -EnablePINE = false -EnableWideScreenPatches = false -EnableNoInterlacingPatches = false -EnableRecordingTools = true -EnableGameFixes = true -SaveStateOnShutdown = true -EnableDiscordPresence = false -InhibitScreensaver = true -ConsoleToStdio = false -HostFs = false -PatchBios = false -PatchRegion = -BackupSavestate = true -SavestateZstdCompression = true -McdEnableEjection = true -McdFolderAutoManage = true -WarnAboutUnsafeSettings = true -GzipIsoIndexTemplate = $(f).pindex.tmp -BlockDumpSaveDirectory = -EnableFastBoot = true - - -[EmuCore/Speedhacks] -EECycleRate = 0 -EECycleSkip = 0 -fastCDVD = false -IntcStat = true -WaitLoop = true -vuFlagHack = true -vuThread = false -vu1Instant = true - - -[EmuCore/CPU] -FPU.DenormalsAreZero = true -FPU.FlushToZero = true -FPU.Roundmode = 3 -AffinityControlMode = 0 -VU.DenormalsAreZero = true -VU.FlushToZero = true -VU.Roundmode = 3 - - -[EmuCore/CPU/Recompiler] -EnableEE = true -EnableIOP = true -EnableEECache = false -EnableVU0 = true -EnableVU1 = true -vuOverflow = true -vuExtraOverflow = false -vuSignOverflow = false -vuUnderflow = false -fpuOverflow = true -fpuExtraOverflow = false -fpuFullMode = false -StackFrameChecks = false -PreBlockCheckEE = false -PreBlockCheckIOP = false - - -[EmuCore/GS] -VsyncQueueSize = 2 -FrameLimitEnable = true -VsyncEnable = 0 -FramerateNTSC = 59.94 -FrameratePAL = 50 -SyncToHostRefreshRate = false -AspectRatio = Auto 4:3/3:2 -FMVAspectRatioSwitch = Off -Zoom = 100 -StretchY = 100 -CropLeft = 0 -CropTop = 0 -CropRight = 0 -CropBottom = 0 -pcrtc_antiblur = true -disable_interlace_offset = false -pcrtc_offsets = false -pcrtc_overscan = false -IntegerScaling = false -linear_present = true -UseDebugDevice = false -UseBlitSwapChain = false -disable_shader_cache = false -DisableDualSourceBlend = false -DisableFramebufferFetch = false -ThreadedPresentation = false -SkipDuplicateFrames = false -OsdShowMessages = true -OsdShowSpeed = false -OsdShowFPS = false -OsdShowCPU = false -OsdShowGPU = false -OsdShowResolution = false -OsdShowGSStats = false -OsdShowIndicators = true -OsdShowSettings = false -OsdShowInputs = false -HWSpinGPUForReadbacks = false -HWSpinCPUForReadbacks = false -paltex = false -autoflush_sw = true -preload_frame_with_gs_data = false -wrap_gs_mem = false -mipmap = true -UserHacks = false -UserHacks_align_sprite_X = false -UserHacks_AutoFlush = false -UserHacks_CPU_FB_Conversion = false -UserHacks_DisableDepthSupport = false -UserHacks_DisablePartialInvalidation = false -UserHacks_Disable_Safe_Features = false -UserHacks_merge_pp_sprite = false -UserHacks_WildHack = false -UserHacks_TextureInsideRt = false -fxaa = false -ShadeBoost = false -shaderfx = false -dump = false -save = false -savef = false -savet = false -savez = false -DumpReplaceableTextures = false -DumpReplaceableMipmaps = false -DumpTexturesWithFMVActive = false -DumpDirectTextures = true -DumpPaletteTextures = true -LoadTextureReplacements = false -LoadTextureReplacementsAsync = true -PrecacheTextureReplacements = false -deinterlace = 7 -OsdScale = 100 -Renderer = -1 -upscale_multiplier = 1 -mipmap_hw = -1 -accurate_blending_unit = 1 -crc_hack_level = -1 -filter = 2 -texture_preloading = 2 -GSDumpCompression = 1 -HWDownloadMode = 0 -dithering_ps2 = 2 -MaxAnisotropy = 0 -extrathreads = 2 -extrathreads_height = 4 -TVShader = 0 -UserHacks_SkipDraw_Start = 0 -UserHacks_SkipDraw_End = 0 -UserHacks_Half_Bottom_Override = -1 -UserHacks_HalfPixelOffset = 0 -UserHacks_round_sprite_offset = 0 -UserHacks_TCOffsetX = 0 -UserHacks_TCOffsetY = 0 -UserHacks_CPUSpriteRenderBW = 0 -TriFilter = -1 -OverrideTextureBarriers = -1 -OverrideGeometryShaders = -1 -ShadeBoost_Brightness = 50 -ShadeBoost_Contrast = 50 -ShadeBoost_Saturation = 50 -saven = 0 -savel = 5000 -Adapter = -shaderfx_conf = shaders/GS_FX_Settings.ini -shaderfx_glsl = shaders/GS.fx - - -[SPU2/Mixing] -Interpolation = 5 -FinalVolume = 100 -VolumeAdjustC = 0 -VolumeAdjustFL = 0 -VolumeAdjustFR = 0 -VolumeAdjustBL = 0 -VolumeAdjustBR = 0 -VolumeAdjustSL = 0 -VolumeAdjustSR = 0 -VolumeAdjustLFE = 0 - - -[SPU2/Output] -OutputModule = cubeb -BackendName = -Latency = 100 -SynchMode = 0 -SpeakerConfiguration = 0 -DplDecodingLevel = 0 - - -[DEV9/Eth] -EthEnable = false -EthApi = Unset -EthDevice = -EthLogDNS = false -InterceptDHCP = false -PS2IP = 0.0.0.0 -Mask = 0.0.0.0 -Gateway = 0.0.0.0 -DNS1 = 0.0.0.0 -DNS2 = 0.0.0.0 -AutoMask = true -AutoGateway = true -ModeDNS1 = Auto -ModeDNS2 = Auto - - -[DEV9/Eth/Hosts] -Count = 0 - - -[DEV9/Hdd] -HddEnable = false -HddFile = DEV9hdd.raw -HddSizeSectors = 83886080 - - -[EmuCore/Gamefixes] -VuAddSubHack = false -FpuMulHack = false -FpuNegDivHack = false -XgKickHack = false -EETimingHack = false -SoftwareRendererFMVHack = false -SkipMPEGHack = false -OPHFlagHack = false -DMABusyHack = false -VIFFIFOHack = false -VIF1StallHack = false -GIFFIFOHack = false -GoemonTlbHack = false -IbitHack = false -VUSyncHack = false -VUOverflowHack = false -BlitInternalFPSHack = false - - -[EmuCore/Profiler] -Enabled = false -RecBlocks_EE = true -RecBlocks_IOP = true -RecBlocks_VU0 = true -RecBlocks_VU1 = true - - -[EmuCore/Debugger] -ShowDebuggerOnStart = false -AlignMemoryWindowStart = true -FontWidth = 8 -FontHeight = 12 -WindowWidth = 0 -WindowHeight = 0 -MemoryViewBytesPerRow = 16 - - -[EmuCore/TraceLog] -Enabled = false -EE.bitset = 0 -IOP.bitset = 0 - - -[Achievements] -Enabled = false -TestMode = false -UnofficialTestMode = false -RichPresence = true -ChallengeMode = false -Leaderboards = true -SoundEffects = true -PrimedIndicators = true - - -[Filenames] -BIOS = - - -[Framerate] -NominalScalar = 1 -TurboScalar = 2 -SlomoScalar = 0.5 - - -[MemoryCards] -Slot1_Enable = true -Slot1_Filename = Mcd001.ps2 -Slot2_Enable = true -Slot2_Filename = Mcd002.ps2 -Multitap1_Slot2_Enable = false -Multitap1_Slot2_Filename = Mcd-Multitap1-Slot02.ps2 -Multitap1_Slot3_Enable = false -Multitap1_Slot3_Filename = Mcd-Multitap1-Slot03.ps2 -Multitap1_Slot4_Enable = false -Multitap1_Slot4_Filename = Mcd-Multitap1-Slot04.ps2 -Multitap2_Slot2_Enable = false -Multitap2_Slot2_Filename = Mcd-Multitap2-Slot02.ps2 -Multitap2_Slot3_Enable = false -Multitap2_Slot3_Filename = Mcd-Multitap2-Slot03.ps2 -Multitap2_Slot4_Enable = false -Multitap2_Slot4_Filename = Mcd-Multitap2-Slot04.ps2 - - -[Logging] -EnableSystemConsole = false -EnableFileLogging = false -EnableTimestamps = true -EnableVerbose = false -EnableEEConsole = false -EnableIOPConsole = false -EnableInputRecordingLogs = true -EnableControllerLogs = false - - -[InputSources] -Keyboard = true -Mouse = true -SDL = true -SDLControllerEnhancedMode = false - - -[Hotkeys] -ToggleFullscreen = Keyboard/Alt & Keyboard/Return -CycleAspectRatio = Keyboard/F6 -CycleInterlaceMode = Keyboard/F5 -CycleMipmapMode = Keyboard/Insert -GSDumpMultiFrame = Keyboard/Control & Keyboard/Shift & Keyboard/F8 -Screenshot = SDL-0/Back & SDL-0/A -GSDumpSingleFrame = Keyboard/Shift & Keyboard/F8 -ToggleSoftwareRendering = Keyboard/F9 -InputRecToggleMode = Keyboard/Shift & Keyboard/R -LoadStateFromSlot = SDL-0/Back & SDL-0/LeftShoulder -SaveStateToSlot = SDL-0/Back & SDL-0/RightShoulder -NextSaveStateSlot = SDL-0/Back & SDL-0/DPadUp -PreviousSaveStateSlot = SDL-0/Back & SDL-0/DPadDown -OpenPauseMenu = SDL-0/Back & SDL-0/Y -ToggleFrameLimit = Keyboard/F4 -TogglePause = SDL-0/Back & SDL-0/B -ToggleSlowMotion = Keyboard/Shift & Keyboard/Backtab -ToggleTurbo = Keyboard/Tab -HoldTurbo = Keyboard/L -ShutdownVM = SDL-0/Start & SDL-0/Back - - -[Pad] -MultitapPort1 = false -MultitapPort2 = false -PointerXScale = 8 -PointerYScale = 8 - - -[Pad1] -Type = DualShock2 -Deadzone = 0.000000 -AxisScale = 1.330000 -LargeMotorScale = 1.000000 -SmallMotorScale = 1.000000 -PressureModifier = 0.500000 -Up = SDL-0/DPadUp -Right = SDL-0/DPadRight -Down = SDL-0/DPadDown -Left = SDL-0/DPadLeft -Triangle = SDL-0/Y -Circle = SDL-0/B -Cross = SDL-0/A -Square = SDL-0/X -Select = SDL-0/Back -Start = SDL-0/Start -L1 = SDL-0/LeftShoulder -L2 = SDL-0/+LeftTrigger -R1 = SDL-0/RightShoulder -R2 = SDL-0/+RightTrigger -L3 = SDL-0/LeftStick -R3 = SDL-0/RightStick -LUp = SDL-0/-LeftY -LRight = SDL-0/+LeftX -LDown = SDL-0/+LeftY -LLeft = SDL-0/-LeftX -RUp = SDL-0/-RightY -RRight = SDL-0/+RightX -RDown = SDL-0/+RightY -RLeft = SDL-0/-RightX -SmallMotor = SDL-0/SmallMotor -LargeMotor = SDL-0/LargeMotor - - -[Pad2] -Type = None - - -[Pad3] -Type = None - - -[Pad4] -Type = None - - -[Pad5] -Type = None - - -[Pad6] -Type = None - - -[Pad7] -Type = None - - -[Pad8] -Type = None diff --git a/emu-configs/PCSX2/PCSX2.ini b/emu-configs/PCSX2/PCSX2.ini index abeccf07..bd77bf0f 100644 --- a/emu-configs/PCSX2/PCSX2.ini +++ b/emu-configs/PCSX2/PCSX2.ini @@ -18,7 +18,7 @@ EnableWideScreenPatches = false EnableNoInterlacingPatches = false EnableRecordingTools = true EnableGameFixes = true -SaveStateOnShutdown = true +SaveStateOnShutdown = false ConsoleToStdio = false HostFs = false PatchBios = false @@ -318,26 +318,24 @@ RawInput = false [Hotkeys] -ToggleFullscreen = Keyboard/Alt & Keyboard/Return -CycleAspectRatio = Keyboard/F6 -CycleInterlaceMode = Keyboard/F5 -CycleMipmapMode = Keyboard/Insert -GSDumpMultiFrame = Keyboard/Control & Keyboard/Shift & Keyboard/F8 -Screenshot = SDL-0/Back & SDL-0/A -GSDumpSingleFrame = Keyboard/Shift & Keyboard/F8 -ToggleSoftwareRendering = Keyboard/F9 -InputRecToggleMode = Keyboard/Shift & Keyboard/R -LoadStateFromSlot = SDL-0/Back & SDL-0/LeftShoulder -SaveStateToSlot = SDL-0/Back & SDL-0/RightShoulder -NextSaveStateSlot = SDL-0/Back & SDL-0/DPadUp -PreviousSaveStateSlot = SDL-0/Back & SDL-0/DPadDown -OpenPauseMenu = SDL-0/Back & SDL-0/Y -ToggleFrameLimit = Keyboard/F4 -TogglePause = SDL-0/Back & SDL-0/B -ToggleSlowMotion = Keyboard/Shift & Keyboard/Backtab -ToggleTurbo = Keyboard/Tab -HoldTurbo = Keyboard/L -ShutdownVM = SDL-0/Start & SDL-0/Back +OpenPauseMenu = Keyboard/Control & Keyboard/M +PreviousSaveStateSlot = Keyboard/Control & Keyboard/J +NextSaveStateSlot = Keyboard/Control & Keyboard/K +TogglePause = Keyboard/Control & Keyboard/P +SaveStateToSlot = Keyboard/Control & Keyboard/S +LoadStateFromSlot = Keyboard/Control & Keyboard/A +ToggleFullscreen = Keyboard/Control & Keyboard/Return +ToggleFrameLimit = Keyboard/Control & Keyboard/Z +HoldTurbo = Keyboard/Control & Keyboard/NumpadPlus +IncreaseSpeed = Keyboard/Control & Keyboard/1 +DecreaseSpeed = Keyboard/Control & Keyboard/2 +Screenshot = Keyboard/Control & Keyboard/X +ToggleVideoCapture = Keyboard/Control & Keyboard/V +IncreaseUpscaleMultiplier = Keyboard/Control & Keyboard/U +DecreaseUpscaleMultiplier = Keyboard/Control & Keyboard/Y +CycleAspectRatio = Keyboard/Control & Keyboard/W +ShutdownVM = Keyboard/Control & Keyboard/Q +ResetVM = Keyboard/Control & Keyboard/R [Pad] @@ -448,4 +446,12 @@ PressureModifier = 0.500000 [GameList] -RecursivePaths = RETRODECKHOMEDIR/roms/ps2 \ No newline at end of file +RecursivePaths = RETRODECKHOMEDIR/roms/ps2 + + +[Achievements] +Enabled = false +ChallengeMode = false +Username = +Token = +LoginTimestamp = diff --git a/emu-configs/cemu/controllerProfiles/controller0.xml b/emu-configs/cemu/controllerProfiles/controller0.xml new file mode 100644 index 00000000..d39fbe71 --- /dev/null +++ b/emu-configs/cemu/controllerProfiles/controller0.xml @@ -0,0 +1,120 @@ + + + Wii U GamePad + + SDLController + 0_030079f6de280000ff11000001000000 + Steam Virtual Gamepad + 1 + + 0.25 + 1 + + + 0.25 + 1 + + + 0.25 + 1 + + + + 24 + + + + 23 + + + + 22 + + + + 21 + + + + 20 + + + + 19 + + + + 18 + + + + 17 + + + + 16 + + + + 15 + + + + 14 + + + + 1 + + + + 2 + + + + 3 + + + + 4 + + + + 5 + + + + 6 + + + + 7 + + + + 8 + + + + 9 + + + + 10 + + + + 11 + + + + 12 + + + + 13 + + + + + diff --git a/emu-configs/cemu/settings.xml b/emu-configs/cemu/settings.xml new file mode 100644 index 00000000..8b42dae2 --- /dev/null +++ b/emu-configs/cemu/settings.xml @@ -0,0 +1,112 @@ + + + 0 + false + RETRODECKHOMEDIR/bios/cemu + true + 0 + true + false + false + true + false + true + false + true + + true + 1 + + -1 + -1 + + + -1 + -1 + + false + false + + -1 + -1 + + + -1 + -1 + + false + + + + 500 + 60 + 50 + 140 + 160 + 306 + + + + + RETRODECKHOMEDIR/roms/wiiu + + + + + 1 + 00000000000000000000000000000000 + 0 + true + 1 + 0 + 0 + false + true + + 0 + 4294967295 + 100 + true + false + false + false + false + false + false + + + 1 + 4294967295 + 100 + true + false + true + true + + + + + 2147483649 + false + 0 + + + 1 + 1337 + + + + + \ No newline at end of file diff --git a/emu-configs/citra/qt-config.ini b/emu-configs/citra/qt-config.ini index f0c98ac9..3f00ece3 100644 --- a/emu-configs/citra/qt-config.ini +++ b/emu-configs/citra/qt-config.ini @@ -199,10 +199,14 @@ LLE\SSL\default=true gdbstub_port=@Variant(\0\0\0\x85`q) gdbstub_port\default=true record_frame_times=false +renderer_debug=false +renderer_debug\default=true use_gdbstub=false use_gdbstub\default=true [Layout] +anaglyph_shader_name=dubois (builtin) +anaglyph_shader_name\default=true custom_bottom_bottom=@Variant(\0\0\0\x85\x1\xe0) custom_bottom_bottom\default=true custom_bottom_left=@Variant(\0\0\0\x85\0() @@ -253,9 +257,11 @@ bg_green=0 bg_green\default=true bg_red=0 bg_red\default=true -frame_limit=@Variant(\0\0\0\x85\0\x64) +frame_limit=100 frame_limit\default=true -resolution_factor=@Variant(\0\0\0\x85\0\x1) +graphics_api=1 +graphics_api\default=true +resolution_factor=1 resolution_factor\default=true shaders_accurate_mul=true shaders_accurate_mul\default=true @@ -353,104 +359,104 @@ Shortcuts\Main%20Window\Advance%20Frame\KeySeq= Shortcuts\Main%20Window\Advance%20Frame\KeySeq\default=true Shortcuts\Main%20Window\Capture%20Screenshot\Context=3 Shortcuts\Main%20Window\Capture%20Screenshot\Context\default=true -Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq=Ctrl+P -Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq\default=true +Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq=Ctrl+X +Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq\default=false Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context=1 Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context\default=true -Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq=F4 -Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq\default=true -Shortcuts\Main%20Window\Decrease%203D%20Factor\Context=2 -Shortcuts\Main%20Window\Decrease%203D%20Factor\Context\default=true -Shortcuts\Main%20Window\Decrease%203D%20Factor\KeySeq=Ctrl+- -Shortcuts\Main%20Window\Decrease%203D%20Factor\KeySeq\default=true +Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq=Ctrl+P +Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq\default=false +Shortcuts\Main%20Window\Decrease%203D%20Factor\Context=1 +Shortcuts\Main%20Window\Decrease%203D%20Factor\Context\default=false +Shortcuts\Main%20Window\Decrease%203D%20Factor\KeySeq= +Shortcuts\Main%20Window\Decrease%203D%20Factor\KeySeq\default=false Shortcuts\Main%20Window\Decrease%20Speed%20Limit\Context=2 Shortcuts\Main%20Window\Decrease%20Speed%20Limit\Context\default=true -Shortcuts\Main%20Window\Decrease%20Speed%20Limit\KeySeq=- -Shortcuts\Main%20Window\Decrease%20Speed%20Limit\KeySeq\default=true +Shortcuts\Main%20Window\Decrease%20Speed%20Limit\KeySeq=Ctrl+2 +Shortcuts\Main%20Window\Decrease%20Speed%20Limit\KeySeq\default=false Shortcuts\Main%20Window\Exit%20Citra\Context=1 Shortcuts\Main%20Window\Exit%20Citra\Context\default=true Shortcuts\Main%20Window\Exit%20Citra\KeySeq=Ctrl+Q -Shortcuts\Main%20Window\Exit%20Citra\KeySeq\default=true +Shortcuts\Main%20Window\Exit%20Citra\KeySeq\default=false Shortcuts\Main%20Window\Exit%20Fullscreen\Context=1 Shortcuts\Main%20Window\Exit%20Fullscreen\Context\default=true -Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq=Y +Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq=Ctrl+O Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq\default=false Shortcuts\Main%20Window\Fullscreen\Context=1 Shortcuts\Main%20Window\Fullscreen\Context\default=true -Shortcuts\Main%20Window\Fullscreen\KeySeq=F11 -Shortcuts\Main%20Window\Fullscreen\KeySeq\default=true -Shortcuts\Main%20Window\Increase%203D%20Factor\Context=2 -Shortcuts\Main%20Window\Increase%203D%20Factor\Context\default=true -Shortcuts\Main%20Window\Increase%203D%20Factor\KeySeq=Ctrl++ -Shortcuts\Main%20Window\Increase%203D%20Factor\KeySeq\default=true +Shortcuts\Main%20Window\Fullscreen\KeySeq=Ctrl+Return +Shortcuts\Main%20Window\Fullscreen\KeySeq\default=false +Shortcuts\Main%20Window\Increase%203D%20Factor\Context=1 +Shortcuts\Main%20Window\Increase%203D%20Factor\Context\default=false +Shortcuts\Main%20Window\Increase%203D%20Factor\KeySeq= +Shortcuts\Main%20Window\Increase%203D%20Factor\KeySeq\default=false Shortcuts\Main%20Window\Increase%20Speed%20Limit\Context=2 Shortcuts\Main%20Window\Increase%20Speed%20Limit\Context\default=true -Shortcuts\Main%20Window\Increase%20Speed%20Limit\KeySeq=+ -Shortcuts\Main%20Window\Increase%20Speed%20Limit\KeySeq\default=true +Shortcuts\Main%20Window\Increase%20Speed%20Limit\KeySeq=Ctrl+1 +Shortcuts\Main%20Window\Increase%20Speed%20Limit\KeySeq\default=false Shortcuts\Main%20Window\Load%20Amiibo\Context=3 Shortcuts\Main%20Window\Load%20Amiibo\Context\default=true -Shortcuts\Main%20Window\Load%20Amiibo\KeySeq=F2 -Shortcuts\Main%20Window\Load%20Amiibo\KeySeq\default=true -Shortcuts\Main%20Window\Load%20File\Context=3 -Shortcuts\Main%20Window\Load%20File\Context\default=true -Shortcuts\Main%20Window\Load%20File\KeySeq=Ctrl+O -Shortcuts\Main%20Window\Load%20File\KeySeq\default=true +Shortcuts\Main%20Window\Load%20Amiibo\KeySeq=Alt+M +Shortcuts\Main%20Window\Load%20Amiibo\KeySeq\default=false +Shortcuts\Main%20Window\Load%20File\Context=1 +Shortcuts\Main%20Window\Load%20File\Context\default=false +Shortcuts\Main%20Window\Load%20File\KeySeq= +Shortcuts\Main%20Window\Load%20File\KeySeq\default=false Shortcuts\Main%20Window\Load%20from%20Newest%20Slot\Context=1 Shortcuts\Main%20Window\Load%20from%20Newest%20Slot\Context\default=true -Shortcuts\Main%20Window\Load%20from%20Newest%20Slot\KeySeq=R +Shortcuts\Main%20Window\Load%20from%20Newest%20Slot\KeySeq=Ctrl+A Shortcuts\Main%20Window\Load%20from%20Newest%20Slot\KeySeq\default=false Shortcuts\Main%20Window\Mute%20Audio\Context=1 Shortcuts\Main%20Window\Mute%20Audio\Context\default=true -Shortcuts\Main%20Window\Mute%20Audio\KeySeq=Ctrl+M -Shortcuts\Main%20Window\Mute%20Audio\KeySeq\default=true +Shortcuts\Main%20Window\Mute%20Audio\KeySeq= +Shortcuts\Main%20Window\Mute%20Audio\KeySeq\default=false Shortcuts\Main%20Window\Remove%20Amiibo\Context=2 Shortcuts\Main%20Window\Remove%20Amiibo\Context\default=true -Shortcuts\Main%20Window\Remove%20Amiibo\KeySeq=F3 -Shortcuts\Main%20Window\Remove%20Amiibo\KeySeq\default=true +Shortcuts\Main%20Window\Remove%20Amiibo\KeySeq=Alt+N +Shortcuts\Main%20Window\Remove%20Amiibo\KeySeq\default=false Shortcuts\Main%20Window\Restart%20Emulation\Context=1 Shortcuts\Main%20Window\Restart%20Emulation\Context\default=true -Shortcuts\Main%20Window\Restart%20Emulation\KeySeq=F6 -Shortcuts\Main%20Window\Restart%20Emulation\KeySeq\default=true +Shortcuts\Main%20Window\Restart%20Emulation\KeySeq=Ctrl+R +Shortcuts\Main%20Window\Restart%20Emulation\KeySeq\default=false Shortcuts\Main%20Window\Rotate%20Screens%20Upright\Context=1 Shortcuts\Main%20Window\Rotate%20Screens%20Upright\Context\default=true -Shortcuts\Main%20Window\Rotate%20Screens%20Upright\KeySeq=F8 -Shortcuts\Main%20Window\Rotate%20Screens%20Upright\KeySeq\default=true +Shortcuts\Main%20Window\Rotate%20Screens%20Upright\KeySeq= +Shortcuts\Main%20Window\Rotate%20Screens%20Upright\KeySeq\default=false Shortcuts\Main%20Window\Save%20to%20Oldest%20Slot\Context=1 Shortcuts\Main%20Window\Save%20to%20Oldest%20Slot\Context\default=true -Shortcuts\Main%20Window\Save%20to%20Oldest%20Slot\KeySeq=L +Shortcuts\Main%20Window\Save%20to%20Oldest%20Slot\KeySeq=Ctrl+S Shortcuts\Main%20Window\Save%20to%20Oldest%20Slot\KeySeq\default=false Shortcuts\Main%20Window\Stop%20Emulation\Context=1 Shortcuts\Main%20Window\Stop%20Emulation\Context\default=true -Shortcuts\Main%20Window\Stop%20Emulation\KeySeq=F5 -Shortcuts\Main%20Window\Stop%20Emulation\KeySeq\default=true +Shortcuts\Main%20Window\Stop%20Emulation\KeySeq= +Shortcuts\Main%20Window\Stop%20Emulation\KeySeq\default=false Shortcuts\Main%20Window\Swap%20Screens\Context=1 Shortcuts\Main%20Window\Swap%20Screens\Context\default=true -Shortcuts\Main%20Window\Swap%20Screens\KeySeq=T +Shortcuts\Main%20Window\Swap%20Screens\KeySeq=Ctrl+Tab Shortcuts\Main%20Window\Swap%20Screens\KeySeq\default=false -Shortcuts\Main%20Window\Toggle%203D\Context=2 -Shortcuts\Main%20Window\Toggle%203D\Context\default=true -Shortcuts\Main%20Window\Toggle%203D\KeySeq=Ctrl+3 -Shortcuts\Main%20Window\Toggle%203D\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%203D\Context=1 +Shortcuts\Main%20Window\Toggle%203D\Context\default=false +Shortcuts\Main%20Window\Toggle%203D\KeySeq= +Shortcuts\Main%20Window\Toggle%203D\KeySeq\default=false Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Context=1 Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Context\default=false -Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq=Ctrl+F +Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq= Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq\default=false -Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\Context=2 -Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\Context\default=false -Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\KeySeq=Ctrl+A +Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\Context=1 +Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\Context\default=true +Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\KeySeq= Shortcuts\Main%20Window\Toggle%20Frame%20Advancing\KeySeq\default=false -Shortcuts\Main%20Window\Toggle%20Per-Game%20Speed\Context=2 -Shortcuts\Main%20Window\Toggle%20Per-Game%20Speed\Context\default=true -Shortcuts\Main%20Window\Toggle%20Per-Game%20Speed\KeySeq=Ctrl+Z +Shortcuts\Main%20Window\Toggle%20Per-Game%20Speed\Context=1 +Shortcuts\Main%20Window\Toggle%20Per-Game%20Speed\Context\default=false +Shortcuts\Main%20Window\Toggle%20Per-Game%20Speed\KeySeq= Shortcuts\Main%20Window\Toggle%20Per-Game%20Speed\KeySeq\default=false Shortcuts\Main%20Window\Toggle%20Screen%20Layout\Context=1 Shortcuts\Main%20Window\Toggle%20Screen%20Layout\Context\default=true -Shortcuts\Main%20Window\Toggle%20Screen%20Layout\KeySeq=F10 -Shortcuts\Main%20Window\Toggle%20Screen%20Layout\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Screen%20Layout\KeySeq=Ctrl+L +Shortcuts\Main%20Window\Toggle%20Screen%20Layout\KeySeq\default=false Shortcuts\Main%20Window\Toggle%20Status%20Bar\Context=1 Shortcuts\Main%20Window\Toggle%20Status%20Bar\Context\default=true -Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq=Ctrl+S -Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq= +Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq\default=false Shortcuts\Main%20Window\Toggle%20Texture%20Dumping\Context=1 Shortcuts\Main%20Window\Toggle%20Texture%20Dumping\Context\default=false Shortcuts\Main%20Window\Toggle%20Texture%20Dumping\KeySeq= @@ -468,21 +474,21 @@ Updater\update_on_close=false Updater\update_on_close\default=true calloutFlags=1 calloutFlags\default=false -confirmClose=true -confirmClose\default=true +confirmClose=false +confirmClose\default=false displayTitleBars=true displayTitleBars\default=true enable_discord_presence=true enable_discord_presence\default=true firstStart=false firstStart\default=false -fullscreen=false -fullscreen\default=true +fullscreen=true +fullscreen\default=false hideInactiveMouse=false hideInactiveMouse\default=true pauseWhenInBackground=false pauseWhenInBackground\default=true -screenshot_resolution_factor=@Variant(\0\0\0\x85\0\0) +screenshot_resolution_factor=0 screenshot_resolution_factor\default=true showConsole=false showConsole\default=true @@ -526,4 +532,4 @@ citra_username=RetroDECK enable_telemetry=false enable_telemetry\default=false web_api_url=https://api.citra-emu.org -web_api_url\default=true \ No newline at end of file +web_api_url\default=true diff --git a/emu-configs/defaults/citra/citra-qt-config.ini b/emu-configs/defaults/citra/citra-qt-config.ini index 6e176b83..7a42e448 100644 --- a/emu-configs/defaults/citra/citra-qt-config.ini +++ b/emu-configs/defaults/citra/citra-qt-config.ini @@ -332,7 +332,7 @@ Paths\moviePlaybackPath= Paths\movieRecordPath= Paths\recentFiles=@Invalid() Paths\romsPath= -Paths\screenshotPath= +Paths\screenshotPath=RETRODECKHOMEDIR/screenshots Paths\symbolsPath= Paths\videoDumpingPath= Shortcuts\Main%20Window\Advance%20Frame\Context=2 diff --git a/emu-configs/defaults/duckstation/settings.ini b/emu-configs/defaults/duckstation/settings.ini index 43f1ef6e..8466ff35 100644 --- a/emu-configs/defaults/duckstation/settings.ini +++ b/emu-configs/defaults/duckstation/settings.ini @@ -119,7 +119,7 @@ DumpOnBoot = false [BIOS] -SearchDirectory = /home/deck/retrodeck/bios +SearchDirectory = RETRODECKHOMEDIR/bios PathNTSCU = PathNTSCJ = PathPAL = diff --git a/emu-configs/defaults/ppsspp/ppsspp.ini b/emu-configs/defaults/ppsspp/ppsspp.ini index 60d69f50..17d5ed5c 100644 --- a/emu-configs/defaults/ppsspp/ppsspp.ini +++ b/emu-configs/defaults/ppsspp/ppsspp.ini @@ -5,7 +5,7 @@ Enable Logging = True AutoRun = True Browse = False IgnoreBadMemAccess = True -CurrentDirectory = /home/deck/retrodeck/roms/psp +CurrentDirectory = RETRODECKHOMEDIR/roms/psp ShowDebuggerOnLoad = False CheckForNewVersion = True Language = en_US diff --git a/emu-configs/defaults/retroarch/retroarch.cfg b/emu-configs/defaults/retroarch/retroarch.cfg index 042fdacc..c1b10fcb 100644 --- a/emu-configs/defaults/retroarch/retroarch.cfg +++ b/emu-configs/defaults/retroarch/retroarch.cfg @@ -3071,7 +3071,7 @@ savestates_in_content_dir = "false" scan_without_core_match = "false" screen_brightness = "100" screen_orientation = "0" -screenshot_directory = ":\screenshots" +screenshot_directory = "RETRODECKHOMEDIR/screenshots" screenshots_in_content_dir = "false" settings_show_accessibility = "true" settings_show_achievements = "true" diff --git a/emu-configs/defaults/retrodeck/RetroDECK_controller_config.vdf b/emu-configs/defaults/retrodeck/RetroDECK_controller_config.vdf new file mode 100644 index 00000000..7bf60e77 --- /dev/null +++ b/emu-configs/defaults/retrodeck/RetroDECK_controller_config.vdf @@ -0,0 +1,10771 @@ +"controller_mappings" +{ + "version" "3" + "revision" "1596" + "title" "RetroDECK: Official Layout - v0.7b" + "description" "The Official RetroDECK Layout" + "creator" "" + "progenitor" "" + "url" "" + "export_type" "personal_cloud" + "controller_type" "controller_neptune" + "controller_caps" "23117823" + "major_revision" "0" + "minor_revision" "0" + "Timestamp" "-1230453184" + "actions" + { + "Default" + { + "title" "RetroDECK - Set" + "legacy_set" "1" + } + "Preset_1000001" + { + "title" "Global Hotkeys - Set" + "legacy_set" "1" + } + "Preset_1000002" + { + "title" "Quick Access Menu - Set" + "legacy_set" "1" + } + "Preset_1000003" + { + "title" "State Menu - Set" + "legacy_set" "1" + } + "Preset_1000004" + { + "title" "Speed / Frames Menu - Set" + "legacy_set" "1" + } + "Preset_1000005" + { + "title" "Display / Graphics Menu - Set" + "legacy_set" "1" + } + "Preset_1000006" + { + "title" "General Hotkeys Menu - Set" + "legacy_set" "1" + } + "Preset_1000010" + { + "title" "Steam Deck Menu - Set" + "legacy_set" "1" + } + "Preset_1000008" + { + "title" "Emulators: Specific Features Menu - Set" + "legacy_set" "1" + } + "Preset_1000009" + { + "title" "MAME Menu - Set" + "legacy_set" "1" + } + "Preset_1000011" + { + "title" "RetroArch Menu - Set" + "legacy_set" "1" + } + "Preset_1000012" + { + "title" "Gamecube / Wii Menu - Set" + "legacy_set" "1" + } + "Preset_1000013" + { + "title" "DS Menu - Set" + "legacy_set" "1" + } + "Preset_1000014" + { + "title" "Secrets Menu - Set" + "legacy_set" "1" + } + "Preset_1000015" + { + "title" "3DS Menu - Set" + "legacy_set" "1" + } + "Preset_1000016" + { + "title" "Switch Menu - Set" + "legacy_set" "1" + } + } + "action_layers" + { + } + "localization" + { + "english" + { + "title" "Gamepad with Gyro" + "description" "The template works best for games that are designed with a gamepad in mind, but also support a desktop mouse for camera control or aim. This uses both the right pad and the gyro to allow for the most precise aim in games which support gamepad and mouse." + } + } + "group" + { + "id" "0" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "1" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button dpad_up, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button dpad_down, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button dpad_right, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button dpad_left, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "2" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "3" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "4" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "5" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "6" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "8" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "9" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "10" + "mode" "single_button" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "xinput_button START, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "11" + "mode" "single_button" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "xinput_button SELECT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "12" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "13" + "mode" "joystick_camera" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "14" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "15" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "16" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, PAUSE TOGGLE, , " + "binding" "key_press P, PAUSE TOGGLE, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, CAPTURE SCREENSHOT, , " + "binding" "key_press X, CAPTURE SCREENSHOT, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, FULLSCREEN TOGGLE, , " + "binding" "key_press RETURN, FULLSCREEN TOGGLE, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, FULLSCREEN OFF, , " + "binding" "key_press O, FULLSCREEN OFF, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "17" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, REWIND, , " + "binding" "key_press KEYPAD_DASH, REWIND, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "18" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, FAST FORWARD, , " + "binding" "key_press KEYPAD_PLUS, FAST FORWARD, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "20" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action empty_sub_command, , " + "binding" "controller_action empty_sub_command, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "21" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, NEXT SAVE SLOT, , " + "binding" "key_press K, NEXT SAVE SLOT, , " + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, PREVIOUS SAVE SLOT, , " + "binding" "key_press J, PREVIOUS SAVE SLOT, , " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "22" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press ESCAPE, Escape, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "23" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, SWAP SCREENS, , " + "binding" "key_press TAB, SWAP SCREENS, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "37" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "35" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "38" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "33" + "mode" "radial_menu" + "name" "RetroDECK - Main Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 14 1 1, RetroDECK, RD-icon_circle_2_180x180.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 3 1 1, Quick, RD-org.xfce.session.png, #232323 #FFFFFF" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 4 1 1, State, RD-folder-blue-games.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 5 1 1, Speed & Frames, RD-supertuxkart.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 6 1 1, Display & Graphics, RD-preferences-desktop-display.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 7 1 1, General, RD-io.github.antimicrox.antimicrox.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_6" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 9 1 1, Specific, RD-folder-applications.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_7" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 8 1 1, Steam Deck, RD-steam.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "39" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "40" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "41" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "42" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "43" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "44" + "mode" "radial_menu" + "name" "Quick Access - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 1 1 1, Back, RD-edit-undo-red.png, #232323 #FFFFFF" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Exit / Quit Emulator, RD-process-stop.png, " + "binding" "key_press Q, Exit / Quit Emulator, RD-process-stop.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Open Menu, RD-preferences-desktop-icons.png, " + "binding" "key_press M, Open Menu, RD-preferences-desktop-icons.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Swap Dual-Screens, RD-system-switch-user.png, " + "binding" "key_press TAB, Swap Dual-Screens, RD-system-switch-user.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Take Screenshot, RD-camera-photo.png, " + "binding" "key_press X, Take Screenshot, RD-camera-photo.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Save State, RD-document-save.png, " + "binding" "key_press S, Save State, RD-document-save.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_6" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Load State, RD-folder-blue-backup.png, " + "binding" "key_press A, Load State, RD-folder-blue-backup.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_7" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Pause / Resume, RD-media-playback-pause.png, " + "binding" "key_press P, Pause / Resume, RD-media-playback-pause.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_8" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Fullscreen On/Off, RD-zoom-fit-best.png, #232323 #FFFFFF" + "binding" "key_press RETURN, Fullscreen On/Off, RD-zoom-fit-best.png, #232323 #FFFFFF" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_9" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Fullscreen Off, RD-zoom-fit-best.png, #232323 #AD0000" + "binding" "key_press N, Fullscreen Off, RD-zoom-fit-best.png, #232323 #AD0000" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_10" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press ESCAPE, Escape, RD-ESC.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_11" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Restart / Reset, RD-system-reboot.png, " + "binding" "key_press R, Restart / Reset, RD-system-reboot.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "45" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "47" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "48" + "mode" "radial_menu" + "name" "State Management - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 1 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Previous State, RD-go-previous.png, #232323 #FFFFFF" + "binding" "key_press J, Previous State, RD-go-previous.png, #232323 #FFFFFF" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Next State, RD-go-next.png, " + "binding" "key_press K, Next State, RD-go-next.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Save State, RD-document-save.png, " + "binding" "key_press S, Save State, RD-document-save.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Load State, RD-folder-blue-backup.png, " + "binding" "key_press A, Load State, RD-folder-blue-backup.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Undo Load, RD-Arrow-33.png, " + "binding" "key_press 8, Undo Load, RD-Arrow-33.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_6" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Undo Save, RD-Arrow-34.png, " + "binding" "key_press 9, Undo Save, RD-Arrow-34.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "49" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "50" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "51" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "52" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "53" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "54" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "55" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "57" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "58" + "mode" "radial_menu" + "name" "Speed / Frames - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 1 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Fast forward, RD-org.xfce.session.png, #232323 #ADA200" + "binding" "key_press KEYPAD_PLUS, Fast forward, RD-org.xfce.session.png, #232323 #ADA200" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Rewind, RD-view-refresh.png, " + "binding" "key_press KEYPAD_DASH, Rewind, RD-view-refresh.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Increase Emulation Speed, RD-zoom-in.png, #232323 #FFFFFF" + "binding" "key_press 1, Increase Emulation Speed, RD-zoom-in.png, #232323 #FFFFFF" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Decrease Emulation Speed, RD-zoom-out.png, " + "binding" "key_press 2, Decrease Emulation Speed, RD-zoom-out.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Reset / Toggle Emulation Speed, RD-zoom-original.png, " + "binding" "key_press 3, Reset / Toggle Emulation Speed, RD-zoom-original.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_6" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Disable Emulation Speed Limit, RD-battery-missing.png, " + "binding" "key_press 0, Disable Emulation Speed Limit, RD-battery-missing.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_7" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Toggle Frame Limit, RD-battery-full-charging.png, " + "binding" "key_press Z, Toggle Frame Limit, RD-battery-full-charging.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "59" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "60" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "61" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "62" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "63" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "64" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "65" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "67" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "68" + "mode" "radial_menu" + "name" "Display / Graphics - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 1 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Increase Resolution / Upscale, RD-list-add.png, " + "binding" "key_press U, Increase Resolution / Upscale, RD-list-add.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Decrease Resolution / Upscale, RD-list-remove.png, " + "binding" "key_press Y, Decrease Resolution / Upscale, RD-list-remove.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, " + "binding" "key_press W, Widescreen / Aspect Ratio, RD-preferences-desktop-display.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Fullscreen On/Off, RD-zoom-fit-best.png, " + "binding" "key_press RETURN, Fullscreen On/Off, RD-zoom-fit-best.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Fullscreen Off, RD-zoom-fit-best.png, #232323 #AD0000" + "binding" "key_press N, Fullscreen Off, RD-zoom-fit-best.png, #232323 #AD0000" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_6" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Swap Dual-Screens, RD-system-switch-user.png, " + "binding" "key_press TAB, Swap Dual-Screens, RD-system-switch-user.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_7" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Change Dual-Screenlayout, RD-preferences-system-windows-actions.png, " + "binding" "key_press L, Change Dual-Screenlayout, RD-preferences-system-windows-actions.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "69" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "70" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "71" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "72" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "73" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "74" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "75" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "77" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "78" + "mode" "radial_menu" + "name" "General Hotkeys - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 1 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Exit / Quit Emulator, RD-process-stop.png, " + "binding" "key_press Q, Exit / Quit Emulator, RD-process-stop.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Open Menu, RD-preferences-desktop-icons.png, " + "binding" "key_press M, Open Menu, RD-preferences-desktop-icons.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Restart / Reset, RD-system-reboot.png, " + "binding" "key_press R, Restart / Reset, RD-system-reboot.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Take Screenshot, RD-camera-photo.png, " + "binding" "key_press X, Take Screenshot, RD-camera-photo.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Change / Next Disc, RD-application-x-iso.png, " + "binding" "key_press D, Change / Next Disc, RD-application-x-iso.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_6" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Toggle Cheats, RD-utilities-terminal.png, " + "binding" "key_press C, Toggle Cheats, RD-utilities-terminal.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_7" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Pause / Resume, RD-media-playback-pause.png, " + "binding" "key_press P, Pause / Resume, RD-media-playback-pause.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_8" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Toggle Turbo, RD-pcsxr-icon.png, " + "binding" "key_press T, Toggle Turbo, RD-pcsxr-icon.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_9" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Toggle Video Record / Capture, RD-video-x-generic.png, " + "binding" "key_press V, Toggle Video Record / Capture, RD-video-x-generic.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "79" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "80" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "81" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "82" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "83" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "84" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "85" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "117" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "118" + "mode" "radial_menu" + "name" "Steam Deck - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 1 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action SCREENSHOT, Steam Screenshot, RD-applets-screenshooter.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action SHOW_KEYBOARD, Show Keyboard, RD-preferences-desktop-keyboard.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press ESCAPE, Escape, RD-ESC.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, ALT + F4, RD-F4.png, " + "binding" "key_press F4, ALT + F4, RD-F4.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press TAB, Tab, RD-Tab.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_6" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press RETURN, Enter, RD-Enter.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_7" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press F1, F1, RD-F1.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "119" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "120" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "121" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "122" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "123" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "124" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "125" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "127" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "128" + "mode" "radial_menu" + "name" "Emulators: Specific Features - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 1 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 10 1 1, MAME, RD-emblem-favorite.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 11 1 1, RetroArch, RD-retroarch.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 12 1 1, Gamecube & Wii, RD-tesseract.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 13 1 1, NDS, RD-preferences-tweaks-shadows.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 15 1 1, 3DS, RD-preferences-system-windows-actions.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_6" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 16 1 1, Switch, RD-playonlinux.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "129" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "130" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "131" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "132" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "133" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "134" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "135" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "137" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "138" + "mode" "radial_menu" + "name" "MAME - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 9 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Service Mode, RD-emblem-documents.png, " + "binding" "key_press 0, Service Mode, RD-emblem-documents.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Button 1 - Service, RD-Arcade-BLUE.png, " + "binding" "key_press 1, Button 1 - Service, RD-Arcade-BLUE.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Button 2 - Service, RD-Arcade-GREEN.png, " + "binding" "key_press 2, Button 2 - Service, RD-Arcade-GREEN.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Button 3 - Service, RD-Arcade-RED.png, " + "binding" "key_press 3, Button 3 - Service, RD-Arcade-RED.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Button 4 - Service, RD-Arcade-YELLOW.png, " + "binding" "key_press 4, Button 4 - Service, RD-Arcade-YELLOW.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_6" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Bill / Note - Player 1, RD-emblem-generic.png, " + "binding" "key_press 5, Bill / Note - Player 1, RD-emblem-generic.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_7" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Tilt - Player 1, RD-emblem-synchronizing.png, " + "binding" "key_press 6, Tilt - Player 1, RD-emblem-synchronizing.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "139" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "140" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "141" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "142" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "143" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "144" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "145" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "148" + "mode" "radial_menu" + "name" "RetroArch - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 9 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Next Cheat, RD-go-next.png, " + "binding" "key_press G, Next Cheat, RD-go-next.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Previous Cheat, RD-go-previous.png, " + "binding" "key_press F, Previous Cheat, RD-go-previous.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Cheats Toggle, RD-utilities-terminal.png, " + "binding" "key_press C, Cheats Toggle, RD-utilities-terminal.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, AI Service, RD-godot.png, " + "binding" "key_press I, AI Service, RD-godot.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, Netplay Hosting Toggle, RD-notification-network-ethernet-connected.png, " + "binding" "key_press H, Netplay Hosting Toggle, RD-notification-network-ethernet-connected.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "147" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "149" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "150" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "151" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "152" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "153" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "154" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "155" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "157" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "158" + "mode" "radial_menu" + "name" "Gamecube / Wii - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 9 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Netplay - Golf Mode, RD-distributor-logo-netbsd.png, " + "binding" "key_press H, Netplay - Golf Mode, RD-distributor-logo-netbsd.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Freelook Mode - Toggle, RD-preferences-system-search.png, " + "binding" "key_press F, Freelook Mode - Toggle, RD-preferences-system-search.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Wii Sync Button, RD-notification-network-wireless.png, " + "binding" "key_press W, Wii Sync Button, RD-notification-network-wireless.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Wiimote - Upright Mode, RD-emblem-encrypted-unlocked.png, #232323 #ADA200" + "binding" "key_press Z, Wiimote - Upright Mode, RD-emblem-encrypted-unlocked.png, #232323 #ADA200" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_5" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Wiimote - Sideways Mode, RD-emblem-encrypted-locked.png, #232323 #48B119" + "binding" "key_press X, Wiimote - Sideways Mode, RD-emblem-encrypted-locked.png, #232323 #48B119" + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_6" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Reset Freelook Camera, RD-preferences-system-search.png, #232323 #AD0000" + "binding" "key_press R, Reset Freelook Camera, RD-preferences-system-search.png, #232323 #AD0000" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "159" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "160" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "161" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "162" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "163" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "164" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "165" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "167" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "168" + "mode" "radial_menu" + "name" "DS - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 9 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Close / Open - Lid, RD-emblem-downloads.png, " + "binding" "key_press L, Close / Open - Lid, RD-emblem-downloads.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Play Microphone, RD-media-playback-start.png, " + "binding" "key_press P, Play Microphone, RD-media-playback-start.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Sunlight +, RD-list-add.png, " + "binding" "key_press KEYPAD_PLUS, Sunlight +, RD-list-add.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Sunlight -, RD-list-remove.png, " + "binding" "key_press KEYPAD_DASH, Sunlight -, RD-list-remove.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "169" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "170" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "171" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "172" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "173" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "174" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "175" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "176" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "177" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "178" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "179" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "180" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "181" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "182" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "183" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "184" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "185" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "186" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "187" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "189" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "190" + "mode" "radial_menu" + "name" "Secrets - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 1 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, Konami Deck, RD-octopi.png, #232323 #FFFFFF" + } + } + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "key_press A, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "key_press B, , " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press 3, Here be dragons!, RD-tools-check-spelling.png, " + "binding" "key_press 2, Here be dragons!, RD-tools-check-spelling.png, " + } + } + "Full_Press" + { + "bindings" + { + "binding" "key_press 1, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "key_press 6, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "key_press 7, , " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press I, You can do it!, RD-preferences-desktop-emoticons.png, " + } + } + "Full_Press" + { + "bindings" + { + "binding" "key_press D, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "key_press D, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "key_press Q, , " + } + } + "Full_Press" + { + "bindings" + { + "binding" "key_press D, , " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "191" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "192" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "193" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "194" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "195" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "196" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "197" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "199" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "200" + "mode" "radial_menu" + "name" "3DS - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 9 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Load Amiibo, RD-preferences-desktop-accessibility.png, " + "binding" "key_press M, Load Amiibo, RD-preferences-desktop-accessibility.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Remove Amiibo, RD-preferences-desktop-accessibility.png, #232323 #AD0000" + "binding" "key_press N, Remove Amiibo, RD-preferences-desktop-accessibility.png, #232323 #AD0000" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "201" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "202" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "203" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "204" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "205" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "206" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "207" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "209" + "mode" "four_buttons" + "name" "" + "description" "" + "inputs" + { + "button_a" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button A, , " + } + } + } + "disabled_activators" + { + } + } + "button_b" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button B, , " + } + } + } + "disabled_activators" + { + } + } + "button_x" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button X, , " + } + } + } + "disabled_activators" + { + } + } + "button_y" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button Y, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "210" + "mode" "radial_menu" + "name" "Switch - Menu" + "description" "" + "inputs" + { + "touch_menu_button_0" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 9 1 1, Back, RD-edit-undo-red.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_1" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Set GPU Accuracy, RD-emblem-new.png, " + "binding" "key_press G, Set GPU Accuracy, RD-emblem-new.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_2" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Load/Remove Amiibo, RD-preferences-desktop-accessibility.png, " + "binding" "key_press M, Load/Remove Amiibo, RD-preferences-desktop-accessibility.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_3" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_ALT, Docked / Undocked Mode, RD-emblem-unlocked.png, " + "binding" "key_press D, Docked / Undocked Mode, RD-emblem-unlocked.png, " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "touchmenu_button_fire_type" "1" + } + } + "group" + { + "id" "211" + "mode" "absolute_mouse" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Soft_Press" + { + "bindings" + { + "binding" "mouse_button LEFT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "212" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "deadzone_inner_radius" "7199" + } + } + "group" + { + "id" "213" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_LEFT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "1" + } + } + "group" + { + "id" "214" + "mode" "trigger" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button TRIGGER_RIGHT, , " + } + "settings" + { + "haptic_intensity" "2" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "output_trigger" "2" + } + } + "group" + { + "id" "215" + "mode" "joystick_move" + "name" "" + "description" "" + "inputs" + { + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button JOYSTICK_RIGHT, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "216" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_UP, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_DOWN, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_RIGHT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button DPAD_LEFT, , " + } + "settings" + { + "haptic_intensity" "1" + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + "haptic_intensity_override" "0" + } + } + "group" + { + "id" "217" + "mode" "mouse_joystick" + "name" "" + "description" "" + "inputs" + { + } + } + "group" + { + "id" "218" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_SHIFT, , " + "binding" "key_press W, , " + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_SHIFT, , " + "binding" "key_press S, , " + } + } + } + "disabled_activators" + { + } + } + "dpad_east" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_SHIFT, , " + "binding" "key_press D, , " + } + } + } + "disabled_activators" + { + } + } + "dpad_west" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_SHIFT, , " + "binding" "key_press A, , " + } + } + } + "disabled_activators" + { + } + } + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press ESCAPE, , " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + } + } + "group" + { + "id" "219" + "mode" "dpad" + "name" "" + "description" "" + "inputs" + { + "dpad_north" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_SHIFT, , " + "binding" "key_press E, , " + } + } + } + "disabled_activators" + { + } + } + "dpad_south" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_SHIFT, , " + "binding" "key_press Q, , " + } + } + } + "disabled_activators" + { + } + } + "click" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, , " + "binding" "key_press TAB, , " + } + } + } + "disabled_activators" + { + } + } + } + "settings" + { + "requires_click" "0" + } + } + "group" + { + "id" "221" + "mode" "reference" + "description" "" + "settings" + { + "referenced_mode" "33" + } + } + "group" + { + "id" "34" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "7" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "19" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, EXIT EMULATOR, , " + "binding" "key_press Q, EXIT EMULATOR, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, OPEN MENU, , " + "binding" "key_press M, OPEN MENU, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, LOAD STATE, , " + "binding" "key_press A, LOAD STATE, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press LEFT_CONTROL, SAVE STATE, , " + "binding" "key_press S, SAVE STATE, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 1 1 1, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 1 1 1, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "46" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "56" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "66" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "76" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "116" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "126" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "136" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "146" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "156" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "166" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "188" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "198" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "group" + { + "id" "208" + "mode" "switches" + "name" "" + "description" "" + "inputs" + { + "button_escape" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button start, , " + } + } + } + "disabled_activators" + { + } + } + "button_menu" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button select, , " + } + } + } + "disabled_activators" + { + } + } + "left_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_left, , " + } + } + } + "disabled_activators" + { + } + } + "right_bumper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "xinput_button shoulder_right, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press T, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_right" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press Y, , " + } + } + } + "disabled_activators" + { + } + } + "button_back_left_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + "settings" + { + "toggle" "1" + } + } + } + "disabled_activators" + { + } + } + "button_back_right_upper" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "controller_action CHANGE_PRESET 2 1 1, Hotkey, , " + } + } + } + "disabled_activators" + { + } + } + "button_capture" + { + "activators" + { + "release" + { + "bindings" + { + "binding" "controller_action system_key_1, , " + } + } + } + "disabled_activators" + { + } + } + } + } + "preset" + { + "id" "0" + "name" "Default" + "group_source_bindings" + { + "7" "switch active" + "0" "button_diamond active" + "1" "left_trackpad inactive" + "11" "left_trackpad inactive" + "33" "left_trackpad inactive" + "221" "left_trackpad active" + "2" "right_trackpad inactive" + "6" "right_trackpad inactive" + "10" "right_trackpad inactive" + "12" "right_trackpad active" + "13" "right_trackpad inactive" + "3" "joystick active" + "4" "left_trigger active" + "5" "right_trigger active" + "8" "right_joystick active" + "9" "dpad active" + "14" "gyro inactive" + "15" "gyro active" + } + } + "preset" + { + "id" "1" + "name" "Preset_1000001" + "group_source_bindings" + { + "19" "switch active" + "16" "button_diamond active" + "23" "joystick inactive" + "219" "joystick active" + "17" "left_trigger active" + "18" "right_trigger active" + "22" "right_joystick inactive" + "218" "right_joystick active" + "20" "dpad inactive" + "21" "dpad active" + "45" "gyro inactive" + "176" "gyro active" + } + } + "preset" + { + "id" "2" + "name" "Preset_1000002" + "group_source_bindings" + { + "34" "switch active" + "35" "button_diamond active" + "44" "left_trackpad active" + "37" "right_trackpad active" + "38" "joystick active" + "39" "left_trigger active" + "40" "right_trigger active" + "41" "right_joystick active" + "42" "dpad active" + "43" "gyro inactive" + "177" "gyro active" + } + } + "preset" + { + "id" "3" + "name" "Preset_1000003" + "group_source_bindings" + { + "46" "switch active" + "47" "button_diamond active" + "48" "left_trackpad active" + "49" "right_trackpad active" + "50" "joystick active" + "51" "left_trigger active" + "52" "right_trigger active" + "53" "right_joystick active" + "54" "dpad active" + "55" "gyro inactive" + "178" "gyro active" + } + } + "preset" + { + "id" "4" + "name" "Preset_1000004" + "group_source_bindings" + { + "56" "switch active" + "57" "button_diamond active" + "58" "left_trackpad active" + "59" "right_trackpad active" + "60" "joystick active" + "61" "left_trigger active" + "62" "right_trigger active" + "63" "right_joystick active" + "64" "dpad active" + "65" "gyro inactive" + "179" "gyro active" + } + } + "preset" + { + "id" "5" + "name" "Preset_1000005" + "group_source_bindings" + { + "66" "switch active" + "67" "button_diamond active" + "68" "left_trackpad active" + "69" "right_trackpad active" + "70" "joystick active" + "71" "left_trigger active" + "72" "right_trigger active" + "73" "right_joystick active" + "74" "dpad active" + "75" "gyro inactive" + "180" "gyro active" + } + } + "preset" + { + "id" "6" + "name" "Preset_1000006" + "group_source_bindings" + { + "76" "switch active" + "77" "button_diamond active" + "78" "left_trackpad active" + "79" "right_trackpad active" + "80" "joystick active" + "81" "left_trigger active" + "82" "right_trigger active" + "83" "right_joystick active" + "84" "dpad active" + "85" "gyro inactive" + "181" "gyro active" + } + } + "preset" + { + "id" "7" + "name" "Preset_1000010" + "group_source_bindings" + { + "116" "switch active" + "117" "button_diamond active" + "118" "left_trackpad active" + "119" "right_trackpad active" + "120" "joystick active" + "121" "left_trigger active" + "122" "right_trigger active" + "123" "right_joystick active" + "124" "dpad active" + "125" "gyro inactive" + "182" "gyro active" + } + } + "preset" + { + "id" "8" + "name" "Preset_1000008" + "group_source_bindings" + { + "126" "switch active" + "127" "button_diamond active" + "128" "left_trackpad active" + "129" "right_trackpad active" + "130" "joystick active" + "131" "left_trigger active" + "132" "right_trigger active" + "133" "right_joystick active" + "134" "dpad active" + "135" "gyro inactive" + "183" "gyro active" + } + } + "preset" + { + "id" "9" + "name" "Preset_1000009" + "group_source_bindings" + { + "136" "switch active" + "137" "button_diamond active" + "138" "left_trackpad active" + "139" "right_trackpad active" + "140" "joystick active" + "141" "left_trigger active" + "142" "right_trigger active" + "143" "right_joystick active" + "144" "dpad active" + "145" "gyro inactive" + "184" "gyro active" + } + } + "preset" + { + "id" "10" + "name" "Preset_1000011" + "group_source_bindings" + { + "146" "switch active" + "147" "button_diamond active" + "148" "left_trackpad active" + "149" "right_trackpad active" + "150" "joystick active" + "151" "left_trigger active" + "152" "right_trigger active" + "153" "right_joystick active" + "154" "dpad active" + "155" "gyro inactive" + "185" "gyro active" + } + } + "preset" + { + "id" "11" + "name" "Preset_1000012" + "group_source_bindings" + { + "156" "switch active" + "157" "button_diamond active" + "158" "left_trackpad active" + "159" "right_trackpad active" + "160" "joystick active" + "161" "left_trigger active" + "162" "right_trigger active" + "163" "right_joystick active" + "164" "dpad active" + "165" "gyro inactive" + "186" "gyro active" + } + } + "preset" + { + "id" "12" + "name" "Preset_1000013" + "group_source_bindings" + { + "166" "switch active" + "167" "button_diamond active" + "168" "left_trackpad active" + "169" "right_trackpad active" + "170" "joystick active" + "171" "left_trigger active" + "172" "right_trigger active" + "173" "right_joystick active" + "174" "dpad active" + "175" "gyro inactive" + "187" "gyro active" + } + } + "preset" + { + "id" "13" + "name" "Preset_1000014" + "group_source_bindings" + { + "188" "switch active" + "189" "button_diamond active" + "190" "left_trackpad active" + "191" "right_trackpad active" + "192" "joystick active" + "193" "left_trigger active" + "194" "right_trigger active" + "195" "right_joystick active" + "196" "dpad active" + "197" "gyro active" + } + } + "preset" + { + "id" "14" + "name" "Preset_1000015" + "group_source_bindings" + { + "198" "switch active" + "199" "button_diamond active" + "200" "left_trackpad active" + "201" "right_trackpad active" + "202" "joystick active" + "203" "left_trigger active" + "204" "right_trigger active" + "205" "right_joystick active" + "206" "dpad active" + "207" "gyro active" + } + } + "preset" + { + "id" "15" + "name" "Preset_1000016" + "group_source_bindings" + { + "208" "switch active" + "209" "button_diamond active" + "210" "left_trackpad active" + "211" "right_trackpad active" + "212" "joystick active" + "213" "left_trigger active" + "214" "right_trigger active" + "215" "right_joystick active" + "216" "dpad active" + "217" "gyro active" + } + } + "settings" + { + "left_trackpad_mode" "0" + "right_trackpad_mode" "0" + } +} diff --git a/emu-configs/defaults/retrodeck/bios_checklist.cfg b/emu-configs/defaults/retrodeck/bios_checklist.cfg deleted file mode 100644 index ae47470a..00000000 --- a/emu-configs/defaults/retrodeck/bios_checklist.cfg +++ /dev/null @@ -1,25 +0,0 @@ -psxonpsp660.bin^^c53ca5908936d412331790f4426c6c33^PSX^PS1 BIOS -scph5500.bin^^8dd7d5296a650fac7319bce665a6a53c^PSX^PS1 JP BIOS -scph5501.bin^^490f666e1afb15b7362b406ed1cea246^PSX^PS1 US BIOS -scph5502.bin^^32736f17079d0b2b7024407c39bd3050^PSX^PS1 EU BIOS -ps1_rom.bin^^81bbe60ba7a3d1cea1d48c14cbcc647b^PSX^PS1 BIOS -ps2-0200a-20040614.bin^^d333558cc14561c1fdc334c75d5f37b7^PS2^PS2 US BIOS -ps2-0200e-20040614.bin^^dc752f160044f2ed5fc1f4964db2a095^PS2^PS2 EU BIOS -ps2-0200j-20040614.bin^^0eee5d1c779aa50e94edd168b4ebf42e^PS2^PS2 JP BIOS -bios_CD_E.bin^^e66fa1dc5820d254611fdcdba0662372^SegaCD^MegaCD EU BIOS -bios_CD_U.bin^^854b9150240a198070150e4566ae1290^SegaCD^SegaCD US BIOS -bios_CD_J.bin^^278a9397d192149e84e820ac621a8edd^SegaCD^MegaCD JP BIOS -sega_101.bin^^85ec9ca47d8f6807718151cbcca8b964^Sega Saturn^Saturn JP BIOS -mpr-17933.bin^^3240872c70984b6cbfda1586cab68dbe^Sega Saturn^Saturn US.mdEU BIOS -mpr-18811-mx.ic1^^255113ba943c92a54facd25a10fd780c^Sega Saturn^The King of Fighters 95 ROM Cartridge - Required for this game -mpr-19367-mx.ic1^^1cd19988d1d72a3e7caa0b73234c96b4^Sega Saturn^Ultraman: Hikari no Kyojin Densetsu ROM Cartridge - Required for this game -bios7.bin^^df692a80a5b1bc90728bc3dfc76cd948^Nintendo DS^Used by MelonDS emulator -bios9.bin^^a392174eb3e572fed6447e956bde4b25^Nintendo DS^Used by MelonDS emulator -firmware.bin^^93276d8629990f50a90950ea083ab348^Nintendo DS^Used by MelonDS emulator -mcpx_1.0.bin^^d49c52a4102f6df7bcf8d0617ac475ed^XBOX^Used by XEMU emulator -Complex.bin^^Unknown^XBOX^Used by XEMU emulator -Complex_4627v1.03.bin^^Unknown^XBOX^Used by XEMU emulator -Complex_4627.bin^^Unknown^XBOX^Used by XEMU emulator -eeprom.bin^^Unknown^XBOX^Used by XEMU emulator -prod.keys^switch/keys/^Unknown^Switch^A required file for Switch emulation in Yuzu -title.keys^switch/keys/^Unknown^Switch^A required file for Switch emulation in Yuzu \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/compression_targets.cfg b/emu-configs/defaults/retrodeck/compression_targets.cfg deleted file mode 100644 index 28c1b4d1..00000000 --- a/emu-configs/defaults/retrodeck/compression_targets.cfg +++ /dev/null @@ -1,38 +0,0 @@ -[chd] -dreamcast -psx -ps2 -[chd-maybe] -3do -amiga -amiga1200 -amiga600 -amigacd32 -cdimono1 -cdtv -dreamcast -gamegear -genesis -mame-advmame -mame-mame4all -mastersystem -megacd -megacdjp -megadrive -mess -neogeo -neogeocd -neogeocdjp -pcengine -pcenginecd -pcfx -ps2 -psx -saturn -saturnjp -segacd -sg-1000 -supergrafx -tg16 -tg-cd -[zip] \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/presets/citra_presets.cfg b/emu-configs/defaults/retrodeck/presets/citra_presets.cfg new file mode 100644 index 00000000..9211d5c0 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/citra_presets.cfg @@ -0,0 +1,9 @@ +config_file_format^citra +target_file^$citraconf +defaults_file^$emuconfigs/citra/qt-config.ini +change^ask_to_exit^confirmClose^true^UI +change^ask_to_exit^confirmClose\default^true^UI +change^nintendo_button_layout^profiles\1\button_a^button:1,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls +change^nintendo_button_layout^profiles\1\button_b^button:0,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls +change^nintendo_button_layout^profiles\1\button_x^button:3,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls +change^nintendo_button_layout^profiles\1\button_y^button:2,engine:sdl,guid:030079f6de280000ff11000001000000,port:0^Controls diff --git a/emu-configs/defaults/retrodeck/presets/dolphin_presets.cfg b/emu-configs/defaults/retrodeck/presets/dolphin_presets.cfg new file mode 100644 index 00000000..234012e9 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/dolphin_presets.cfg @@ -0,0 +1,4 @@ +config_file_format^dolphin +target_file^$dolphinconf +defaults_file^$emuconfigs/dolphin/Dolphin.ini +change^ask_to_exit^ConfirmStop^True^Interface diff --git a/emu-configs/defaults/retrodeck/presets/duckstation_presets.cfg b/emu-configs/defaults/retrodeck/presets/duckstation_presets.cfg new file mode 100644 index 00000000..76c9f926 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/duckstation_presets.cfg @@ -0,0 +1,10 @@ +config_file_format^duckstation +target_file^$duckstationconf +defaults_file^$emuconfigs/duckstation/settings.ini +change^cheevos^Enabled^true^Cheevos +change^cheevos^Username^$cheevos_username^Cheevos +change^cheevos^Token^$cheevos_token^Cheevos +change^cheevos^LoginTimestamp^$cheevos_login_timestamp^Cheevos +change^cheevos_hardcore^ChallengeMode^true^Cheevos +change^savestate_auto_save^SaveStateOnExit^true^Main +change^ask_to_exit^ConfirmPowerOff^true^Main diff --git a/emu-configs/defaults/retrodeck/presets/example.txt b/emu-configs/defaults/retrodeck/presets/example.txt new file mode 100644 index 00000000..53d031a4 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/example.txt @@ -0,0 +1,11 @@ +config_file_format^retroarch # This is the config file format, used in functions like get_setting_value and set_setting_value +target_file^$examplefile # This is the target file that should be updated. This will be the actively-used config file by whatever emulator is being set up. This can be a variable name as well! +defaults_file^$emuconfigs/retroarch/retroarch.cfg # This is the file that is referenced when presets are disabled. This should be the "shipped" config file for this emulator +change^cheevos^Enabled^true^Cheevos # This is a preset configuration line. The syntax is ^^^^ +change^borders^overlay_file^/var/config/retroarch/overlays/borders/snes.cfg # This is another preset configuration line, for the preset section called "borders" in retrodeck.cfg. Also, there is no defined "setting section" on this line + + +OTHER NOTES: +- The name of the presets configuration file for any given system MUST be _presets.cfg +- The is whatever name is given to this system in retrodeck.cfg, it is not tied to the actual emulator name. +- The name given to the system in retrodeck.cfg will be translated to a "nice looking" format for user dialogs through the file at emu-configs/defaults/retrodeck/reference_lists/pretty_system_names.cfg but will be used internally as-is diff --git a/emu-configs/defaults/retrodeck/presets/gb_presets.cfg b/emu-configs/defaults/retrodeck/presets/gb_presets.cfg new file mode 100644 index 00000000..cc48e4c0 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/gb_presets.cfg @@ -0,0 +1,14 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Gambatte/gb.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^aspect_ratio_index^23 +change^borders^custom_viewport_height^576 +change^borders^custom_viewport_width^640 +change^borders^custom_viewport_x^320 +change^borders^custom_viewport_y^20 +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gb.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.110000 +change^borders^input_overlay_enable^true +change^borders^input_overlay_scale_landscape^1.205000 +change^borders^input_overlay_y_offset_landscape^0.005000 +enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Gambatte/gb.rmp diff --git a/emu-configs/defaults/retrodeck/presets/gba_presets.cfg b/emu-configs/defaults/retrodeck/presets/gba_presets.cfg new file mode 100644 index 00000000..dc48d86d --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/gba_presets.cfg @@ -0,0 +1,13 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/mGBA/gba.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^aspect_ratio_index^23 +change^borders^custom_viewport_height^600 +change^borders^custom_viewport_width^900 +change^borders^custom_viewport_x^190 +change^borders^custom_viewport_y^37 +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gba.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.105000 +change^borders^input_overlay_enable^true +change^borders^input_overlay_scale_landscape^1.140000 +enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Gambatte/gbc.rmp diff --git a/emu-configs/defaults/retrodeck/presets/gbc_presets.cfg b/emu-configs/defaults/retrodeck/presets/gbc_presets.cfg new file mode 100644 index 00000000..c691b38d --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/gbc_presets.cfg @@ -0,0 +1,14 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Gambatte/gbc.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^aspect_ratio_index^23 +change^borders^custom_viewport_height^576 +change^borders^custom_viewport_width^640 +change^borders^custom_viewport_x^320 +change^borders^custom_viewport_y^20 +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gbc.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.110000 +change^borders^input_overlay_enable^true +change^borders^input_overlay_scale_landscape^1.205000 +change^borders^input_overlay_y_offset_landscape^0.005000 +enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Gambatte/gbc.rmp diff --git a/emu-configs/defaults/retrodeck/presets/genesis_presets.cfg b/emu-configs/defaults/retrodeck/presets/genesis_presets.cfg new file mode 100644 index 00000000..ef0fbc5b --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/genesis_presets.cfg @@ -0,0 +1,8 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Genesis Plus GX/genesis.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/genesis.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.100000 +change^borders^input_overlay_enable^true +change^borders^input_overlay_scale_landscape^1.040000 +change^widescreen^aspect_ratio_index^24 diff --git a/emu-configs/defaults/retrodeck/presets/gg_presets.cfg b/emu-configs/defaults/retrodeck/presets/gg_presets.cfg new file mode 100644 index 00000000..1fc0ebb7 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/gg_presets.cfg @@ -0,0 +1,11 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Genesis Plus GX/gg.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^aspect_ratio_index^23 +change^borders^custom_viewport_width^800 +change^borders^custom_viewport_x^240 +change^borders^custom_viewport_y^43 +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gg.cfg +change^borders^input_overlay_aspect_adjust_landscape^-0.080000 +change^borders^input_overlay_enable^true +change^borders^input_overlay_scale_landscape^1.345000 diff --git a/emu-configs/defaults/retrodeck/presets/n64_presets.cfg b/emu-configs/defaults/retrodeck/presets/n64_presets.cfg new file mode 100644 index 00000000..542aa841 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/n64_presets.cfg @@ -0,0 +1,8 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Mupen64Plus-Next/n64.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/N64.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.145000 +change^borders^input_overlay_enable^true +change^widescreen^aspect_ratio_index^24 +enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Snes9x/snes.rmp diff --git a/emu-configs/defaults/retrodeck/presets/pcsx2_presets.cfg b/emu-configs/defaults/retrodeck/presets/pcsx2_presets.cfg new file mode 100644 index 00000000..ba01d17c --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/pcsx2_presets.cfg @@ -0,0 +1,10 @@ +config_file_format^pcsx2 +target_file^$pcsx2conf +defaults_file^$emuconfigs/PCSX2/PCSX2.ini +change^cheevos^Enabled^true^Achievements +change^cheevos^Username^$cheevos_username^Achievements +change^cheevos^Token^$cheevos_token^Achievements +change^cheevos^LoginTimestamp^$cheevos_login_timestamp^Achievements +change^cheevos_hardcore^ChallengeMode^true^Achievements +change^savestate_auto_save^SaveStateOnShutdown^true^EmuCore +change^ask_to_exit^ConfirmShutdown^true^UI diff --git a/emu-configs/defaults/retrodeck/presets/ppsspp_presets.cfg b/emu-configs/defaults/retrodeck/presets/ppsspp_presets.cfg new file mode 100644 index 00000000..90094d5e --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/ppsspp_presets.cfg @@ -0,0 +1,4 @@ +config_file_format^ppsspp +target_file^$ppssppconf +defaults_file^$emuconfigs/PCSX2/PCSX2.ini +change^savestate_auto_load^AutoLoadSaveState^2^General diff --git a/emu-configs/defaults/retrodeck/presets/primehack_presets.cfg b/emu-configs/defaults/retrodeck/presets/primehack_presets.cfg new file mode 100644 index 00000000..3abf4ba5 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/primehack_presets.cfg @@ -0,0 +1,4 @@ +config_file_format^primehack +target_file^$primehackconf +defaults_file^$emuconfigs/primehack/Dolphin.ini +change^ask_to_exit^ConfirmStop^True^Interface diff --git a/emu-configs/defaults/retrodeck/presets/psx_ra_presets.cfg b/emu-configs/defaults/retrodeck/presets/psx_ra_presets.cfg new file mode 100644 index 00000000..f3aaa96d --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/psx_ra_presets.cfg @@ -0,0 +1,8 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/SwanStation/psx.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^input_overlay^/var/config/retrodeck/overlays/borders/pegasus/psx.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.120000 +change^borders^input_overlay_enable^true +change^borders^input_overlay_scale_landscape^1.040000 +change^widescreen^aspect_ratio_index^24 diff --git a/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gb.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gb.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gb.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gbc.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gbc.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/Gambatte/gbc.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/remaps/Mesen/nes.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/Mesen/nes.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/Mesen/nes.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/remaps/Mupen64Plus-Next/n64.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/Mupen64Plus-Next/n64.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/Mupen64Plus-Next/n64.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/remaps/Snes9x/snes.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/Snes9x/snes.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/Snes9x/snes.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/remaps/mGBA/gba.rmp.disabled b/emu-configs/defaults/retrodeck/presets/remaps/mGBA/gba.rmp.disabled new file mode 100644 index 00000000..445f6f59 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/remaps/mGBA/gba.rmp.disabled @@ -0,0 +1,4 @@ +input_player1_btn_a = "0" +input_player1_btn_b = "8" +input_player1_btn_x = "1" +input_player1_btn_y = "9" diff --git a/emu-configs/defaults/retrodeck/presets/retroarch_presets.cfg b/emu-configs/defaults/retrodeck/presets/retroarch_presets.cfg new file mode 100644 index 00000000..7a65546a --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/retroarch_presets.cfg @@ -0,0 +1,9 @@ +config_file_format^retroarch-all +target_file^$raconf +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^cheevos^cheevos_enable^true +change^cheevos^cheevos_token^$cheevos_token +change^cheevos^cheevos_username^$cheevos_username +change^cheevos_hardcore^cheevos_hardcore_mode_enable^true +change^savestate_auto_load^savestate_auto_load^true +change^savestate_auto_save^savestate_auto_save^true diff --git a/emu-configs/defaults/retrodeck/presets/snes_presets.cfg b/emu-configs/defaults/retrodeck/presets/snes_presets.cfg new file mode 100644 index 00000000..2d71ed98 --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/snes_presets.cfg @@ -0,0 +1,9 @@ +config_file_format^retroarch +target_file^/var/config/retroarch/config/Snes9x/snes.cfg +defaults_file^$emuconfigs/retroarch/retroarch.cfg +change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/snes87.cfg +change^borders^input_overlay_aspect_adjust_landscape^0.305000 +change^borders^input_overlay_scale_landscape^1.050000 +change^borders^input_overlay_enable^true +change^widescreen^aspect_ratio_index^24 +enable^nintendo_button_layout^/var/config/retroarch/config/remaps/Snes9x/snes.rmp diff --git a/emu-configs/defaults/retrodeck/presets/yuzu_presets.cfg b/emu-configs/defaults/retrodeck/presets/yuzu_presets.cfg new file mode 100644 index 00000000..e6c915fc --- /dev/null +++ b/emu-configs/defaults/retrodeck/presets/yuzu_presets.cfg @@ -0,0 +1,9 @@ +config_file_format^yuzu +target_file^$yuzuconf +defaults_file^$emuconfigs/yuzu/qt-config.ini +change^ask_to_exit^confirmClose^true^UI +change^ask_to_exit^confirmClose\default^true^UI +change^nintendo_button_layout^player_0_button_a^pad:0,button:0,port:0,guid:03000000de280000ff11000001000000,engine:sdl^Controls +change^nintendo_button_layout^player_0_button_b^pad:0,button:1,port:0,guid:03000000de280000ff11000001000000,engine:sdl^Controls +change^nintendo_button_layout^player_0_button_x^pad:0,button:2,port:0,guid:03000000de280000ff11000001000000,engine:sdl^Controls +change^nintendo_button_layout^player_0_button_y^pad:0,button:3,port:0,guid:03000000de280000ff11000001000000,engine:sdl^Controls diff --git a/emu-configs/defaults/retrodeck/reference_lists/bios_checklist.cfg b/emu-configs/defaults/retrodeck/reference_lists/bios_checklist.cfg new file mode 100644 index 00000000..c11d6a4c --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/bios_checklist.cfg @@ -0,0 +1,129 @@ +neogeo.zip^^Unknown^Arcade (FinalBurn Neo)^Neo Geo BIOS (Required for this system) +neocdz.zip^^Unknown^Arcade (FinalBurn Neo)^Neo Geo CDZ BIOS (Required for this system) +decocass.zip^^Unknown^Arcade (FinalBurn Neo)^DECO Cassette System BIOS (Required for this system) +isgsm.zip^^Unknown^Arcade (FinalBurn Neo)^ISG Selection Master Type 2006 System BIOS (Required for this system) +midssio.zip^^Unknown^Arcade (FinalBurn Neo)^Midway SSIO Sound Board Internal ROM (Required for this system) +nmk004.zip^^Unknown^Arcade (FinalBurn Neo)^NMK004 Internal ROM (Required for this system) +pgm.zip^^Unknown^Arcade (FinalBurn Neo)^PGM System BIOS (Required for this system) +skns.zip^^Unknown^Arcade (FinalBurn Neo)^Super Kaneko Nova System BIOS (Required for this system) +ym2608.zip^^Unknown^Arcade (FinalBurn Neo)^YM2608 Internal ROM (Required for this system) +cchip.zip^^Unknown^Arcade (FinalBurn Neo)^C-Chip Internal ROM (Required for this system) +bubsys.zip^^Unknown^Arcade (FinalBurn Neo)^Bubble System BIOS (Required for this system) +namcoc69.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C69 BIOS (Required for this system) +namcoc70.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C70 BIOS (Required for this system) +namcoc75.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C75 BIOS (Required for this system) +coleco.zip^^Unknown^Arcade (FinalBurn Neo)^ColecoVision System BIOS (Required for this system) +fdsbios.zip^^Unknown^Arcade (FinalBurn Neo)^FDS System BIOS (Required for this system) +msx.zip^^Unknown^Arcade (FinalBurn Neo)^MSX1 System BIOS (Required for this system) +ngp.zip^^Unknown^Arcade (FinalBurn Neo)^NeoGeo Pocket BIOS (Required for this system) +spectrum.zip^^Unknown^Arcade (FinalBurn Neo)^ZX Spectrum BIOS (Required for this system) +spec128.zip^^Unknown^Arcade (FinalBurn Neo)^ZX Spectrum 128 BIOS (Required for this system) +spec1282a.zip^^Unknown^Arcade (FinalBurn Neo)^ZX Spectrum 128 +2a BIOS (Required for this system) +channelf.zip^^Unknown^Arcade (FinalBurn Neo)^Fairchild Channel F BIOS (Required for this system) +5200.rom^^281f20ea4320404ec820fb7ec0693b38^Atari 8-bit computer systems and 5200^5200 BIOS (Required) +ATARIXL.ROM^^06daac977823773a3eea3422fd26a703^Atari 8-bit computer systems and 5200^Atari XL/XE OS BIOS (Required for these systems) +ATARIBAS.ROM^^0bac0c6a50104045d902df4503a4c30b^Atari 8-bit computer systems and 5200^BASIC interpreter BIOS (Required for these systems) +ATARIOSA.ROM^^eb1f32f5d9f382db1bbfb8d7f9cb343a^Atari 8-bit computer systems and 5200^Atari 400/800 PAL BIOS (Required for these systems) +ATARIOSB.ROM^^a3e8d617c95d08031fe1b20d541434b2^Atari 8-bit computer systems and 5200^BIOS for Atari 400/800 NTSC (Required for these systems) +tos.img^^c1c57ce48e8ee4135885cee9e63a68a2^Atari ST/STE/TT/Falcon^TOS Boot Image (Required) +lynxboot.img^^fcd403db69f54290b51035d82f835e7b^Atari Lynx^Lynx Boot Image (Required) +o2rom.bin^^562d5ebf9e030a40d6fabfc2f33139fd^Magnavox Odyssey2 / Phillips Videopac+^Odyssey2 BIOS - G7000 model (Required) +c52.bin^^f1071cdb0b6b10dde94d3bc8a6146387^Magnavox Odyssey2 / Phillips Videopac+^Videopac+ French BIOS - G7000 model (Required for Videopac games) +g7400.bin^^c500ff71236068e0dc0d0603d265ae76^Magnavox Odyssey2 / Phillips Videopac+^Videopac+ European BIOS - G7400 model (Required for Videopac games) +jopac.bin^^279008e4a0db2dc5f1c048853b033828^Magnavox Odyssey2 / Phillips Videopac+^Videopac+ French BIOS - G7400 model (Required for Videopac games) +exec.bin^^62e761035cb657903761800f4437b8af^Mattel Intellivision^Executive ROM (Required) +grom.bin^^0cd5946c6473e42e8e4c2137785e427f^Mattel Intellivision^Graphics ROM (Required) +MSX.ROM^^364a1a579fe5cb8dba54519bcfcdac0d^Microsoft MSX^MSX BIOS (Required) +MSX2.ROM^^ec3a01c91f24fbddcbcab0ad301bc9ef^Microsoft MSX^MSX2 BIOS (Required) +MSX2EXT.ROM^^2183c2aff17cf4297bdb496de78c2e8a^Microsoft MSX^MSX2 ExtROM (Required) +MSX2P.ROM^^847cc025ffae665487940ff2639540e5^Microsoft MSX^MSX2+ BIOS (Required) +MSX2PEXT.ROM^^7c8243c71d8f143b2531f01afa6a05dc^Microsoft MSX^MSX2+ ExtROM (Required) +DISK.ROM^^80dcd1ad1a4cf65d64b7ba10504e8190^Microsoft MSX^DiskROM/BDOS +FMPAC.ROM^^6f69cc8b5ed761b03afd78000dfb0e19^Microsoft MSX^FMPAC BIOS +MSXDOS2.ROM^^6418d091cd6907bbcf940324339e43bb^Microsoft MSX^MSX-DOS 2 +PAINTER.ROM^^403cdea1cbd2bb24fae506941f8f655e^Microsoft MSX^Yamaha Painter +KANJI.ROM^^febe8782b466d7c3b16de6d104826b34^Microsoft MSX^Kanji Font +mcpx_1.0.bin^^d49c52a4102f6df7bcf8d0617ac475ed^Microsoft XBOX^Used by XEMU emulator +Complex.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator +Complex_4627v1.03.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator +Complex_4627.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator +syscard3.pce^^38179df8f4ac870017db21ebcbf53114^NEC PC Engine / CD^Super CD-ROM2 System V3.xx (Required) +syscard2.pce^^Unknown^NEC PC Engine / CD^CD-ROM System V2.xx +syscard1.pce^^Unknown^NEC PC Engine / CD^CD-ROM System V1.xx +gexpress.pce^^Unknown^NEC PC Engine / CD^Game Express CD Card +font.bmp^np2kai/^7da1e5b7c482d4108d22a5b09631d967^NEC PC-98 (Neko Project II Kai)^Needed to display text (Required) +FONT.ROM^np2kai/^2af6179d7de4893ea0b705c00e9a98d6^NEC PC-98 (Neko Project II Kai)^Alt font file (Required if normal font file is missing) +bios.rom^np2kai/^e246140dec5124c5e404869a84caefce^NEC PC-98 (Neko Project II Kai)^BIOS file (Required) +itf.rom^np2kai/^e9fc3890963b12cf15d0a2eea5815b72^NEC PC-98 (Neko Project II Kai)^BIOS file (Required) +sound.rom^np2kai/^caf90f22197aed6f14c471c21e64658d^NEC PC-98 (Neko Project II Kai)^BIOS file (Required) +bios9821.rom^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^Optional BIOS file +d8000.rom^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^Optional BIOS file +2608_BD.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +2608_SD.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +2608_TOP.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +2608_HH.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +2608_TOM.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +2608_RIM.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +n88.rom^^4f984e04a99d56c4cfe36115415d6eb8^NEC PC-8000 / PC-8800 series (QUASI88)^BIOS File (Required) +n88n.rom^^2ff07b8769367321128e03924af668a0^NEC PC-8000 / PC-8800 series (QUASI88)^Required for PC-8000 series emulation. (N BASIC mode) +disk.rom^^793f86784e5608352a5d7f03f03e0858^NEC PC-8000 / PC-8800 series (QUASI88)^Required for loading disk images +n88knj1.rom^^d81c6d5d7ad1a4bbbd6ae22a01257603^NEC PC-8000 / PC-8800 series (QUASI88)^Required for viewing kanji +n88_0.rom^^d675a2ca186c6efcd6277b835de4c7e5^NEC PC-8000 / PC-8800 series (QUASI88)^Required for viewing kanji +n88_1.rom^^e844534dfe5744b381444dbe61ef1b66^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file +n88_2.rom^^6548fa45061274dee1ea8ae1e9e93910^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file +n88_3.rom^^fc4b76a402ba501e6ba6de4b3e8b4273^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file +aes_keys.txt^citra/sysdata/^Unknown^Nintendo 3DS^Decryption keys used by Citra emulator +bios7.bin^^df692a80a5b1bc90728bc3dfc76cd948^Nintendo DS^Used by MelonDS emulator (Required, see Wiki) +bios9.bin^^a392174eb3e572fed6447e956bde4b25^Nintendo DS^Used by MelonDS emulator (Required, see Wiki) +firmware.bin^^e45033d9b0fa6b0de071292bba7c9d13^Nintendo DS^Used by MelonDS emulator (Required, see Wiki) +disksys.rom^^ca30b50f880eb660a320674ed365ef7a^Nintendo NES / Famicom^Family Computer Disk System BIOS - Required for Family Computer Disk System emulation +bios.min^^1e4fb124a3a886865acb574f388c803d^Nintendo Pokemon Mini^Pokémon Mini BIOS - Optional +prod.keys^switch/keys/^Unknown^Nintendo Switch^A file for Switch emulation in Yuzu (Required) +title.keys^switch/keys/^Unknown^Nintendo Switch^A file for Switch emulation in Yuzu (Required) +pico8^pico-8/^Unknown^PICO-8^The PICO-8 executable (Required) +pico8.dat^pico-8/^Unknown^PICO-8^A PICO-8 system file (Required) +pico8_dyn^pico-8/^Unknown^PICO-8^A PICO-8 system file (Required) +bios_CD_E.bin^^e66fa1dc5820d254611fdcdba0662372^Sega CD^MegaCD EU BIOS (At least 1 required) +bios_CD_U.bin^^2efd74e3232ff260e371b99f84024f7f^Sega CD^SegaCD US BIOS (At least 1 required) +bios_CD_J.bin^^278a9397d192149e84e820ac621a8edd^Sega CD^MegaCD JP BIOS (At least 1 required) +dc_boot.bin^dc/^e10c53c2f8b90bab96ead2d368858623^Sega Dreamcast^Dreamcast BIOS (Required) +naomi.zip^dc/^0ea6d3650ce4a7608a589e5df21a1f2f^Sega Dreamcast^Naomi BIOS +naomi2.zip^dc/^9b85e0de6ef359e5006c9b79a5a266b0^Sega Dreamcast^Naomi BIOS +naomi_boot.bin^dc/^96cb91c4a0bedd86e5a6965cfe6c0148^Sega Dreamcast^Naomi BIOS +hod2bios.zip^dc/^629bb0552463ba116ccf23d9a468a9f0^Sega Dreamcast^Naomi The House of the Dead 2 BIOS +f355dlx.zip^dc/^4b5bb177cbd760477598f85531dbe7fd^Sega Dreamcast^Naomi Ferrari F355 Challenge Deluxe BIOS +f355bios.zip^dc/^882f2c1cf8ec030955c48fe6aa6929ea^Sega Dreamcast^Naomi Ferrari F355 Challenge Twin/Deluxe BIOS +airlbios.zip^dc/^09ef4b8dea6cd8db2de1c13d510a6a87^Sega Dreamcast^Naomi Airline Pilots Deluxe BIOS +awbios.zip^dc/^b2f122e091da223beb824efafc3d6a36^Sega Dreamcast^Naomi Atomiswave BIOS +bios.sms^^840481177270d5642a14ca71ee72844c^Sega Master System / GameGear^Master System BIOS +BIOS.col^^2c66f5911e5b42b8ebe113403548eee7^Sega Master System / GameGear^Colecovision BIOS +sega_101.bin^^85ec9ca47d8f6807718151cbcca8b964^Sega Saturn^Saturn JP BIOS (At least 1 required) +mpr-17933.bin^^3240872c70984b6cbfda1586cab68dbe^Sega Saturn^Saturn US.mdEU BIOS (At least 1 required) +mpr-18811-mx.ic1^^255113ba943c92a54facd25a10fd780c^Sega Saturn^The King of Fighters 95 ROM Cartridge (Required for this game) +mpr-19367-mx.ic1^^1cd19988d1d72a3e7caa0b73234c96b4^Sega Saturn^Ultraman: Hikari no Kyojin Densetsu ROM Cartridge (Required for this game) +iplrom.dat^keropi/^7fd4caabac1d9169e289f0f7bbf71d8e^Sharp X68000^X68000 BIOS (Required) +cgrom.dat^keropi/^cb0a5cfcf7247a7eab74bb2716260269^Sharp X68000^Font file (Required) +iplrom30.dat^keropi/^Unknown^Sharp X68000^X68000 BIOS 2 +iplromco.dat^keropi/^Unknown^Sharp X68000^X68000 BIOS 3 +iplromxv.dat^keropi/^Unknown^Sharp X68000^X68000 BIOS 4 +psxonpsp660.bin^^c53ca5908936d412331790f4426c6c33^Sony PSX^PS1 BIOS (At least 1 required) +scph5500.bin^^8dd7d5296a650fac7319bce665a6a53c^Sony PSX^PS1 JP BIOS (At least 1 required) +scph5501.bin^^490f666e1afb15b7362b406ed1cea246^Sony PSX^PS1 US BIOS (At least 1 required) +scph5502.bin^^32736f17079d0b2b7024407c39bd3050^Sony PSX^PS1 EU BIOS (At least 1 required) +scph7001.bin^^1e68c231d0896b7eadcad1d7d8e76129^Sony PSX^PS1 BIOS (At least 1 required) +scph7002.bin^^b9d9a0286c33dc6b7237bb13cd46fdee^Sony PSX^PS1 BIOS (At least 1 required) +scph7003.bin^^490f666e1afb15b7362b406ed1cea246^Sony PSX^PS1 BIOS (At least 1 required) +scph7502.bin^^b9d9a0286c33dc6b7237bb13cd46fdee^Sony PSX^PS1 BIOS (At least 1 required) +scph9002(7502).bin^^b9d9a0286c33dc6b7237bb13cd46fdee^Sony PSX^PS1 BIOS (At least 1 required) +ps1_rom.bin^^81bbe60ba7a3d1cea1d48c14cbcc647b^Sony PSX^PS1 BIOS (At least 1 required) +ps2-0200a-20040614.bin^^d333558cc14561c1fdc334c75d5f37b7^Sony PS2^PS2 US BIOS (At least 1 required) +ps2-0200e-20040614.bin^^dc752f160044f2ed5fc1f4964db2a095^Sony PS2^PS2 EU BIOS (At least 1 required) +ps2-0200j-20040614.bin^^0eee5d1c779aa50e94edd168b4ebf42e^Sony PS2^PS2 JP BIOS (At least 1 required) +128p-0.rom^fuse/^Unknown^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) +128p-1.rom^fuse/^Unknown^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) +trdos.rom^fuse/^Unknown^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) +gluck.rom^fuse/^Unknown^ZX Spectrum^Pentagon 512K/1024 ROM (Required) +256s-0.rom^fuse/^Unknown^ZX Spectrum^Scorpion 256K ROM (Required) +256s-1.rom^fuse/^Unknown^ZX Spectrum^Scorpion 256K ROM (Required) +256s-2.rom^fuse/^Unknown^ZX Spectrum^Scorpion 256K ROM (Required) +256s-3.rom^fuse/^Unknown^ZX Spectrum^Scorpion 256K ROM (Required) diff --git a/emu-configs/defaults/retrodeck/reference_lists/compression_targets.cfg b/emu-configs/defaults/retrodeck/reference_lists/compression_targets.cfg new file mode 100644 index 00000000..382abc1d --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/compression_targets.cfg @@ -0,0 +1,35 @@ +[chd] +3do +amigacd32 +dreamcast +megacd +neogeocd +pcenginecd +pcfx +psx +ps2 +saturn +saturnjp +segacd +tg-cd +[rvz] +gc +wii +[zip] +atari2600 +atari5200 +atari7800 +atari800 +atarijaguar +atarilynx +atarist +gamegear +gb +gba +gbc +genesis +mastersystem +nds +nes +snes +snesna diff --git a/emu-configs/defaults/retrodeck/easter_egg_checklist.cfg b/emu-configs/defaults/retrodeck/reference_lists/easter_egg_checklist.cfg similarity index 100% rename from emu-configs/defaults/retrodeck/easter_egg_checklist.cfg rename to emu-configs/defaults/retrodeck/reference_lists/easter_egg_checklist.cfg diff --git a/emu-configs/defaults/retrodeck/reference_lists/finit_options_list.cfg b/emu-configs/defaults/retrodeck/reference_lists/finit_options_list.cfg new file mode 100644 index 00000000..0c1eb4f1 --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/finit_options_list.cfg @@ -0,0 +1,2 @@ +false^RPCS3 Firmware Install^Install firmware needed for PS3 emulation^rpcs3_firmware +false^RetroDECK Controller Profile^Install custom RetroDECK controller profile^rd_controller_profile diff --git a/emu-configs/defaults/retrodeck/reference_lists/helper_files_list.cfg b/emu-configs/defaults/retrodeck/reference_lists/helper_files_list.cfg new file mode 100644 index 00000000..d5a1be95 --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/helper_files_list.cfg @@ -0,0 +1,5 @@ +# The proper format of this file is +# FILE NAME^DESTINATION +# The destination can be an internal variable name like $roms_folder if needed +# The FILE name can have spaces in it, but the DESTINATION cannot, even in variable form +RetroDECK Example Readme.txt^$rdhome diff --git a/emu-configs/defaults/retrodeck/reference_lists/incompatible_presets.cfg b/emu-configs/defaults/retrodeck/reference_lists/incompatible_presets.cfg new file mode 100644 index 00000000..417ab816 --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/incompatible_presets.cfg @@ -0,0 +1,2 @@ +borders:widescreen +widescreen:borders diff --git a/emu-configs/defaults/retrodeck/reference_lists/input_validation.cfg b/emu-configs/defaults/retrodeck/reference_lists/input_validation.cfg new file mode 100644 index 00000000..da763c56 --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/input_validation.cfg @@ -0,0 +1,6 @@ +uuddlrlrstart^set_setting_value $rd_conf developer_options true retrodeck options +uuddlrlrstart^echo Visit the Configurator to behold your new-found powers. +uuddlrlrstart^echo But beware, with great power comes great responsibility... +gameovermangameover^set_setting_value $rd_conf developer_options false retrodeck options +gameovermangameover^echo You have relinquished your powers in the name of saftey. +gameovermangameover^echo This was a wise choice. diff --git a/emu-configs/defaults/retrodeck/reference_lists/multi_user_emulator_config_dirs.cfg b/emu-configs/defaults/retrodeck/reference_lists/multi_user_emulator_config_dirs.cfg new file mode 100644 index 00000000..d9c786d8 --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/multi_user_emulator_config_dirs.cfg @@ -0,0 +1,12 @@ +Cemu +citra-emu +dolphin-emu +duckstation +melonDS +PCSX2 +ppsspp +primehack +rpcs3 +Ryujinx +xemu +yuzu diff --git a/emu-configs/defaults/retrodeck/reference_lists/pretty_system_names.cfg b/emu-configs/defaults/retrodeck/reference_lists/pretty_system_names.cfg new file mode 100644 index 00000000..94bf763a --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/pretty_system_names.cfg @@ -0,0 +1,16 @@ +citra^Citra (Nintendo 3DS Standalone Emulator) +dolphin^Dolphin (GameCube / Wii Standalone Emulator) +duckstation^Duckstation (Sony Playstation Standalone Emulator) +gb^Nintendo GameBoy +gba^Nintendo GameBoy Advance +gbc^Nintendo GameBoy Color +genesis^Sega Genesis/Master System +gg^Sega GameGear +n64^Nintendo 64 +pcsx2^PCSX2 (Sony Playstation 2 Standalone Emulator) +ppsspp^PPSSPP (Sony PSP Standalone Emulator) +primehack^Primehack (Metroid Prime Standalone Emulator) +psx_ra^Sony Playstation (RetroArch Core) +retroarch^RetroArch (Multi-emulator Frontend) +snes^Nintendo Super Nintendo +yuzu^Yuzu (Nintendo Switch Standalone Emulator) diff --git a/emu-configs/defaults/retrodeck/reference_lists/retrodeck_credits.txt b/emu-configs/defaults/retrodeck/reference_lists/retrodeck_credits.txt new file mode 100644 index 00000000..46e31fbd --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/retrodeck_credits.txt @@ -0,0 +1,65 @@ +Credits & The Team + +This is the page where we try to introduce the team and thank everyone who have contributed to the project so far. +If you feel you have contributed to the project but lacks mention, please contact us on discord! + +The Team +XargonWan +RetroDECK project founder and also one of the founding members of AmberELEC + +IceNine451 +Creator of the RetroDECK configurator and various awesome features. + +Lazorne +Community management/outreach, testing, documentation, feature suggestions and some design. + + +Collaborators +Niroku / Atari +Helps with community management, is also part of Batocera + +Leon Styhre +Maker of EmulationStation Desktop Edition + +anthonycaccese +Theme creator for ES-DE and AmberELEC + + +Additional credits +RavenKilit +Did some code and testning, contributed to AmberELEC + +MorGuux +Made the RetroDECK steamdb graphics for the old logo + +Pixelguin +Made the new logo and steamdb graphics + +teotwaki +Generous cloud hosting sponsor + +Gabeboii +Webmaster + +Draco +Server Administration + +ItzSelenux +Maker of pixelitos + +Kenny.nl +The Kenny.nl project provides several free game assets under open licenses. + + +Special Thanks + +We want give special thanks to: + + Our Patreons that keeps the build servers running and provide feedback. + All related emulation projects. + All people that have put both time and money into emulation projects. + All the users who help others with support, guidance and good spirit. + All the users who help with testing and reporting issues. + All the community creators who creates various art and assets for the community. + +You are the ones that makes this project possible. diff --git a/emu-configs/defaults/retrodeck/reference_lists/zip_compressable_extensions.cfg b/emu-configs/defaults/retrodeck/reference_lists/zip_compressable_extensions.cfg new file mode 100644 index 00000000..585e7584 --- /dev/null +++ b/emu-configs/defaults/retrodeck/reference_lists/zip_compressable_extensions.cfg @@ -0,0 +1,60 @@ +.32x +.68k +.NDS +.a26 +.a52 +.a78 +.abs +.agb +.atr +.atx +.bin +.bml +.bms +.bs +.bsx +.cas +.cdm +.cgb +.cof +.col +.dim +.dmg +.dx2 +.fds +.fig +.gb +.gba +.gbc +.gd3 +.gd7 +.gen +.gg +.ipf +.j64 +.jag +.lnx +.md +.mdx +.mgd +.msa +.nds +.nes +.o +.prg +.rom +.sfc +.sg +.sgb +.sgd +.smc +.smd +.sms +.st +.st +.stx +.swc +.unf +.unif +.xex +.xfd diff --git a/emu-configs/defaults/retrodeck/retrodeck.cfg b/emu-configs/defaults/retrodeck/retrodeck.cfg index 2c61ee4d..b821b596 100644 --- a/emu-configs/defaults/retrodeck/retrodeck.cfg +++ b/emu-configs/defaults/retrodeck/retrodeck.cfg @@ -1,4 +1,6 @@ version= + +[paths] rdhome=/home/deck/retrodeck roms_folder=/home/deck/retrodeck/roms saves_folder=/home/deck/retrodeck/saves @@ -7,7 +9,73 @@ bios_folder=/home/deck/retrodeck/bios media_folder=/home/deck/retrodeck/downloaded_media themes_folder=/home/deck/retrodeck/themes logs_folder=/home/deck/retrodeck/.logs +screenshots_folder=/home/deck/retrodeck/screenshots +mods_folder=/home/deck/retrodeck/mods +texture_packs_folder=/home/deck/retrodeck/texture_packs +borders_folder=/home/deck/retrodeck/borders sdcard=/run/media/mmcblk0p1 +[options] power_user_warning=true -desktop_mode_warning=true \ No newline at end of file +desktop_mode_warning=true +low_space_warning=true +update_check=false +update_repo=RetroDECK +update_ignore= +cloud_saves=false +multi_user_mode=false +ask_default_user=true +default_user= +developer_options=false + +[cheevos] +duckstation=false +pcsx2=false +retroarch=false + +[cheevos_hardcore] +duckstation=false +pcsx2=false +retroarch=false + +[borders] +gb=true +gba=true +gbc=true +genesis=true +gg=true +n64=true +psx_ra=true +snes=true + +[widescreen] +genesis=false +n64=false +psx_ra=false +snes=false + +[nintendo_button_layout] +citra=false +gb=false +gba=false +gbc=false +n64=false +snes=false +yuzu=false + +[savestate_auto_load] +ppsspp=true +retroarch=true + +[savestate_auto_save] +duckstation=true +pcsx2=true +retroarch=true + +[ask_to_exit] +citra=false +dolphin=false +duckstation=false +pcsx2=false +primehack=false +yuzu=false diff --git a/emu-configs/defaults/xemu/xemu.toml b/emu-configs/defaults/xemu/xemu.toml index b2a54171..7b4775dc 100644 --- a/emu-configs/defaults/xemu/xemu.toml +++ b/emu-configs/defaults/xemu/xemu.toml @@ -1,6 +1,6 @@ [general] show_welcome = false -screenshot_dir = '/home/deck/retrodeck/screenshots' +screenshot_dir = 'RETRODECKHOMEDIR/screenshots' [input.bindings] port1 = '03000000de280000ff11000001000000' diff --git a/emu-configs/defaults/yuzu/qt-config.ini b/emu-configs/defaults/yuzu/qt-config.ini index 0c378fa1..efa6bb94 100644 --- a/emu-configs/defaults/yuzu/qt-config.ini +++ b/emu-configs/defaults/yuzu/qt-config.ini @@ -1011,7 +1011,7 @@ Paths\romsPath= Paths\symbolsPath= Screenshots\enable_screenshot_save_as=true Screenshots\enable_screenshot_save_as\default=true -Screenshots\screenshot_path=/home/deck/.var/app/org.yuzu_emu.yuzu/data/yuzu/screenshots +Screenshots\screenshot_path=RETRODECKHOMEDIR/screenshots Shortcuts\Main%20Window\Audio%20Mute\Unmute\Context=1 Shortcuts\Main%20Window\Audio%20Mute\Unmute\Context\default=true Shortcuts\Main%20Window\Audio%20Mute\Unmute\Controller_KeySeq=Home+Dpad_Right diff --git a/emu-configs/dolphin/Dolphin.ini b/emu-configs/dolphin/Dolphin.ini index f6111c44..07a56ad8 100644 --- a/emu-configs/dolphin/Dolphin.ini +++ b/emu-configs/dolphin/Dolphin.ini @@ -20,6 +20,8 @@ AudioStretchMaxLatency = 80 DPL2Decoder = False DPL2Quality = 2 DSPHLE = True +WiiSDCardAllowWrites = True +WiiSDCardEnableFolderSync = False [Display] Fullscreen = True DisableScreenSaver = True @@ -49,7 +51,7 @@ DSPThread = True Backend = Pulse EnableJIT = False [Interface] -ConfirmStop = True +ConfirmStop = False CursorVisibility = 0 OnScreenDisplayMessages = True PauseOnFocusLost = True diff --git a/emu-configs/dolphin/FreeLookController.ini b/emu-configs/dolphin/FreeLookController.ini new file mode 100644 index 00000000..804043f6 --- /dev/null +++ b/emu-configs/dolphin/FreeLookController.ini @@ -0,0 +1,22 @@ +[FreeLook1] +Device = XInput2/0/Virtual core pointer +Move/Up = @(Shift+E) +Move/Down = @(Shift+Q) +Move/Left = @(Shift+A) +Move/Right = @(Shift+D) +Move/Forward = @(Shift+W) +Move/Backward = @(Shift+S) +Speed/Decrease = @(Shift+`1`) +Speed/Increase = @(Shift+`2`) +Speed/Reset = @(Shift+F) +Other/Reset View = @(Shift+R) +Field of View/Increase X = @(Shift+`Axis Z+`) +Field of View/Decrease X = @(Shift+`Axis Z-`) +Field of View/Increase Y = @(Shift+`Axis Z+`) +Field of View/Decrease Y = @(Shift+`Axis Z-`) +Incremental Rotation/Pitch Up = if(`Click 3`,`RelativeMouse Y-` * 0.10, 0) +Incremental Rotation/Pitch Down = if(`Click 3`,`RelativeMouse Y+` * 0.10, 0) +Incremental Rotation/Roll Left = if(`Click 2`,`RelativeMouse X-` * 0.10, 0) +Incremental Rotation/Roll Right = if(`Click 2`,`RelativeMouse X+` * 0.10, 0) +Incremental Rotation/Yaw Left = if(`Click 3`,`RelativeMouse X-` * 0.10, 0) +Incremental Rotation/Yaw Right = if(`Click 3`,`RelativeMouse X+` * 0.10, 0) \ No newline at end of file diff --git a/emu-configs/dolphin/GCKeyNew.ini b/emu-configs/dolphin/GCKeyNew.ini new file mode 100644 index 00000000..27c54afc --- /dev/null +++ b/emu-configs/dolphin/GCKeyNew.ini @@ -0,0 +1,93 @@ +[GCKeyboard1] +Device = XInput2/0/Virtual core pointer +Keys/HOME = Home +Keys/END = End +Keys/PGUP = Prior +Keys/PGDN = Next +Keys/SCR LK = Scroll_Lock +Keys/A = A +Keys/B = B +Keys/C = C +Keys/D = D +Keys/E = E +Keys/F = F +Keys/G = G +Keys/H = H +Keys/I = I +Keys/J = J +Keys/K = K +Keys/L = L +Keys/M = M +Keys/N = N +Keys/O = O +Keys/P = P +Keys/Q = Q +Keys/R = R +Keys/S = S +Keys/T = T +Keys/U = U +Keys/V = V +Keys/W = W +Keys/X = X +Keys/Y = Y +Keys/Z = Z +Keys/1 = `1` +Keys/2 = `2` +Keys/3 = `3` +Keys/4 = `4` +Keys/5 = `5` +Keys/6 = `6` +Keys/7 = `7` +Keys/8 = `8` +Keys/9 = `9` +Keys/0 = `0` +Keys/- = minus +Keys/` = grave +Keys/PRT SC = Print +Keys/' = apostrophe +Keys/[ = bracketleft +Keys/EQUALS = equal +Keys/* = KP_Multiply +Keys/] = bracketright +Keys/, = comma +Keys/. = period +Keys// = slash +Keys/\ = backslash +Keys/F1 = F1 +Keys/F2 = F2 +Keys/F3 = F3 +Keys/F4 = F4 +Keys/F5 = F5 +Keys/F6 = F6 +Keys/F7 = F7 +Keys/F8 = F8 +Keys/F9 = F9 +Keys/F10 = F10 +Keys/F11 = F11 +Keys/F12 = F12 +Keys/ESC = Escape +Keys/INSERT = Insert +Keys/DELETE = Delete +Keys/; = semicolon +Keys/BACKSPACE = BackSpace +Keys/TAB = Tab +Keys/CAPS LOCK = Caps_Lock +Keys/L SHIFT = Shift_L +Keys/R SHIFT = Shift_R +Keys/L CTRL = Control_L +Keys/R ALT = Alt_R +Keys/L WIN = Super_L +Keys/SPACE = space +Keys/R WIN = Super_R +Keys/MENU = Menu +Keys/LEFT = Left +Keys/DOWN = Down +Keys/UP = Up +Keys/RIGHT = Right +Keys/ENTER = Return +[GCKeyboard2] +Device = XInput2/0/Virtual core pointer +[GCKeyboard3] +Device = XInput2/0/Virtual core pointer +[GCKeyboard4] +Device = XInput2/0/Virtual core pointer \ No newline at end of file diff --git a/emu-configs/dolphin/GCPadNew.ini b/emu-configs/dolphin/GCPadNew.ini index 2aa18517..bb81f4ac 100644 --- a/emu-configs/dolphin/GCPadNew.ini +++ b/emu-configs/dolphin/GCPadNew.ini @@ -11,14 +11,14 @@ Main Stick/Down = `Axis 1+` Main Stick/Left = `Axis 0-` Main Stick/Right = `Axis 0+` Main Stick/Modifier = `Shift` -Main Stick/Modifier/Range = 50.000000000000000 +Main Stick/Modifier/Range = 50.0 Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42 C-Stick/Up = `Axis 4-` C-Stick/Down = `Axis 4+` C-Stick/Left = `Axis 3-` C-Stick/Right = `Axis 3+` C-Stick/Modifier = `Ctrl` -C-Stick/Modifier/Range = 50.000000000000000 +C-Stick/Modifier/Range = 50.0 C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42 Triggers/L = TL Triggers/R = TR @@ -29,13 +29,13 @@ D-Pad/Right = `Axis 6+` Rumble/Motor = Strong [GCPad2] Device = XInput2/0/Virtual core pointer -Main Stick/Modifier/Range = 50.000000000000000 -C-Stick/Modifier/Range = 50.000000000000000 +Main Stick/Modifier/Range = 50.0 +C-Stick/Modifier/Range = 50.0 [GCPad3] Device = XInput2/0/Virtual core pointer -Main Stick/Modifier/Range = 50.000000000000000 -C-Stick/Modifier/Range = 50.000000000000000 +Main Stick/Modifier/Range = 50.0 +C-Stick/Modifier/Range = 50.0 [GCPad4] Device = XInput2/0/Virtual core pointer -Main Stick/Modifier/Range = 50.000000000000000 -C-Stick/Modifier/Range = 50.000000000000000 +Main Stick/Modifier/Range = 50.0 +C-Stick/Modifier/Range = 50.0 \ No newline at end of file diff --git a/emu-configs/dolphin/Hotkeys.ini b/emu-configs/dolphin/Hotkeys.ini index c333ab08..d2912ae6 100644 --- a/emu-configs/dolphin/Hotkeys.ini +++ b/emu-configs/dolphin/Hotkeys.ini @@ -1,8 +1,24 @@ [Hotkeys] -Device = evdev/0/Microsoft X-Box 360 pad 0 -Save State/Save State Slot 1 = TR&SELECT -Load State/Load State Slot 1 = TL&SELECT -General/Take Screenshot = SELECT&SOUTH&`SDL/0/Microsoft X-Box 360 pad 0:Button 0`&`SDL/0/Microsoft X-Box 360 pad 0:Button 6` -General/Exit = SELECT&START&`SDL/0/Microsoft X-Box 360 pad 0:Button 6`&`SDL/0/Microsoft X-Box 360 pad 0:Button 7` -Emulation Speed/Increase Emulation Speed = SELECT&l -Emulation Speed/Decrease Emulation Speed = SELECT&r +Device = XInput2/0/Virtual core pointer +General/Change Disc = @(Ctrl+D) +General/Toggle Pause = @(Ctrl+P) +General/Reset = @(Ctrl+R) +General/Take Screenshot = @(Ctrl+X) +General/Exit = @(Ctrl+Q) +Emulation Speed/Decrease Emulation Speed = @(Ctrl+`2`) +Emulation Speed/Increase Emulation Speed = @(Ctrl+`1`) +Emulation Speed/Disable Emulation Speed Limit = @(Ctrl+`0`) +Movie/Start Recording = @(Ctrl+V) +Graphics Toggles/Toggle Aspect Ratio = @(Ctrl+W) +Freelook/Freelook Toggle = @(Alt+Y) +Internal Resolution/Increase IR = @(Ctrl+U) +Internal Resolution/Decrease IR = @(Ctrl+Y) +Save State/Save to Selected Slot = @(Ctrl+S) +Load State/Load from Selected Slot = @(Ctrl+A) +Other State Hotkeys/Undo Load State = @(Ctrl+`8`) +Other State Hotkeys/Undo Save State = @(Ctrl+`9`) +Other State Hotkeys/Increase Selected State Slot = @(Ctrl+K) +Other State Hotkeys/Decrease Selected State Slot = @(Ctrl+J) +General/Toggle Fullscreen = @(Ctrl+Return) +General/Control NetPlay Golf Mode = @(Alt+H) +Wii/Press Sync Button = @(Alt+W) \ No newline at end of file diff --git a/emu-configs/dolphin/WiimoteNew.ini b/emu-configs/dolphin/WiimoteNew.ini new file mode 100644 index 00000000..73002a7c --- /dev/null +++ b/emu-configs/dolphin/WiimoteNew.ini @@ -0,0 +1,90 @@ +[Wiimote1] +Device = evdev/0/Microsoft X-Box 360 pad 0 +Tilt/Modifier/Range = 50.0 +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Tilt/Modifier/Range = 50.0 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +Buttons/A = SOUTH +Buttons/B = EAST +Buttons/1 = WEST +Buttons/2 = NORTH +Buttons/- = SELECT +Buttons/+ = START +Buttons/Home = THUMBR +D-Pad/Up = `Axis 7-` +D-Pad/Down = `Axis 7+` +D-Pad/Left = `Axis 6-` +D-Pad/Right = `Axis 6+` +Extension = Nunchuk +Rumble/Motor = Strong +Nunchuk/Stick/Up = `Axis 1-` +Nunchuk/Stick/Down = `Axis 1+` +Nunchuk/Stick/Left = `Axis 0-` +Nunchuk/Stick/Right = `Axis 0+` +Nunchuk/Buttons/C = TL +Nunchuk/Buttons/Z = `Full Axis 2+` +IR/Auto-Hide = True +Hotkeys/Sideways Toggle = `XInput2/0/Virtual core pointer:Alt`&`XInput2/0/Virtual core pointer:X` +Hotkeys/Upright Toggle = `XInput2/0/Virtual core pointer:Alt_L`&`XInput2/0/Virtual core pointer:Z` +Source = 1 +IR/Up = `XInput2/0/Virtual core pointer:Cursor Y-` +IR/Down = `XInput2/0/Virtual core pointer:Cursor Y+` +IR/Left = `XInput2/0/Virtual core pointer:Cursor X-` +IR/Right = `XInput2/0/Virtual core pointer:Cursor X+` +Shake/X = `Full Axis 5+` +Shake/Y = `Full Axis 5+` +Shake/Z = `Full Axis 5+` +[Wiimote2] +Device = XInput2/0/Virtual core pointer +Tilt/Modifier/Range = 50.0 +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Tilt/Modifier/Range = 50.0 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +[Wiimote3] +Device = XInput2/0/Virtual core pointer +Tilt/Modifier/Range = 50.0 +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Tilt/Modifier/Range = 50.0 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +[Wiimote4] +Device = XInput2/0/Virtual core pointer +Tilt/Modifier/Range = 50.0 +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Tilt/Modifier/Range = 50.0 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 +[BalanceBoard] +Device = XInput2/0/Virtual core pointer +Tilt/Modifier/Range = 50.0 +Nunchuk/Stick/Modifier/Range = 50.0 +Nunchuk/Tilt/Modifier/Range = 50.0 +Classic/Left Stick/Modifier/Range = 50.0 +Classic/Right Stick/Modifier/Range = 50.0 +Guitar/Stick/Modifier/Range = 50.0 +Drums/Stick/Modifier/Range = 50.0 +Turntable/Stick/Modifier/Range = 50.0 +uDraw/Stylus/Modifier/Range = 50.0 +Drawsome/Stylus/Modifier/Range = 50.0 \ No newline at end of file diff --git a/emu-configs/duckstation/settings.ini b/emu-configs/duckstation/settings.ini index 15f6b28d..a3ab2d70 100644 --- a/emu-configs/duckstation/settings.ini +++ b/emu-configs/duckstation/settings.ini @@ -10,8 +10,8 @@ StartPaused = false StartFullscreen = false PauseOnFocusLoss = true PauseOnMenu = true -SaveStateOnExit = true -ConfirmPowerOff = true +SaveStateOnExit = false +ConfirmPowerOff = false LoadDevicesFromSaveStates = true ApplyGameSettings = true AutoLoadCheats = true @@ -92,7 +92,7 @@ ShowEnhancements = false Fullscreen = false VSync = false DisplayAllFrames = false -PostProcessChain = +PostProcessChain = MaxFPS = 0.000000 InternalResolutionScreenshots = false @@ -118,10 +118,10 @@ DumpOnBoot = false [BIOS] -SearchDirectory = /home/deck/retrodeck/bios -PathNTSCU = -PathNTSCJ = -PathPAL = +SearchDirectory = RETRODECKHOMEDIR/bios +PathNTSCU = +PathNTSCJ = +PathPAL = PatchTTYEnable = false PatchFastBoot = false @@ -182,9 +182,9 @@ Type = None Card1Type = PerGameTitle Card2Type = None UsePlaylistTitle = true -Card1Path = /var/data/duckstation/memcards/shared_card_1.mcd -Card2Path = /var/data/duckstation/memcards/shared_card_2.mcd -Directory = /var/data/duckstation/memcards +Card1Path = RETRODECKHOMEDIR/saves/psx/duckstation/memcards/shared_card_1.mcd +Card2Path = RETRODECKHOMEDIR/saves/psx/duckstation/memcards/shared_card_2.mcd +Directory = RETRODECKHOMEDIR/saves/psx/duckstation/memcards [ControllerPorts] @@ -193,7 +193,7 @@ MultitapMode = Disabled [Logging] LogLevel = Info -LogFilter = +LogFilter = LogToConsole = true LogToDebug = false LogToWindow = false @@ -220,20 +220,50 @@ GPUMaxRunAhead = 128 [Hotkeys] -PowerOff = Keyboard/R +OpenQuickMenu = Keyboard/Control & Keyboard/M +FastForward = Keyboard/Control & Keyboard/Plus +ToggleTurbo = Keyboard/Control & Keyboard/T +ToggleFullscreen = Keyboard/Control & Keyboard/Return +TogglePause = Keyboard/Control & Keyboard/P +Screenshot = Keyboard/Control & Keyboard/X +Reset = Keyboard/Control & Keyboard/R +ChangeDisc = Keyboard/Control & Keyboard/D +Rewind = Keyboard/Control & Keyboard/Minus +ToggleCheats = Keyboard/Control & Keyboard/C +IncreaseEmulationSpeed = Keyboard/Control & Keyboard/1 +DecreaseEmulationSpeed = Keyboard/Control & Keyboard/2 +ResetEmulationSpeed = Keyboard/Control & Keyboard/3 +IncreaseResolutionScale = Keyboard/Control & Keyboard/U +DecreaseResolutionScale = Keyboard/Control & Keyboard/Y +ToggleWidescreen = Keyboard/Control & Keyboard/W +LoadSelectedSaveState = Keyboard/Control & Keyboard/A +SaveSelectedSaveState = Keyboard/Control & Keyboard/S +SelectPreviousSaveStateSlot = Keyboard/Control & Keyboard/J +SelectNextSaveStateSlot = Keyboard/Control & Keyboard/K +PowerOff = Keyboard/Control & Keyboard/Q +UndoLoadState = Keyboard/Control & Keyboard/9 [Cheevos] -Enabled = true +Enabled = false TestMode = false UnofficialTestMode = false UseFirstDiscFromPlaylist = true +RichPresence = true +ChallengeMode = false +Leaderboards = true +Notifications = true +SoundEffects = true +PrimedIndicators = true +Username = +Token = +LoginTimestamp = [UI] -MainWindowGeometry = AdnQywADAAAAAAAAAAAAAAAAAx8AAALYAAAAAAAAAB0AAAMfAAAC2AAAAAAAAAAABQAAAAAAAAAAHQAAAx8AAALY +MainWindowGeometry = AdnQywADAAAAAAAlAAAAHAAAA0QAAAL0AAAAJQAAADkAAANEAAAC9AAAAAAAAAAAB4AAAAAlAAAAOQAAA0QAAAL0 MainWindowState = AAAA/wAAAAD9AAAAAAAAAyAAAAI9AAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAEAAAAOAHQAbwBvAGwAQgBhAHIBAAAAAP////8AAAAAAAAAAA== [GameList] -RecursivePaths = /home/deck/retrodeck/roms/psx +RecursivePaths = RETRODECKHOMEDIR/roms/psx diff --git a/emu-configs/mame/cfg/default.cfg b/emu-configs/mame/cfg/default.cfg new file mode 100644 index 00000000..7fbdab04 --- /dev/null +++ b/emu-configs/mame/cfg/default.cfg @@ -0,0 +1,53 @@ + + + + + + + + JOYCODE_1_HAT1UP + + + + + JOYCODE_1_SELECT + + + + + KEYCODE_LCONTROL KEYCODE_M + + + + + KEYCODE_LCONTROL KEYCODE_P + + + + + KEYCODE_LCONTROL KEYCODE_MINUSPAD + + + + + KEYCODE_LCONTROL KEYCODE_S + + + + + KEYCODE_LCONTROL KEYCODE_A + + + + + KEYCODE_LCONTROL KEYCODE_PLUSPAD + + + + + KEYCODE_LCONTROL KEYCODE_X + + + + + diff --git a/emu-configs/mame/mame.ini b/emu-configs/mame/mame.ini new file mode 100644 index 00000000..1e7e0c40 --- /dev/null +++ b/emu-configs/mame/mame.ini @@ -0,0 +1,411 @@ +# +# CORE CONFIGURATION OPTIONS +# +readconfig 1 +writeconfig 0 + +# +# CORE SEARCH PATH OPTIONS +# +homepath /var/config/mame +rompath /home/deck/retrodeck/roms/arcade +hashpath /app/share/mame/hash +samplepath /app/share/mame/samples +artpath $HOME/retrodeck/downloaded_media/arcade/screenshots/ +ctrlrpath /app/share/mame/ctrlr +inipath /var/config/mame +fontpath /app/bin/ +cheatpath /app/share/mame/cheat +crosshairpath /app/share/mame/crosshair +pluginspath /app/share/mame/plugins +languagepath /app/share/mame/language +swpath /app/share/mame/software + +# +# CORE OUTPUT DIRECTORY OPTIONS +# +cfg_directory /var/config/mame/cfg +nvram_directory /var/config/mame/nvram +input_directory /var/config/mame/inp +state_directory /var/config/mame/sta +snapshot_directory RETRODECKHOMEDIR/screenshots +diff_directory /var/config/mame/diff +comment_directory /var/config/mame/comments +share_directory /var/config/mame/share + +# +# CORE STATE/PLAYBACK OPTIONS +# +state +autosave 0 +rewind 0 +rewind_capacity 100 +playback +record +exit_after_playback 0 +mngwrite +aviwrite +wavwrite +snapname %g/%i +snapsize auto +snapview auto +snapbilinear 1 +statename %g +burnin 0 + +# +# CORE PERFORMANCE OPTIONS +# +autoframeskip 0 +frameskip 0 +seconds_to_run 0 +throttle 1 +sleep 1 +speed 1.0 +refreshspeed 0 +lowlatency 0 + +# +# CORE RENDER OPTIONS +# +keepaspect 1 +unevenstretch 1 +unevenstretchx 0 +unevenstretchy 0 +autostretchxy 0 +intoverscan 0 +intscalex 0 +intscaley 0 + +# +# CORE ROTATION OPTIONS +# +rotate 1 +ror 0 +rol 0 +autoror 0 +autorol 0 +flipx 0 +flipy 0 + +# +# CORE ARTWORK OPTIONS +# +artwork_crop 0 +fallback_artwork +override_artwork + +# +# CORE SCREEN OPTIONS +# +brightness 1.0 +contrast 1.0 +gamma 1.0 +pause_brightness 0.65 +effect none + +# +# CORE VECTOR OPTIONS +# +beam_width_min 1.0 +beam_width_max 1.0 +beam_dot_size 1.0 +beam_intensity_weight 0 +flicker 0 + +# +# CORE SOUND OPTIONS +# +samplerate 48000 +samples 1 +volume 0 +compressor 1 +speaker_report 0 + +# +# CORE INPUT OPTIONS +# +coin_lockout 1 +ctrlr +mouse 0 +joystick 1 +lightgun 0 +multikeyboard 0 +multimouse 0 +steadykey 0 +ui_active 0 +offscreen_reload 0 +joystick_map auto +joystick_deadzone 0.15 +joystick_saturation 0.85 +joystick_threshold 0.3 +natural 0 +joystick_contradictory 0 +coin_impulse 0 + +# +# CORE INPUT AUTOMATIC ENABLE OPTIONS +# +paddle_device keyboard +adstick_device keyboard +pedal_device keyboard +dial_device keyboard +trackball_device keyboard +lightgun_device keyboard +positional_device keyboard +mouse_device mouse + +# +# CORE DEBUGGING OPTIONS +# +verbose 0 +log 0 +oslog 0 +debug 0 +update_in_pause 0 +debugscript +debuglog 0 + +# +# CORE COMM OPTIONS +# +comm_localhost 0.0.0.0 +comm_localport 15112 +comm_remotehost 127.0.0.1 +comm_remoteport 15112 +comm_framesync 0 + +# +# CORE MISC OPTIONS +# +drc 1 +drc_use_c 0 +drc_log_uml 0 +drc_log_native 0 +bios +cheat 0 +skip_gameinfo 1 +uifont default +ui cabinet +ramsize +confirm_quit 0 +ui_mouse 1 +language +nvram_save 1 + +# +# SCRIPTING OPTIONS +# +autoboot_command +autoboot_delay 0 +autoboot_script +console 0 +plugins 1 +plugin +noplugin + +# +# HTTP SERVER OPTIONS +# +http 0 +http_port 8080 +http_root web + +# +# OSD INPUT MAPPING OPTIONS +# +uimodekey auto +controller_map none +background_input 0 + +# +# OSD FONT OPTIONS +# +uifontprovider auto + +# +# OSD OUTPUT OPTIONS +# +output auto + +# +# OSD INPUT OPTIONS +# +keyboardprovider auto +mouseprovider auto +lightgunprovider auto +joystickprovider auto + +# +# OSD DEBUGGING OPTIONS +# +debugger auto +debugger_port 23946 +debugger_font auto +debugger_font_size 0 +watchdog 0 + +# +# OSD PERFORMANCE OPTIONS +# +numprocessors auto +bench 0 + +# +# OSD VIDEO OPTIONS +# +video opengl +numscreens 1 +window 0 +maximize 1 +waitvsync 0 +syncrefresh 0 +monitorprovider auto + +# +# OSD PER-WINDOW VIDEO OPTIONS +# +screen auto +aspect auto +resolution auto +view auto +screen0 auto +aspect0 auto +resolution0 auto +view0 auto +screen1 auto +aspect1 auto +resolution1 auto +view1 auto +screen2 auto +aspect2 auto +resolution2 auto +view2 auto +screen3 auto +aspect3 auto +resolution3 auto +view3 auto + +# +# OSD FULL SCREEN OPTIONS +# +switchres 0 + +# +# OSD ACCELERATED VIDEO OPTIONS +# +filter 1 +prescale 1 + +# +# OpenGL-SPECIFIC OPTIONS +# +gl_forcepow2texture 0 +gl_notexturerect 0 +gl_vbo 1 +gl_pbo 1 +gl_glsl 0 +gl_glsl_filter 1 +glsl_shader_mame0 none +glsl_shader_mame1 none +glsl_shader_mame2 none +glsl_shader_mame3 none +glsl_shader_mame4 none +glsl_shader_mame5 none +glsl_shader_mame6 none +glsl_shader_mame7 none +glsl_shader_mame8 none +glsl_shader_mame9 none +glsl_shader_screen0 none +glsl_shader_screen1 none +glsl_shader_screen2 none +glsl_shader_screen3 none +glsl_shader_screen4 none +glsl_shader_screen5 none +glsl_shader_screen6 none +glsl_shader_screen7 none +glsl_shader_screen8 none +glsl_shader_screen9 none + +# +# OSD SOUND OPTIONS +# +sound auto +audio_latency 2 + +# +# PORTAUDIO OPTIONS +# +pa_api none +pa_device none +pa_latency 0 + +# +# OSD MIDI OPTIONS +# +midiprovider auto + +# +# OSD EMULATED NETWORKING OPTIONS +# +networkprovider auto + +# +# BGFX POST-PROCESSING OPTIONS +# +bgfx_path bgfx +bgfx_backend auto +bgfx_debug 0 +bgfx_screen_chains +bgfx_shadow_mask slot-mask.png +bgfx_lut lut-default.png +bgfx_avi_name auto + +# +# SDL PERFORMANCE OPTIONS +# +sdlvideofps 0 + +# +# SDL VIDEO OPTIONS +# +centerh 1 +centerv 1 +scalemode none + +# +# SDL FULL SCREEN OPTIONS +# +useallheads 0 +attach_window + +# +# SDL KEYBOARD MAPPING +# +keymap 0 +keymap_file keymap.dat + +# +# SDL JOYSTICK MAPPING +# +sixaxis 0 + +# +# SDL LIGHTGUN MAPPING +# +lightgun_index1 auto +lightgun_index2 auto +lightgun_index3 auto +lightgun_index4 auto +lightgun_index5 auto +lightgun_index6 auto +lightgun_index7 auto +lightgun_index8 auto + +# +# SDL LOW-LEVEL DRIVER OPTIONS +# +videodriver auto +renderdriver auto +audiodriver auto +gl_lib auto diff --git a/emu-configs/mame/ui.ini b/emu-configs/mame/ui.ini new file mode 100644 index 00000000..db76cbf3 --- /dev/null +++ b/emu-configs/mame/ui.ini @@ -0,0 +1,70 @@ +# +# UI SEARCH PATH OPTIONS +# +historypath history;dats;. +categorypath folders +cabinets_directory cabinets;cabdevs +cpanels_directory cpanel +pcbs_directory pcb +flyers_directory flyers +titles_directory titles +ends_directory ends +marquees_directory marquees;$HOME/retrodeck/downloaded_media/arcade/marquees +artwork_preview_directory "artwork preview;artpreview" +bosses_directory bosses +logos_directory logo +scores_directory scores +versus_directory versus +gameover_directory gameover +howto_directory howto +select_directory select +icons_directory icons +covers_directory covers;$HOME/retrodeck/downloaded_media/arcade/covers +ui_path ui + +# +# UI MISC OPTIONS +# +system_names +skip_warnings 1 +unthrottle_mute 0 + +# +# UI OPTIONS +# +infos_text_size 0.75 +font_rows 30 +ui_border_color ffffffff +ui_bg_color ef101030 +ui_clone_color ff808080 +ui_dipsw_color ffffff00 +ui_gfxviewer_color ef101030 +ui_mousedown_bg_color b0606000 +ui_mousedown_color ffffff80 +ui_mouseover_bg_color 70404000 +ui_mouseover_color ffffff80 +ui_selected_bg_color ef808000 +ui_selected_color ffffff00 +ui_slider_color ffffffff +ui_subitem_color ffffffff +ui_text_bg_color ef000000 +ui_text_color ffffffff +ui_unavail_color ff404040 + +# +# SYSTEM/SOFTWARE SELECTION MENU OPTIONS +# +hide_main_panel 0 +use_background 1 +skip_biosmenu 0 +skip_partsmenu 0 +remember_last 0 +last_used_filter Available +system_right_panel image +software_right_panel image +system_right_image cover +software_right_image snap +enlarge_snaps 1 +forced4x3 1 +info_audit_enabled 0 +hide_romless 1 diff --git a/emu-configs/melonDS.ini b/emu-configs/melonds/melonDS.ini similarity index 81% rename from emu-configs/melonDS.ini rename to emu-configs/melonds/melonDS.ini index e43cde93..3cbd1228 100644 --- a/emu-configs/melonDS.ini +++ b/emu-configs/melonds/melonDS.ini @@ -1,135 +1,145 @@ -Key_A=-1 -Key_B=-1 -Key_Select=-1 -Key_Start=-1 -Key_Right=-1 -Key_Left=-1 -Key_Up=-1 -Key_Down=-1 -Key_R=-1 -Key_L=-1 -Key_X=-1 -Key_Y=-1 -Joy_A=0 -Joy_B=1 -Joy_Select=6 -Joy_Start=7 -Joy_Right=258 -Joy_Left=264 -Joy_Up=257 -Joy_Down=260 -Joy_R=5 -Joy_L=4 -Joy_X=2 -Joy_Y=3 -HKKey_Lid=-1 -HKKey_Mic=-1 -HKKey_Pause=82 -HKKey_Reset=-1 -HKKey_FastForward=76 -HKKey_FastForwardToggle=-1 -HKKey_FullscreenToggle=-1 -HKKey_SwapScreens=89 -HKKey_SolarSensorDecrease=-1 -HKKey_SolarSensorIncrease=-1 -HKKey_FrameStep=-1 -HKJoy_Lid=-1 -HKJoy_Mic=-1 -HKJoy_Pause=-1 -HKJoy_Reset=-1 -HKJoy_FastForward=-1 -HKJoy_FastForwardToggle=-1 -HKJoy_FullscreenToggle=-1 -HKJoy_SwapScreens=-1 -HKJoy_SolarSensorDecrease=-1 -HKJoy_SolarSensorIncrease=-1 -HKJoy_FrameStep=-1 -JoystickID=0 -WindowWidth=768 -WindowHeight=418 -WindowMax=1 -ScreenRotation=0 -ScreenGap=0 -ScreenLayout=3 -ScreenSwap=0 -ScreenSizing=3 -IntegerScaling=1 -ScreenAspectTop=0 -ScreenAspectBot=0 -ScreenFilter=1 -ScreenUseGL=0 -ScreenVSync=0 -ScreenVSyncInterval=1 -3DRenderer=1 -Threaded3D=1 -GL_ScaleFactor=1 -GL_BetterPolygons=0 -LimitFPS=1 -AudioSync=0 -ShowOSD=1 -ConsoleType=0 -DirectBoot=1 -JIT_Enable=0 -JIT_MaxBlockSize=32 -JIT_BranchOptimisations=1 -JIT_LiteralOptimisations=1 -JIT_FastMemory=1 -ExternalBIOSEnable=1 -BIOS9Path=RETRODECKHOMEDIR/bios/bios9.bin -BIOS7Path=RETRODECKHOMEDIR/bios/bios7.bin -FirmwarePath=RETRODECKHOMEDIR/bios/firmware.bin -DSiBIOS9Path= -DSiBIOS7Path= -DSiFirmwarePath= -DSiNANDPath= -DLDIEnable=0 -DLDISDPath=dldi.bin -DLDISize=0 -DLDIReadOnly=0 -DLDIFolderSync=0 -DLDIFolderPath= -DSiSDEnable=0 -DSiSDPath=dsisd.bin -DSiSDSize=0 -DSiSDReadOnly=0 -DSiSDFolderSync=0 -DSiSDFolderPath= -FirmwareOverrideSettings=0 -FirmwareUsername=RetroDECK -FirmwareLanguage=1 -FirmwareBirthdayMonth=3 -FirmwareBirthdayDay=4 -FirmwareFavouriteColour=0 -FirmwareMessage= -FirmwareMAC= -RandomizeMAC=0 -SockBindAnyAddr=0 -LANDevice= -DirectLAN=0 -SavStaRelocSRAM=0 -AudioInterp=0 -AudioBitrate=0 -AudioVolume=256 -MicInputType=1 -MicWavPath= -LastROMFolder= -RecentROM_0= -RecentROM_1= -RecentROM_2= -RecentROM_3= -RecentROM_4= -RecentROM_5= -RecentROM_6= -RecentROM_7= -RecentROM_8= -RecentROM_9= -SaveFilePath=RETRODECKHOMEDIR/saves/nds/melonds -SavestatePath=RETRODECKHOMEDIR/states/nds/melonds -CheatFilePath= -EnableCheats=0 -MouseHide=0 -MouseHideSeconds=5 -PauseLostFocus=1 -DSBatteryLevelOkay=1 -DSiBatteryLevel=15 -DSiBatteryCharging=1 \ No newline at end of file +Key_A=-1 +Key_B=-1 +Key_Select=-1 +Key_Start=-1 +Key_Right=-1 +Key_Left=-1 +Key_Up=-1 +Key_Down=-1 +Key_R=-1 +Key_L=-1 +Key_X=-1 +Key_Y=-1 +Joy_A=0 +Joy_B=1 +Joy_Select=6 +Joy_Start=7 +Joy_Right=258 +Joy_Left=264 +Joy_Up=257 +Joy_Down=260 +Joy_R=5 +Joy_L=4 +Joy_X=2 +Joy_Y=3 +HKKey_Lid=134217804 +HKKey_Mic=134217808 +HKKey_Pause=67108944 +HKKey_Reset=67108946 +HKKey_FastForward=603979819 +HKKey_FastForwardToggle=-1 +HKKey_FullscreenToggle=83886084 +HKKey_SwapScreens=83886081 +HKKey_SolarSensorDecrease=671088685 +HKKey_SolarSensorIncrease=671088683 +HKKey_FrameStep=-1 +HKJoy_Lid=-1 +HKJoy_Mic=-1 +HKJoy_Pause=-1 +HKJoy_Reset=-1 +HKJoy_FastForward=-1 +HKJoy_FastForwardToggle=-1 +HKJoy_FullscreenToggle=-1 +HKJoy_SwapScreens=-1 +HKJoy_SolarSensorDecrease=-1 +HKJoy_SolarSensorIncrease=-1 +HKJoy_FrameStep=-1 +JoystickID=0 +WindowWidth=768 +WindowHeight=418 +WindowMax=1 +ScreenRotation=0 +ScreenGap=0 +ScreenLayout=3 +ScreenSwap=0 +ScreenSizing=3 +IntegerScaling=1 +ScreenAspectTop=0 +ScreenAspectBot=0 +ScreenFilter=1 +ScreenUseGL=0 +ScreenVSync=0 +ScreenVSyncInterval=1 +3DRenderer=1 +Threaded3D=1 +GL_ScaleFactor=1 +GL_BetterPolygons=0 +LimitFPS=1 +AudioSync=0 +ShowOSD=1 +ConsoleType=0 +DirectBoot=1 +JIT_Enable=0 +JIT_MaxBlockSize=32 +JIT_BranchOptimisations=1 +JIT_LiteralOptimisations=1 +JIT_FastMemory=1 +ExternalBIOSEnable=1 +BIOS9Path=RETRODECKHOMEDIR/bios/bios9.bin +BIOS7Path=RETRODECKHOMEDIR/bios/bios7.bin +FirmwarePath=RETRODECKHOMEDIR/bios/firmware.bin +DSiBIOS9Path= +DSiBIOS7Path= +DSiFirmwarePath= +DSiNANDPath= +DLDIEnable=0 +DLDISDPath=dldi.bin +DLDISize=0 +DLDIReadOnly=0 +DLDIFolderSync=0 +DLDIFolderPath= +DSiSDEnable=0 +DSiSDPath=dsisd.bin +DSiSDSize=0 +DSiSDReadOnly=0 +DSiSDFolderSync=0 +DSiSDFolderPath= +FirmwareOverrideSettings=0 +FirmwareUsername=RetroDECK +FirmwareLanguage=1 +FirmwareBirthdayMonth=3 +FirmwareBirthdayDay=4 +FirmwareFavouriteColour=0 +FirmwareMessage= +FirmwareMAC= +RandomizeMAC=0 +MPAudioMode=1 +MPRecvTimeout=25 +SockBindAnyAddr=0 +LANDevice= +DirectLAN=0 +SavStaRelocSRAM=0 +AudioInterp=0 +AudioBitrate=0 +AudioVolume=256 +MicInputType=1 +MicWavPath= +LastROMFolder= +RecentROM_0= +RecentROM_1= +RecentROM_2= +RecentROM_3= +RecentROM_4= +RecentROM_5= +RecentROM_6= +RecentROM_7= +RecentROM_8= +RecentROM_9= +SaveFilePath=RETRODECKHOMEDIR/saves/nds/melonds +SavestatePath=RETRODECKHOMEDIR/states/nds/melonds +CheatFilePath= +EnableCheats=0 +MouseHide=1 +MouseHideSeconds=5 +PauseLostFocus=1 +DSBatteryLevelOkay=1 +DSiBatteryLevel=15 +DSiBatteryCharging=1 +Camera0_InputType=0 +Camera0_ImagePath= +Camera0_CamDeviceName= +Camera0_XFlip=0 +Camera1_InputType=0 +Camera1_ImagePath= +Camera1_CamDeviceName= +Camera1_XFlip=0 \ No newline at end of file diff --git a/emu-configs/patches/updates/064b_update.patch b/emu-configs/patches/updates/064b_update.patch index 3502b91d..7b7dc6d8 100644 --- a/emu-configs/patches/updates/064b_update.patch +++ b/emu-configs/patches/updates/064b_update.patch @@ -2,5 +2,5 @@ change^DSP^Backend^Pulse^primehack^$primehackconf change^Settings^AspectRatio^1^primehack^$primehackgfxconf # Update "ask on quit" and "save on quit" on supported emulators (PCSX2, Duckstation) -change^UI^ConfirmShutdown^false^pcsx2^$pcsx2qtconf -change^Main^ConfirmPowerOff^false^duckstation^$duckstationconf \ No newline at end of file +change^UI^ConfirmShutdown^false^pcsx2^$pcsx2conf +change^Main^ConfirmPowerOff^false^duckstation^$duckstationconf diff --git a/emu-configs/pico-8/config.txt b/emu-configs/pico-8/config.txt new file mode 100644 index 00000000..4c811c25 --- /dev/null +++ b/emu-configs/pico-8/config.txt @@ -0,0 +1,145 @@ +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - +// Configuration for pico-8 +// +// config.txt is read on startup and saved on exit. +// To generate the default config.txt, delete this file. +// +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +// :: Video Settings + +window_size 0 0 // window width, height +screen_size 0 0 // screen width, height (stretched to window) +show_fps 0 // Draw frames per second in the corner + + +// :: Window Settings + +windowed 0 // 1 to start up in windowed mode +window_position -1 -1 // x and y position of window (-1, -1 to let the window manager decide) +frameless 0 // 1 to use a window with no frame +fullscreen_method 1 // 0 maximized window (linux) 1 borderless desktop-sized window 2 hardware fullscreen (warning: erratic behaviour under some drivers) +blit_method 0 // 0 auto 1 software (slower but sometimes more reliable) 2 hardware (can do filtered scaling) + + + +// :: System Settings + +foreground_sleep_ms 2 // number of milliseconds to sleep each frame. Try 10 to conserve battery power + +background_sleep_ms 10 // number of milliseconds to sleep each frame when running in the background + +sessions 1 // number of times program has been run + +// (scancode) hold this key down and left-click to simulate right-click +rmb_key 0 // 0 for none 226 for LALT + +// Desktop for saving screenshots etc. Defaults to $HOME/Desktop +desktop_path + +// 1 to allow controller input even when application is in background +read_controllers_in_background 0 + + + +// :: Audio Settings (use "volume" for PICO-8) + +sound_volume 256 // 0..256 +music_volume 256 // 0..256 + + +// :: usually 1024. Try 2048 if you get choppy sound + +mix_buffer_size 1024 + + +// :: map scancodes. Format: 44=47,80=89,.. (scancode a, scancode b -- when press a, generates b) +// run the program with -scancodes to determine which scancodes to use +map_scancodes + + +// :: pico-8 + +version 0.2.5g + +// audio volume: 0..256 +volume 256 + + +// Location of pico-8's root folder +root_path /home/deck/.lexaloffle/pico-8/carts/ + + +// Location of cartridge save data +cdata_path /home/deck/.lexaloffle/pico-8/cdata/ + + +// Specify which player index joystick control begins at (0..7) +joystick_index 0 + + +// Custom keyboard scancodes for buttons. player0 0..6, player1 0..5 +button_keys 0 0 0 0 0 0 0 0 0 0 0 0 0 + +// Play notes as they are plotted in frequency mode +live_notes 0 + +// iff 1: when using keyboard cursor, snap to closest pixel / map cel +cursor_snap 0 + +// 0 default 1 dark blue background in code editor 2 black background in code editor 3 gray background in code editor +gui_theme 0 + +// scale of screenshots and gifs // 2 means 256x256 +screenshot_scale 3 +gif_scale 3 + +// maximum gif length in seconds (0..120; 0 means no gif recording) +gif_len 16 + +// when 1, reset the recording when pressing ctrl-9 (useful for creating a non-overlapping sequence) +gif_reset_mode 0 + +// 0 for off. 1 for auto. 2 to allow control of a cart's framerate due to host machine's cpu capacity +host_framerate_control 1 + +// filter splore cartridges +// 0 off 1 on (exclude cartridge tagged as 'mature' by community) +splore_filter 0 + +// tab display width (1 ~ 4 spaces) +tab_width 1 + +// 0 off 1 on: draw tab characters as small vertical lines +draw_tabs 0 + +// 0 off 1 on: record the current cartridge and editor view every 3 seconds (see [appdata]/activity.log.txt) +record_activity_log 1 + +// 0 off 1 on: allow F6..F9 (alternative: ctrl 6..9) +allow_function_keys 1 + +// 0 off 1 on: automatically check for a newer version of a BBS cart each time it is run. +check_for_cart_updates 1 + +// hide mouse cursor for n seconds when typing. +auto_hide_mouse_cursor 5 + +// 0 off 1 on: backup with a new timestamped filename on every run +// normally not needed -- was used for debugging crash-on-run +aggressive_backups 0 + +// back up cartridge in editor every n minutes when not idle (0 for no periodic backups) +periodic_backups 20 + +// global screen transformations: +// 129 flip horizontally +// 130 flip vertically +// 133 rotate CW 90 degrees +// 134 rotate CW 180 degrees +// 135 rotate CW 270 degrees +transform_screen 0 + +// 0 off > 1: colour to draw pixel grid in the gfx editor at zoom:8 and zoom:4 (16 for black) +gfx_grid_lines 0 diff --git a/emu-configs/pico-8/pico8-wrapper.sh b/emu-configs/pico-8/pico8-wrapper.sh new file mode 100644 index 00000000..4a90a91c --- /dev/null +++ b/emu-configs/pico-8/pico8-wrapper.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# This is a wrapper function for PICO8, as ES-DE does not appear to be able to find it outside of the /app/bin location. +# Users should still put the real binary in the ~/retrodeck/bios/pico-8/ location + +~/.lexaloffle/pico-8/pico8 "$@" diff --git a/emu-configs/pico-8/sdl_controllers.txt b/emu-configs/pico-8/sdl_controllers.txt new file mode 100644 index 00000000..440c0383 --- /dev/null +++ b/emu-configs/pico-8/sdl_controllers.txt @@ -0,0 +1,2 @@ +// add SDL2 game controller mappings to this file +03000000de2800000512000010010000,Steam Deck,a:b3,b:b4,back:b11,dpdown:b17,dpleft:b18,dpright:b19,dpup:b16,guide:b13,leftshoulder:b7,leftstick:b14,lefttrigger:a9,leftx:a0,lefty:a1,rightshoulder:b8,rightstick:b15,righttrigger:a8,rightx:a2,righty:a3,start:b12,x:b5,y:b6,platform:Linux, diff --git a/emu-configs/ppssppsdl/controls.ini b/emu-configs/ppssppsdl/controls.ini index 010c77da..70d0d001 100644 --- a/emu-configs/ppssppsdl/controls.ini +++ b/emu-configs/ppssppsdl/controls.ini @@ -16,11 +16,19 @@ An.Down = 1-39,10-4002 An.Left = 1-38,10-4001 An.Right = 1-40,10-4000 Analog limiter = 1-60 -RapidFire = 1-59 -Fast-forward = 10-4010 +RapidFire = 1-113:1-48 +Fast-forward = 1-113:1-157 SpeedToggle = 1-68 -Pause = 1-40 -Rewind = 10-4008 -Save State = 1-53 -Load State = 1-48 -Screenshot = 1-46 +Pause = 1-111 +Rewind = 1-113:1-156 +Save State = 1-113:1-47 +Load State = 1-113:1-29 +Screenshot = 1-113:1-52 +Home = 1-111 +Audio/Video Recording = 1-113:1-50 +Next Slot = 1-113:1-39 +Toggle Fullscreen = 1-113:1-66 +RightAn.Up = 10-4007 +RightAn.Down = 10-4006 +RightAn.Left = 10-4005 +RightAn.Right = 10-4004 \ No newline at end of file diff --git a/emu-configs/ppssppsdl/ppsspp.ini b/emu-configs/ppssppsdl/ppsspp.ini index b4aac34d..66fa6b67 100644 --- a/emu-configs/ppssppsdl/ppsspp.ini +++ b/emu-configs/ppssppsdl/ppsspp.ini @@ -5,19 +5,19 @@ Enable Logging = True AutoRun = True Browse = False IgnoreBadMemAccess = True -CurrentDirectory = /home/deck/retrodeck/roms/psp +CurrentDirectory = RETRODECKHOMEDIR/roms/psp ShowDebuggerOnLoad = False CheckForNewVersion = False Language = en_US ForceLagSync2 = False DiscordPresence = True UISound = False -AutoLoadSaveState = 2 +AutoLoadSaveState = 0 EnableCheats = False CwCheatRefreshRate = 77 CwCheatScrollPosition = 0.000000 GameListScrollPosition = 0.000000 -ScreenshotsAsPNG = False +ScreenshotsAsPNG = True UseFFV1 = False DumpFrames = False DumpVideoOutput = False @@ -30,9 +30,9 @@ StateUndoLastSaveGame = NA StateUndoLastSaveSlot = -5 RewindFlipFrequency = 0 ShowOnScreenMessage = True -ShowRegionOnGameIcon = False +ShowRegionOnGameIcon = True ShowIDOnGameIcon = False -GameGridScale = 1.000000 +GameGridScale = 1.250000 GridView1 = True GridView2 = True GridView3 = False @@ -67,6 +67,16 @@ PauseWhenMinimized = False DumpDecryptedEboots = False MemStickInserted = True EnablePlugins = True +TransparentBackground = True +UITint = 0.000000 +UISaturation = 1.000000 +ShowMenuBar = True +IgnoreCompatSettings = +RewindSnapshotInterval = 0 +WindowX = 0 +WindowY = 0 +WindowWidth = 1324 +WindowHeight = 754 [CPU] CPUCore = 1 SeparateSASThread = True @@ -96,7 +106,7 @@ HardwareTransform = True SoftwareSkinning = True TextureFiltering = 1 BufferFiltering = 1 -InternalResolution = 1 +InternalResolution = 2 AndroidHwScale = 1 HighQualityDepth = 1 FrameSkip = 0 @@ -109,7 +119,7 @@ AnisotropyLevel = 4 VertexDecCache = False TextureBackoffCache = False TextureSecondaryCache = False -FullScreen = False +FullScreen = True FullScreenMulti = False SmallDisplayZoomType = 2 SmallDisplayOffsetX = 0.500000 @@ -137,6 +147,24 @@ FragmentTestCache = True LogFrameDrops = False InflightFrames = 2 RenderDuplicateFrames = False +UseGeometryShader = False +SkipBufferEffects = False +SoftwareRendererJit = True +StereoRendering = False +StereoToMonoShader = RedBlue +AnalogFrameRate = 240 +AnalogFrameRateMode = 0 +MultiSampleLevel = 0 +DisplayOffsetX = 0.500000 +DisplayOffsetY = 0.500000 +DisplayScale = 1.000000 +DisplayAspectRatio = 1.000000 +DisplayStretch = False +ReplaceTexturesAllowLate = True +SkipGPUReadbacks = False +GpuLogProfiler = False +iShowStatusFlags = 0 +DisplayIntegerScale = False [Sound] Enable = True AudioBackend = 0 @@ -204,80 +232,80 @@ AnalogAutoRotSpeed = 8.000000 TouchSnapToGrid = False TouchSnapGridSize = 64 ActionButtonSpacing2 = 1.000000 -ActionButtonCenterX = -1.000000 -ActionButtonCenterY = -1.000000 +ActionButtonCenterX = 0.906250 +ActionButtonCenterY = 0.850000 ActionButtonScale = 1.150000 -DPadX = -1.000000 -DPadY = -1.000000 +DPadX = 0.111719 +DPadY = 0.640000 DPadScale = 1.150000 ShowTouchDpad = True DPadSpacing = 1.000000 -StartKeyX = -1.000000 -StartKeyY = -1.000000 +StartKeyX = 0.589844 +StartKeyY = 0.913750 StartKeyScale = 1.150000 ShowTouchStart = True -SelectKeyX = -1.000000 -SelectKeyY = -1.000000 +SelectKeyX = 0.500000 +SelectKeyY = 0.913750 SelectKeyScale = 1.150000 ShowTouchSelect = True -UnthrottleKeyX = -1.000000 -UnthrottleKeyY = -1.000000 +UnthrottleKeyX = 0.410156 +UnthrottleKeyY = 0.913750 UnthrottleKeyScale = 1.150000 ShowTouchUnthrottle = True -LKeyX = -1.000000 -LKeyY = -1.000000 +LKeyX = 0.053906 +LKeyY = 0.453750 LKeyScale = 1.150000 ShowTouchLTrigger = True -RKeyX = -1.000000 -RKeyY = -1.000000 +RKeyX = 0.946094 +RKeyY = 0.453750 RKeyScale = 1.150000 ShowTouchRTrigger = True -AnalogStickX = -1.000000 -AnalogStickY = -1.000000 +AnalogStickX = 0.111719 +AnalogStickY = 0.885000 AnalogStickScale = 1.150000 ShowAnalogStick = True -RightAnalogStickX = -1.000000 -RightAnalogStickY = -1.000000 +RightAnalogStickX = 0.906250 +RightAnalogStickY = 0.885000 RightAnalogStickScale = 1.150000 ShowRightAnalogStick = False -fcombo0X = -1.000000 -fcombo0Y = -1.000000 +fcombo0X = 0.607813 +fcombo0Y = 0.500000 comboKeyScale0 = 1.150000 ShowComboKey0 = False -fcombo1X = -1.000000 -fcombo1Y = -1.000000 +fcombo1X = 0.697656 +fcombo1Y = 0.500000 comboKeyScale1 = 1.150000 ShowComboKey1 = False -fcombo2X = -1.000000 -fcombo2Y = -1.000000 +fcombo2X = 0.787500 +fcombo2Y = 0.500000 comboKeyScale2 = 1.150000 ShowComboKey2 = False -fcombo3X = -1.000000 -fcombo3Y = -1.000000 +fcombo3X = 0.607813 +fcombo3Y = 0.332500 comboKeyScale3 = 1.150000 ShowComboKey3 = False -fcombo4X = -1.000000 -fcombo4Y = -1.000000 +fcombo4X = 0.697656 +fcombo4Y = 0.332500 comboKeyScale4 = 1.150000 ShowComboKey4 = False -fcombo5X = -1.000000 -fcombo5Y = -1.000000 +fcombo5X = 0.392188 +fcombo5Y = 0.500000 comboKeyScale5 = 1.150000 ShowComboKey5 = False -fcombo6X = -1.000000 -fcombo6Y = -1.000000 +fcombo6X = 0.302344 +fcombo6Y = 0.500000 comboKeyScale6 = 1.150000 ShowComboKey6 = False -fcombo7X = -1.000000 -fcombo7Y = -1.000000 +fcombo7X = 0.212500 +fcombo7Y = 0.500000 comboKeyScale7 = 1.150000 ShowComboKey7 = False -fcombo8X = -1.000000 -fcombo8Y = -1.000000 +fcombo8X = 0.392188 +fcombo8Y = 0.332500 comboKeyScale8 = 1.150000 ShowComboKey8 = False -fcombo9X = -1.000000 -fcombo9Y = -1.000000 +fcombo9X = 0.302344 +fcombo9Y = 0.332500 comboKeyScale9 = 1.150000 ShowComboKey9 = False AnalogDeadzone = 0.150000 @@ -288,12 +316,22 @@ AnalogLimiterDeadzone = 0.600000 LeftStickHeadScale = 1.000000 RightStickHeadScale = 1.000000 HideStickBackground = False -UseMouse = False +UseMouse = True MapMouse = False ConfineMap = False MouseSensitivity = 0.100000 MouseSmoothing = 0.900000 SystemControls = True +Custom0Repeat = False +Custom1Repeat = False +Custom2Repeat = False +Custom3Repeat = False +Custom4Repeat = False +Custom5Repeat = False +Custom6Repeat = False +Custom7Repeat = False +Custom8Repeat = False +Custom9Repeat = False [Network] EnableWlan = False EnableAdhocServer = False @@ -349,6 +387,9 @@ SkipDeadbeefFilling = False FuncHashMap = False MemInfoDetailed = False DrawFrameGraph = False +GEWindowTabsBL = 0x00000000 +GEWindowTabsBR = 0x00000000 +GEWindowTabsTR = 0x00000000 [Upgrade] UpgradeMessage = UpgradeVersion = @@ -380,6 +421,7 @@ InfoStyleBg = 0x00000000 PopupTitleStyleFg = 0xffe3be59 PopupStyleFg = 0xffffffff PopupStyleBg = 0xff303030 +ThemeName = Default [Recent] MaxRecent = 60 [Log] @@ -454,3 +496,23 @@ ColorCorrectionSettingValue4 = 1.000000 ScanlinesSettingValue1 = 1.000000 ScanlinesSettingValue2 = 0.500000 SharpenSettingValue1 = 1.500000 +[VR] +VREnable = True +VREnable6DoF = True +VREnableStereo = False +VREnableMotions = True +VRbForce72Hz = True +VRCameraDistance = 0.000000 +VRCameraHeight = 0.000000 +VRCameraSide = 0.000000 +VRCanvasDistance = 12.000000 +VRFieldOfView = 100.000000 +VRHeadUpDisplayScale = 0.300000 +VRMotionLength = 0.500000 +VRForce72Hz = True +VRManualForceVR = False +VRRescaleHUD = True +VRCameraPitch = 0 +VRHeadRotationScale = 5.000000 +VRHeadRotationEnabled = False +VRHeadRotationSmoothing = False diff --git a/emu-configs/primehack/Dolphin.ini b/emu-configs/primehack/Dolphin.ini index 89358dd0..d2e83c39 100644 --- a/emu-configs/primehack/Dolphin.ini +++ b/emu-configs/primehack/Dolphin.ini @@ -41,14 +41,14 @@ UseDiscordPresence = True HotkeysRequireFocus = True UseGameCovers = False RecursiveISOPaths = False -ISOPath0 = /home/deck/retrodeck/roms/gc +ISOPath0 = RETRODECKHOMEDIR/roms/gc ISOPaths = 1 [Display] DisableScreenSaver = True KeepWindowOnTop = False Fullscreen = True [Interface] -ConfirmStop = True +ConfirmStop = False LanguageCode = OnScreenDisplayMessages = True PauseOnFocusLost = False diff --git a/emu-configs/primehack/Hotkeys.ini b/emu-configs/primehack/Hotkeys.ini index d53efc35..1b0947e6 100644 --- a/emu-configs/primehack/Hotkeys.ini +++ b/emu-configs/primehack/Hotkeys.ini @@ -1,3 +1,24 @@ [Hotkeys] -Device = SDL/0/Microsoft X-Box 360 pad 0 -General/Stop = `Button 6`&`Button 7` \ No newline at end of file +Device = XInput2/0/Virtual core pointer +General/Change Disc = @(Ctrl+D) +General/Toggle Pause = @(Ctrl+P) +General/Reset = @(Ctrl+R) +General/Take Screenshot = @(Ctrl+X) +General/Exit = @(Ctrl+Q) +General/Control NetPlay Golf Mode = @(Alt+H) +Emulation Speed/Decrease Emulation Speed = @(Ctrl+`2`) +Emulation Speed/Increase Emulation Speed = @(Ctrl+`1`) +Emulation Speed/Disable Emulation Speed Limit = @(Ctrl+`0`) +Movie/Start Recording = @(Ctrl+V) +Graphics Toggles/Toggle Aspect Ratio = @(Ctrl+W) +Freelook/Freelook Toggle = @(Alt+Y) +Internal Resolution/Increase IR = @(Ctrl+U) +Internal Resolution/Decrease IR = @(Ctrl+Y) +Save State/Save to Selected Slot = @(Ctrl+S) +Load State/Load from Selected Slot = @(Ctrl+A) +Other State Hotkeys/Undo Load State = @(Ctrl+`8`) +Other State Hotkeys/Undo Save State = @(Ctrl+`9`) +Other State Hotkeys/Increase Selected State Slot = @(Ctrl+K) +Other State Hotkeys/Decrease Selected State Slot = @(Ctrl+J) +General/Toggle Fullscreen = @(Ctrl+Return) +Wii/Press Sync Button = @(Alt+W) \ No newline at end of file diff --git a/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.cfg new file mode 100644 index 00000000..3e3e4106 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AAE-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.png new file mode 100644 index 00000000..2eedca69 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AAE-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.cfg new file mode 100644 index 00000000..e2d5f10b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ALFTVGame-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.png new file mode 100644 index 00000000..f741ac1f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ALFTVGame-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.cfg new file mode 100644 index 00000000..d5a0e1dc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = APFImagination-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.png b/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.png new file mode 100644 index 00000000..8d1733c0 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/APFImagination-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.cfg new file mode 100644 index 00000000..c4b9035a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AcornAchimedes-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.png new file mode 100644 index 00000000..4ac8ffd6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AcornAchimedes-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.cfg new file mode 100644 index 00000000..c802b292 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AcornAtom-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.png new file mode 100644 index 00000000..fb423431 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AcornAtom-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.cfg new file mode 100644 index 00000000..46fa93c5 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AcornBBCMicro-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.png new file mode 100644 index 00000000..73cc80bb Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AcornBBCMicro-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.cfg new file mode 100644 index 00000000..c35808c9 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AcornElectron-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.png new file mode 100644 index 00000000..7e9f643e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AcornElectron-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.cfg new file mode 100644 index 00000000..5d54f424 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ActionMax-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.png new file mode 100644 index 00000000..a23ee699 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ActionMax-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.cfg new file mode 100644 index 00000000..adfafa4d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AdventureVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.png new file mode 100644 index 00000000..c45f63e8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AdventureVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.cfg new file mode 100644 index 00000000..2f23791d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AmericanLaserGames-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.png new file mode 100644 index 00000000..878e0e8b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AmericanLaserGames-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.cfg new file mode 100644 index 00000000..132ce099 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Amiga-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.png new file mode 100644 index 00000000..a14db3b1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Amiga-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.cfg new file mode 100644 index 00000000..48454d6f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AmigaCD32-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.png new file mode 100644 index 00000000..e91d34b8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AmigaCD32-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.cfg new file mode 100644 index 00000000..98e3434d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Amstrad-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.png new file mode 100644 index 00000000..ff7858f7 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Amstrad-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.cfg new file mode 100644 index 00000000..cc4fbabf --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AmstradCPC-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.png new file mode 100644 index 00000000..15379bc5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AmstradCPC-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.cfg new file mode 100644 index 00000000..20e0a231 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AmstradGX4000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.png new file mode 100644 index 00000000..3ada8bbd Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AmstradGX4000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Android-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Android-nyny77.cfg new file mode 100644 index 00000000..2874b472 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Android-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Android-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Android-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Android-nyny77.png new file mode 100644 index 00000000..1ff895f3 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Android-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.cfg new file mode 100644 index 00000000..8ca9612b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Apogee-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.png new file mode 100644 index 00000000..f581c86f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Apogee-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.cfg new file mode 100644 index 00000000..599dfb4a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Apple-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.png new file mode 100644 index 00000000..efe3a82c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Apple-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.cfg new file mode 100644 index 00000000..160cc352 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Apple2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.png new file mode 100644 index 00000000..5e1e2040 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Apple2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.cfg new file mode 100644 index 00000000..8efb5849 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Apple2GS-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.png new file mode 100644 index 00000000..be1e2c9f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Apple2GS-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.cfg new file mode 100644 index 00000000..6098bf4a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Arcadia2001-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.png new file mode 100644 index 00000000..959d6594 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Arcadia2001-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.cfg new file mode 100644 index 00000000..f4368033 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Atari2600-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.png new file mode 100644 index 00000000..5c31fef3 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Atari2600-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.cfg new file mode 100644 index 00000000..a712367a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Atari5200-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.png new file mode 100644 index 00000000..65375c8e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Atari5200-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.cfg new file mode 100644 index 00000000..6726b3db --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Atari7800-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.png new file mode 100644 index 00000000..583ca5fa Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Atari7800-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.cfg new file mode 100644 index 00000000..d6f0c255 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AtariJaguar-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.png new file mode 100644 index 00000000..638665ff Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AtariJaguar-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.cfg new file mode 100644 index 00000000..b789292b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AtariLynxBezel-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.png new file mode 100644 index 00000000..9107dd52 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AtariLynxBezel-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.cfg new file mode 100644 index 00000000..9057c4cc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AtariST-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.png new file mode 100644 index 00000000..cf139e04 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AtariST-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.cfg new file mode 100644 index 00000000..8cb18072 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AtariSuperCharger-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.png new file mode 100644 index 00000000..63c20cc6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AtariSuperCharger-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.cfg new file mode 100644 index 00000000..b6480d70 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = AtariXE-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.png b/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.png new file mode 100644 index 00000000..cf28927a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/AtariXE-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.cfg new file mode 100644 index 00000000..bfacc48e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BallyAstrocade-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.png new file mode 100644 index 00000000..df6aeac1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BallyAstrocade-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.cfg new file mode 100644 index 00000000..40c5fa65 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BandaiPlaydia-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.png new file mode 100644 index 00000000..50bc21b5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BandaiPlaydia-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.cfg new file mode 100644 index 00000000..79126e63 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BandaiSwanCrystal-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.png new file mode 100644 index 00000000..7e8dc631 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BandaiSwanCrystal-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.cfg new file mode 100644 index 00000000..b16b24f6 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BandaiWonderSwan-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.png new file mode 100644 index 00000000..632f1fce Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwan-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.cfg new file mode 100644 index 00000000..708f28df --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BandaiWonderSwanColor-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.png new file mode 100644 index 00000000..08c40d03 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BandaiWonderSwanColor-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.cfg new file mode 100644 index 00000000..d5f1718b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = BigFishGames-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.png b/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.png new file mode 100644 index 00000000..d41178f5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/BigFishGames-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.cfg new file mode 100644 index 00000000..4ee4537e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CDTV-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.png new file mode 100644 index 00000000..f461c72f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CDTV-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.cfg new file mode 100644 index 00000000..b87e9e8b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CamputersLynx-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.png new file mode 100644 index 00000000..274c9497 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CamputersLynx-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.cfg new file mode 100644 index 00000000..dc0d40f1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CapcomCPS1-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.png new file mode 100644 index 00000000..b2e91b93 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CapcomCPS1-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.cfg new file mode 100644 index 00000000..c240d3c0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CapcomCPS2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.png new file mode 100644 index 00000000..0c393b2f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CapcomCPS2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.cfg new file mode 100644 index 00000000..e37c71b2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CapcomCPS3-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.png new file mode 100644 index 00000000..5131e854 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CapcomCPS3-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.cfg new file mode 100644 index 00000000..1003b412 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CapcomPowerSystemChnager-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.png new file mode 100644 index 00000000..02271684 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CapcomPowerSystemChnager-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.cfg new file mode 100644 index 00000000..c3edfe58 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CasioPV1000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.png new file mode 100644 index 00000000..39877503 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CasioPV1000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.cfg new file mode 100644 index 00000000..74d71c40 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CasioPV1000b-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.png new file mode 100644 index 00000000..668c949b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CasioPV1000b-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.cfg new file mode 100644 index 00000000..727b3efc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Cave-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.png new file mode 100644 index 00000000..afffe758 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Cave-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.cfg new file mode 100644 index 00000000..d984bba9 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ColecoAdam-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.png new file mode 100644 index 00000000..dec84782 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ColecoAdam-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.cfg new file mode 100644 index 00000000..b1b61c1f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ColecoVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.png new file mode 100644 index 00000000..b3e0e513 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ColecoVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.cfg new file mode 100644 index 00000000..d214f0a8 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Commodore16-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.png new file mode 100644 index 00000000..6d9385dd Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Commodore16-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.cfg new file mode 100644 index 00000000..26d00a89 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Commodore16Plus4-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.png new file mode 100644 index 00000000..a9838676 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Commodore16Plus4-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.cfg new file mode 100644 index 00000000..56e08a50 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Commodore64-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.png new file mode 100644 index 00000000..ffa4bf30 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Commodore64-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.cfg new file mode 100644 index 00000000..98a0d730 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CommodoreMAX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.png new file mode 100644 index 00000000..850e9964 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CommodoreMAX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.cfg new file mode 100644 index 00000000..c0d22b46 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = CommodoreVIC20-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.png b/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.png new file mode 100644 index 00000000..364fcfd4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/CommodoreVIC20-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.cfg new file mode 100644 index 00000000..1f824c54 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Daphne-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.png new file mode 100644 index 00000000..1f509906 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Daphne-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.cfg new file mode 100644 index 00000000..890cfc24 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = DataEastClassics-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.png b/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.png new file mode 100644 index 00000000..c32fd278 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/DataEastClassics-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.cfg new file mode 100644 index 00000000..952abcfe --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Dice-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.png new file mode 100644 index 00000000..507365d6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Dice-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.cfg new file mode 100644 index 00000000..5acf0c04 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Dragon64-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.png new file mode 100644 index 00000000..6cea9aea Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Dragon64-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.cfg new file mode 100644 index 00000000..9195417b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = EG2000ColourGenie-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.png b/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.png new file mode 100644 index 00000000..b74cb902 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/EG2000ColourGenie-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.cfg new file mode 100644 index 00000000..3e846788 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ElektronikaBK-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.png new file mode 100644 index 00000000..164201a6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ElektronikaBK-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.cfg new file mode 100644 index 00000000..461cceb0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = EpochGamePocketComputer-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.png b/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.png new file mode 100644 index 00000000..646ea280 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/EpochGamePocketComputer-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.cfg new file mode 100644 index 00000000..24a5c9b4 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ExamuExBoard-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.png new file mode 100644 index 00000000..ca55aaaa Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ExamuExBoard-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.cfg new file mode 100644 index 00000000..50a59a60 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ExidySorcerer-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.png new file mode 100644 index 00000000..694391db Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ExidySorcerer-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.cfg new file mode 100644 index 00000000..c61bf24d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = FairchildChannelF-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.png b/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.png new file mode 100644 index 00000000..e18af2f5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/FairchildChannelF-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.cfg new file mode 100644 index 00000000..08c7c932 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = FightCade-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.png b/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.png new file mode 100644 index 00000000..049a5b3b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/FightCade-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.cfg new file mode 100644 index 00000000..21879caa --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = FujitsuFMTownsMarty-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.png b/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.png new file mode 100644 index 00000000..f2904fa4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/FujitsuFMTownsMarty-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.cfg new file mode 100644 index 00000000..5a7c610f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = FuntechSuperAcan-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.png b/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.png new file mode 100644 index 00000000..4d6deb89 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/FuntechSuperAcan-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.cfg new file mode 100644 index 00000000..81d0c8b8 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = GP32-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.png b/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.png new file mode 100644 index 00000000..598bde10 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/GP32-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.cfg new file mode 100644 index 00000000..cdb6fe6e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = GameMaster-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.png b/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.png new file mode 100644 index 00000000..6cfddd59 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/GameMaster-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.cfg new file mode 100644 index 00000000..920785d1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = GogCom-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.png b/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.png new file mode 100644 index 00000000..f87dd65e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/GogCom-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.cfg new file mode 100644 index 00000000..80a409da --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = HBMame-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.png b/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.png new file mode 100644 index 00000000..93456ad2 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/HBMame-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.cfg new file mode 100644 index 00000000..04b54153 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = IBM-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.png b/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.png new file mode 100644 index 00000000..09dba760 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/IBM-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.cfg new file mode 100644 index 00000000..7c40f4cc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = IGSPolygameMaster-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.png b/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.png new file mode 100644 index 00000000..a4f41bae Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/IGSPolygameMaster-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.cfg new file mode 100644 index 00000000..ddf1a84c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = IntertronVC4000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.png new file mode 100644 index 00000000..f025a9f9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/IntertronVC4000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.cfg new file mode 100644 index 00000000..93028605 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = IremClassics-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.png b/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.png new file mode 100644 index 00000000..24014efd Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/IremClassics-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.cfg new file mode 100644 index 00000000..7b3d1d95 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = JupiterAce-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.png b/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.png new file mode 100644 index 00000000..f9d46ba2 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/JupiterAce-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.cfg new file mode 100644 index 00000000..d4726306 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = KonamiEAmusement-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.png b/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.png new file mode 100644 index 00000000..507ea721 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/KonamiEAmusement-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.cfg new file mode 100644 index 00000000..fa29266f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = KonamiGX400-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.png b/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.png new file mode 100644 index 00000000..dcaff28f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/KonamiGX400-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.cfg new file mode 100644 index 00000000..b2d8c027 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = KonamiRetro-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.png b/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.png new file mode 100644 index 00000000..85f274dd Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/KonamiRetro-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.cfg new file mode 100644 index 00000000..54eb259b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = LIVIV-PC01-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.png b/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.png new file mode 100644 index 00000000..a37dcfb6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/LIVIV-PC01-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.cfg new file mode 100644 index 00000000..cce2438a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Loopy-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.png new file mode 100644 index 00000000..d994b8f4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Loopy-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.cfg new file mode 100644 index 00000000..d1be7c18 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MGTSamCoupe-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.png new file mode 100644 index 00000000..f76f1e10 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MGTSamCoupe-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.cfg new file mode 100644 index 00000000..21222b0f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MagnavoxOdyssey-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.png new file mode 100644 index 00000000..33e553bf Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.cfg new file mode 100644 index 00000000..4fb6c796 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MagnavoxOdyssey2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.png new file mode 100644 index 00000000..0efed38c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MagnavoxOdyssey2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.cfg new file mode 100644 index 00000000..12fbc46b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Mame-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.png new file mode 100644 index 00000000..a60540d2 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Mame-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.cfg new file mode 100644 index 00000000..257f1606 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MattelAquarius-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.png new file mode 100644 index 00000000..338281a0 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MattelAquarius-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.cfg new file mode 100644 index 00000000..88fa5e12 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MattelInteliVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.png new file mode 100644 index 00000000..37f609d3 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MattelInteliVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.cfg new file mode 100644 index 00000000..fd9f1c28 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MattelIntelliVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.png new file mode 100644 index 00000000..5487e37e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MattelIntelliVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.cfg new file mode 100644 index 00000000..65bf3e45 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MegaDuck-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.png new file mode 100644 index 00000000..010f3c26 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MegaDuck-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.cfg new file mode 100644 index 00000000..3007a4cc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MicrosoftDOS-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.png new file mode 100644 index 00000000..72ef152b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MicrosoftDOS-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.cfg new file mode 100644 index 00000000..78d6a1ae --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MicrosoftMSX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.png new file mode 100644 index 00000000..faa503d4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.cfg new file mode 100644 index 00000000..04aaa886 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MicrosoftMSX2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.png new file mode 100644 index 00000000..d176757c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSX2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.cfg new file mode 100644 index 00000000..bcc3edad --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MicrosoftMSXTurbo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.png new file mode 100644 index 00000000..3afebe80 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MicrosoftMSXTurbo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.cfg new file mode 100644 index 00000000..440f3072 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MicrosoftXBox-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.png new file mode 100644 index 00000000..2371dfba Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MicrosoftXBox-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.cfg new file mode 100644 index 00000000..d9e02523 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MidwayTUnit-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.png new file mode 100644 index 00000000..33d80763 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MidwayTUnit-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.cfg new file mode 100644 index 00000000..b701889d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = MidwayWolfUnit-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.png b/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.png new file mode 100644 index 00000000..a2c0cb65 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/MidwayWolfUnit-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.cfg new file mode 100644 index 00000000..a9c4438e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Mugen-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.png new file mode 100644 index 00000000..701d4ff9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Mugen-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.cfg new file mode 100644 index 00000000..e32c5bf1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECPC8801-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.png new file mode 100644 index 00000000..6f72aeda Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECPC8801-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.cfg new file mode 100644 index 00000000..c167a0de --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECPC9801-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.png new file mode 100644 index 00000000..4b0cc4e9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECPC9801-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.cfg new file mode 100644 index 00000000..b15bb4ee --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECPCEngine-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.png new file mode 100644 index 00000000..a637c01d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECPCEngine-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.cfg new file mode 100644 index 00000000..f43c0150 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECPCEngineCD-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.png new file mode 100644 index 00000000..53153cd0 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECPCEngineCD-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.cfg new file mode 100644 index 00000000..4b164a8f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECPCFX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.png new file mode 100644 index 00000000..516ac123 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECPCFX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.cfg new file mode 100644 index 00000000..21d5b207 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NECSuperGrafX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.png new file mode 100644 index 00000000..475f1349 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NECSuperGrafX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.cfg new file mode 100644 index 00000000..e6680dea --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Namco-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.png new file mode 100644 index 00000000..96d6358e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Namco-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.cfg new file mode 100644 index 00000000..bc5145f5 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NamcoGalaga-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.png new file mode 100644 index 00000000..02d29a8b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NamcoGalaga-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.cfg new file mode 100644 index 00000000..046eccde --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NamcoSystem22-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.png new file mode 100644 index 00000000..124de58f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NamcoSystem22-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.cfg new file mode 100644 index 00000000..f3edddb8 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Naomi-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.png new file mode 100644 index 00000000..8be0f97d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Naomi-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.cfg new file mode 100644 index 00000000..d7a8898a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Naomi2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.png new file mode 100644 index 00000000..128ce59d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Naomi2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.cfg new file mode 100644 index 00000000..03971df8 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecCoreGrafX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.png new file mode 100644 index 00000000..22cc31f8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.cfg new file mode 100644 index 00000000..aad1cbfd --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecCoreGrafX2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.png new file mode 100644 index 00000000..5019528c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecCoreGrafX2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.cfg new file mode 100644 index 00000000..814deac0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecTurboDuo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.png new file mode 100644 index 00000000..c60ea339 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecTurboDuo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.cfg new file mode 100644 index 00000000..a9b4c241 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecTurboGrafX16-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.png new file mode 100644 index 00000000..f120fc92 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafX16-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.cfg new file mode 100644 index 00000000..40107b23 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecTurboGrafXCD-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.png new file mode 100644 index 00000000..dcdec2b1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafXCD-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.cfg new file mode 100644 index 00000000..1afb3df7 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NecTurboGrafx16b-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.png new file mode 100644 index 00000000..971852f6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NecTurboGrafx16b-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.cfg new file mode 100644 index 00000000..9782aeb2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoArcadeSystem-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.png new file mode 100644 index 00000000..fd7db940 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoArcadeSystem-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.cfg new file mode 100644 index 00000000..79ce8d5c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoEntertainmentSystem-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.png new file mode 100644 index 00000000..400717e5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoEntertainmentSystem-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.cfg new file mode 100644 index 00000000..35587415 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoFamicomDiskSystem-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.png new file mode 100644 index 00000000..ad4ad605 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomDiskSystem-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.cfg new file mode 100644 index 00000000..33aa3207 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoFamicomFamily-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.png new file mode 100644 index 00000000..f071b566 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoFamicomFamily-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.cfg new file mode 100644 index 00000000..2774be5f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoFamilyComputer-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.png new file mode 100644 index 00000000..60ddf839 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoFamilyComputer-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.cfg new file mode 100644 index 00000000..0e7f515e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoy-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.png new file mode 100644 index 00000000..7c0e7f73 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoy-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.cfg new file mode 100644 index 00000000..6ea4363e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorBleu-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.png new file mode 100644 index 00000000..2497fcd4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorBleu-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.cfg new file mode 100644 index 00000000..04eba81b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorGris-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.png new file mode 100644 index 00000000..7ab483b2 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorGris-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.cfg new file mode 100644 index 00000000..5b42f04e --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorJaune-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.png new file mode 100644 index 00000000..f5baf3ac Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorJaune-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.cfg new file mode 100644 index 00000000..59095b7b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorNoir-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.png new file mode 100644 index 00000000..bac0528b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorNoir-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.cfg new file mode 100644 index 00000000..1c7ad669 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorRouge-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.png new file mode 100644 index 00000000..78be6809 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorRouge-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.cfg new file mode 100644 index 00000000..5cf70fe2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameBoyColorVert-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.png new file mode 100644 index 00000000..15f19ff9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameBoyColorVert-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.cfg new file mode 100644 index 00000000..265f2547 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoGameCube-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.png new file mode 100644 index 00000000..6f1dfe21 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoGameCube-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.cfg new file mode 100644 index 00000000..2e18127c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoN64-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.png new file mode 100644 index 00000000..7acc1ec8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoN64-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.cfg new file mode 100644 index 00000000..25126fa0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoPokemonMini-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.png new file mode 100644 index 00000000..74f9a621 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoPokemonMini-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.cfg new file mode 100644 index 00000000..af1524d2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoSNES-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.png new file mode 100644 index 00000000..ba91677f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoSNES-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.cfg new file mode 100644 index 00000000..37c842c5 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoSatellaview-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.png new file mode 100644 index 00000000..05622478 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoSatellaview-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.cfg new file mode 100644 index 00000000..213af2f4 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoSuperFamicom-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.png new file mode 100644 index 00000000..ee006895 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoSuperFamicom-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.cfg new file mode 100644 index 00000000..cfd48a75 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoSuperNintendo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.png new file mode 100644 index 00000000..bfb98cd6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoSuperNintendo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.cfg new file mode 100644 index 00000000..a8b39ae4 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = NintendoVirtualBoy-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.png b/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.png new file mode 100644 index 00000000..c9a309ec Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/NintendoVirtualBoy-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.cfg new file mode 100644 index 00000000..e8b5d4e5 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = OpenBor-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.png b/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.png new file mode 100644 index 00000000..f829b614 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/OpenBor-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.cfg new file mode 100644 index 00000000..bd78bfe1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Oric-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.png new file mode 100644 index 00000000..62a32ec8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Oric-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.cfg new file mode 100644 index 00000000..cc849369 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Origin-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.png new file mode 100644 index 00000000..3e40cd58 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Origin-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.cfg new file mode 100644 index 00000000..62085483 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = OthelloMultivision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.png new file mode 100644 index 00000000..789398d7 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/OthelloMultivision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.cfg new file mode 100644 index 00000000..2c0dce0c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Panasonic-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.png new file mode 100644 index 00000000..ac9039b7 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Panasonic-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.cfg new file mode 100644 index 00000000..67285750 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Pegasus-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.png new file mode 100644 index 00000000..b2e98f10 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Pegasus-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.cfg new file mode 100644 index 00000000..1d7f6234 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = PhilipsVG5000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.png new file mode 100644 index 00000000..b5d6ef21 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/PhilipsVG5000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.cfg new file mode 100644 index 00000000..e958ae58 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = PioneerPalcomLaserDisc-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.png b/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.png new file mode 100644 index 00000000..9596ed64 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/PioneerPalcomLaserDisc-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.cfg new file mode 100644 index 00000000..28058513 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = PopCap-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.png b/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.png new file mode 100644 index 00000000..2d2ab94d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/PopCap-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.cfg new file mode 100644 index 00000000..e9dbde60 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Psikyo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.png new file mode 100644 index 00000000..eca79012 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Psikyo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.cfg new file mode 100644 index 00000000..64947b2b --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Psikyob-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.png new file mode 100644 index 00000000..cda07c49 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Psikyob-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.cfg new file mode 100644 index 00000000..7da60b16 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = RCAStudio2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.png new file mode 100644 index 00000000..274ceade Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/RCAStudio2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.cfg new file mode 100644 index 00000000..ff42488f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = RockOla-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.png b/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.png new file mode 100644 index 00000000..03cc5d49 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/RockOla-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.cfg new file mode 100644 index 00000000..2ad6145d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKClassics-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.png new file mode 100644 index 00000000..718f63b5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKClassics-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.cfg new file mode 100644 index 00000000..dbe0ac26 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKHyperNeoGeo64-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.png new file mode 100644 index 00000000..73216757 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKHyperNeoGeo64-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.cfg new file mode 100644 index 00000000..de65e094 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.png new file mode 100644 index 00000000..08195c31 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.cfg new file mode 100644 index 00000000..fca23850 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoCD-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.png new file mode 100644 index 00000000..554c80cf Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoCD-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.cfg new file mode 100644 index 00000000..09b55a66 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoMVS-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.png new file mode 100644 index 00000000..d66aef4c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoMVS-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.cfg new file mode 100644 index 00000000..66b307d2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoPlaymore-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.png new file mode 100644 index 00000000..37f00ccf Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPlaymore-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.cfg new file mode 100644 index 00000000..ef7770e7 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoPocket-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.png new file mode 100644 index 00000000..7aea2f35 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocket-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.cfg new file mode 100644 index 00000000..bc8b16e7 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoPocketColor-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.png new file mode 100644 index 00000000..ca21f7d1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColor-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.cfg new file mode 100644 index 00000000..4eb6ddd0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoPocketColorB-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.png new file mode 100644 index 00000000..a546ba64 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoPocketColorB-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.cfg new file mode 100644 index 00000000..421f14d1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SNKNeoGeoX-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.png new file mode 100644 index 00000000..d6bf3751 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SNKNeoGeoX-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.cfg new file mode 100644 index 00000000..76c0509c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SammyAtomiswave-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.png new file mode 100644 index 00000000..1e71fa68 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswave-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.cfg new file mode 100644 index 00000000..ae103c17 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SammyAtomiswaveb-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.png new file mode 100644 index 00000000..d2df3a3a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SammyAtomiswaveb-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.cfg new file mode 100644 index 00000000..866e2682 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ScummVM-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.png new file mode 100644 index 00000000..11a551e9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ScummVM-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.cfg new file mode 100644 index 00000000..2324729a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Sega32X-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.png new file mode 100644 index 00000000..6db32c47 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Sega32X-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.cfg new file mode 100644 index 00000000..ca7a59c2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaAM2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.png new file mode 100644 index 00000000..2e0273cf Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaAM2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.cfg new file mode 100644 index 00000000..deeb2b0c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaAM3-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.png new file mode 100644 index 00000000..bf5a9263 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaAM3-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.cfg new file mode 100644 index 00000000..7471370f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaCD-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.png new file mode 100644 index 00000000..2cdbf30f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaCD-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.cfg new file mode 100644 index 00000000..8925c8e0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaDefault-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.png new file mode 100644 index 00000000..2397497f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaDefault-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.cfg new file mode 100644 index 00000000..c65608ca --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaDreamcast-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.png new file mode 100644 index 00000000..b6d3b5db Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaDreamcast-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.cfg new file mode 100644 index 00000000..bc2316e2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaGameGear-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.png new file mode 100644 index 00000000..96bfb4cd Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaGameGear-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.cfg new file mode 100644 index 00000000..2c977951 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaGenesis-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.png new file mode 100644 index 00000000..dac7155b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaGenesis-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.cfg new file mode 100644 index 00000000..9555df11 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaGenesis3-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.png new file mode 100644 index 00000000..fd565410 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaGenesis3-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.cfg new file mode 100644 index 00000000..e5fa876a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaGenesisCDx-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.png new file mode 100644 index 00000000..0a378ac1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaGenesisCDx-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.cfg new file mode 100644 index 00000000..52d991c1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaHikaru-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.png new file mode 100644 index 00000000..465c9b8d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaHikaru-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.cfg new file mode 100644 index 00000000..3ea169b1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaMasterSystem-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.png new file mode 100644 index 00000000..ba9e01f7 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaMasterSystem-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.cfg new file mode 100644 index 00000000..f71e00c2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaMegaCD-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.png new file mode 100644 index 00000000..8141c081 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaMegaCD-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.cfg new file mode 100644 index 00000000..af6474e0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaMegadrive-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.png new file mode 100644 index 00000000..650188c1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaMegadrive-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.cfg new file mode 100644 index 00000000..f02d39d9 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaNomad-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.png new file mode 100644 index 00000000..ebd55739 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaNomad-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.cfg new file mode 100644 index 00000000..352e61cc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaPico-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.png new file mode 100644 index 00000000..f4900fd4 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaPico-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.cfg new file mode 100644 index 00000000..0bed20f0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaSC3000H-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.png new file mode 100644 index 00000000..9000242b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaSC3000H-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.cfg new file mode 100644 index 00000000..0baad73a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaSG1000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.png new file mode 100644 index 00000000..bb6aac25 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaSG1000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.cfg new file mode 100644 index 00000000..23396861 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaSTV-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.png new file mode 100644 index 00000000..4190c68c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaSTV-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.cfg new file mode 100644 index 00000000..b081b1bd --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaSaturnEU-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.png new file mode 100644 index 00000000..22229de7 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaSaturnEU-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.cfg new file mode 100644 index 00000000..ee503a9a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaSaturnJAP-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.png new file mode 100644 index 00000000..3d329bdf Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaSaturnJAP-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.cfg new file mode 100644 index 00000000..4e58aeab --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaTriforce-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.png new file mode 100644 index 00000000..40aa190c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaTriforce-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.cfg new file mode 100644 index 00000000..2df3c0ee --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SegaTriforceb-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.png new file mode 100644 index 00000000..1b0195c3 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SegaTriforceb-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.cfg new file mode 100644 index 00000000..d154b5ef --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SharpX1-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.png new file mode 100644 index 00000000..eef1dc39 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SharpX1-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.cfg new file mode 100644 index 00000000..402fb4e1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SharpX68000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.png new file mode 100644 index 00000000..b77c328d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SharpX68000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.cfg new file mode 100644 index 00000000..b26a94c3 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SharpX79000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.png new file mode 100644 index 00000000..b3632c9a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SharpX79000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.cfg new file mode 100644 index 00000000..5bd8447d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SinclairZX81-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.png new file mode 100644 index 00000000..e7ee3bd8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SinclairZX81-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.cfg new file mode 100644 index 00000000..7fff8c96 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SinclairZXSpectrum-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.png new file mode 100644 index 00000000..6aee2249 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SinclairZXSpectrum-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.cfg new file mode 100644 index 00000000..b62f4b51 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SonyPlaystation-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.png new file mode 100644 index 00000000..4017022a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SonyPlaystation-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.cfg new file mode 100644 index 00000000..2eec8c13 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SordM5-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.png new file mode 100644 index 00000000..891b79a6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SordM5-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.cfg new file mode 100644 index 00000000..29d68854 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SpectraVideo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.png new file mode 100644 index 00000000..ab906f18 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SpectraVideo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.cfg new file mode 100644 index 00000000..5b7b9936 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SuperCassetteVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.png new file mode 100644 index 00000000..0d7f1889 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SuperCassetteVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.cfg new file mode 100644 index 00000000..d0f7d0b6 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SuperGameBoy-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.png new file mode 100644 index 00000000..b3100eea Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SuperGameBoy-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.cfg new file mode 100644 index 00000000..7879f3d3 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = SuperVision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.png new file mode 100644 index 00000000..bd31a44b Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/SuperVision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.cfg new file mode 100644 index 00000000..d0de6cf1 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoClassics-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.png new file mode 100644 index 00000000..e1a410b8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoClassics-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.cfg new file mode 100644 index 00000000..52fcbb9f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoClassicsV2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.png new file mode 100644 index 00000000..af4feb85 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoClassicsV2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.cfg new file mode 100644 index 00000000..ba1f0fbb --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoTypeX2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.png new file mode 100644 index 00000000..3eb95916 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.cfg new file mode 100644 index 00000000..84fa3e07 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoTypeX3-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.png new file mode 100644 index 00000000..b472e984 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX3-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.cfg new file mode 100644 index 00000000..4ed4dc60 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoTypeX7-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.png new file mode 100644 index 00000000..84d1ad54 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoTypeX7-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.cfg new file mode 100644 index 00000000..2037c2e2 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoTypeXPlus-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.png new file mode 100644 index 00000000..38f2a7e8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXPlus-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.cfg new file mode 100644 index 00000000..13b0d7ed --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TaitoTypeXZero-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.png new file mode 100644 index 00000000..ab0ab812 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TaitoTypeXZero-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.cfg new file mode 100644 index 00000000..eb84455d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TandyTRS80-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.png new file mode 100644 index 00000000..b6840020 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TandyTRS80-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.cfg new file mode 100644 index 00000000..de2d3995 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Techmos-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.png new file mode 100644 index 00000000..bb46c80c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Techmos-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.cfg new file mode 100644 index 00000000..6b245205 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TexasInstrumentTI994A-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.png new file mode 100644 index 00000000..401d1153 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TexasInstrumentTI994A-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.cfg new file mode 100644 index 00000000..0cceadb0 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TheImaginationMachine-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.png new file mode 100644 index 00000000..c2564e3d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TheImaginationMachine-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.cfg new file mode 100644 index 00000000..f1f522ee --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TigerGameCom-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.png new file mode 100644 index 00000000..0b86d2d9 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TigerGameCom-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.cfg new file mode 100644 index 00000000..1309668d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Toaplan-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.png new file mode 100644 index 00000000..95cd80cb Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Toaplan-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.cfg new file mode 100644 index 00000000..116a0f6d --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TomyTutor-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.png new file mode 100644 index 00000000..b98a937a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TomyTutor-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.cfg new file mode 100644 index 00000000..367a8974 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = TouhouProject-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.png b/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.png new file mode 100644 index 00000000..1010469e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/TouhouProject-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.cfg new file mode 100644 index 00000000..fd3135c4 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Vector06C-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.png new file mode 100644 index 00000000..38ea98e1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Vector06C-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.cfg new file mode 100644 index 00000000..cd3958df --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Vectrex-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.png new file mode 100644 index 00000000..92c2086f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Vectrex-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.cfg new file mode 100644 index 00000000..f11685fc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Vectrexb-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.png new file mode 100644 index 00000000..e9b4157a Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Vectrexb-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.cfg new file mode 100644 index 00000000..d1f59332 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Vierge-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.png new file mode 100644 index 00000000..c87ad050 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Vierge-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.cfg new file mode 100644 index 00000000..9ccca62c --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = ViergeVertical-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.png b/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.png new file mode 100644 index 00000000..175519fe Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/ViergeVertical-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.cfg new file mode 100644 index 00000000..fd03fca7 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = WataraSupervision-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.png b/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.png new file mode 100644 index 00000000..b3302328 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/WataraSupervision-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.cfg new file mode 100644 index 00000000..c00910aa --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = Zinc-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.png b/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.png new file mode 100644 index 00000000..076e74f1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/Zinc-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.cfg new file mode 100644 index 00000000..cc298228 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-CPS1-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.png new file mode 100644 index 00000000..f701164c Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-CPS1-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.cfg new file mode 100644 index 00000000..3f69cec7 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-CPS2-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.png new file mode 100644 index 00000000..ad208211 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-CPS2-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.cfg new file mode 100644 index 00000000..a766c4d8 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-CPS3-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.png new file mode 100644 index 00000000..4d2c9d7d Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-CPS3-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.cfg new file mode 100644 index 00000000..3ab7a4ff --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-Capcom-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.png new file mode 100644 index 00000000..898589af Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-Capcom-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.cfg new file mode 100644 index 00000000..ad73c1a5 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-Cave-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.png new file mode 100644 index 00000000..938215e5 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-Cave-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.cfg new file mode 100644 index 00000000..e647bf0f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-IGSPolygameMaster-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.png new file mode 100644 index 00000000..23d8b1d1 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-IGSPolygameMaster-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.cfg new file mode 100644 index 00000000..07abf16a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-KonamiGX4000-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.png new file mode 100644 index 00000000..bfc4b95e Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-KonamiGX4000-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.cfg new file mode 100644 index 00000000..4ee748a3 --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-MameShmup-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.png new file mode 100644 index 00000000..f27c5cf8 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-MameShmup-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.cfg new file mode 100644 index 00000000..558cb1cd --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-NamcoGalaga-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.png new file mode 100644 index 00000000..46100351 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-NamcoGalaga-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.cfg new file mode 100644 index 00000000..ec70243a --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-Psikyo-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.png new file mode 100644 index 00000000..ebc9143f Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-Psikyo-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.cfg new file mode 100644 index 00000000..39ccb0bc --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-SegaSTV-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.png new file mode 100644 index 00000000..8fd56ca6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-SegaSTV-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.cfg new file mode 100644 index 00000000..0fadf5ed --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-TaitoClassics-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.png new file mode 100644 index 00000000..e58bc7d6 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-TaitoClassics-nyny77.png differ diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.cfg b/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.cfg new file mode 100644 index 00000000..543a9b6f --- /dev/null +++ b/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_overlay = vert-Toaplan-nyny77.png +overlay0_full_screen = true +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.png b/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.png new file mode 100644 index 00000000..40e1ef50 Binary files /dev/null and b/emu-configs/retroarch/borders/NyNy77/vert-Toaplan-nyny77.png differ diff --git a/emu-configs/retroarch/borders/pegasus/3DO.cfg b/emu-configs/retroarch/borders/pegasus/3DO.cfg new file mode 100644 index 00000000..31647b5c --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/3DO.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = 3do.png diff --git a/emu-configs/retroarch/borders/pegasus/3do.png b/emu-configs/retroarch/borders/pegasus/3do.png new file mode 100644 index 00000000..562e89f4 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/3do.png differ diff --git a/emu-configs/retroarch/borders/pegasus/ChannelF.cfg b/emu-configs/retroarch/borders/pegasus/ChannelF.cfg new file mode 100644 index 00000000..3b498b7b --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ChannelF.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = channelf.png diff --git a/emu-configs/retroarch/borders/pegasus/ColecoVision.cfg b/emu-configs/retroarch/borders/pegasus/ColecoVision.cfg new file mode 100644 index 00000000..fe679110 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ColecoVision.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = colecovision.png diff --git a/emu-configs/retroarch/borders/pegasus/Dreamcast.cfg b/emu-configs/retroarch/borders/pegasus/Dreamcast.cfg new file mode 100644 index 00000000..65b6a46c --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/Dreamcast.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = dreamcast.png diff --git a/emu-configs/retroarch/borders/pegasus/GX4000.cfg b/emu-configs/retroarch/borders/pegasus/GX4000.cfg new file mode 100644 index 00000000..86a4adb3 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/GX4000.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = gx4000.png diff --git a/emu-configs/retroarch/borders/pegasus/Gamecube.cfg b/emu-configs/retroarch/borders/pegasus/Gamecube.cfg new file mode 100644 index 00000000..0a1fd583 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/Gamecube.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = gamecube.png diff --git a/emu-configs/retroarch/borders/pegasus/Intellivision.cfg b/emu-configs/retroarch/borders/pegasus/Intellivision.cfg new file mode 100644 index 00000000..02ca87de --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/Intellivision.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = intellivision.png diff --git a/emu-configs/retroarch/borders/pegasus/LICENSE b/emu-configs/retroarch/borders/pegasus/LICENSE new file mode 100644 index 00000000..f288702d --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/emu-configs/retroarch/borders/pegasus/MSX.cfg b/emu-configs/retroarch/borders/pegasus/MSX.cfg new file mode 100644 index 00000000..12ca37fc --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/MSX.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = msx.png diff --git a/emu-configs/retroarch/borders/pegasus/MSX2.cfg b/emu-configs/retroarch/borders/pegasus/MSX2.cfg new file mode 100644 index 00000000..f083a3f4 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/MSX2.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = msx2.png diff --git a/emu-configs/retroarch/borders/pegasus/MarkIII.cfg b/emu-configs/retroarch/borders/pegasus/MarkIII.cfg new file mode 100644 index 00000000..b62cf840 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/MarkIII.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = markIII.png diff --git a/emu-configs/retroarch/borders/pegasus/N64.cfg b/emu-configs/retroarch/borders/pegasus/N64.cfg new file mode 100644 index 00000000..555be3b3 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/N64.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = n64.png diff --git a/emu-configs/retroarch/borders/pegasus/Odyssey2.cfg b/emu-configs/retroarch/borders/pegasus/Odyssey2.cfg new file mode 100644 index 00000000..e2614e41 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/Odyssey2.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = odyssey2.png diff --git a/emu-configs/retroarch/borders/pegasus/SNES87.png b/emu-configs/retroarch/borders/pegasus/SNES87.png new file mode 100644 index 00000000..97f32899 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/SNES87.png differ diff --git a/emu-configs/retroarch/borders/pegasus/ScummVM.cfg b/emu-configs/retroarch/borders/pegasus/ScummVM.cfg new file mode 100644 index 00000000..404ed6ee --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ScummVM.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = scummvm.png diff --git a/emu-configs/retroarch/borders/pegasus/SuperGrafx.cfg b/emu-configs/retroarch/borders/pegasus/SuperGrafx.cfg new file mode 100644 index 00000000..b603f558 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/SuperGrafx.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = supergrafx.png diff --git a/emu-configs/retroarch/borders/pegasus/X1.cfg b/emu-configs/retroarch/borders/pegasus/X1.cfg new file mode 100644 index 00000000..5fa7e293 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/X1.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = x1.png diff --git a/emu-configs/retroarch/borders/pegasus/amstradcpc.cfg b/emu-configs/retroarch/borders/pegasus/amstradcpc.cfg new file mode 100644 index 00000000..5618a149 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/amstradcpc.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = amstradcpc.png diff --git a/emu-configs/retroarch/borders/pegasus/amstradcpc.png b/emu-configs/retroarch/borders/pegasus/amstradcpc.png new file mode 100644 index 00000000..251bdc68 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/amstradcpc.png differ diff --git a/emu-configs/retroarch/borders/pegasus/atari2600.cfg b/emu-configs/retroarch/borders/pegasus/atari2600.cfg new file mode 100644 index 00000000..af0de331 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/atari2600.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = atari2600.png diff --git a/emu-configs/retroarch/borders/pegasus/atari2600.png b/emu-configs/retroarch/borders/pegasus/atari2600.png new file mode 100644 index 00000000..d0af407e Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/atari2600.png differ diff --git a/emu-configs/retroarch/borders/pegasus/atari5200.cfg b/emu-configs/retroarch/borders/pegasus/atari5200.cfg new file mode 100644 index 00000000..f5fd7f02 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/atari5200.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = atari5200.png diff --git a/emu-configs/retroarch/borders/pegasus/atari5200.png b/emu-configs/retroarch/borders/pegasus/atari5200.png new file mode 100644 index 00000000..db3b773b Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/atari5200.png differ diff --git a/emu-configs/retroarch/borders/pegasus/atari7800.cfg b/emu-configs/retroarch/borders/pegasus/atari7800.cfg new file mode 100644 index 00000000..1757bb5d --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/atari7800.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = atari7800.png diff --git a/emu-configs/retroarch/borders/pegasus/atari7800.png b/emu-configs/retroarch/borders/pegasus/atari7800.png new file mode 100644 index 00000000..2cd572c0 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/atari7800.png differ diff --git a/emu-configs/retroarch/borders/pegasus/atari800.cfg b/emu-configs/retroarch/borders/pegasus/atari800.cfg new file mode 100644 index 00000000..c16d5c8c --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/atari800.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = atari800.png diff --git a/emu-configs/retroarch/borders/pegasus/atari800.png b/emu-configs/retroarch/borders/pegasus/atari800.png new file mode 100644 index 00000000..edfaff21 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/atari800.png differ diff --git a/emu-configs/retroarch/borders/pegasus/atarijaguar.cfg b/emu-configs/retroarch/borders/pegasus/atarijaguar.cfg new file mode 100644 index 00000000..37938b3d --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/atarijaguar.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = atarijaguar.png diff --git a/emu-configs/retroarch/borders/pegasus/atarijaguar.png b/emu-configs/retroarch/borders/pegasus/atarijaguar.png new file mode 100644 index 00000000..e5991127 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/atarijaguar.png differ diff --git a/emu-configs/retroarch/borders/pegasus/atarist.cfg b/emu-configs/retroarch/borders/pegasus/atarist.cfg new file mode 100644 index 00000000..a4312025 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/atarist.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = atarist.png diff --git a/emu-configs/retroarch/borders/pegasus/atarist.png b/emu-configs/retroarch/borders/pegasus/atarist.png new file mode 100644 index 00000000..557d057b Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/atarist.png differ diff --git a/emu-configs/retroarch/borders/pegasus/channelf.png b/emu-configs/retroarch/borders/pegasus/channelf.png new file mode 100644 index 00000000..fd06f0ac Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/channelf.png differ diff --git a/emu-configs/retroarch/borders/pegasus/colecovision.png b/emu-configs/retroarch/borders/pegasus/colecovision.png new file mode 100644 index 00000000..ca8222e0 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/colecovision.png differ diff --git a/emu-configs/retroarch/borders/pegasus/dreamcast.png b/emu-configs/retroarch/borders/pegasus/dreamcast.png new file mode 100644 index 00000000..a34aaddf Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/dreamcast.png differ diff --git a/emu-configs/retroarch/borders/pegasus/fmtowns.cfg b/emu-configs/retroarch/borders/pegasus/fmtowns.cfg new file mode 100644 index 00000000..52691471 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/fmtowns.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = fmtowns.png diff --git a/emu-configs/retroarch/borders/pegasus/fmtowns.png b/emu-configs/retroarch/borders/pegasus/fmtowns.png new file mode 100644 index 00000000..ee6e467b Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/fmtowns.png differ diff --git a/emu-configs/retroarch/borders/pegasus/gamecube.png b/emu-configs/retroarch/borders/pegasus/gamecube.png new file mode 100644 index 00000000..6e7874d3 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/gamecube.png differ diff --git a/emu-configs/retroarch/borders/pegasus/gb.cfg b/emu-configs/retroarch/borders/pegasus/gb.cfg new file mode 100644 index 00000000..9abd9cb6 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/gb.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = gb.png diff --git a/emu-configs/retroarch/borders/pegasus/gb.png b/emu-configs/retroarch/borders/pegasus/gb.png new file mode 100644 index 00000000..be05ed22 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/gb.png differ diff --git a/emu-configs/retroarch/borders/pegasus/gba.cfg b/emu-configs/retroarch/borders/pegasus/gba.cfg new file mode 100644 index 00000000..23621d24 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/gba.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = gba.png diff --git a/emu-configs/retroarch/borders/pegasus/gba.png b/emu-configs/retroarch/borders/pegasus/gba.png new file mode 100644 index 00000000..4a4f39f7 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/gba.png differ diff --git a/emu-configs/retroarch/borders/pegasus/gbc.cfg b/emu-configs/retroarch/borders/pegasus/gbc.cfg new file mode 100644 index 00000000..9c3a534b --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/gbc.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = gbc.png diff --git a/emu-configs/retroarch/borders/pegasus/gbc.png b/emu-configs/retroarch/borders/pegasus/gbc.png new file mode 100644 index 00000000..6afb7370 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/gbc.png differ diff --git a/emu-configs/retroarch/borders/pegasus/genesis.cfg b/emu-configs/retroarch/borders/pegasus/genesis.cfg new file mode 100644 index 00000000..a93c6d50 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/genesis.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = megadrive.png diff --git a/emu-configs/retroarch/borders/pegasus/gg-integer.png b/emu-configs/retroarch/borders/pegasus/gg-integer.png new file mode 100644 index 00000000..3131cdb3 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/gg-integer.png differ diff --git a/emu-configs/retroarch/borders/pegasus/gg.cfg b/emu-configs/retroarch/borders/pegasus/gg.cfg new file mode 100644 index 00000000..1e6cf921 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/gg.cfg @@ -0,0 +1,7 @@ +overlays = 1 + +overlay0_overlay = gg-integer.png + +overlay0_full_screen = true + +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/pegasus/gx4000.png b/emu-configs/retroarch/borders/pegasus/gx4000.png new file mode 100644 index 00000000..1cd61844 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/gx4000.png differ diff --git a/emu-configs/retroarch/borders/pegasus/intellivision.png b/emu-configs/retroarch/borders/pegasus/intellivision.png new file mode 100644 index 00000000..d88ac07c Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/intellivision.png differ diff --git a/emu-configs/retroarch/borders/pegasus/markIII.png b/emu-configs/retroarch/borders/pegasus/markIII.png new file mode 100644 index 00000000..d43cd316 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/markIII.png differ diff --git a/emu-configs/retroarch/borders/pegasus/mastersystem.cfg b/emu-configs/retroarch/borders/pegasus/mastersystem.cfg new file mode 100644 index 00000000..b7b3b26a --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/mastersystem.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = mastersystem.png diff --git a/emu-configs/retroarch/borders/pegasus/mastersystem.png b/emu-configs/retroarch/borders/pegasus/mastersystem.png new file mode 100644 index 00000000..97fe72d5 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/mastersystem.png differ diff --git a/emu-configs/retroarch/borders/pegasus/megadrive.cfg b/emu-configs/retroarch/borders/pegasus/megadrive.cfg new file mode 100644 index 00000000..a93c6d50 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/megadrive.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = megadrive.png diff --git a/emu-configs/retroarch/borders/pegasus/megadrive.png b/emu-configs/retroarch/borders/pegasus/megadrive.png new file mode 100644 index 00000000..78c5487e Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/megadrive.png differ diff --git a/emu-configs/retroarch/borders/pegasus/msx.png b/emu-configs/retroarch/borders/pegasus/msx.png new file mode 100644 index 00000000..7fd6f670 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/msx.png differ diff --git a/emu-configs/retroarch/borders/pegasus/msx2.png b/emu-configs/retroarch/borders/pegasus/msx2.png new file mode 100644 index 00000000..c3f6b421 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/msx2.png differ diff --git a/emu-configs/retroarch/borders/pegasus/n64.png b/emu-configs/retroarch/borders/pegasus/n64.png new file mode 100644 index 00000000..bf5cfea8 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/n64.png differ diff --git a/emu-configs/retroarch/borders/pegasus/neogeo.cfg b/emu-configs/retroarch/borders/pegasus/neogeo.cfg new file mode 100644 index 00000000..65408505 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/neogeo.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = neogeo.png diff --git a/emu-configs/retroarch/borders/pegasus/neogeo.png b/emu-configs/retroarch/borders/pegasus/neogeo.png new file mode 100644 index 00000000..aa65c06a Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/neogeo.png differ diff --git a/emu-configs/retroarch/borders/pegasus/neogeocd.cfg b/emu-configs/retroarch/borders/pegasus/neogeocd.cfg new file mode 100644 index 00000000..7dd3c0c2 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/neogeocd.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = neogeocd.png diff --git a/emu-configs/retroarch/borders/pegasus/neogeocd.png b/emu-configs/retroarch/borders/pegasus/neogeocd.png new file mode 100644 index 00000000..963e8ee0 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/neogeocd.png differ diff --git a/emu-configs/retroarch/borders/pegasus/neogeopocket.png b/emu-configs/retroarch/borders/pegasus/neogeopocket.png new file mode 100644 index 00000000..10fcd677 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/neogeopocket.png differ diff --git a/emu-configs/retroarch/borders/pegasus/nes.cfg b/emu-configs/retroarch/borders/pegasus/nes.cfg new file mode 100644 index 00000000..fdd8783e --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/nes.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = nes.png diff --git a/emu-configs/retroarch/borders/pegasus/nes.png b/emu-configs/retroarch/borders/pegasus/nes.png new file mode 100644 index 00000000..294ee137 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/nes.png differ diff --git a/emu-configs/retroarch/borders/pegasus/ngp.cfg b/emu-configs/retroarch/borders/pegasus/ngp.cfg new file mode 100644 index 00000000..f2ed0f55 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ngp.cfg @@ -0,0 +1,7 @@ +overlays = 1 + +overlay0_overlay = neogeopocket.png + +overlay0_full_screen = true + +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/pegasus/ngpc.cfg b/emu-configs/retroarch/borders/pegasus/ngpc.cfg new file mode 100644 index 00000000..f2ed0f55 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ngpc.cfg @@ -0,0 +1,7 @@ +overlays = 1 + +overlay0_overlay = neogeopocket.png + +overlay0_full_screen = true + +overlay0_descs = 0 diff --git a/emu-configs/retroarch/borders/pegasus/odyssey2.png b/emu-configs/retroarch/borders/pegasus/odyssey2.png new file mode 100644 index 00000000..9c49308c Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/odyssey2.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pc.cfg b/emu-configs/retroarch/borders/pegasus/pc.cfg new file mode 100644 index 00000000..29bc7fe4 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pc.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pc.png diff --git a/emu-configs/retroarch/borders/pegasus/pc.png b/emu-configs/retroarch/borders/pegasus/pc.png new file mode 100644 index 00000000..12cea3ec Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pc.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pc88.cfg b/emu-configs/retroarch/borders/pegasus/pc88.cfg new file mode 100644 index 00000000..26098b1c --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pc88.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pc88.png diff --git a/emu-configs/retroarch/borders/pegasus/pc88.png b/emu-configs/retroarch/borders/pegasus/pc88.png new file mode 100644 index 00000000..318d1cd9 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pc88.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pc98.cfg b/emu-configs/retroarch/borders/pegasus/pc98.cfg new file mode 100644 index 00000000..98950ebb --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pc98.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pc98.png diff --git a/emu-configs/retroarch/borders/pegasus/pc98.png b/emu-configs/retroarch/borders/pegasus/pc98.png new file mode 100644 index 00000000..7c359dcb Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pc98.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pcengine.cfg b/emu-configs/retroarch/borders/pegasus/pcengine.cfg new file mode 100644 index 00000000..eafde766 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pcengine.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pcengine.png diff --git a/emu-configs/retroarch/borders/pegasus/pcengine.png b/emu-configs/retroarch/borders/pegasus/pcengine.png new file mode 100644 index 00000000..e94679bc Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pcengine.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pcenginecd.cfg b/emu-configs/retroarch/borders/pegasus/pcenginecd.cfg new file mode 100644 index 00000000..cf35c296 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pcenginecd.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pcenginecd.png diff --git a/emu-configs/retroarch/borders/pegasus/pcenginecd.png b/emu-configs/retroarch/borders/pegasus/pcenginecd.png new file mode 100644 index 00000000..39069f5d Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pcenginecd.png differ diff --git a/emu-configs/retroarch/borders/pegasus/pcfx.cfg b/emu-configs/retroarch/borders/pegasus/pcfx.cfg new file mode 100644 index 00000000..8536af82 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/pcfx.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = pcfx.png diff --git a/emu-configs/retroarch/borders/pegasus/pcfx.png b/emu-configs/retroarch/borders/pegasus/pcfx.png new file mode 100644 index 00000000..e3632b2a Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/pcfx.png differ diff --git a/emu-configs/retroarch/borders/pegasus/ps2.cfg b/emu-configs/retroarch/borders/pegasus/ps2.cfg new file mode 100644 index 00000000..be88f178 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ps2.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = ps2.png diff --git a/emu-configs/retroarch/borders/pegasus/ps2.png b/emu-configs/retroarch/borders/pegasus/ps2.png new file mode 100644 index 00000000..15a26a93 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/ps2.png differ diff --git a/emu-configs/retroarch/borders/pegasus/psx.cfg b/emu-configs/retroarch/borders/pegasus/psx.cfg new file mode 100644 index 00000000..83c53762 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/psx.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = psx.png diff --git a/emu-configs/retroarch/borders/pegasus/psx.png b/emu-configs/retroarch/borders/pegasus/psx.png new file mode 100644 index 00000000..4f670cec Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/psx.png differ diff --git a/emu-configs/retroarch/borders/pegasus/saturn.cfg b/emu-configs/retroarch/borders/pegasus/saturn.cfg new file mode 100644 index 00000000..063fdb27 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/saturn.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = saturn.png diff --git a/emu-configs/retroarch/borders/pegasus/saturn.png b/emu-configs/retroarch/borders/pegasus/saturn.png new file mode 100644 index 00000000..375b24e6 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/saturn.png differ diff --git a/emu-configs/retroarch/borders/pegasus/scummvm.png b/emu-configs/retroarch/borders/pegasus/scummvm.png new file mode 100644 index 00000000..6642e6ef Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/scummvm.png differ diff --git a/emu-configs/retroarch/borders/pegasus/sega32x.cfg b/emu-configs/retroarch/borders/pegasus/sega32x.cfg new file mode 100644 index 00000000..b28ede5a --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/sega32x.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = sega32x.png diff --git a/emu-configs/retroarch/borders/pegasus/sega32x.png b/emu-configs/retroarch/borders/pegasus/sega32x.png new file mode 100644 index 00000000..f3cf31f4 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/sega32x.png differ diff --git a/emu-configs/retroarch/borders/pegasus/segacd.cfg b/emu-configs/retroarch/borders/pegasus/segacd.cfg new file mode 100644 index 00000000..05707de1 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/segacd.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = segacd.png diff --git a/emu-configs/retroarch/borders/pegasus/segacd.png b/emu-configs/retroarch/borders/pegasus/segacd.png new file mode 100644 index 00000000..c53780d6 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/segacd.png differ diff --git a/emu-configs/retroarch/borders/pegasus/sg1000.cfg b/emu-configs/retroarch/borders/pegasus/sg1000.cfg new file mode 100644 index 00000000..72375cb7 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/sg1000.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = sg1000.png diff --git a/emu-configs/retroarch/borders/pegasus/sg1000.png b/emu-configs/retroarch/borders/pegasus/sg1000.png new file mode 100644 index 00000000..c51136ce Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/sg1000.png differ diff --git a/emu-configs/retroarch/borders/pegasus/sgb.cfg b/emu-configs/retroarch/borders/pegasus/sgb.cfg new file mode 100644 index 00000000..bca410f9 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/sgb.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = sgb.png diff --git a/emu-configs/retroarch/borders/pegasus/sgb.png b/emu-configs/retroarch/borders/pegasus/sgb.png new file mode 100644 index 00000000..cac80b6b Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/sgb.png differ diff --git a/emu-configs/retroarch/borders/pegasus/snes.cfg b/emu-configs/retroarch/borders/pegasus/snes.cfg new file mode 100644 index 00000000..9fb1ed7f --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/snes.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = snes.png diff --git a/emu-configs/retroarch/borders/pegasus/snes.png b/emu-configs/retroarch/borders/pegasus/snes.png new file mode 100644 index 00000000..9c9d12f3 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/snes.png differ diff --git a/emu-configs/retroarch/borders/pegasus/snes87.cfg b/emu-configs/retroarch/borders/pegasus/snes87.cfg new file mode 100644 index 00000000..65a6245e --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/snes87.cfg @@ -0,0 +1,7 @@ +overlays = 1 + +overlay0_overlay = SNES87.png + +overlay0_full_screen = true + +overlay0_descs = 0 \ No newline at end of file diff --git a/emu-configs/retroarch/borders/pegasus/supergrafx.png b/emu-configs/retroarch/borders/pegasus/supergrafx.png new file mode 100644 index 00000000..5bd5ab0f Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/supergrafx.png differ diff --git a/emu-configs/retroarch/borders/pegasus/thomson.cfg b/emu-configs/retroarch/borders/pegasus/thomson.cfg new file mode 100644 index 00000000..19335607 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/thomson.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = thomson.png diff --git a/emu-configs/retroarch/borders/pegasus/thomson.png b/emu-configs/retroarch/borders/pegasus/thomson.png new file mode 100644 index 00000000..55210e3d Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/thomson.png differ diff --git a/emu-configs/retroarch/borders/pegasus/ti99.cfg b/emu-configs/retroarch/borders/pegasus/ti99.cfg new file mode 100644 index 00000000..e084c7e1 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/ti99.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = ti99.png diff --git a/emu-configs/retroarch/borders/pegasus/ti99.png b/emu-configs/retroarch/borders/pegasus/ti99.png new file mode 100644 index 00000000..e69e8992 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/ti99.png differ diff --git a/emu-configs/retroarch/borders/pegasus/wswanc.cfg b/emu-configs/retroarch/borders/pegasus/wswanc.cfg new file mode 100644 index 00000000..444be36a --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/wswanc.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = wswanc.png diff --git a/emu-configs/retroarch/borders/pegasus/wswanc.png b/emu-configs/retroarch/borders/pegasus/wswanc.png new file mode 100644 index 00000000..3e401654 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/wswanc.png differ diff --git a/emu-configs/retroarch/borders/pegasus/x1.png b/emu-configs/retroarch/borders/pegasus/x1.png new file mode 100644 index 00000000..16f610d4 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/x1.png differ diff --git a/emu-configs/retroarch/borders/pegasus/x68000.cfg b/emu-configs/retroarch/borders/pegasus/x68000.cfg new file mode 100644 index 00000000..11cf5418 --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/x68000.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = x68000.png diff --git a/emu-configs/retroarch/borders/pegasus/x68000.png b/emu-configs/retroarch/borders/pegasus/x68000.png new file mode 100644 index 00000000..01dfa7f2 Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/x68000.png differ diff --git a/emu-configs/retroarch/borders/pegasus/zxspectrum.cfg b/emu-configs/retroarch/borders/pegasus/zxspectrum.cfg new file mode 100644 index 00000000..feb455bf --- /dev/null +++ b/emu-configs/retroarch/borders/pegasus/zxspectrum.cfg @@ -0,0 +1,4 @@ +overlays = 1 +overlay0_full_screen = true +overlay0_descs = 0 +overlay0_overlay = zxspectrum.png diff --git a/emu-configs/retroarch/borders/pegasus/zxspectrum.png b/emu-configs/retroarch/borders/pegasus/zxspectrum.png new file mode 100644 index 00000000..0dd36b7c Binary files /dev/null and b/emu-configs/retroarch/borders/pegasus/zxspectrum.png differ diff --git a/emu-configs/retroarch/retroarch-core-options.cfg b/emu-configs/retroarch/retroarch-core-options.cfg index 6be315ae..06420de7 100644 --- a/emu-configs/retroarch/retroarch-core-options.cfg +++ b/emu-configs/retroarch/retroarch-core-options.cfg @@ -401,7 +401,7 @@ melonds_screen_gap = "0" melonds_screen_layout = "Top/Bottom" melonds_swapscreen_mode = "Toggle" melonds_threaded_renderer = "disabled" -melonds_touch_mode = "enabled" +melonds_touch_mode = "Touch" mgba_allow_opposing_directions = "no" mgba_audio_low_pass_filter = "disabled" mgba_audio_low_pass_range = "60" @@ -597,3 +597,4 @@ ppsspp_texture_scaling_level = "Off" ppsspp_texture_scaling_type = "xbrz" ppsspp_texture_shader = "Off" ppsspp_vertex_cache = "disabled" +swanstation_GPU_Renderer = "Vulkan" \ No newline at end of file diff --git a/emu-configs/retroarch/retroarch.cfg b/emu-configs/retroarch/retroarch.cfg index 78a223f0..3bda1f75 100644 --- a/emu-configs/retroarch/retroarch.cfg +++ b/emu-configs/retroarch/retroarch.cfg @@ -1,6 +1,6 @@ accessibility_enable = "false" accessibility_narrator_speech_speed = "5" -ai_service_enable = "true" +ai_service_enable = "false" ai_service_mode = "1" ai_service_pause = "false" ai_service_source_lang = "0" @@ -21,6 +21,7 @@ audio_enable_menu_bgm = "false" audio_enable_menu_cancel = "false" audio_enable_menu_notice = "false" audio_enable_menu_ok = "false" +audio_enable_menu_scroll = "false" audio_fastforward_mute = "false" audio_filter_dir = "/app/lib/retroarch/filters/audio" audio_latency = "64" @@ -56,6 +57,10 @@ camera_device = "" camera_driver = "video4linux2" cheat_database_path = "/app/share/libretro/database/cht" check_firmware_before_loading = "false" +cheevos_appearance_anchor = "0" +cheevos_appearance_padding_auto = "true" +cheevos_appearance_padding_h = "0.000000" +cheevos_appearance_padding_v = "0.000000" cheevos_auto_screenshot = "true" cheevos_badges_enable = "false" cheevos_challenge_indicators = "true" @@ -71,6 +76,10 @@ cheevos_token = "" cheevos_unlock_sound_enable = "true" cheevos_username = "" cheevos_verbose_enable = "true" +cheevos_visibility_account = "true" +cheevos_visibility_mastery = "true" +cheevos_visibility_summary = "1" +cheevos_visibility_unlock = "true" config_save_on_exit = "false" content_database_path = "/app/share/libretro/database/rdb" content_favorites_directory = "default" @@ -101,7 +110,8 @@ content_show_video = "true" content_video_directory = "default" content_video_history_path = "/var/config/retroarch/content_video_history.lpl" core_assets_directory = "/var/config/retroarch/downloads" -core_info_cache_enable = "true" +core_info_cache_enable = "false" +core_info_savestate_bypass = "false" core_option_category_enable = "true" core_options_path = "" core_set_supports_no_game_enable = "true" @@ -149,13 +159,13 @@ gamemode_enable = "false" gamma_correction = "0" global_core_options = "true" history_list_enable = "true" -input_ai_service = "nul" +input_ai_service = "i" input_ai_service_axis = "nul" input_ai_service_btn = "nul" input_ai_service_mbtn = "nul" input_analog_deadzone = "0.000000" input_analog_sensitivity = "1.000000" -input_audio_mute = "f9" +input_audio_mute = "nul" input_audio_mute_axis = "nul" input_audio_mute_btn = "nul" input_audio_mute_mbtn = "nul" @@ -165,15 +175,15 @@ input_autodetect_enable = "true" input_axis_threshold = "0.500000" input_bind_hold = "2" input_bind_timeout = "5" -input_cheat_index_minus = "t" +input_cheat_index_minus = "f" input_cheat_index_minus_axis = "nul" input_cheat_index_minus_btn = "nul" input_cheat_index_minus_mbtn = "nul" -input_cheat_index_plus = "y" +input_cheat_index_plus = "g" input_cheat_index_plus_axis = "nul" input_cheat_index_plus_btn = "nul" input_cheat_index_plus_mbtn = "nul" -input_cheat_toggle = "u" +input_cheat_toggle = "c" input_cheat_toggle_axis = "nul" input_cheat_toggle_btn = "nul" input_cheat_toggle_mbtn = "nul" @@ -183,7 +193,7 @@ input_close_content_btn = "nul" input_close_content_mbtn = "nul" input_descriptor_hide_unbound = "false" input_descriptor_label_show = "true" -input_desktop_menu_toggle = "f5" +input_desktop_menu_toggle = "nul" input_desktop_menu_toggle_axis = "nul" input_desktop_menu_toggle_btn = "nul" input_desktop_menu_toggle_mbtn = "nul" @@ -207,7 +217,7 @@ input_disk_eject_toggle = "nul" input_disk_eject_toggle_axis = "nul" input_disk_eject_toggle_btn = "nul" input_disk_eject_toggle_mbtn = "nul" -input_disk_next = "nul" +input_disk_next = "d" input_disk_next_axis = "nul" input_disk_next_btn = "nul" input_disk_next_mbtn = "nul" @@ -217,49 +227,53 @@ input_disk_prev_btn = "nul" input_disk_prev_mbtn = "nul" input_driver = "x" input_duty_cycle = "3" -input_enable_hotkey = "nul" +input_enable_hotkey = "ctrl" input_enable_hotkey_axis = "nul" -input_enable_hotkey_btn = "4" +input_enable_hotkey_btn = "nul" input_enable_hotkey_mbtn = "nul" -input_exit_emulator = "escape" +input_exit_emulator = "q" input_exit_emulator_axis = "nul" input_exit_emulator_btn = "nul" input_exit_emulator_mbtn = "nul" -input_fps_toggle = "f3" +input_fps_toggle = "nul" input_fps_toggle_axis = "nul" input_fps_toggle_btn = "nul" input_fps_toggle_mbtn = "nul" -input_frame_advance = "k" +input_frame_advance = "nul" input_frame_advance_axis = "nul" input_frame_advance_btn = "nul" input_frame_advance_mbtn = "nul" -input_game_focus_toggle = "scroll_lock" +input_game_focus_toggle = "nul" input_game_focus_toggle_axis = "nul" input_game_focus_toggle_btn = "nul" input_game_focus_toggle_mbtn = "nul" -input_grab_mouse_toggle = "f11" +input_grab_mouse_toggle = "nul" input_grab_mouse_toggle_axis = "nul" input_grab_mouse_toggle_btn = "nul" input_grab_mouse_toggle_mbtn = "nul" -input_hold_fast_forward = "l" -input_hold_fast_forward_axis = "+5" +input_halt_replay = "nul" +input_halt_replay_axis = "nul" +input_halt_replay_btn = "nul" +input_halt_replay_mbtn = "nul" +input_hold_fast_forward = "add" +input_hold_fast_forward_axis = "nul" input_hold_fast_forward_btn = "nul" input_hold_fast_forward_mbtn = "nul" -input_hold_slowmotion = "e" +input_hold_slowmotion = "nul" input_hold_slowmotion_axis = "nul" input_hold_slowmotion_btn = "nul" input_hold_slowmotion_mbtn = "nul" input_hotkey_block_delay = "5" input_joypad_driver = "sdl2" input_keyboard_layout = "" -input_load_state = "f4" +input_load_state = "a" input_load_state_axis = "nul" -input_load_state_btn = "9" +input_load_state_btn = "nul" input_load_state_mbtn = "nul" input_max_users = "8" -input_menu_toggle = "f1" +input_menu_toggle = "m" input_menu_toggle_axis = "nul" -input_menu_toggle_btn = "3" +input_menu_toggle_btn = "nul" input_menu_toggle_gamepad_combo = "2" input_menu_toggle_mbtn = "nul" input_movie_record_toggle = "o" @@ -270,11 +284,11 @@ input_netplay_fade_chat_toggle = "nul" input_netplay_fade_chat_toggle_axis = "nul" input_netplay_fade_chat_toggle_btn = "nul" input_netplay_fade_chat_toggle_mbtn = "nul" -input_netplay_game_watch = "i" +input_netplay_game_watch = "nul" input_netplay_game_watch_axis = "nul" input_netplay_game_watch_btn = "nul" input_netplay_game_watch_mbtn = "nul" -input_netplay_host_toggle = "nul" +input_netplay_host_toggle = "h" input_netplay_host_toggle_axis = "nul" input_netplay_host_toggle_btn = "nul" input_netplay_host_toggle_mbtn = "nul" @@ -282,7 +296,7 @@ input_netplay_ping_toggle = "nul" input_netplay_ping_toggle_axis = "nul" input_netplay_ping_toggle_btn = "nul" input_netplay_ping_toggle_mbtn = "nul" -input_netplay_player_chat = "tilde" +input_netplay_player_chat = "nul" input_netplay_player_chat_axis = "nul" input_netplay_player_chat_btn = "nul" input_netplay_player_chat_mbtn = "nul" @@ -292,11 +306,13 @@ input_osk_toggle_axis = "nul" input_osk_toggle_btn = "nul" input_osk_toggle_mbtn = "nul" input_overlay = "" +input_overlay_abxy_diagonal_sensitivity = "50" input_overlay_aspect_adjust_landscape = "0.000000" input_overlay_aspect_adjust_portrait = "0.000000" input_overlay_auto_rotate = "false" input_overlay_auto_scale = "false" input_overlay_behind_menu = "true" +input_overlay_dpad_diagonal_sensitivity = "80" input_overlay_enable = "true" input_overlay_enable_autopreferred = "true" input_overlay_hide_in_menu = "false" @@ -321,8 +337,12 @@ input_overlay_y_separation_landscape = "0.000000" input_overlay_y_separation_portrait = "0.000000" input_pause_toggle = "p" input_pause_toggle_axis = "nul" -input_pause_toggle_btn = "1" +input_pause_toggle_btn = "nul" input_pause_toggle_mbtn = "nul" +input_play_replay = "nul" +input_play_replay_axis = "nul" +input_play_replay_btn = "nul" +input_play_replay_mbtn = "nul" input_player10_a = "nul" input_player10_a_axis = "nul" input_player10_a_btn = "nul" @@ -2676,19 +2696,35 @@ input_player9_y_axis = "nul" input_player9_y_btn = "nul" input_player9_y_mbtn = "nul" input_poll_type_behavior = "2" +input_preempt_toggle = "nul" +input_preempt_toggle_axis = "nul" +input_preempt_toggle_btn = "nul" +input_preempt_toggle_mbtn = "nul" input_quit_gamepad_combo = "4" -input_recording_toggle = "nul" +input_record_replay = "nul" +input_record_replay_axis = "nul" +input_record_replay_btn = "nul" +input_record_replay_mbtn = "nul" +input_recording_toggle = "v" input_recording_toggle_axis = "nul" input_recording_toggle_btn = "nul" input_recording_toggle_mbtn = "nul" input_remap_binds_enable = "true" input_remapping_directory = "/var/config/retroarch/config/remaps" -input_reset = "h" +input_replay_slot_decrease = "nul" +input_replay_slot_decrease_axis = "nul" +input_replay_slot_decrease_btn = "nul" +input_replay_slot_decrease_mbtn = "nul" +input_replay_slot_increase = "nul" +input_replay_slot_increase_axis = "nul" +input_replay_slot_increase_btn = "nul" +input_replay_slot_increase_mbtn = "nul" +input_reset = "r" input_reset_axis = "nul" input_reset_btn = "nul" input_reset_mbtn = "nul" -input_rewind = "r" -input_rewind_axis = "+4" +input_rewind = "subtract" +input_rewind_axis = "nul" input_rewind_btn = "nul" input_rewind_mbtn = "nul" input_rumble_gain = "100" @@ -2696,40 +2732,44 @@ input_runahead_toggle = "nul" input_runahead_toggle_axis = "nul" input_runahead_toggle_btn = "nul" input_runahead_toggle_mbtn = "nul" -input_save_state = "f2" +input_save_state = "s" input_save_state_axis = "nul" -input_save_state_btn = "10" +input_save_state_btn = "nul" input_save_state_mbtn = "nul" -input_screenshot = "f8" +input_screenshot = "x" input_screenshot_axis = "nul" -input_screenshot_btn = "0" +input_screenshot_btn = "nul" input_screenshot_mbtn = "nul" input_send_debug_info = "f10" input_send_debug_info_axis = "nul" input_send_debug_info_btn = "nul" input_send_debug_info_mbtn = "nul" input_sensors_enable = "true" -input_shader_next = "m" +input_shader_next = "nul" input_shader_next_axis = "nul" input_shader_next_btn = "nul" input_shader_next_mbtn = "nul" -input_shader_prev = "n" +input_shader_prev = "nul" input_shader_prev_axis = "nul" input_shader_prev_btn = "nul" input_shader_prev_mbtn = "nul" -input_state_slot_decrease = "f6" +input_shader_toggle = "nul" +input_shader_toggle_axis = "nul" +input_shader_toggle_btn = "nul" +input_shader_toggle_mbtn = "nul" +input_state_slot_decrease = "j" input_state_slot_decrease_axis = "nul" -input_state_slot_decrease_btn = "12" +input_state_slot_decrease_btn = "nul" input_state_slot_decrease_mbtn = "nul" -input_state_slot_increase = "f7" +input_state_slot_increase = "k" input_state_slot_increase_axis = "nul" -input_state_slot_increase_btn = "11" +input_state_slot_increase_btn = "nul" input_state_slot_increase_mbtn = "nul" input_streaming_toggle = "nul" input_streaming_toggle_axis = "nul" input_streaming_toggle_btn = "nul" input_streaming_toggle_mbtn = "nul" -input_toggle_fast_forward = "space" +input_toggle_fast_forward = "nul" input_toggle_fast_forward_axis = "nul" input_toggle_fast_forward_btn = "nul" input_toggle_fast_forward_mbtn = "nul" @@ -2753,11 +2793,11 @@ input_touch_scale = "1" input_turbo_default_button = "0" input_turbo_mode = "0" input_turbo_period = "6" -input_volume_down = "subtract" +input_volume_down = "nul" input_volume_down_axis = "nul" input_volume_down_btn = "nul" input_volume_down_mbtn = "nul" -input_volume_up = "add" +input_volume_up = "nul" input_volume_up_axis = "nul" input_volume_up_btn = "nul" input_volume_up_mbtn = "nul" @@ -2785,6 +2825,7 @@ materialui_menu_color_theme = "9" materialui_menu_transition_animation = "0" materialui_playlist_icons_enable = "true" materialui_show_nav_bar = "true" +materialui_switch_icons = "true" materialui_thumbnail_background_enable = "true" materialui_thumbnail_view_landscape = "2" materialui_thumbnail_view_portrait = "1" @@ -2812,6 +2853,7 @@ menu_navigation_browser_filter_supported_extensions_enable = "true" menu_navigation_wraparound_enable = "true" menu_pause_libretro = "true" menu_pointer_enable = "true" +menu_remember_selection = "1" menu_rgui_full_width_layout = "true" menu_rgui_shadows = "false" menu_rgui_transparency = "true" @@ -2845,6 +2887,7 @@ menu_show_shutdown = "true" menu_show_sublabels = "true" menu_show_video_layout = "true" menu_swap_ok_cancel_buttons = "true" +menu_swap_scroll_buttons = "false" menu_throttle_framerate = "true" menu_thumbnail_upscale_threshold = "0" menu_thumbnails = "3" @@ -2870,8 +2913,8 @@ menu_xmb_title_margin = "5" menu_xmb_title_margin_horizontal_offset = "0" menu_xmb_vertical_fade_factor = "100" midi_driver = "alsa" -midi_input = "Off" -midi_output = "Off" +midi_input = "OFF" +midi_output = "OFF" midi_volume = "100" netplay_allow_pausing = "false" netplay_allow_slaves = "true" @@ -2952,7 +2995,7 @@ notification_show_screenshot_duration = "0" notification_show_screenshot_flash = "0" notification_show_set_initial_disk = "true" notification_show_when_menu_is_alive = "false" -overlay_directory = "/app/retrodeck/overlays/borders" +overlay_directory = "/var/config/retroarch/overlays/borders" ozone_collapse_sidebar = "false" ozone_menu_color_theme = "1" ozone_scroll_content_metadata = "false" @@ -2960,6 +3003,7 @@ ozone_sort_after_truncate_playlist_name = "true" ozone_thumbnail_scale_factor = "1.000000" ozone_truncate_playlist_name = "true" pause_nonactive = "true" +pause_on_disconnect = "false" perfcnt_enable = "false" playlist_compression = "false" playlist_directory = "/var/config/retroarch/playlists" @@ -2975,6 +3019,8 @@ playlist_sort_alphabetical = "true" playlist_sublabel_last_played_style = "0" playlist_sublabel_runtime_type = "0" playlist_use_old_format = "false" +preemptive_frames_enable = "false" +preemptive_frames_hide_warnings = "false" quick_menu_show_add_to_favorites = "true" quick_menu_show_cheats = "true" quick_menu_show_close_content = "true" @@ -2984,6 +3030,7 @@ quick_menu_show_download_thumbnails = "true" quick_menu_show_information = "true" quick_menu_show_options = "true" quick_menu_show_recording = "true" +quick_menu_show_replay = "true" quick_menu_show_reset_core_association = "true" quick_menu_show_restart_content = "true" quick_menu_show_resume_content = "true" @@ -3005,6 +3052,10 @@ record_driver = "ffmpeg" recording_config_directory = "/var/config/retroarch/records_config" recording_output_directory = "/var/config/retroarch/records" remap_save_on_exit = "true" +replay_auto_index = "true" +replay_checkpoint_interval = "0" +replay_max_keep = "0" +replay_slot = "0" resampler_directory = "" rewind_buffer_size = "20971520" rewind_buffer_size_step = "10" @@ -3039,8 +3090,8 @@ save_file_compression = "false" savefile_directory = "RETRODECKHOMEDIR/saves" savefiles_in_content_dir = "false" savestate_auto_index = "false" -savestate_auto_load = "true" -savestate_auto_save = "true" +savestate_auto_load = "false" +savestate_auto_save = "false" savestate_directory = "RETRODECKHOMEDIR/states" savestate_file_compression = "true" savestate_max_keep = "0" @@ -3136,6 +3187,7 @@ video_layout_directory = "/var/config/retroarch/layouts" video_layout_enable = "true" video_layout_path = "" video_layout_selected_view = "0" +video_max_frame_latency = "1" video_max_swapchain_images = "3" video_message_color = "ffff00" video_message_pos_x = "0.050000" @@ -3154,7 +3206,7 @@ video_record_scale_factor = "1" video_record_threads = "2" video_refresh_rate = "60.000000" video_rotation = "0" -video_scale = "3.000000" +video_scale = "3" video_scale_integer = "false" video_scale_integer_overscale = "false" video_shader_delay = "0" @@ -3194,6 +3246,7 @@ xmb_font = "" xmb_layout = "0" xmb_menu_color_theme = "4" xmb_shadows_enable = "true" +xmb_switch_icons = "true" xmb_theme = "0" xmb_vertical_thumbnails = "false" -youtube_stream_key = "" \ No newline at end of file +youtube_stream_key = "" diff --git a/emu-configs/rpcs3/GuiConfigs/CurrentSettings.ini b/emu-configs/rpcs3/GuiConfigs/CurrentSettings.ini new file mode 100644 index 00000000..b4dba439 --- /dev/null +++ b/emu-configs/rpcs3/GuiConfigs/CurrentSettings.ini @@ -0,0 +1,50 @@ +[Config] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x1P\0\0\0}\0\0\x5\xb9\0\0\x3I\0\0\x1P\0\0\0\x9a\0\0\x5\xb9\0\0\x3I\0\0\0\0\0\0\0\0\a\x80\0\0\x1P\0\0\0\x9a\0\0\x5\xb9\0\0\x3I) + +[GameList] +hidden_list=@Invalid() +iconColor=@Variant(\0\0\0\x43\x1\xff\xff\xf0\xf0\xf0\xf0\xf0\xf0\0\0) +marginFactor=0.09 +textFactor=2 + +[Localization] +language=en + +[Logger] +ANSI_code=true +ERR_stack=true +level=4 +stack=true + +[Meta] +checkUpdateStart=false +currentStylesheet=Skyline (Nightfall) +discordState= +showDebugTab=false +useRichPresence=true + +[PadSettings] +geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\xb3\0\0\0\0\0\0\x4\xbf\0\0\x3\x7f\0\0\0\xb3\0\0\0\x1d\0\0\x4\xbf\0\0\x3\x7f\0\0\0\0\0\0\0\0\a\x80\0\0\0\xb3\0\0\0\x1d\0\0\x4\xbf\0\0\x3\x7f) + +[Shortcuts] +game_window_exit_fullscreen=null +game_window_gw_frame_limit=Ctrl+Z +game_window_log_mark=Alt+L +game_window_mouse_lock=Ctrl+L +game_window_pause_play=Ctrl+P +game_window_restart=Ctrl+R +game_window_rsx_capture=Alt+C +game_window_savestate=null +game_window_screenshot=Ctrl+X +game_window_toggle_fullscreen=Alt+Return +game_window_toggle_recording=Ctrl+V +main_window_exit_fullscreen=null +main_window_pause=Ctrl+P +main_window_refresh=Ctrl+F5 +main_window_restart=Ctrl+R +main_window_start=Ctrl+E +main_window_stop=Ctrl+Q +main_window_toggle_fullscreen=Ctrl+Return + +[main_window] +infoBoxEnabledWelcome=false \ No newline at end of file diff --git a/emu-configs/rpcs3/config.yml b/emu-configs/rpcs3/config.yml index b8555168..433d5c60 100644 --- a/emu-configs/rpcs3/config.yml +++ b/emu-configs/rpcs3/config.yml @@ -75,8 +75,10 @@ Video: Resolution: 1280x720 Aspect ratio: 16:9 Frame limit: Auto + Second Frame Limit: 0 MSAA: Auto Shader Mode: Async Shader Recompiler + Shader Precision: High Write Color Buffers: false Write Depth Buffer: false Read Color Buffers: false @@ -100,7 +102,6 @@ Video: Disable Vulkan Memory Allocator: false Use full RGB output range: true Strict Texture Flushing: false - Disable native float16 support: true Multithreaded RSX: false Relaxed ZCULL Sync: false Enable 3D: false @@ -120,14 +121,13 @@ Video: DECR memory layout: false Allow Host GPU Labels: false Disable MSL Fast Math: false - Software VkSemaphore: false + Output Scaling Mode: Bilinear Vulkan: - Adapter: llvmpipe (LLVM 12.0.1, 256 bits) + Adapter: AMD RADV VANGOGH Force FIFO present mode: false Force primitive restart flag: false - Force Disable Exclusive Fullscreen Mode: false + Exclusive Fullscreen Mode: Automatic Asynchronous Texture Streaming 2: false - Enable FidelityFX Super Resolution Upscaling: false FidelityFX CAS Sharpening Intensity: 50 Asynchronous Queue Scheduler: Fast Performance Overlay: @@ -152,51 +152,58 @@ Video: Body Background (hex): "#002339FF" Title Color (hex): "#F26C24FF" Title Background (hex): "#00000000" - Shader Compilation Hint: - Position X (px): 20 - Position Y (px): 690 Shader Loading Dialog: Allow custom background: true Darkening effect strength: 30 Blur effect strength: 0 Audio: Renderer: Cubeb - Audio provider: CellAudio + Audio Provider: CellAudio + RSXAudio Avport: HDMI 0 Dump to file: false Convert to 16 bit: false - Audio Channels: Downmix to Stereo + Audio Format: Stereo + Audio Formats: 0 + Audio Device: "@@@default@@@" Master Volume: 100 Enable Buffering: true Desired Audio Buffer Duration: 100 Enable Time Stretching: true + Disable Sampling Skip: false Time Stretching Threshold: 75 Microphone Type: "Null" Microphone Devices: "@@@@@@@@@@@@" Music Handler: Qt Input/Output: - Keyboard: "Null" + Keyboard: Basic Mouse: Basic Camera: "Null" Camera type: Unknown Camera flip: None Camera ID: Default - Move: "Null" + Move: Mouse Buzz emulated controller: "Null" Turntable emulated controller: "Null" GHLtar emulated controller: "Null" Pad handler mode: Single-threaded Pad handler sleep (microseconds): 1000 + Background input enabled: true + Show move cursor: false System: License Area: SCEE Language: English (US) Keyboard Type: English keyboard (US standard) Enter button assignment: Enter with cross Console time offset (s): 0 + PSID high: 0 + PSID low: 0 Net: Internet enabled: Disconnected IP address: 0.0.0.0 + Bind address: 0.0.0.0 DNS address: 8.8.8.8 IP swap list: "" + UPNP Enabled: false PSN status: Disconnected Savestate: Start Paused: false @@ -213,4 +220,6 @@ Miscellaneous: Use native user interface: true GDB Server: 127.0.0.1:2345 Silence All Logs: false - Window Title Format: "FPS: %F | %R | %V | %T [%t]" \ No newline at end of file + Window Title Format: "FPS: %F | %R | %V | %T [%t]" + Pause Emulation During Home Menu: true +Log: {} \ No newline at end of file diff --git a/emu-configs/rpcs3/evdev_positive_axis.yml b/emu-configs/rpcs3/evdev_positive_axis.yml new file mode 100644 index 00000000..61406623 --- /dev/null +++ b/emu-configs/rpcs3/evdev_positive_axis.yml @@ -0,0 +1,41 @@ +ABS_X: false +ABS_Y: false +ABS_Z: false +ABS_RX: false +ABS_RY: false +ABS_RZ: false +ABS_THROTTLE: false +ABS_RUDDER: false +ABS_WHEEL: false +ABS_GAS: false +ABS_BRAKE: false +ABS_HAT0X: false +ABS_HAT0Y: false +ABS_HAT1X: false +ABS_HAT1Y: false +ABS_HAT2X: false +ABS_HAT2Y: false +ABS_HAT3X: false +ABS_HAT3Y: false +ABS_PRESSURE: false +ABS_DISTANCE: false +ABS_TILT_X: false +ABS_TILT_Y: false +ABS_TOOL_WIDTH: false +ABS_VOLUME: false +ABS_MISC: false +ABS_MT_SLOT: false +ABS_MT_TOUCH_MAJOR: false +ABS_MT_TOUCH_MINOR: false +ABS_MT_WIDTH_MAJOR: false +ABS_MT_WIDTH_MINOR: false +ABS_MT_ORIENTATION: false +ABS_MT_POSITION_X: false +ABS_MT_POSITION_Y: false +ABS_MT_TOOL_TYPE: false +ABS_MT_BLOB_ID: false +ABS_MT_TRACKING_ID: false +ABS_MT_PRESSURE: false +ABS_MT_DISTANCE: false +ABS_MT_TOOL_X: false +ABS_MT_TOOL_Y: false \ No newline at end of file diff --git a/emu-configs/rpcs3/input_configs/active_profiles.yml b/emu-configs/rpcs3/input_configs/active_profiles.yml new file mode 100644 index 00000000..4f8b6181 --- /dev/null +++ b/emu-configs/rpcs3/input_configs/active_profiles.yml @@ -0,0 +1,2 @@ +Active Profiles: + global: Default \ No newline at end of file diff --git a/emu-configs/rpcs3/input_configs/global/Default.yml b/emu-configs/rpcs3/input_configs/global/Default.yml new file mode 100644 index 00000000..58f42cdf --- /dev/null +++ b/emu-configs/rpcs3/input_configs/global/Default.yml @@ -0,0 +1,546 @@ +Player 1 Input: + Handler: Evdev + Device: Microsoft X-Box 360 pad 0 + Config: + Left Stick Left: LX- + Left Stick Down: LY+ + Left Stick Right: LX+ + Left Stick Up: LY- + Right Stick Left: RX- + Right Stick Down: RY+ + Right Stick Right: RX+ + Right Stick Up: RY- + Start: Start + Select: Select + PS Button: Mode + Square: X + Cross: A + Circle: B + Triangle: Y + Left: Hat0 X- + Down: Hat0 Y+ + Right: Hat0 X+ + Up: Hat0 Y- + R1: TR + R2: RZ+ + R3: Thumb R + L1: TL + L2: LZ+ + L3: Thumb L + Motion Sensor X: + Axis: X + Mirrored: false + Shift: 0 + Motion Sensor Y: + Axis: Y + Mirrored: false + Shift: 0 + Motion Sensor Z: + Axis: Z + Mirrored: false + Shift: 0 + Motion Sensor G: + Axis: RY + Mirrored: false + Shift: 0 + Pressure Intensity Button: "" + Pressure Intensity Percent: 50 + Left Stick Multiplier: 100 + Right Stick Multiplier: 100 + Left Stick Deadzone: 30 + Right Stick Deadzone: 30 + Left Trigger Threshold: 0 + Right Trigger Threshold: 0 + Left Pad Squircling Factor: 5000 + Right Pad Squircling Factor: 5000 + Color Value R: 0 + Color Value G: 0 + Color Value B: 0 + Blink LED when battery is below 20%: true + Use LED as a battery indicator: false + LED battery indicator brightness: 50 + Player LED enabled: true + Enable Large Vibration Motor: true + Enable Small Vibration Motor: true + Switch Vibration Motors: false + Mouse Movement Mode: Relative + Mouse Deadzone X Axis: 60 + Mouse Deadzone Y Axis: 60 + Mouse Acceleration X Axis: 200 + Mouse Acceleration Y Axis: 250 + Left Stick Lerp Factor: 100 + Right Stick Lerp Factor: 100 + Analog Button Lerp Factor: 100 + Trigger Lerp Factor: 100 + Device Class Type: 0 + Vendor ID: 1356 + Product ID: 616 + Buddy Device: "" +Player 2 Input: + Handler: "Null" + Device: "Null" + Config: + Left Stick Left: "" + Left Stick Down: "" + Left Stick Right: "" + Left Stick Up: "" + Right Stick Left: "" + Right Stick Down: "" + Right Stick Right: "" + Right Stick Up: "" + Start: "" + Select: "" + PS Button: "" + Square: "" + Cross: "" + Circle: "" + Triangle: "" + Left: "" + Down: "" + Right: "" + Up: "" + R1: "" + R2: "" + R3: "" + L1: "" + L2: "" + L3: "" + Motion Sensor X: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Y: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Z: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor G: + Axis: "" + Mirrored: false + Shift: 0 + Pressure Intensity Button: "" + Pressure Intensity Percent: 50 + Left Stick Multiplier: 100 + Right Stick Multiplier: 100 + Left Stick Deadzone: 0 + Right Stick Deadzone: 0 + Left Trigger Threshold: 0 + Right Trigger Threshold: 0 + Left Pad Squircling Factor: 0 + Right Pad Squircling Factor: 0 + Color Value R: 0 + Color Value G: 0 + Color Value B: 0 + Blink LED when battery is below 20%: true + Use LED as a battery indicator: false + LED battery indicator brightness: 50 + Player LED enabled: true + Enable Large Vibration Motor: true + Enable Small Vibration Motor: true + Switch Vibration Motors: false + Mouse Movement Mode: Relative + Mouse Deadzone X Axis: 60 + Mouse Deadzone Y Axis: 60 + Mouse Acceleration X Axis: 200 + Mouse Acceleration Y Axis: 250 + Left Stick Lerp Factor: 100 + Right Stick Lerp Factor: 100 + Analog Button Lerp Factor: 100 + Trigger Lerp Factor: 100 + Device Class Type: 0 + Vendor ID: 0 + Product ID: 0 + Buddy Device: "Null" +Player 3 Input: + Handler: "Null" + Device: "Null" + Config: + Left Stick Left: "" + Left Stick Down: "" + Left Stick Right: "" + Left Stick Up: "" + Right Stick Left: "" + Right Stick Down: "" + Right Stick Right: "" + Right Stick Up: "" + Start: "" + Select: "" + PS Button: "" + Square: "" + Cross: "" + Circle: "" + Triangle: "" + Left: "" + Down: "" + Right: "" + Up: "" + R1: "" + R2: "" + R3: "" + L1: "" + L2: "" + L3: "" + Motion Sensor X: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Y: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Z: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor G: + Axis: "" + Mirrored: false + Shift: 0 + Pressure Intensity Button: "" + Pressure Intensity Percent: 50 + Left Stick Multiplier: 100 + Right Stick Multiplier: 100 + Left Stick Deadzone: 0 + Right Stick Deadzone: 0 + Left Trigger Threshold: 0 + Right Trigger Threshold: 0 + Left Pad Squircling Factor: 0 + Right Pad Squircling Factor: 0 + Color Value R: 0 + Color Value G: 0 + Color Value B: 0 + Blink LED when battery is below 20%: true + Use LED as a battery indicator: false + LED battery indicator brightness: 50 + Player LED enabled: true + Enable Large Vibration Motor: true + Enable Small Vibration Motor: true + Switch Vibration Motors: false + Mouse Movement Mode: Relative + Mouse Deadzone X Axis: 60 + Mouse Deadzone Y Axis: 60 + Mouse Acceleration X Axis: 200 + Mouse Acceleration Y Axis: 250 + Left Stick Lerp Factor: 100 + Right Stick Lerp Factor: 100 + Analog Button Lerp Factor: 100 + Trigger Lerp Factor: 100 + Device Class Type: 0 + Vendor ID: 0 + Product ID: 0 + Buddy Device: "Null" +Player 4 Input: + Handler: "Null" + Device: "Null" + Config: + Left Stick Left: "" + Left Stick Down: "" + Left Stick Right: "" + Left Stick Up: "" + Right Stick Left: "" + Right Stick Down: "" + Right Stick Right: "" + Right Stick Up: "" + Start: "" + Select: "" + PS Button: "" + Square: "" + Cross: "" + Circle: "" + Triangle: "" + Left: "" + Down: "" + Right: "" + Up: "" + R1: "" + R2: "" + R3: "" + L1: "" + L2: "" + L3: "" + Motion Sensor X: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Y: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Z: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor G: + Axis: "" + Mirrored: false + Shift: 0 + Pressure Intensity Button: "" + Pressure Intensity Percent: 50 + Left Stick Multiplier: 100 + Right Stick Multiplier: 100 + Left Stick Deadzone: 0 + Right Stick Deadzone: 0 + Left Trigger Threshold: 0 + Right Trigger Threshold: 0 + Left Pad Squircling Factor: 0 + Right Pad Squircling Factor: 0 + Color Value R: 0 + Color Value G: 0 + Color Value B: 0 + Blink LED when battery is below 20%: true + Use LED as a battery indicator: false + LED battery indicator brightness: 50 + Player LED enabled: true + Enable Large Vibration Motor: true + Enable Small Vibration Motor: true + Switch Vibration Motors: false + Mouse Movement Mode: Relative + Mouse Deadzone X Axis: 60 + Mouse Deadzone Y Axis: 60 + Mouse Acceleration X Axis: 200 + Mouse Acceleration Y Axis: 250 + Left Stick Lerp Factor: 100 + Right Stick Lerp Factor: 100 + Analog Button Lerp Factor: 100 + Trigger Lerp Factor: 100 + Device Class Type: 0 + Vendor ID: 0 + Product ID: 0 + Buddy Device: "Null" +Player 5 Input: + Handler: "Null" + Device: "Null" + Config: + Left Stick Left: "" + Left Stick Down: "" + Left Stick Right: "" + Left Stick Up: "" + Right Stick Left: "" + Right Stick Down: "" + Right Stick Right: "" + Right Stick Up: "" + Start: "" + Select: "" + PS Button: "" + Square: "" + Cross: "" + Circle: "" + Triangle: "" + Left: "" + Down: "" + Right: "" + Up: "" + R1: "" + R2: "" + R3: "" + L1: "" + L2: "" + L3: "" + Motion Sensor X: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Y: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Z: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor G: + Axis: "" + Mirrored: false + Shift: 0 + Pressure Intensity Button: "" + Pressure Intensity Percent: 50 + Left Stick Multiplier: 100 + Right Stick Multiplier: 100 + Left Stick Deadzone: 0 + Right Stick Deadzone: 0 + Left Trigger Threshold: 0 + Right Trigger Threshold: 0 + Left Pad Squircling Factor: 0 + Right Pad Squircling Factor: 0 + Color Value R: 0 + Color Value G: 0 + Color Value B: 0 + Blink LED when battery is below 20%: true + Use LED as a battery indicator: false + LED battery indicator brightness: 50 + Player LED enabled: true + Enable Large Vibration Motor: true + Enable Small Vibration Motor: true + Switch Vibration Motors: false + Mouse Movement Mode: Relative + Mouse Deadzone X Axis: 60 + Mouse Deadzone Y Axis: 60 + Mouse Acceleration X Axis: 200 + Mouse Acceleration Y Axis: 250 + Left Stick Lerp Factor: 100 + Right Stick Lerp Factor: 100 + Analog Button Lerp Factor: 100 + Trigger Lerp Factor: 100 + Device Class Type: 0 + Vendor ID: 0 + Product ID: 0 + Buddy Device: "Null" +Player 6 Input: + Handler: "Null" + Device: "Null" + Config: + Left Stick Left: "" + Left Stick Down: "" + Left Stick Right: "" + Left Stick Up: "" + Right Stick Left: "" + Right Stick Down: "" + Right Stick Right: "" + Right Stick Up: "" + Start: "" + Select: "" + PS Button: "" + Square: "" + Cross: "" + Circle: "" + Triangle: "" + Left: "" + Down: "" + Right: "" + Up: "" + R1: "" + R2: "" + R3: "" + L1: "" + L2: "" + L3: "" + Motion Sensor X: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Y: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Z: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor G: + Axis: "" + Mirrored: false + Shift: 0 + Pressure Intensity Button: "" + Pressure Intensity Percent: 50 + Left Stick Multiplier: 100 + Right Stick Multiplier: 100 + Left Stick Deadzone: 0 + Right Stick Deadzone: 0 + Left Trigger Threshold: 0 + Right Trigger Threshold: 0 + Left Pad Squircling Factor: 0 + Right Pad Squircling Factor: 0 + Color Value R: 0 + Color Value G: 0 + Color Value B: 0 + Blink LED when battery is below 20%: true + Use LED as a battery indicator: false + LED battery indicator brightness: 50 + Player LED enabled: true + Enable Large Vibration Motor: true + Enable Small Vibration Motor: true + Switch Vibration Motors: false + Mouse Movement Mode: Relative + Mouse Deadzone X Axis: 60 + Mouse Deadzone Y Axis: 60 + Mouse Acceleration X Axis: 200 + Mouse Acceleration Y Axis: 250 + Left Stick Lerp Factor: 100 + Right Stick Lerp Factor: 100 + Analog Button Lerp Factor: 100 + Trigger Lerp Factor: 100 + Device Class Type: 0 + Vendor ID: 0 + Product ID: 0 + Buddy Device: "Null" +Player 7 Input: + Handler: "Null" + Device: "Null" + Config: + Left Stick Left: "" + Left Stick Down: "" + Left Stick Right: "" + Left Stick Up: "" + Right Stick Left: "" + Right Stick Down: "" + Right Stick Right: "" + Right Stick Up: "" + Start: "" + Select: "" + PS Button: "" + Square: "" + Cross: "" + Circle: "" + Triangle: "" + Left: "" + Down: "" + Right: "" + Up: "" + R1: "" + R2: "" + R3: "" + L1: "" + L2: "" + L3: "" + Motion Sensor X: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Y: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor Z: + Axis: "" + Mirrored: false + Shift: 0 + Motion Sensor G: + Axis: "" + Mirrored: false + Shift: 0 + Pressure Intensity Button: "" + Pressure Intensity Percent: 50 + Left Stick Multiplier: 100 + Right Stick Multiplier: 100 + Left Stick Deadzone: 0 + Right Stick Deadzone: 0 + Left Trigger Threshold: 0 + Right Trigger Threshold: 0 + Left Pad Squircling Factor: 0 + Right Pad Squircling Factor: 0 + Color Value R: 0 + Color Value G: 0 + Color Value B: 0 + Blink LED when battery is below 20%: true + Use LED as a battery indicator: false + LED battery indicator brightness: 50 + Player LED enabled: true + Enable Large Vibration Motor: true + Enable Small Vibration Motor: true + Switch Vibration Motors: false + Mouse Movement Mode: Relative + Mouse Deadzone X Axis: 60 + Mouse Deadzone Y Axis: 60 + Mouse Acceleration X Axis: 200 + Mouse Acceleration Y Axis: 250 + Left Stick Lerp Factor: 100 + Right Stick Lerp Factor: 100 + Analog Button Lerp Factor: 100 + Trigger Lerp Factor: 100 + Device Class Type: 0 + Vendor ID: 0 + Product ID: 0 + Buddy Device: "Null" \ No newline at end of file diff --git a/emu-configs/rpcs3/vfs.yml b/emu-configs/rpcs3/vfs.yml index f5b89a9f..4b294861 100644 --- a/emu-configs/rpcs3/vfs.yml +++ b/emu-configs/rpcs3/vfs.yml @@ -1,10 +1,11 @@ -$(EmulatorDir): "/home/deck/retrodeck/roms/ps3/emudir" +$(EmulatorDir): RETRODECKHOMEDIR/bios/rpcs3/ /dev_hdd0/: $(EmulatorDir)dev_hdd0/ /dev_hdd1/: $(EmulatorDir)dev_hdd1/ /dev_flash/: $(EmulatorDir)dev_flash/ /dev_flash2/: $(EmulatorDir)dev_flash2/ /dev_flash3/: $(EmulatorDir)dev_flash3/ /dev_bdvd/: $(EmulatorDir)dev_bdvd/ +/games/: RETRODECKHOMEDIR/roms/ps3/ /app_home/: "" /dev_usb***/: /dev_usb000: @@ -46,4 +47,4 @@ $(EmulatorDir): "/home/deck/retrodeck/roms/ps3/emudir" Path: "" Serial: "" VID: "" - PID: "" \ No newline at end of file + PID: "" diff --git a/emu-configs/ryujinx/Config.json b/emu-configs/ryujinx/Config.json index 3018fa9b..15cbf4e2 100644 --- a/emu-configs/ryujinx/Config.json +++ b/emu-configs/ryujinx/Config.json @@ -56,7 +56,7 @@ "sort_ascending": false }, "game_dirs": [ - "/home/deck/retrodeck/roms/switch" + "RETRODECKHOMEDIR/roms/switch" ], "language_code": "en_US", "enable_custom_theme": false, diff --git a/emu-configs/xemu.toml b/emu-configs/xemu/xemu.toml similarity index 54% rename from emu-configs/xemu.toml rename to emu-configs/xemu/xemu.toml index fb196502..15f6c1b4 100644 --- a/emu-configs/xemu.toml +++ b/emu-configs/xemu/xemu.toml @@ -1,6 +1,6 @@ [general] show_welcome = false -screenshot_dir = '/home/deck/retrodeck/screenshots' +screenshot_dir = 'RETRODECKHOMEDIR/screenshots' [input.bindings] port1 = '03000000de280000ff11000001000000' @@ -23,7 +23,7 @@ auto_scale = false mem_limit = '128' [sys.files] -bootrom_path = '/home/deck/retrodeck/bios/mcpx_1.0.bin' -flashrom_path = '/home/deck/retrodeck/bios/Complex.bin' -eeprom_path = '/home/deck/retrodeck/saves/xbox/xemu/xbox-eeprom.bin' -hdd_path = '/home/deck/retrodeck/bios/xbox_hdd.qcow2' \ No newline at end of file +bootrom_path = 'RETRODECKHOMEDIR/bios/mcpx_1.0.bin' +flashrom_path = 'RETRODECKHOMEDIR/bios/Complex.bin' +eeprom_path = 'RETRODECKHOMEDIR/saves/xbox/xemu/xbox-eeprom.bin' +hdd_path = 'RETRODECKHOMEDIR/bios/xbox_hdd.qcow2' \ No newline at end of file diff --git a/emu-configs/yuzu/qt-config.ini b/emu-configs/yuzu/qt-config.ini index efdcce84..a1e63a4d 100644 --- a/emu-configs/yuzu/qt-config.ini +++ b/emu-configs/yuzu/qt-config.ini @@ -1007,178 +1007,178 @@ Screenshots\enable_screenshot_save_as\default=true Screenshots\screenshot_path=RETRODECKHOMEDIR/screenshots/ Shortcuts\Main%20Window\Audio%20Mute\Unmute\Context=1 Shortcuts\Main%20Window\Audio%20Mute\Unmute\Context\default=true -Shortcuts\Main%20Window\Audio%20Mute\Unmute\Controller_KeySeq=Home+Dpad_Right -Shortcuts\Main%20Window\Audio%20Mute\Unmute\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Audio%20Mute\Unmute\KeySeq=Ctrl+M -Shortcuts\Main%20Window\Audio%20Mute\Unmute\KeySeq\default=true +Shortcuts\Main%20Window\Audio%20Mute\Unmute\Controller_KeySeq= +Shortcuts\Main%20Window\Audio%20Mute\Unmute\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Audio%20Mute\Unmute\KeySeq= +Shortcuts\Main%20Window\Audio%20Mute\Unmute\KeySeq\default=false Shortcuts\Main%20Window\Audio%20Mute\Unmute\Repeat=false Shortcuts\Main%20Window\Audio%20Mute\Unmute\Repeat\default=true -Shortcuts\Main%20Window\Audio%20Volume%20Down\Context=2 -Shortcuts\Main%20Window\Audio%20Volume%20Down\Context\default=true -Shortcuts\Main%20Window\Audio%20Volume%20Down\Controller_KeySeq=Home+Dpad_Down -Shortcuts\Main%20Window\Audio%20Volume%20Down\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Audio%20Volume%20Down\KeySeq=- -Shortcuts\Main%20Window\Audio%20Volume%20Down\KeySeq\default=true +Shortcuts\Main%20Window\Audio%20Volume%20Down\Context=1 +Shortcuts\Main%20Window\Audio%20Volume%20Down\Context\default=false +Shortcuts\Main%20Window\Audio%20Volume%20Down\Controller_KeySeq= +Shortcuts\Main%20Window\Audio%20Volume%20Down\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Audio%20Volume%20Down\KeySeq= +Shortcuts\Main%20Window\Audio%20Volume%20Down\KeySeq\default=false Shortcuts\Main%20Window\Audio%20Volume%20Down\Repeat=true Shortcuts\Main%20Window\Audio%20Volume%20Down\Repeat\default=true -Shortcuts\Main%20Window\Audio%20Volume%20Up\Context=2 -Shortcuts\Main%20Window\Audio%20Volume%20Up\Context\default=true -Shortcuts\Main%20Window\Audio%20Volume%20Up\Controller_KeySeq=Home+Dpad_Up -Shortcuts\Main%20Window\Audio%20Volume%20Up\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Audio%20Volume%20Up\KeySeq="=" -Shortcuts\Main%20Window\Audio%20Volume%20Up\KeySeq\default=true +Shortcuts\Main%20Window\Audio%20Volume%20Up\Context=1 +Shortcuts\Main%20Window\Audio%20Volume%20Up\Context\default=false +Shortcuts\Main%20Window\Audio%20Volume%20Up\Controller_KeySeq= +Shortcuts\Main%20Window\Audio%20Volume%20Up\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Audio%20Volume%20Up\KeySeq= +Shortcuts\Main%20Window\Audio%20Volume%20Up\KeySeq\default=false Shortcuts\Main%20Window\Audio%20Volume%20Up\Repeat=true Shortcuts\Main%20Window\Audio%20Volume%20Up\Repeat\default=true Shortcuts\Main%20Window\Capture%20Screenshot\Context=3 Shortcuts\Main%20Window\Capture%20Screenshot\Context\default=true -Shortcuts\Main%20Window\Capture%20Screenshot\Controller_KeySeq=Screenshot -Shortcuts\Main%20Window\Capture%20Screenshot\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq=Ctrl+P -Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq\default=true +Shortcuts\Main%20Window\Capture%20Screenshot\Controller_KeySeq= +Shortcuts\Main%20Window\Capture%20Screenshot\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq=Ctrl+X +Shortcuts\Main%20Window\Capture%20Screenshot\KeySeq\default=false Shortcuts\Main%20Window\Capture%20Screenshot\Repeat=false Shortcuts\Main%20Window\Capture%20Screenshot\Repeat\default=true -Shortcuts\Main%20Window\Change%20Adapting%20Filter\Context=2 -Shortcuts\Main%20Window\Change%20Adapting%20Filter\Context\default=true -Shortcuts\Main%20Window\Change%20Adapting%20Filter\Controller_KeySeq=Home+L -Shortcuts\Main%20Window\Change%20Adapting%20Filter\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Change%20Adapting%20Filter\KeySeq=F8 -Shortcuts\Main%20Window\Change%20Adapting%20Filter\KeySeq\default=true +Shortcuts\Main%20Window\Change%20Adapting%20Filter\Context=1 +Shortcuts\Main%20Window\Change%20Adapting%20Filter\Context\default=false +Shortcuts\Main%20Window\Change%20Adapting%20Filter\Controller_KeySeq= +Shortcuts\Main%20Window\Change%20Adapting%20Filter\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Change%20Adapting%20Filter\KeySeq= +Shortcuts\Main%20Window\Change%20Adapting%20Filter\KeySeq\default=false Shortcuts\Main%20Window\Change%20Adapting%20Filter\Repeat=false Shortcuts\Main%20Window\Change%20Adapting%20Filter\Repeat\default=true Shortcuts\Main%20Window\Change%20Docked%20Mode\Context=2 Shortcuts\Main%20Window\Change%20Docked%20Mode\Context\default=true -Shortcuts\Main%20Window\Change%20Docked%20Mode\Controller_KeySeq=Home+X -Shortcuts\Main%20Window\Change%20Docked%20Mode\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Change%20Docked%20Mode\KeySeq=F10 -Shortcuts\Main%20Window\Change%20Docked%20Mode\KeySeq\default=true +Shortcuts\Main%20Window\Change%20Docked%20Mode\Controller_KeySeq= +Shortcuts\Main%20Window\Change%20Docked%20Mode\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Change%20Docked%20Mode\KeySeq=Alt+D +Shortcuts\Main%20Window\Change%20Docked%20Mode\KeySeq\default=false Shortcuts\Main%20Window\Change%20Docked%20Mode\Repeat=false Shortcuts\Main%20Window\Change%20Docked%20Mode\Repeat\default=true Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Context=2 Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Context\default=true -Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Controller_KeySeq=Home+R -Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Change%20GPU%20Accuracy\KeySeq=F9 -Shortcuts\Main%20Window\Change%20GPU%20Accuracy\KeySeq\default=true +Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Controller_KeySeq= +Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Controller_KeySeq\default=false +Shortcuts\Main%20Window\Change%20GPU%20Accuracy\KeySeq=Alt+G +Shortcuts\Main%20Window\Change%20GPU%20Accuracy\KeySeq\default=false Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Repeat=false Shortcuts\Main%20Window\Change%20GPU%20Accuracy\Repeat\default=true Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context=1 Shortcuts\Main%20Window\Continue\Pause%20Emulation\Context\default=true -Shortcuts\Main%20Window\Continue\Pause%20Emulation\Controller_KeySeq=Home+B +Shortcuts\Main%20Window\Continue\Pause%20Emulation\Controller_KeySeq= Shortcuts\Main%20Window\Continue\Pause%20Emulation\Controller_KeySeq\default=false -Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq=F4 -Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq\default=true +Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq=Ctrl+P +Shortcuts\Main%20Window\Continue\Pause%20Emulation\KeySeq\default=false Shortcuts\Main%20Window\Continue\Pause%20Emulation\Repeat=false Shortcuts\Main%20Window\Continue\Pause%20Emulation\Repeat\default=true Shortcuts\Main%20Window\Exit%20Fullscreen\Context=1 Shortcuts\Main%20Window\Exit%20Fullscreen\Context\default=true -Shortcuts\Main%20Window\Exit%20Fullscreen\Controller_KeySeq=Home+A -Shortcuts\Main%20Window\Exit%20Fullscreen\Controller_KeySeq\default=false -Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq=Esc -Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq\default=true +Shortcuts\Main%20Window\Exit%20Fullscreen\Controller_KeySeq= +Shortcuts\Main%20Window\Exit%20Fullscreen\Controller_KeySeq\default=true +Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq=Ctrl+O +Shortcuts\Main%20Window\Exit%20Fullscreen\KeySeq\default=false Shortcuts\Main%20Window\Exit%20Fullscreen\Repeat=false Shortcuts\Main%20Window\Exit%20Fullscreen\Repeat\default=true Shortcuts\Main%20Window\Exit%20yuzu\Context=1 Shortcuts\Main%20Window\Exit%20yuzu\Context\default=true -Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq=Home+Minus -Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq\default=true +Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq= +Shortcuts\Main%20Window\Exit%20yuzu\Controller_KeySeq\default=false Shortcuts\Main%20Window\Exit%20yuzu\KeySeq=Ctrl+Q -Shortcuts\Main%20Window\Exit%20yuzu\KeySeq\default=true +Shortcuts\Main%20Window\Exit%20yuzu\KeySeq\default=false Shortcuts\Main%20Window\Exit%20yuzu\Repeat=false Shortcuts\Main%20Window\Exit%20yuzu\Repeat\default=true Shortcuts\Main%20Window\Fullscreen\Context=1 Shortcuts\Main%20Window\Fullscreen\Context\default=true Shortcuts\Main%20Window\Fullscreen\Controller_KeySeq= Shortcuts\Main%20Window\Fullscreen\Controller_KeySeq\default=false -Shortcuts\Main%20Window\Fullscreen\KeySeq=F11 -Shortcuts\Main%20Window\Fullscreen\KeySeq\default=true +Shortcuts\Main%20Window\Fullscreen\KeySeq=Ctrl+Return +Shortcuts\Main%20Window\Fullscreen\KeySeq\default=false Shortcuts\Main%20Window\Fullscreen\Repeat=false Shortcuts\Main%20Window\Fullscreen\Repeat\default=true -Shortcuts\Main%20Window\Load%20File\Context=3 -Shortcuts\Main%20Window\Load%20File\Context\default=true +Shortcuts\Main%20Window\Load%20File\Context=1 +Shortcuts\Main%20Window\Load%20File\Context\default=false Shortcuts\Main%20Window\Load%20File\Controller_KeySeq= Shortcuts\Main%20Window\Load%20File\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Load%20File\KeySeq=Ctrl+O -Shortcuts\Main%20Window\Load%20File\KeySeq\default=true +Shortcuts\Main%20Window\Load%20File\KeySeq= +Shortcuts\Main%20Window\Load%20File\KeySeq\default=false Shortcuts\Main%20Window\Load%20File\Repeat=false Shortcuts\Main%20Window\Load%20File\Repeat\default=true Shortcuts\Main%20Window\Load\Remove%20Amiibo\Context=3 Shortcuts\Main%20Window\Load\Remove%20Amiibo\Context\default=true -Shortcuts\Main%20Window\Load\Remove%20Amiibo\Controller_KeySeq=Home+Y +Shortcuts\Main%20Window\Load\Remove%20Amiibo\Controller_KeySeq= Shortcuts\Main%20Window\Load\Remove%20Amiibo\Controller_KeySeq\default=false -Shortcuts\Main%20Window\Load\Remove%20Amiibo\KeySeq=F2 -Shortcuts\Main%20Window\Load\Remove%20Amiibo\KeySeq\default=true +Shortcuts\Main%20Window\Load\Remove%20Amiibo\KeySeq=Alt+M +Shortcuts\Main%20Window\Load\Remove%20Amiibo\KeySeq\default=false Shortcuts\Main%20Window\Load\Remove%20Amiibo\Repeat=false Shortcuts\Main%20Window\Load\Remove%20Amiibo\Repeat\default=true Shortcuts\Main%20Window\Restart%20Emulation\Context=1 Shortcuts\Main%20Window\Restart%20Emulation\Context\default=true Shortcuts\Main%20Window\Restart%20Emulation\Controller_KeySeq= Shortcuts\Main%20Window\Restart%20Emulation\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Restart%20Emulation\KeySeq=F6 -Shortcuts\Main%20Window\Restart%20Emulation\KeySeq\default=true +Shortcuts\Main%20Window\Restart%20Emulation\KeySeq=Ctrl+R +Shortcuts\Main%20Window\Restart%20Emulation\KeySeq\default=false Shortcuts\Main%20Window\Restart%20Emulation\Repeat=false Shortcuts\Main%20Window\Restart%20Emulation\Repeat\default=true Shortcuts\Main%20Window\Stop%20Emulation\Context=1 Shortcuts\Main%20Window\Stop%20Emulation\Context\default=true Shortcuts\Main%20Window\Stop%20Emulation\Controller_KeySeq= Shortcuts\Main%20Window\Stop%20Emulation\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Stop%20Emulation\KeySeq=F5 -Shortcuts\Main%20Window\Stop%20Emulation\KeySeq\default=true +Shortcuts\Main%20Window\Stop%20Emulation\KeySeq= +Shortcuts\Main%20Window\Stop%20Emulation\KeySeq\default=false Shortcuts\Main%20Window\Stop%20Emulation\Repeat=false Shortcuts\Main%20Window\Stop%20Emulation\Repeat\default=true -Shortcuts\Main%20Window\TAS%20Record\Context=2 -Shortcuts\Main%20Window\TAS%20Record\Context\default=true +Shortcuts\Main%20Window\TAS%20Record\Context=1 +Shortcuts\Main%20Window\TAS%20Record\Context\default=false Shortcuts\Main%20Window\TAS%20Record\Controller_KeySeq= Shortcuts\Main%20Window\TAS%20Record\Controller_KeySeq\default=true -Shortcuts\Main%20Window\TAS%20Record\KeySeq=Ctrl+F7 -Shortcuts\Main%20Window\TAS%20Record\KeySeq\default=true +Shortcuts\Main%20Window\TAS%20Record\KeySeq= +Shortcuts\Main%20Window\TAS%20Record\KeySeq\default=false Shortcuts\Main%20Window\TAS%20Record\Repeat=false Shortcuts\Main%20Window\TAS%20Record\Repeat\default=true -Shortcuts\Main%20Window\TAS%20Reset\Context=2 -Shortcuts\Main%20Window\TAS%20Reset\Context\default=true +Shortcuts\Main%20Window\TAS%20Reset\Context=1 +Shortcuts\Main%20Window\TAS%20Reset\Context\default=false Shortcuts\Main%20Window\TAS%20Reset\Controller_KeySeq= Shortcuts\Main%20Window\TAS%20Reset\Controller_KeySeq\default=true -Shortcuts\Main%20Window\TAS%20Reset\KeySeq=Ctrl+F6 -Shortcuts\Main%20Window\TAS%20Reset\KeySeq\default=true +Shortcuts\Main%20Window\TAS%20Reset\KeySeq= +Shortcuts\Main%20Window\TAS%20Reset\KeySeq\default=false Shortcuts\Main%20Window\TAS%20Reset\Repeat=false Shortcuts\Main%20Window\TAS%20Reset\Repeat\default=true -Shortcuts\Main%20Window\TAS%20Start\Stop\Context=2 -Shortcuts\Main%20Window\TAS%20Start\Stop\Context\default=true +Shortcuts\Main%20Window\TAS%20Start\Stop\Context=1 +Shortcuts\Main%20Window\TAS%20Start\Stop\Context\default=false Shortcuts\Main%20Window\TAS%20Start\Stop\Controller_KeySeq= Shortcuts\Main%20Window\TAS%20Start\Stop\Controller_KeySeq\default=true -Shortcuts\Main%20Window\TAS%20Start\Stop\KeySeq=Ctrl+F5 -Shortcuts\Main%20Window\TAS%20Start\Stop\KeySeq\default=true +Shortcuts\Main%20Window\TAS%20Start\Stop\KeySeq= +Shortcuts\Main%20Window\TAS%20Start\Stop\KeySeq\default=false Shortcuts\Main%20Window\TAS%20Start\Stop\Repeat=false Shortcuts\Main%20Window\TAS%20Start\Stop\Repeat\default=true Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Context=1 Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Context\default=true Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Controller_KeySeq= Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq=Ctrl+F -Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq= +Shortcuts\Main%20Window\Toggle%20Filter%20Bar\KeySeq\default=false Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Repeat=false Shortcuts\Main%20Window\Toggle%20Filter%20Bar\Repeat\default=true Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Context=2 Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Context\default=true Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Controller_KeySeq= Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Controller_KeySeq\default=false -Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\KeySeq=Ctrl+U -Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\KeySeq=Ctrl+Z +Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\KeySeq\default=false Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Repeat=false Shortcuts\Main%20Window\Toggle%20Framerate%20Limit\Repeat\default=true -Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Context=2 -Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Context\default=true +Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Context=1 +Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Context\default=false Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Controller_KeySeq= Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\KeySeq=Ctrl+F9 -Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\KeySeq= +Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\KeySeq\default=false Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Repeat=false Shortcuts\Main%20Window\Toggle%20Mouse%20Panning\Repeat\default=true Shortcuts\Main%20Window\Toggle%20Status%20Bar\Context=1 Shortcuts\Main%20Window\Toggle%20Status%20Bar\Context\default=true Shortcuts\Main%20Window\Toggle%20Status%20Bar\Controller_KeySeq= Shortcuts\Main%20Window\Toggle%20Status%20Bar\Controller_KeySeq\default=true -Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq=Ctrl+S -Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq\default=true +Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq= +Shortcuts\Main%20Window\Toggle%20Status%20Bar\KeySeq\default=false Shortcuts\Main%20Window\Toggle%20Status%20Bar\Repeat=false Shortcuts\Main%20Window\Toggle%20Status%20Bar\Repeat\default=true UIGameList\cache_game_list=true @@ -1250,4 +1250,4 @@ web_api_url\default=true yuzu_token= yuzu_token\default=true yuzu_username=RetroDECK -yuzu_username\default=true +yuzu_username\default=true \ No newline at end of file diff --git a/es-configs/es_find_rules.xml b/es-configs/es_find_rules.xml index 05835dd8..13dd5dc2 100644 --- a/es-configs/es_find_rules.xml +++ b/es-configs/es_find_rules.xml @@ -100,6 +100,7 @@ + Cemu-wrapper cemu Cemu @@ -136,6 +137,14 @@ ~/bin/cpcemu/cpcemu + + + + ~/Applications/CSpect/CSpect.exe + ~/.local/bin/CSpect/CSpect.exe + ~/bin/CSpect/CSpect.exe + + diff --git a/es-configs/es_settings.xml b/es-configs/es_settings.xml index fce3c315..9364318d 100644 --- a/es-configs/es_settings.xml +++ b/es-configs/es_settings.xml @@ -104,9 +104,9 @@ - + - + @@ -141,4 +141,5 @@ - \ No newline at end of file + + diff --git a/es-configs/es_systems.xml b/es-configs/es_systems.xml index 65cb4a72..4cd68548 100644 --- a/es-configs/es_systems.xml +++ b/es-configs/es_systems.xml @@ -677,8 +677,8 @@ Nintendo GameCube %ROMPATH%/gc .ciso .CISO .dff .DFF .dol .DOL .elf .ELF .gcm .GCM .gcz .GCZ .iso .ISO .json .JSON .m3u .M3U .rvz .RVZ .tgc .TGC .wad .WAD .wbfs .WBFS .wia .WIA .7z .7Z .zip .ZIP - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dolphin_libretro.so %ROM% %INJECT%=%BASENAME%.esprefix %EMULATOR_DOLPHIN% -b -e %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dolphin_libretro.so %ROM% %INJECT%=%BASENAME%.esprefix %EMULATOR_PRIMEHACK% -b -e %ROM% gc @@ -999,7 +999,10 @@ .bin .BIN .d64 .D64 .n64 .N64 .ndd .NDD .u1 .U1 .v64 .V64 .z64 .Z64 .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/mupen64plus_next_libretro.so %ROM% - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/parallel_n64_libretro.so %ROM% + + + + n64 n64 @@ -1041,7 +1044,7 @@ .app .APP .bin .BIN .nds .NDS .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/desmume2015_libretro.so %ROM% - %EMULATOR_DESMUME% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/melonds_libretro.so %ROM% %EMULATOR_MELONDS% %ROM% nds @@ -1178,7 +1181,7 @@ %ROMPATH%/pc98 .2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .m3u .M3U .nhd .NHD .tfd .TFD .thd .THD . xdf .XDF .7z .7Z .zip .ZIP %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/np2kai_libretro.so %ROM% - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nekop2_libretro.so %ROM% + %STARTDIR%=%GAMEDIR% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/nekop2_libretro.so %ROM% pc98 pc98 @@ -1248,10 +1251,11 @@ ps2 Sony PlayStation 2 %ROMPATH%/ps2 + %EMULATOR_PCSX2% -batch %ROM% .bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG - %EMULATOR_PCSX2% -batch %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/pcsx2_libretro.so %ROM% - + ps2 ps2 @@ -1265,7 +1269,7 @@ ps3 ps3 - + psp Sony PlayStation Portable %ROMPATH%/psp .elf .ELF .iso .ISO .cso .CSO .prx .PRX .pbp .PBP .7z .7Z .zip .ZIP - %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/ppsspp_libretro.so %ROM% %EMULATOR_PPSSPP% %ROM% + %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/ppsspp_libretro.so %ROM% psp psp @@ -1754,13 +1758,12 @@ Nintendo Wii %ROMPATH%/wii .ciso .CISO .dff .DFF .dol .DOL .elf .ELF .gcm .GCM .gcz .GCZ .iso .ISO .json .JSON .m3u .M3U .rvz .RVZ .tgc .TGC .wad .WAD .wbfs .WBFS .wia .WIA .7z .7Z .zip .ZIP + %INJECT%=%BASENAME%.esprefix %EMULATOR_DOLPHIN% -b -e %ROM% %EMULATOR_RETROARCH% -L %CORE_RETROARCH%/dolphin_libretro.so %ROM% - %INJECT%=%BASENAME%.esprefix %EMULATOR_DOLPHIN% -b -e %ROM% %INJECT%=%BASENAME%.esprefix %EMULATOR_PRIMEHACK% -b -e %ROM% wii wii - wonderswan Bandai WonderSwan @@ -1820,15 +1822,17 @@ xbox xbox + + diff --git a/es-configs/rd_prepacks/doom/doom.zip b/es-configs/rd_prepacks/doom/doom.zip new file mode 100644 index 00000000..bdd6ef31 Binary files /dev/null and b/es-configs/rd_prepacks/doom/doom.zip differ diff --git a/es-configs/rd_prepacks/doom/gamelist.xml b/es-configs/rd_prepacks/doom/gamelist.xml new file mode 100644 index 00000000..745ca4b7 --- /dev/null +++ b/es-configs/rd_prepacks/doom/gamelist.xml @@ -0,0 +1,16 @@ + + + + ./doom1.wad + DOOM + In Doom, a nameless space marine is posted to a Martian base where secret teleportation experiments are being conducted. One of these experiments goes horribly wrong and "something fragging evil" starts pouring out of the gateways, killing or possessing all the base personnel! + +Responding to a frantic distress call from the overrun scientists, the Martian marine unit is quickly sent to Phobos to investigate, where you, the space marine, are left to guard the hangar with only a pistol while the rest of the group proceed inside to discover their worst nightmare. As you advance further, terrifying screams echo through the vast halls, followed by a disturbing silence ... it seems, all your buddies are dead and you're all on your own now - fight back, exterminate every evil creature and get your ticket back home to earth! + 0.9 + 19930101T000000 + id Software + GT Interactive + Shooter / 1st person + 1-4 + + diff --git a/flathub.yml b/flathub.yml index 0155923d..36a4dc59 100644 --- a/flathub.yml +++ b/flathub.yml @@ -1,18 +1,17 @@ app-id: net.retrodeck.retrodeck runtime: org.kde.Platform -runtime-version: 5.15-21.08 -#runtime-version: 6.3 # bumped because of pcsx2-qt +runtime-version: 5.15-22.08 sdk: org.kde.Sdk sdk-extensions: - org.freedesktop.Sdk.Extension.llvm14 # Needed for rpcs3 #- org.freedesktop.Sdk.Extension.dotnet6 # Needed for Ryujinx - Removed, check if it's not breaking something else base: io.qt.qtwebengine.BaseApp # Needed for Yuzu -base-version: 5.15-21.08 # Needed for Yuzu +base-version: 5.15-22.08 # Needed for Yuzu command: retrodeck.sh finish-args: - - --socket=x11 - #- --socket=wayland + - --socket=fallback-x11 + - --socket=wayland - --socket=pulseaudio - --share=ipc - --share=network @@ -24,15 +23,11 @@ finish-args: - --talk-name=org.freedesktop.ScreenSaver - --talk-name=org.freedesktop.PowerManagement.Inhibit - --talk-name=org.freedesktop.login1.Manager + - --talk-name=org.freedesktop.Flatpak - --filesystem=xdg-run/app/com.discordapp.Discord:create - # Yuzu - # - --filesystem=home:ro # This may break Yuzu, let's see - # - --filesystem=/run/media:ro # Dolphin - --allow=bluetooth #- --env=QT_QPA_PLATFORM=xcb #not sure if this will break something - # rpcs3 - #- --socket=fallback-x11 modules: - name: retrodeck diff --git a/functions.sh b/functions.sh deleted file mode 100644 index cf91b693..00000000 --- a/functions.sh +++ /dev/null @@ -1,1398 +0,0 @@ -#!/bin/bash - -# THIS IS A CENTRALIZED LOCATION FOR FUNCTIONS, WHICH CAN BE SOURCED WITHOUT RUNNING EXTRA CODE. EXISTING USE OF THESE FUNCTIONS CAN BE REFACTORED TO HERE. - -# These functions are original to this file - -#================= -# FUNCTION SECTION -#================= - -directory_browse() { - # This function browses for a directory and returns the path chosen - # USAGE: path_to_be_browsed_for=$(directory_browse $action_text) - - local path_selected=false - - while [ $path_selected == false ] - do - local target="$(zenity --file-selection --title="Choose $1" --directory)" - if [ ! -z $target ] #yes - then - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ - --text="Directory $target chosen, is this correct?" - if [ $? == 0 ] - then - path_selected=true - echo $target - break - fi - else - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ - --text="No directory selected. Do you want to exit the selection process?" - if [ $? == 0 ] - then - break - fi - fi - done -} - -file_browse() { - # This function browses for a file and returns the path chosen - # USAGE: file_to_be_browsed_for=$(file_browse $action_text) - - local file_selected=false - - while [ $file_selected == false ] - do - local target="$(zenity --file-selection --title="Choose $1")" - if [ ! -z "$target" ] #yes - then - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ - --text="File $target chosen, is this correct?" - if [ $? == 0 ] - then - file_selected=true - echo "$target" - break - fi - else - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ - --text="No file selected. Do you want to exit the selection process?" - if [ $? == 0 ] - then - break - fi - fi - done -} - -verify_space() { - # Function used for verifying adequate space before moving directories around - # USAGE: verify_space $source_dir $dest_dir - # Function returns "true" if there is enough space, "false" if there is not - - source_size=$(du -sk "$1" | awk '{print $1}') - source_size=$((source_size+(source_size/10))) # Add 10% to source size for safety - dest_avail=$(df -k --output=avail "$2" | tail -1) - - if [[ $source_size -ge $dest_avail ]]; then - echo "false" - else - echo "true" - fi -} - -move() { - # Function to move a directory from one parent to another - # USAGE: move $source_dir $dest_dir - - if [[ ! -d "$2/$(basename "$1")" ]]; then - if [[ $(verify_space "$1" "$2") ]]; then - ( - if [[ ! -d "$2" ]]; then # Create destination directory if it doesn't already exist - mkdir -pv "$2" - fi - mv -v -t "$2" "$1" - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move in Progress" \ - --text="Moving directory $1 to new location of $2, please wait." - else - zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move Directories" \ - --text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space." - - configurator_move_dialog - fi - else - zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move Directories" \ - --text="The destination directory you have selected already exists.\n\nPlease select a new destination." - fi -} - -compress_to_chd () { - # Function for compressing one or more files to .chd format - # USAGE: compress_to_chd $full_path_to_input_file $full_path_to_output_file - - echo "Compressing file $1 to $2.chd" - /app/bin/chdman createcd -i "$1" -o "$2".chd -} - -validate_for_chd () { - # Function for validating chd compression candidates, and compresses if validation passes. Supports .cue, .iso and .gdi formats ONLY - # USAGE: validate_for_chd $input_file - - local file="$1" - local normalized_filename=$(echo "$file" | tr '[:upper:]' '[:lower:]') - local file_validated="false" - current_run_log_file="chd_compression_$(basename "$file").log" - echo "Validating file:" "$file" > "$logs_folder/$current_run_log_file" - if [[ "$normalized_filename" == *".cue" ]] || [[ "$normalized_filename" == *".gdi" ]] || [[ "$normalized_filename" == *".iso" ]]; then - echo ".cue/.iso/.gdi file detected" >> "$logs_folder/$current_run_log_file" - local file_path=$(dirname "$(realpath "$file")") - local file_base_name=$(basename "$file") - local file_name=${file_base_name%.*} - if [[ "$normalized_filename" == *".cue" ]]; then # Validate .cue file - echo "Validating .cue associated .bin files" >> "$logs_folder/$current_run_log_file" - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - echo "Associated bin files read:" >> "$logs_folder/$current_run_log_file" - printf '%s\n' "$cue_bin_files" >> "$logs_folder/$current_run_log_file" - while IFS= read -r line - do - echo "looking for $file_path/$line" >> "$logs_folder/$current_run_log_file" - if [[ -f "$file_path/$line" ]]; then - echo ".bin file found at $file_path/$line" >> "$logs_folder/$current_run_log_file" - file_validated="true" - else - echo ".bin file NOT found at $file_path/$line" >> "$logs_folder/$current_run_log_file" - echo ".cue file could not be validated. Please verify your .cue file contains the correct corresponding .bin file information and retry." >> "$logs_folder/$current_run_log_file" - file_validated="false" - break - fi - done < <(printf '%s\n' "$cue_bin_files") - if [[ $file_validated == "true" ]]; then - echo $file_validated - fi - else # If file is a .iso or .gdi - file_validated="true" - echo $file_validated - fi - else - echo "File type not recognized. Supported file types are .cue, .gdi and .iso" >> "$logs_folder/$current_run_log_file" - fi -} - -cli_compress_file() { - # This function will compress a single file passed from the CLI arguments - # USAGE: cli_compress_file $full_file_path - local file="$1" - echo "Looking for" "$file" - current_run_log_file="chd_compression_$(basename "$file").log" - if [[ ! -z "$file" ]]; then - if [[ -f "$file" ]]; then - if [[ $(validate_for_chd "$file") == "true" ]]; then - read -p "RetroDECK will now attempt to compress your selected game. Press Enter key to continue..." - read -p "Do you want to have the original file removed after compression is complete? Please answer y/n and press Enter: " post_compression_cleanup - local filename_no_path=$(basename "$file") - local filename_no_extension="${filename_no_path%.*}" - local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file") - local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension" - echo "Compressing $filename_no_path" - compress_to_chd "$source_file" "$dest_file" - if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested - if [[ "$file" == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do # Remove associated .bin files - echo "Removing file "$line"" - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file - echo "Removing file "$filename_no_path"" - rm -f $(realpath "$file") - else - echo "Removing file "$filename_no_path"" - rm -f $(realpath "$file") - fi - fi - else - printf "An error occured during the compression process. Please see the following log entries for details:\n\n" - cat "$logs_folder/$current_run_log_file" - fi - else - echo "File not found, please specify the full path to the file to be compressed." - fi - else - echo "Please use this command format \"--compress \"" - fi -} - -desktop_mode_warning() { - # This function is a generic warning for issues that happen when running in desktop mode. - # Running in desktop mode can be verified with the following command: if [[ ! $XDG_CURRENT_DESKTOP == "gamescope" ]]; then - # This function will check if desktop mode is currently being used and if the warning has not been disabled, and show it if needed. - - if [[ ! $XDG_CURRENT_DESKTOP == "gamescope" ]]; then - if [[ $desktop_mode_warning == "true" ]]; then - choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Never show this again" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Desktop Mode Warning" \ - --text="You appear to be running RetroDECK in the Steam Deck's Desktop mode!\n\nSome functions of RetroDECK may not work properly in Desktop mode, such as the Steam Deck's normal controls.\n\nRetroDECK is best enjoyed in Game mode!\n\nDo you still want to proceed?") - rc=$? # Capture return code, as "Yes" button has no text value - if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked - if [[ $choice == "No" ]]; then - exit 1 - elif [[ $choice == "Never show this again" ]]; then - set_setting_value $rd_conf "desktop_mode_warning" "false" retrodeck # Store desktop mode warning variable for future checks - fi - fi - fi - fi -} - -set_setting_value() { - # Function for editing settings - # USAGE: set_setting_value $setting_file "$setting_name" "$new_setting_value" $system $section_name(optional) - - local setting_name_to_change=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") - local setting_value_to_change=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$3") - local current_section_name=$(sed -e 's/%/\\%/g' <<< "$5") - - case $4 in - - "retrodeck" | "citra" | "melonds" | "yuzu" ) - if [[ -z $current_section_name ]]; then - sed -i 's^\^'"$setting_name_to_change"'=.*^'"$setting_name_to_change"'='"$setting_value_to_change"'^' $1 - else - sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"'=.*^'"$setting_name_to_change"'='"$setting_value_to_change"'^' $1 - fi - ;; - - "retroarch" ) - if [[ -z $current_section_name ]]; then - sed -i 's^\^'"$setting_name_to_change"' = \".*\"^'"$setting_name_to_change"' = \"'"$setting_value_to_change"'\"^' $1 - else - sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"' = \".*\"^'"$setting_name_to_change"' = \"'"$setting_value_to_change"'\"^' $1 - fi - ;; - - "dolphin" | "duckstation" | "pcsx2" | "ppsspp" | "primehack" | "xemu" ) - if [[ -z $current_section_name ]]; then - sed -i 's^\^'"$setting_name_to_change"' =.*^'"$setting_name_to_change"' = '"$setting_value_to_change"'^' $1 - else - sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"' =.*^'"$setting_name_to_change"' = '"$setting_value_to_change"'^' $1 - fi - ;; - - "rpcs3" ) # This does not currently work for settings with a $ in them - if [[ -z $current_section_name ]]; then - sed -i 's^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' $1 - else - sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' $1 - fi - ;; - - "emulationstation" ) - sed -i "s%^$setting_name_to_change\" \" value=\".*\"%$setting_name_to_change\" \" value=\"$setting_value_to_change\"" $1 - ;; - - esac -} - -get_setting_name() { - # Function for getting the setting name from a full setting line from a config file - # USAGE: get_setting_name "$current_setting_line" $system - - local current_setting_line="$1" - - case $2 in - - "emulationstation" ) - echo "$current_setting_line" | grep -o -P "(?<=name\=\").*(?=\" value)" - ;; - - "rpcs3" ) - echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?:\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g' - ;; - - * ) - echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?=\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g;s^\\$^^' - ;; - - esac -} - -get_setting_value() { -# Function for getting the current value of a setting from a config file -# USAGE: get_setting_value $setting_file "$setting_name" $system $section (optional) - - local current_setting_name="$2" - local current_section_name="$4" - - case $3 in - - "retrodeck" | "citra" | "melonds" | "yuzu" ) # For files with this syntax - setting_name=setting_value - if [[ -z $current_section_name ]]; then - echo $(grep -o -P "(?<=^$current_setting_name=).*" $1) - else - sed -n '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name=).*" - fi - ;; - - "retroarch" ) # For files with this syntax - setting_name = "setting_value" - if [[ -z $current_section_name ]]; then - echo $(grep -o -P "(?<=^$current_setting_name = \").*(?=\")" $1) - else - sed -n '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = \").*(?=\")" - fi - ;; - - "dolphin" | "duckstation" | "pcsx2" | "ppsspp" | "primehack" | "xemu" ) # For files with this syntax - setting_name = setting_value - if [[ -z $current_section_name ]]; then - echo $(grep -o -P "(?<=^$current_setting_name = ).*" $1) - else - sed -n '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = ).*" - fi - ;; - - "rpcs3" ) # For files with this syntax - setting_name: setting_value - if [[ -z $current_section_name ]]; then - echo $(grep -o -P "(?<=$current_setting_name: ).*" $1) - else - sed -n '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=$current_setting_name: ).*" - fi - ;; - - "emulationstation" ) - echo $(grep -o -P "(?<=^$current_setting_name\" value=\").*(?=\")" $1) - ;; - - esac -} - -add_setting() { - # This function will add a setting line to a file. This is useful for dynamically generated config files where a setting line may not exist until the setting is changed from the default. - # USAGE: add_setting $setting_file $setting_line $system $section (optional) - - local current_setting_line=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") - local current_section_name=$(sed -e 's/%/\\%/g' <<< "$4") - - case $3 in - - * ) - if [[ -z $current_section_name ]]; then - sed -i '$ a '"$current_setting_line"'' $1 - else - sed -i '/^\s*?\['"$current_section_name"'\]|\b'"$current_section_name"':$/a '"$current_setting_line"'' $1 - fi - ;; - - esac -} - -disable_setting() { - # This function will add a '#' to the beginning of a defined setting line, disabling it. - # USAGE: disable_setting $setting_file $setting_line $system $section (optional) - - local current_setting_line="$2" - local current_section_name="$4" - - case $3 in - - * ) - if [[ -z $current_section_name ]]; then - sed -i -E 's^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' $1 - else - sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?'"$current_setting_line"'^s^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' $1 - fi - ;; - - esac -} - -enable_setting() { - # This function will remove a '#' to the beginning of a defined setting line, enabling it. - # USAGE: enable_setting $setting_file $setting_line $system $section (optional) - - local current_setting_line="$2" - local current_section_name="$4" - - case $3 in - - * ) - if [[ -z $current_section_name ]]; then - sed -i -E 's^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' $1 - else - sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?#'"$current_setting_line"'^s^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' $1 - fi - ;; - - esac -} - -disable_file() { - # This function adds the suffix ".disabled" to the end of a file to prevent it from being used entirely. - # USAGE: disable_file $file_name - # NOTE: $filename can be a defined variable from global.sh or must have the full path to the file - - mv $(realpath $1) $(realpath $1).disabled -} - -enable_file() { - # This function removes the suffix ".disabled" to the end of a file to allow it to be used. - # USAGE: enable_file $file_name - # NOTE: $filename can be a defined variable from global.sh or must have the full path to the file and should not have ".disabled" as a suffix - - mv $(realpath $1.disabled) $(realpath $(echo $1 | sed -e 's/\.disabled//')) -} - -generate_single_patch() { - # generate_single_patch $original_file $modified_file $patch_file $system - - rm $3 # Remove old patch file (maybe change this to create a backup instead?) - - while read -r current_setting_line; # Look for changes from the original file to the modified one - do - - printf -v escaped_setting_line '%q' "$current_setting_line" # Take care of special characters before they mess with future commands - - if [[ (! -z $current_setting_line) && (! $current_setting_line == "#!/bin/bash") && (! $current_setting_line == "[]") ]]; then # Ignore empty lines, empty arrays or Bash start lines - if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") || ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # Capture section header lines - if [[ $current_setting_line =~ ^\[.+\] ]]; then # If normal section line - action="section" - current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name - elif [[ ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # If RPCS3 section name - action="section" - current_section=$(sed 's^:$^^' <<< $current_setting_line) # Remove colon from section name - fi - elif [[ (! -z $current_section) ]]; then # If line is in a section... - if [[ ! -z $(grep -o -P "^\s*?#.*?$" <<< "$current_setting_line") ]]; then # Check for disabled lines - if [[ -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\s*?'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\s*?'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'^ p } }' $2) ]]; then # If disabled line is not disabled in new file... - action="disable_setting" - echo $action"^"$current_section"^"$(sed -n -E 's^\s*?#(.*?)$^\1^p' <<< $(sed -E 's/^[ \t]*//' <<< "$current_setting_line")) >> $3 - fi - elif [[ ! -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\s*?#'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\s*?#'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'^ p } }' $2) ]]; then # Check if line is disabled in new file - action="enable_setting" - echo $action"^"$current_section"^"$current_setting_line >> $3 - else # Look for setting value differences - current_setting_name=$(get_setting_name "$escaped_setting_line" $4) - if [[ (-z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'.*^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'$^ p } }' $2)) ]]; then # If the same setting line is not found in the same section of the modified file... - if [[ ! -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$current_setting_name"'^ p } }' $2) ]]; then # But the setting exists in that section, only with a different value... - new_setting_value=$(get_setting_value $2 "$current_setting_name" $4 $current_section) - action="change" - echo $action"^"$current_section"^"$(sed -e 's%\\\\%\\%g' <<< "$current_setting_name")"^"$new_setting_value"^"$4 >> $3 - fi - fi - fi - elif [[ (-z $current_section) ]]; then # If line is not in a section... - if [[ ! -z $(grep -o -P "^\s*?#.*?$" <<< "$current_setting_line") ]]; then # Check for disabled lines - if [[ -z $(grep -o -P "^\s*?$current_setting_line$" $2) ]]; then # If disabled line is not disabled in new file... - action="disable_setting" - echo $action"^"$current_section"^"$(sed -n -E 's^\s*?#(.*?)$^\1^p' <<< "$current_setting_line") >> $3 - fi - elif [[ ! -z $(sed -n -E '\^\s*?#'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'$^p' $2) ]]; then # Check if line is disabled in new file - action="enable_setting" - echo $action"^"$current_section"^"$current_setting_line >> $3 - else # Look for setting value differences - if [[ (-z $(sed -n -E '\^\s*?\b'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'$^p' $2)) ]]; then # If the same setting line is not found in the modified file... - current_setting_name=$(get_setting_name "$escaped_setting_line" "$4") - if [[ ! -z $(sed -n -E '\^\s*?\b'"$current_setting_name"'\s*?[:=]^p' $2) ]]; then # But the setting exists, only with a different value... - new_setting_value=$(get_setting_value $2 "$current_setting_name" $4) - action="change" - echo $action"^"$current_section"^"$(sed -e 's%\\\\%\\%g' <<< "$current_setting_name")"^"$new_setting_value"^"$4 >> $3 - fi - fi - fi - fi - fi - done < $1 - - # Reset the variables for reuse - action="" - current_section="" - current_setting_name="" - current_setting_value="" - - while read -r current_setting_line; # Look for new lines (from dynamically generated config files) in modified file compared to original - do - - printf -v escaped_setting_line '%q' "$current_setting_line" # Take care of special characters before they mess with future commands - - if [[ (! -z $current_setting_line) && (! $current_setting_line == "#!/bin/bash") && (! $current_setting_line == "[]") ]]; then # Ignore empty lines, empty arrays or Bash start lines - if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") || ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # Capture section header lines - if [[ $current_setting_line =~ ^\[.+\] ]]; then # If normal section line - action="section" - current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name - echo "Section found:" "$current_section""." - elif [[ ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # If RPCS3 section name - action="section" - current_section=$(sed 's^:$^^' <<< $current_setting_line) # Remove colon from section name - echo "Section found:" "$current_section""." - fi - elif [[ (! -z $current_section) ]]; then - current_setting_name=$(get_setting_name "$escaped_setting_line" "$4") - if [[ -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'.*^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$current_setting_name"'^p } }' $1 ) ]]; then # If setting name is not found in this section of the original file... - action="add_setting" - echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> $3 - fi - elif [[ (-z $current_section) ]]; then - current_setting_name=$(get_setting_name "$escaped_setting_line" "$4") - if [[ -z $(sed -n -E '\^\s*?\b'"$current_setting_name"'\s*?[:=]^p' $1) ]]; then # If setting name is not found in the original file... - action="add_setting" - echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> $3 - fi - fi - fi - done < $2 -} - -deploy_single_patch() { - -# This function will take an "original" file and a patch file and generate a ready to use modified file -# USAGE: deploy_single_patch $original_file $patch_file $output_file - -cp -fv $1 $3 # Create a copy of the original file to be patched - -while IFS="^" read -r action current_section setting_name setting_value system_name -do - - case $action in - - "disable_file" ) - eval disable_file $setting_name - ;; - - "enable_file" ) - eval enable_file $setting_name - ;; - - "add_setting" ) - eval add_setting $3 "$setting_name" $system_name $current_section - ;; - - "disable_setting" ) - eval disable_setting $3 "$setting_name" $system_name $current_section - ;; - - "enable_setting" ) - eval enable_setting $3 "$setting_name" $system_name $current_section - ;; - - "change" ) - eval set_setting_value $3 "$setting_name" "$setting_value" $system_name $current_section - ;; - - *"#"* ) - # Comment line in patch file - ;; - - * ) - echo "Config line malformed: $action" - ;; - - esac -done < $2 -} - -deploy_multi_patch() { - -# This function will take a single "batch" patch file and run all patches listed in it, across multiple config files -# USAGE: deploy_multi_patch $patch_file -# Patch file format should be as follows, with optional entries in (). Optional settings can be left empty, but must still have ^ dividers: -# $action^($current_section)^$setting_name^$setting_value^$system_name^($config file) - -while IFS="^" read -r action current_section setting_name setting_value system_name config_file -do - case $action in - - "disable_file" ) - eval disable_file $config_file - ;; - - "enable_file" ) - eval enable_file $config_file - ;; - - "add_setting" ) - eval add_setting $config_file "$setting_name" $system_name $current_section - ;; - - "disable_setting" ) - eval disable_setting $config_file "$setting_name" $system_name $current_section - ;; - - "enable_setting" ) - eval enable_setting $config_file "$setting_name" $system_name $current_section - ;; - - "change" ) - eval set_setting_value $config_file "$setting_name" "$setting_value" $system_name $current_section - ;; - - *"#"* ) - # Comment line in patch file - ;; - - * ) - echo "Config line malformed: $action" - ;; - - esac -done < $1 -} - -update_rd_conf() { - # This function will import a default retrodeck.cfg file and update it with any current settings. This will allow us to expand the file over time while retaining current user settings. - # USAGE: update_rd_conf - - mv -f $rd_conf $rd_conf_backup # Backup config file before update - - generate_single_patch $rd_defaults $rd_conf_backup $rd_update_patch retrodeck - sed -i '/change^^version/d' $rd_update_patch # Remove version line from temporary patch file, so old value isn't kept - deploy_single_patch $rd_defaults $rd_update_patch $rd_conf - set_setting_value $rd_conf "version" "$hard_version" retrodeck # Set version of currently running RetroDECK to updated retrodeck.cfg - rm -f $rd_update_patch # Cleanup temporary patch file -} - -conf_write() { - # writes the variables in the retrodeck config file - - echo "DEBUG: printing the config file content before writing it:" - cat "$rd_conf" - echo "" - - echo "Writing the config file: $rd_conf" - - # TODO: this can be optimized with a while and a list of variables to check - if [ ! -z "$version" ] #if the variable is not null then I update it - then - sed -i "s%version=.*%version=$version%" "$rd_conf" - fi - - if [ ! -z "$rdhome" ] - then - sed -i "s%rdhome=.*%rdhome=$rdhome%" "$rd_conf" - fi - - if [ ! -z "$roms_folder" ] - then - sed -i "s%roms_folder=.*%roms_folder=$roms_folder%" "$rd_conf" - fi - - if [ ! -z "$saves_folder" ] - then - sed -i "s%saves_folder=.*%saves_folder=$saves_folder%" "$rd_conf" - fi - - if [ ! -z "$states_folder" ] - then - sed -i "s%states_folder=.*%states_folder=$states_folder%" "$rd_conf" - fi - - if [ ! -z "$bios_folder" ] - then - sed -i "s%bios_folder=.*%bios_folder=$bios_folder%" "$rd_conf" - fi - - if [ ! -z "$media_folder" ] - then - sed -i "s%media_folder=.*%media_folder=$media_folder%" "$rd_conf" - fi - - if [ ! -z "$themes_folder" ] - then - sed -i "s%themes_folder=.*%themes_folder=$themes_folder%" "$rd_conf" - fi - - if [ ! -z "$logs_folder" ] - then - sed -i "s%logs_folder=.*%logs_folder=$logs_folder%" "$rd_conf" - fi - - if [ ! -z "$sdcard" ] - then - sed -i "s%sdcard=.*%sdcard=$sdcard%" "$rd_conf" - fi - echo "DEBUG: New contents:" - cat "$rd_conf" - echo "" -} - -dir_prep() { - # This script is creating a symlink preserving old folder contents and moving them in the new one - - # Call me with: - # dir prep "real dir" "symlink location" - real="$1" - symlink="$2" - - echo -e "\n[DIR PREP]\nMoving $symlink in $real" #DEBUG - - # if the symlink dir is already a symlink, unlink it first, to prevent recursion - if [ -L "$symlink" ]; - then - echo "$symlink is already a symlink, unlinking to prevent recursives" #DEBUG - unlink "$symlink" - fi - - # if the dest dir exists we want to backup it - if [ -d "$symlink" ]; - then - echo "$symlink found" #DEBUG - mv -f "$symlink" "$symlink.old" - fi - - # if the real dir is already a symlink, unlink it first - if [ -L "$real" ]; - then - echo "$real is already a symlink, unlinking to prevent recursives" #DEBUG - unlink "$real" - fi - - # if the real dir doesn't exist we create it - if [ ! -d "$real" ]; - then - echo "$real not found, creating it" #DEBUG - mkdir -pv "$real" - fi - - # creating the symlink - echo "linking $real in $symlink" #DEBUG - mkdir -pv "$(dirname "$symlink")" # creating the full path except the last folder - ln -svf "$real" "$symlink" - - # moving everything from the old folder to the new one, delete the old one - if [ -d "$symlink.old" ]; - then - echo "Moving the data from $symlink.old to $real" #DEBUG - mv -f "$symlink.old"/{.[!.],}* $real - echo "Removing $symlink.old" #DEBUG - rm -rf "$symlink.old" - fi - - echo -e "$symlink is now $real\n" -} - -yuzu_init() { - echo "----------------------" - echo "Initializing YUZU" - echo "----------------------" - # removing dead symlinks as they were present in a past version - if [ -d $rdhome/bios/switch ]; then - find $rdhome/bios/switch -xtype l -exec rm {} \; - fi - # initializing the keys folder - dir_prep "$rdhome/bios/switch/keys" "/var/data/yuzu/keys" - # initializing the firmware folder - dir_prep "$rdhome/bios/switch/registered" "/var/data/yuzu/nand/system/Contents/registered" - # initializing the save folders - dir_prep "$rdhome/saves/switch/yuzu/nand" "/var/data/yuzu/nand" - dir_prep "$rdhome/saves/switch/yuzu/sdmc" "/var/data/yuzu/sdmc" - # configuring Yuzu - dir_prep "$rdhome/.logs/yuzu" "/var/data/yuzu/log" - # removing config directory to wipe legacy files - rm -rf /var/config/yuzu - mkdir -pv /var/config/yuzu/ - cp -fvr $emuconfigs/yuzu/* /var/config/yuzu/ - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini - dir_prep "$rdhome/screenshots" "/var/data/yuzu/screenshots" -} - -dolphin_init() { - echo "----------------------" - echo "Initializing DOLPHIN" - echo "----------------------" - # removing config directory to wipe legacy files - rm -rf /var/config/dolphin-emu - mkdir -pv /var/config/dolphin-emu/ - cp -fvr "$emuconfigs/dolphin/"* /var/config/dolphin-emu/ - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/dolphin-emu/Dolphin.ini - dir_prep "$rdhome/saves/gc/dolphin/EUR" "/var/data/dolphin-emu/GC/EUR" - dir_prep "$rdhome/saves/gc/dolphin/USA" "/var/data/dolphin-emu/GC/USA" - dir_prep "$rdhome/saves/gc/dolphin/JAP" "/var/data/dolphin-emu/GC/JAP" - dir_prep "$rdhome/screenshots" "/var/data/dolphin-emu/ScreenShots" - dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves" - mkdir -pv /var/data/dolphin-emu/Wii/ - dir_prep "$rdhome/saves/wii/dolphin" "/var/data/dolphin-emu/Wii" -} - -primehack_init() { - echo "----------------------" - echo "Initializing Primehack" - echo "----------------------" - # removing config directory to wipe legacy files - rm -rf /var/config/primehack - mkdir -pv /var/config/primehack/ - cp -fvr "$emuconfigs/primehack/"* /var/config/primehack/ - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/primehack/Dolphin.ini - dir_prep "$rdhome/saves/gc/primehack/EUR" "/var/data/primehack/GC/EUR" - dir_prep "$rdhome/saves/gc/primehack/USA" "/var/data/primehack/GC/USA" - dir_prep "$rdhome/saves/gc/primehack/JAP" "/var/data/primehack/GC/JAP" - dir_prep "$rdhome/screenshots" "/var/data/primehack/ScreenShots" - dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves" - mkdir -pv /var/data/primehack/Wii/ - dir_prep "$rdhome/saves/wii/primehack" "/var/data/primehack/Wii" -} - -pcsx2_init() { - echo "----------------------" - echo "Initializing PCSX2" - echo "----------------------" - # removing config directory to wipe legacy files - rm -rf /var/config/PCSX2 - mkdir -pv "/var/config/PCSX2/inis" - mkdir -pv "$rdhome/saves/ps2/pcsx2/memcards" - mkdir -pv "$rdhome/states/ps2/pcsx2" - cp -fvr $emuconfigs/PCSX2/* /var/config/PCSX2/inis/ - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2_ui.ini - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2.ini - #dir_prep "$rdhome/states/ps2/pcsx2" "/var/config/PCSX2/sstates" - #dir_prep "$rdhome/screenshots" "/var/config/PCSX2/snaps" - #dir_prep "$rdhome/.logs" "/var/config/PCSX2/logs" - #dir_prep "$rdhome/bios" "$rdhome/bios/pcsx2" -} - -melonds_init() { - echo "----------------------" - echo "Initializing MELONDS" - echo "----------------------" - # removing config directory to wipe legacy files - rm -rf /var/config/melonDS - mkdir -pv /var/config/melonDS/ - mkdir -pv "$rdhome/saves/nds/melonds" - mkdir -pv "$rdhome/states/nds/melonds" - dir_prep "$rdhome/bios" "/var/config/melonDS/bios" - cp -fvr $emuconfigs/melonDS.ini /var/config/melonDS/ - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/melonDS/melonDS.ini -} - -citra_init() { - echo "------------------------" - echo "Initializing CITRA" - echo "------------------------" - # removing config directory to wipe legacy files - rm -rf /var/config/citra-emu - mkdir -pv /var/config/citra-emu/ - mkdir -pv "$rdhome/saves/n3ds/citra/nand/" - mkdir -pv "$rdhome/saves/n3ds/citra/sdmc/" - dir_prep "$rdhome/bios/citra/sysdata" "/var/data/citra-emu/sysdata" - dir_prep "$rdhome/.logs/citra" "/var/data/citra-emu/log" - cp -fv $emuconfigs/citra/qt-config.ini /var/config/citra-emu/qt-config.ini - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini -} - -rpcs3_init() { - echo "------------------------" - echo "Initializing RPCS3" - echo "------------------------" - # removing config directory to wipe legacy files - rm -rf /var/config/rpcs3 - mkdir -pv /var/config/rpcs3/ - cp -fvr $emuconfigs/rpcs3/* /var/config/rpcs3/ - sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/config/rpcs3/vfs.yml -} - -xemu_init() { - echo "------------------------" - echo "Initializing XEMU" - echo "------------------------" - mkdir -pv $rdhome/saves/xbox/xemu/ - # removing config directory to wipe legacy files - rm -rf /var/config/xemu - rm -rf /var/data/xemu - dir_prep "/var/config/xemu" "/var/data/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look - cp -fv $emuconfigs/xemu.toml /var/config/xemu/xemu.toml - sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/config/xemu/xemu.toml - # Preparing HD dummy Image if the image is not found - if [ ! -f $rdhome/bios/xbox_hdd.qcow2 ] - then - wget "https://github.com/mborgerson/xemu-hdd-image/releases/latest/download/xbox_hdd.qcow2.zip" -P $rdhome/bios/ - unzip -q $rdhome/bios/xbox_hdd.qcow2.zip -d $rdhome/bios/ - rm -rfv $rdhome/bios/xbox_hdd.qcow2.zip - fi -} - -ppssppsdl_init() { - echo "------------------------" - echo "Initializing PPSSPPSDL" - echo "------------------------" - # removing config directory to wipe legacy files - rm -rf /var/config/ppsspp - mkdir -p /var/config/ppsspp/PSP/SYSTEM/ - cp -fv $emuconfigs/ppssppsdl/* /var/config/ppsspp/PSP/SYSTEM/ - sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/config/ppsspp/PSP/SYSTEM/ppsspp.ini -} - -duckstation_init() { - echo "------------------------" - echo "Initializing DUCKSTATION" - echo "------------------------" - dir_prep "$rdhome/saves/duckstation" "/var/data/duckstation/memcards" # This was not previously included, so performing first for save data safety. - dir_prep "$rdhome/states/duckstation" "/var/data/duckstation/savestates" # This was not previously included, so performing first for state data safety. - # removing config directory to wipe legacy files - rm -rf /var/config/duckstation - mkdir -p /var/data/duckstation/ - cp -fv $emuconfigs/duckstation/* /var/data/duckstation - sed -i 's#/home/deck/retrodeck/bios#'$rdhome/bios'#g' /var/data/duckstation/settings.ini -} - -ryujinx_init() { - echo "------------------------" - echo "Initializing RYUJINX" - echo "------------------------" - # removing config directory to wipe legacy files - rm -rf /var/config/Ryujinx - mkdir -p /var/config/Ryujinx/system - cp -fv $emuconfigs/ryujinx/* /var/config/Ryujinx - sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/config/Ryujinx/Config.json - dir_prep "$rdhome/bios/switch/keys" "/var/config/Ryujinx/system" -} - -standalones_init() { - # This script is configuring the standalone emulators with the default files present in emuconfigs folder - - echo "------------------------------------" - echo "Initializing standalone emulators" - echo "------------------------------------" - citra_init - dolphin_init - duckstation_init - melonds_init - pcsx2_init - ppssppsdl_init - primehack_init - rpcs3_init - ryujinx_init - xemu_init - yuzu_init -} - -ra_init() { - # removing config directory to wipe legacy files - rm -rf /var/config/retroarch - mkdir -p /var/config/retroarch - dir_prep "$rdhome/bios" "/var/config/retroarch/system" - dir_prep "$rdhome/.logs/retroarch" "/var/config/retroarch/logs" - mkdir -pv /var/config/retroarch/shaders/ - cp -rf /app/share/libretro/shaders /var/config/retroarch/ - dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders" - mkdir -pv /var/config/retroarch/cores/ - cp -f /app/share/libretro/cores/* /var/config/retroarch/cores/ - cp -fv $emuconfigs/retroarch/retroarch.cfg /var/config/retroarch/ - cp -fv $emuconfigs/retroarch/retroarch-core-options.cfg /var/config/retroarch/ - mkdir -pv /var/config/retroarch/config/ - cp -rf $emuconfigs/retroarch/core-overrides/* /var/config/retroarch/config - #rm -rf $rdhome/bios/bios # in some situations a double bios symlink is created - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/retroarch/retroarch.cfg - - # PPSSPP - echo "--------------------------------" - echo "Initializing PPSSPP_LIBRETRO" - echo "--------------------------------" - if [ -d $rdhome/bios/PPSSPP/flash0/font ] - then - mv -fv $rdhome/bios/PPSSPP/flash0/font $rdhome/bios/PPSSPP/flash0/font.bak - fi - mkdir -p $rdhome/bios/PPSSPP - #if [ ! -f "$rdhome/bios/PPSSPP/ppge_atlas.zim" ] - #then - wget "https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip" -P $rdhome/bios/PPSSPP - unzip -q "$rdhome/bios/PPSSPP/master.zip" -d $rdhome/bios/PPSSPP/ - mv -f "$rdhome/bios/PPSSPP/ppsspp-master/assets/"* "$rdhome/bios/PPSSPP/" - rm -rfv "$rdhome/bios/PPSSPP/master.zip" - rm -rfv "$rdhome/bios/PPSSPP/ppsspp-master" - #fi - if [ -d $rdhome/bios/PPSSPP/flash0/font.bak ] - then - mv -fv $rdhome/bios/PPSSPP/flash0/font.bak $rdhome/bios/PPSSPP/flash0/font - fi - - # MSX / SVI / ColecoVision / SG-1000 - echo "-----------------------------------------------------------" - echo "Initializing MSX / SVI / ColecoVision / SG-1000 LIBRETRO" - echo "-----------------------------------------------------------" - wget "http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip" -P $rdhome/bios/MSX - unzip -q "$rdhome/bios/MSX/blueMSXv282full.zip" -d $rdhome/bios/MSX - mv -f $rdhome/bios/MSX/Databases $rdhome/bios/Databases - mv -f $rdhome/bios/MSX/Machines $rdhome/bios/Machines - rm -rfv $rdhome/bios/MSX -} - -cli_emulator_reset() { - # This function will reset one or more emulators from the command line arguments. - # USAGE: cli_emulator_reset $emulator - - case $1 in - - "retroarch" ) - ra_init - ;; - "citra" ) - citra_init - ;; - "dolphin" ) - dolphin_init - ;; - "duckstation" ) - duckstation_init - ;; - "melonds" ) - melonds_init - ;; - "pcsx2" ) - pcsx2_init - ;; - "ppsspp" ) - ppssppsdl_init - ;; - "primehack" ) - primehack_init - ;; - "rpcs3" ) - rpcs3_init - ;; - "xemu" ) - xemu_init - ;; - "yuzu" ) - yuzu_init - ;; - "all-emulators" ) - ra_init - standalones_init - ;; - esac -} - -emulators_post_move() { - # This script will redo the symlinks for all emulators after moving the $rdhome location without resetting other options - # FUTURE WORK: The sed commands here should be replaced with set_setting_value and dir_prep should be replaced with changing paths in config files directly where possible - - # ES section - dir_prep $roms_folder "/var/config/emulationstation/ROMs" - - # RA section - dir_prep "$rdhome/bios" "/var/config/retroarch/system" - dir_prep "$rdhome/.logs/retroarch" "/var/config/retroarch/logs" - dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders" - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/retroarch/retroarch.cfg - - # Yuzu section - dir_prep "$rdhome/bios/switch/keys" "/var/data/yuzu/keys" - dir_prep "$rdhome/bios/switch/registered" "/var/data/yuzu/nand/system/Contents/registered" - dir_prep "$rdhome/saves/switch/yuzu/nand" "/var/data/yuzu/nand" - dir_prep "$rdhome/saves/switch/yuzu/sdmc" "/var/data/yuzu/sdmc" - dir_prep "$rdhome/.logs/yuzu" "/var/data/yuzu/log" - dir_prep "$rdhome/screenshots" "/var/data/yuzu/screenshots" - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini - - # Dolphin section - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/dolphin-emu/Dolphin.ini - dir_prep "$rdhome/saves/gc/dolphin/EUR" "/var/data/dolphin-emu/GC/EUR" - dir_prep "$rdhome/saves/gc/dolphin/USA" "/var/data/dolphin-emu/GC/USA" - dir_prep "$rdhome/saves/gc/dolphin/JAP" "/var/data/dolphin-emu/GC/JAP" - dir_prep "$rdhome/screenshots" "/var/data/dolphin-emu/ScreenShots" - dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves" - dir_prep "$rdhome/saves/wii/dolphin" "/var/data/dolphin-emu/Wii/" - - # Primehack section - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/primehack/Dolphin.ini - dir_prep "$rdhome/saves/gc/primehack/EUR" "/var/data/primehack/GC/EUR" - dir_prep "$rdhome/saves/gc/primehack/USA" "/var/data/primehack/GC/USA" - dir_prep "$rdhome/saves/gc/primehack/JAP" "/var/data/primehack/GC/JAP" - dir_prep "$rdhome/screenshots" "/var/data/primehack/ScreenShots" - dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves" - dir_prep "$rdhome/saves/wii/primehack" "/var/data/primehack/Wii/" - - # PCSX2 section - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2_ui.ini - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/PCSX2/inis/PCSX2.ini - - # MelonDS section - dir_prep "$rdhome/bios" "/var/config/melonDS/bios" - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/melonDS/melonDS.ini - - # Citra section - dir_prep "$rdhome/bios/citra/sysdata" "/var/data/citra-emu/sysdata" - dir_prep "$rdhome/.logs/citra" "/var/data/citra-emu/log" - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini - - # RPCS3 section - sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/config/rpcs3/vfs.yml - - # XEMU section - sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/data/xemu/xemu.toml - - # PPSSPP Standalone section - sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/config/ppsspp/PSP/SYSTEM/ppsspp.ini - - # Duckstation section - sed -i 's#/home/deck/retrodeck/bios#'$rdhome/bios'#g' /var/data/duckstation/settings.ini - - # Ryujinx section - sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/config/Ryujinx/Config.json - dir_prep "$rdhome/bios/switch/keys" "/var/config/Ryujinx/system" -} - -create_lock() { - # creating RetroDECK's lock file and writing the version in the config file - version=$hard_version - touch "$lockfile" - conf_write -} - -easter_eggs() { - # This function will replace the RetroDECK startup splash screen with a different image if the day and time match a listing in easter_egg_checklist.cfg - # The easter_egg_checklist.cfg file has the current format: $start_date^$end_date^$start_time^$end_time^$splash_file - # Ex. The line "1001^1031^0000^2359^spooky.svg" would show the file "spooky.svg" During any time of day in the month of October - # The easter_egg_checklist.cfg is read in order, so lines higher in the file will have higher priority in the event of an overlap - # USAGE: easter_eggs - current_day=$(date +"%0m%0d") # Read the current date in a format that can be calculated in ranges - current_time=$(date +"%0H%0M") # Read the current time in a format that can be calculated in ranges - while IFS="^" read -r start_date end_date start_time end_time splash_file # Read Easter Egg checklist file and separate values - do - if [[ $current_day -ge "$start_date" && $current_day -le "$end_date" && $current_time -ge "$start_time" && $current_time -le "$end_time" ]]; then # If current line specified date/time matches current date/time, set $splash_file to be deployed - new_splash_file="$splashscreen_dir/$splash_file" - break - else # When there are no matches, the default splash screen is set to deploy - new_splash_file="$default_splash_file" - fi - done < $easter_egg_checklist - - cp -fv "$new_splash_file $current_splash_file" # Deploy assigned splash screen -} - -start_retrodeck() { - echo "Checking to see if today has a surprise..." - easter_eggs - # normal startup - echo "Starting RetroDECK v$version" - emulationstation --home /var/config/emulationstation -} - -finit_browse() { -# Function for choosing data directory location during first/forced init -path_selected=false -while [ $path_selected == false ] -do - local target="$(zenity --file-selection --title="Choose RetroDECK data directory location" --directory)" - if [[ ! -z $target ]]; then - if [[ -w $target ]]; then - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \ - --cancel-label="No" \ - --ok-label "Yes" \ - --text="Your RetroDECK data folder will be:\n\n$target/retrodeck\n\nis that ok?" - if [ $? == 0 ] #yes - then - path_selected=true - echo "$target/retrodeck" - break - else - zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" --text="Do you want to quit?" - if [ $? == 0 ] # yes, quit - then - exit 2 - fi - fi - fi - else - zenity --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --ok-label "Quit" \ - --text="No location was selected. Please run RetroDECK again to retry." - exit 2 - fi -done -} - -finit() { -# Force/First init, depending on the situation - - echo "Executing finit" - - # Internal or SD Card? - choice=$(configurator_destination_choice_dialog "RetroDECK data" "Welcome to the first configuration of RetroDECK.\nThe setup will be quick but please READ CAREFULLY each message in order to avoid misconfigurations.\n\nWhere do you want your RetroDECK data folder to be located?\n\nThis folder will contain all ROMs, BIOSs and scraped data." ) - echo "Choice is $choice" - - case $choice in - - "" ) # Cancel or X button quits - echo "Now quitting" - exit 2 - ;; - - "Internal Storage" ) # Internal - echo "Internal selected" - rdhome="$HOME/retrodeck" - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - if [[ -L $rdhome ]]; then #Remove old symlink from existing install, if it exists - unlink $rdhome - fi - ;; - - "SD Card" ) - echo "SD Card selected" - if [ ! -d "$sdcard" ] # SD Card path is not existing - then - echo "Error: SD card not found" - zenity --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --ok-label "Browse" \ - --text="SD Card was not find in the default location.\nPlease choose the SD Card root.\nA retrodeck folder will be created starting from the directory that you selected." - rdhome=$(finit_browse) # Calling the browse function - if [[ -z $rdhome ]]; then # If user hit the cancel button - exit 2 - fi - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - elif [ ! -w "$sdcard" ] #SD card found but not writable - then - echo "Error: SD card found but not writable" - zenity --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --ok-label "Quit" \ - --text="SD card was found but is not writable\nThis can happen with cards formatted on PC.\nPlease format the SD card through the Steam Deck's Game Mode and run RetroDECK again." - echo "Now quitting" - exit 2 - else - rdhome="$sdcard/retrodeck" - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - fi - ;; - - "Custom Location" ) - echo "Custom Location selected" - zenity --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --ok-label "Browse" \ - --text="Please choose the root folder for the RetroDECK data.\nA retrodeck folder will be created starting from the directory that you selected." - rdhome=$(finit_browse) # Calling the browse function - if [[ -z $rdhome ]]; then # If user hit the cancel button - exit 2 - fi - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - ;; - - esac - - if [[ ! "$rdhome" == "$HOME/retrodeck" && ! -L $HOME/retrodeck ]]; then # If data stored on SD card, create /home/deck/retrodeck symlink to keep things working until configs can get modified - echo "Symlinking retrodeck directory to home directory" - dir_prep "$rdhome" "$HOME/retrodeck" - fi - - mkdir -pv $roms_folder - - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \ - --text="RetroDECK will now install the needed files, which can take up to one minute.\nRetroDECK will start once the process is completed.\n\nPress OK to continue." - - ( - # Recreating the folder - rm -rf /var/config/emulationstation/ - mkdir -p /var/config/emulationstation/ - - # Initializing ES-DE - # TODO: after the next update of ES-DE this will not be needed - let's test it - emulationstation --home /var/config/emulationstation --create-system-dirs - - # Initializing ROMs folder - Original in retrodeck home (or SD Card) - dir_prep $roms_folder "/var/config/emulationstation/ROMs" - - mkdir -pv $saves_folder - mkdir -pv $states_folder - mkdir -pv $rdhome/screenshots - mkdir -pv $rdhome/.logs - - # XMLSTARLET HERE - cp -fv /app/retrodeck/es_settings.xml /var/config/emulationstation/.emulationstation/es_settings.xml - - # ES-DE preparing themes and scraped folders - dir_prep "$media_folder" "/var/config/emulationstation/.emulationstation/downloaded_media" - dir_prep "$themes_folder" "/var/config/emulationstation/.emulationstation/themes" - - # PICO-8 - dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed - dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway) - dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder - - ra_init - standalones_init - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Finishing Initialization" \ - --text="RetroDECK is finishing the initial setup process, please wait." - - create_lock -} - -#========================= -# REUSABLE DIALOGS SECTION -#========================= - -debug_dialog() { - # This function is for displaying commands run by the Configurator without actually running them - # USAGE: debug_dialog "command" - - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Debug Dialog" \ - --text="$1" -} - -configurator_process_complete_dialog() { - # This dialog shows when a process is complete. - # USAGE: configurator_process_complete_dialog "process text" - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Quit" --extra-button="OK" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Process Complete" \ - --text="The process of $1 is now complete.\n\nYou may need to quit and restart RetroDECK for your changes to take effect\n\nClick OK to return to the Main Menu or Quit to return to RetroDECK." - - if [ ! $? == 0 ] # OK button clicked - then - configurator_welcome_dialog - fi -} - -configurator_generic_dialog() { - # This dialog is for showing temporary messages before another process happens. - # USAGE: configurator_generid_dialog "info text" - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility" \ - --text="$1" -} - -configurator_destination_choice_dialog() { - # This dialog is for making things easy for new users to move files to common locations. Gives the options for "Internal", "SD Card" and "Custom" locations. - # USAGE: $(configurator_destination_choice_dialog "folder being moved" "action text") - # This function returns one of the values: "Back" "Internal Storage" "SD Card" "Custom Location" - choice=$(zenity --title "RetroDECK Configurator Utility - Moving $1 folder" --info --no-wrap --ok-label="Back" --extra-button="Internal Storage" --extra-button="SD Card" --extra-button="Custom Location" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --text="$2") - - echo $choice -} - -configurator_reset_confirmation_dialog() { - # This dialog provides a confirmation for any reset functions, before the reset is actually performed. - # USAGE: $(configurator_reset_confirmation_dialog "emulator being reset" "action text") - # This function will return a "true" if the user clicks Confirm, and "false" if they click Cancel. - choice=$(zenity --title "RetroDECK Configurator Utility - Reset $1" --question --no-wrap --cancel-label="Cancel" --ok-label="Confirm" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --text="$2") - if [[ $? == "0" ]]; then - echo "true" - else - echo "false" - fi -} \ No newline at end of file diff --git a/functions/050_save_migration.sh b/functions/050_save_migration.sh new file mode 100644 index 00000000..f0187e24 --- /dev/null +++ b/functions/050_save_migration.sh @@ -0,0 +1,172 @@ +#!/bin/bash + +save_migration() { + # Finding existing ROMs folder + if [ -d "$default_sd/retrodeck" ] + then + # ROMs on SD card + roms_folder="$default_sd/retrodeck/roms" + if [[ ! -L $rdhome && ! -L $rdhome/roms ]]; then # Add a roms folder symlink back to ~/retrodeck if missing, to fix things like PS2 autosaves until user migrates whole ~retrodeck directory + ln -s $roms_folder $rdhome/roms + fi + else + # ROMs on Internal + roms_folder="$HOME/retrodeck/roms" + fi + echo "ROMs folder found at $roms_folder" + + # Unhiding downloaded media from the previous versions + if [ -d "$rdhome/.downloaded_media" ] + then + mv -fv "$rdhome/.downloaded_media" "$media_folder" + fi + + # Unhiding themes folder from the previous versions + if [ -d "$rdhome/.themes" ] + then + mv -fv "$rdhome/.themes" "$themes_folder" + fi + + # Doing the dir prep as we don't know from which version we came + dir_prep "$media_folder" "/var/config/emulationstation/.emulationstation/downloaded_media" + dir_prep "$themes_folder" "/var/config/emulationstation/.emulationstation/themes" + mkdir -pv $rdhome/.logs #this was added later, maybe safe to remove in a few versions + + # Resetting es_settings, now we need it but in the future I should think a better solution, maybe with sed + cp -fv /app/retrodeck/es_settings.xml /var/config/emulationstation/.emulationstation/es_settings.xml + + # 0.4 -> 0.5 + # Perform save and state migration if needed + + # Moving PCSX2 Saves + mv -fv /var/config/PCSX2/sstates/* $rdhome/states/ps2/pcsx2 + mv -fv /var/config/PCSX2/memcards/* $rdhome/saves/ps2/memcards + + # Moving Citra saves from legacy location to 0.5.0b structure + + mv -fv $rdhome/saves/Citra/* $rdhome/saves/n3ds/citra + rmdir $rdhome/saves/Citra # Old folder cleanup + + versionwheresaveschanged="0.4.5b" # Hardcoded break point between unsorted and sorted saves + + if [[ $(sed -e "s/\.//g" <<< $hard_version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]] && [[ ! $(sed -e "s/\.//g" <<< $version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]]; then # Check if user is upgrading from the version where save organization was changed. Try not to reuse this, it things 0.4.5b is newer than 0.4.5 + migration_logfile=$rdhome/.logs/savemove_"$(date +"%Y_%m_%d_%I_%M_%p").log" + save_backup_file=$rdhome/savebackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip" + state_backup_file=$rdhome/statesbackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip" + + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --text="You are updating to a version of RetroDECK where save file locations have changed!\n\nYour existing files will be backed up for safety and then sorted automatically.\n\nIf a file cannot be sorted automatically it will remain where it is for manual sorting.\n\nPLEASE BE PATIENT! This process can take several minutes if you have a large ROM library." + + allgames=($(find "$roms_folder" -maxdepth 2 -mindepth 2 ! -name "systeminfo.txt" ! -name "systems.txt" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" ! -name "*^*" | sed -e "s/ /\^/g")) # Build an array of all games and multi-disc-game-containing folders, adding whitespace placeholder + + allsaves=($(find "$saves_folder" -mindepth 1 -maxdepth 1 -name "*.*" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" | sed -e "s/ /\^/g")) # Build an array of all save files, ignoring standalone emulator sub-folders, adding whitespace placeholder + + allstates=($(find "$states_folder" -mindepth 1 -maxdepth 1 -name "*.*" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" | sed -e "s/ /\^/g")) # Build an array of all state files, ignoring standalone emulator sub-folders, adding whitespace placeholder + + totalsaves=${#allsaves[@]} + totalstates=${#allstates[@]} + filesleft= + current_dest_folder= + gamestoskip= + + tar -C $rdhome -czf $save_backup_file saves # Backup save directory for safety + echo "Saves backed up to" $save_backup_file >> $migration_logfile + tar -C $rdhome -czf $state_backup_file states # Backup state directory for safety + echo "States backed up to" $state_backup_file >> $migration_logfile + + ( + movefile() { # Take matching save and rom files and sort save into appropriate system folder + echo "# $filesleft $currentlybeingmoved remaining..." # These lines update the Zenity progress bar + progress=$(( 100 - (( 100 / "$totalfiles" ) * "$filesleft" ))) + echo $progress + filesleft=$((filesleft-1)) + if [[ ! " ${gamestoskip[*]} " =~ " ${1} " ]]; then # If the current game name exists multiple times in array ie. /roms/snes/Mortal Kombat 3.zip and /roms/genesis/Mortal Kombat 3.zip, skip and alert user to sort manually + game=$(sed -e "s/\^/ /g" <<< "$1") # Remove whitespace placeholder + gamebasename=$(basename "$game" | sed -e 's/\..*//') # Extract pure file name ie. /roms/snes/game1.zip becomes game1 + systemdir="$(basename "$(dirname "$1")")" # Extract parent directory identifying system ROM belongs to + matches=($(find "$roms_folder" -maxdepth 2 -mindepth 2 -name "$gamebasename"".*" | sed -e 's/ /^/g' | sed -e 's/\..*//')) # Search for multiple instances of pure game name, adding to skip list if found + if [[ ${#matches[@]} -gt 1 ]]; then + echo "ERROR: Multiple ROMS found with name:" $gamebasename "Please sort saves and states for these ROMS manually" >> $migration_logfile + gamestoskip+=("$1") + return + fi + echo "INFO: Examining ROM file:" "$game" >> $migration_logfile + echo "INFO: System detected as" $systemdir >> $migration_logfile + sosfile=$(sed -e "s/\^/ /g" <<< "$2") # Remove whitespace placeholder from s-ave o-r s-tate file + sospurebasename="$(basename "$sosfile")" # Extract pure file name ie. /saves/game1.sav becomes game1 + echo "INFO: Current save or state being examined for match:" $sosfile >> $migration_logfile + echo "INFO: Matching save or state" $sosfile "and game" $game "found." >> $migration_logfile + echo "INFO: Moving save or state to" $current_dest_folder"/"$systemdir"/"$sosbasename >> $migration_logfile + if [[ ! -d $current_dest_folder"/"$systemdir ]]; then # If system directory doesn't exist for save yet, create it + echo "WARNING: Creating missing system directory" $current_dest_folder"/"$systemdir + mkdir $current_dest_folder/$systemdir + fi + mv "$sosfile" -t $current_dest_folder/$systemdir # Move save to appropriate system directory + return + else + echo "WARNING: Game with name" "$(basename "$1" | sed -e "s/\^/ /g")" "already found. Skipping to next game..." >> $migration_logfile # Inform user of game being skipped due to duplicate ROM names + fi + } + + find "$roms_folder" -mindepth 2 -maxdepth 2 -name "*\^*" -exec echo "ERROR: Game named" {} "found, please move save manually" \; >> $migration_logfile # Warn user if any of their files have the whitespace replacement character used by the script + + totalfiles=$totalsaves #set variables for save file migration + filesleft=$totalsaves + currentlybeingmoved="saves" + current_dest_folder=$saves_folder + + for i in "${allsaves[@]}"; do # For each save file, compare to every ROM file name looking for a match + found= + currentsave=($(basename "$i" | sed -e 's/\..*//')) # Extract pure file name ie. /saves/game1.sav becomes game1 + for j in "${allgames[@]}"; do + currentgame=($(basename "$j" | sed -e 's/\..*//')) # Extract pure file name ie. /roms/snes/game1.zip becomes game1 + [[ $currentgame == $currentsave ]] && { found=1; break; } # If names match move to next stage, otherwise skip + done + [[ -n $found ]] && movefile $j $i || echo "ERROR: No ROM match found for save file" $i | sed -e 's/\^/ /g' >> $migration_logfile # If a match is found, run movefile() otherwise warn user of stranded save file + done + + totalfiles=$totalstates #set variables for state file migration + filesleft=$totalstates + currentlybeingmoved="states" + current_dest_folder=$states_folder + + for i in "${allstates[@]}"; do # For each state file, compare to every ROM file name looking for a match + found= + currentstate=($(basename "$i" | sed -e 's/\..*//')) # Extract pure file name ie. /states/game1.sav becomes game1 + for j in "${allgames[@]}"; do + currentgame=($(basename "$j" | sed -e 's/\..*//')) # Extract pure file name ie. /roms/snes/game1.zip becomes game1 + [[ $currentgame == $currentstate ]] && { found=1; break; } # If names match move to next stage, otherwise skip + done + [[ -n $found ]] && movefile $j $i || echo "ERROR: No ROM match found for state file" $i | sed -e 's/\^/ /g' >> $migration_logfile # If a match is found, run movefile() otherwise warn user of stranded state file + done + + ) | + zenity --progress \ + --icon-name=net.retrodeck.retrodeck \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title="Processing Files" \ + --text="# files remaining..." \ + --percentage=0 \ + --no-cancel \ + --auto-close + + if [[ $(cat $migration_logfile | grep "ERROR" | wc -l) -eq 0 ]]; then + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --text="The migration process has sorted all of your files automatically.\n\nEverything should be working normally, if you experience any issues please check the RetroDECK wiki or contact us directly on the Discord." + + else + cat $migration_logfile | grep "ERROR" > "$rdhome/manual_sort_needed.log" + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --text="The migration process was unable to sort $(cat $migration_logfile | grep "ERROR" | wc -l) files automatically.\n\nThese files will need to be moved manually to their new locations, find more detail on the RetroDECK wiki.\n\nA log of the files that need manual sorting can be found at $rdhome/manual_sort_needed.log" + fi + + else + echo "Version" $version "is after the save and state organization was changed, no need to sort again" + fi +} diff --git a/functions/checks.sh b/functions/checks.sh new file mode 100644 index 00000000..ead3f45d --- /dev/null +++ b/functions/checks.sh @@ -0,0 +1,103 @@ +#!/bin/bash + +check_network_connectivity() { + # This function will do a basic check for network availability and return "true" if it is working. + # USAGE: if [[ $(check_network_connectivity) == "true" ]]; then + + if [[ ! -z $(wget --spider -t 1 $remote_network_target_1 | grep "HTTP response 200") ]]; then + local network_connected="true" + elif [[ ! -z $(wget --spider -t 1 $remote_network_target_2 | grep "HTTP response 200") ]]; then + local network_connected="true" + elif [[ ! -z $(wget --spider -t 1 $remote_network_target_3 | grep "HTTP response 200") ]]; then + local network_connected="true" + else + local network_connected="false" + fi + + echo "$network_connected" +} + +check_desktop_mode() { + # This function will do a basic check of if we are running in Steam Deck game mode or not, and return "true" if we are outside of game mode + # USAGE: if [[ $(check_desktop_mode) == "true" ]]; then + + if [[ ! $XDG_CURRENT_DESKTOP == "gamescope" ]]; then + echo "true" + else + echo "false" + fi +} + +check_for_version_update() { + # This function will perform a basic online version check and alert the user if there is a new version available. + + wget -q --spider "https://api.github.com/repos/XargonWan/$update_repo/releases/latest" + + if [ $? -eq 0 ]; then + local online_version=$(curl --silent "https://api.github.com/repos/XargonWan/$update_repo/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + + if [[ ! "$update_ignore" == "$online_version" ]]; then + if [[ "$update_repo" == "RetroDECK" ]] && [[ $(sed -e 's/[\.a-z]//g' <<< $version) -le $(sed -e 's/[\.a-z]//g' <<< $online_version) ]]; then + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Ignore this version" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Update Available" \ + --text="There is a new version of RetroDECK on the stable release channel $online_version. Would you like to update to it?\n\n(depending on your internet speed this could takes several minutes).") + rc=$? # Capture return code, as "Yes" button has no text value + if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked + if [[ $choice == "Ignore this version" ]]; then + set_setting_value $rd_conf "update_ignore" "$online_version" retrodeck "options" # Store version to ignore for future checks + fi + else # User clicked "Yes" + configurator_generic_dialog "RetroDECK Online Update" "The update process may take several minutes.\n\nAfter the update is complete, RetroDECK will close. When you run it again you will be using the latest version." + ( + flatpak-spawn --host flatpak update --noninteractive -y net.retrodeck.retrodeck + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Updater" \ + --text="Upgrade in process please wait (this could takes several minutes)." + configurator_generic_dialog "RetroDECK Online Update" "The update process is now complete!\n\nPlease restart RetroDECK to keep the fun going." + exit 1 + fi + elif [[ "$update_repo" == "RetroDECK-cooker" ]] && [[ ! $version == $online_version ]]; then + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Ignore this version" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Update Available" \ + --text="There is a more recent build of the RetroDECK cooker branch.\nYou are running version $hard_version, the latest is $online_version.\n\nWould you like to update to it?\nIf you would like to skip reminders about this version, click \"Ignore this version\".\nYou will be reminded again at the next version update.\n\nIf you would like to disable these update notifications entirely, disable Online Update Checks in the Configurator.") + rc=$? # Capture return code, as "Yes" button has no text value + if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked + if [[ $choice == "Ignore this version" ]]; then + set_setting_value $rd_conf "update_ignore" "$online_version" retrodeck "options" # Store version to ignore for future checks. + fi + else # User clicked "Yes" + configurator_generic_dialog "RetroDECK Online Update" "The update process may take several minutes.\n\nAfter the update is complete, RetroDECK will close. When you run it again you will be using the latest version." + ( + local latest_cooker_download=$(curl --silent https://api.github.com/repos/XargonWan/$update_repo/releases/latest | grep '"browser_download_url":' | sed -E 's/.*"([^"]+)".*/\1/') + mkdir -p "$rdhome/RetroDECK_Updates" + wget -P "$rdhome/RetroDECK_Updates" $latest_cooker_download + flatpak-spawn --host flatpak install --user --bundle --noninteractive -y "$rdhome/RetroDECK_Updates/RetroDECK.flatpak" + rm -rf "$rdhome/RetroDECK_Updates" # Cleanup old bundles to save space + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Updater" \ + --text="RetroDECK is updating to the latest version, please wait." + configurator_generic_dialog "RetroDECK Online Update" "The update process is now complete!\n\nPlease restart RetroDECK to keep the fun going." + exit 1 + fi + fi + fi + else # Unable to reach the GitHub API for some reason + configurator_generic_dialog "RetroDECK Online Update" "RetroDECK is unable to reach the GitHub API to perform a version check.\nIt's possible that location is being blocked by your network or ISP.\n\nIf the problem continues, you will need to disable internal checks through the Configurator\nand perform updates manually through the Discover store." + fi +} + +validate_input() { + while IFS="^" read -r input action + do + if [[ "$input" == "$1" ]]; then + eval "$action" + input_validated="true" + fi + done < $input_validation +} diff --git a/functions/compression.sh b/functions/compression.sh new file mode 100644 index 00000000..72876292 --- /dev/null +++ b/functions/compression.sh @@ -0,0 +1,183 @@ +#!/bin/bash + +compress_game() { + # Function for compressing one or more files to .chd format + # USAGE: compress_game $format $full_path_to_input_file + local file="$2" + local filename_no_path=$(basename "$file") + local filename_no_extension="${filename_no_path%.*}" + local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file") + local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension" + + if [[ "$1" == "chd" ]]; then + /app/bin/chdman createcd -i "$source_file" -o "$dest_file".chd + elif [[ "$1" == "zip" ]]; then + zip -jq9 "$dest_file".zip "$source_file" + elif [[ "$1" == "rvz" ]]; then + dolphin-tool convert -f rvz -b 131072 -c zstd -l 5 -i "$source_file" -o "$dest_file.rvz" + fi +} + +find_compatible_compression_format() { + # This function will determine what compression format, if any, the file and system are compatible with + # USAGE: find_compatible_compression_format "$file" + local normalized_filename=$(echo "$1" | tr '[:upper:]' '[:lower:]') + local system=$(echo "$1" | grep -oE "$roms_folder/[^/]+" | grep -oE "[^/]+$") + + if [[ $(validate_for_chd "$1") == "true" ]] && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "chd" ]]; then + echo "chd" + elif grep -qF ".${normalized_filename##*.}" $zip_compressable_extensions && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "zip" ]]; then + echo "zip" + elif echo "$normalized_filename" | grep -qE '\.iso|\.gcm' && [[ $(sed -n '/^\[/{h;d};/\b'"$system"'\b/{g;s/\[\(.*\)\]/\1/p;q};' $compression_targets) == "rvz" ]]; then + echo "rvz" + else + # If no compatible format can be found for the input file + echo "none" + fi +} + +validate_for_chd() { + # Function for validating chd compression candidates, and compresses if validation passes. Supports .cue, .iso and .gdi formats ONLY + # USAGE: validate_for_chd $input_file + + local file="$1" + local normalized_filename=$(echo "$file" | tr '[:upper:]' '[:lower:]') + local file_validated="false" + chd_validation_log_file="compression_$(basename "$file").log" + echo "Validating file:" "$file" > "$logs_folder/$chd_validation_log_file" + if echo "$normalized_filename" | grep -qE '\.iso|\.cue|\.gdi'; then + echo ".cue/.iso/.gdi file detected" >> "$logs_folder/$chd_validation_log_file" + local file_path=$(dirname "$(realpath "$file")") + local file_base_name=$(basename "$file") + local file_name=${file_base_name%.*} + if [[ "$normalized_filename" == *".cue" ]]; then # Validate .cue file + if [[ ! "$file_path" == *"dreamcast"* ]]; then # .bin/.cue compression may not work for Dreamcast, only GDI or ISO # TODO: verify + echo "Validating .cue associated .bin files" >> "$logs_folder/$chd_validation_log_file" + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + echo "Associated bin files read:" >> "$logs_folder/$chd_validation_log_file" + printf '%s\n' "$cue_bin_files" >> "$logs_folder/$chd_validation_log_file" + if [[ ! -z "$cue_bin_files" ]]; then + while IFS= read -r line + do + echo "looking for $file_path/$line" >> "$logs_folder/$chd_validation_log_file" + if [[ -f "$file_path/$line" ]]; then + echo ".bin file found at $file_path/$line" >> "$logs_folder/$chd_validation_log_file" + file_validated="true" + else + echo ".bin file NOT found at $file_path/$line" >> "$logs_folder/$chd_validation_log_file" + echo ".cue file could not be validated. Please verify your .cue file contains the correct corresponding .bin file information and retry." >> "$logs_folder/$chd_validation_log_file" + file_validated="false" + break + fi + done < <(printf '%s\n' "$cue_bin_files") + fi + else + echo ".cue files not compatible with Dreamcast CHD compression" >> "$logs_folder/$chd_validation_log_file" + fi + echo $file_validated + else # If file is a .iso or .gdi + file_validated="true" + echo $file_validated + fi + else + echo "File type not recognized. Supported file types are .cue, .gdi and .iso" >> "$logs_folder/$chd_validation_log_file" + echo $file_validated + fi +} + +cli_compress_single_game() { + # This function will compress a single file passed from the CLI arguments + # USAGE: cli_compress_single_game $full_file_path + local file=$(realpath "$1") + read -p "Do you want to have the original file removed after compression is complete? Please answer y/n and press Enter: " post_compression_cleanup + read -p "RetroDECK will now attempt to compress your selected game. Press Enter key to continue..." + if [[ ! -z "$file" ]]; then + if [[ -f "$file" ]]; then + check_system=$(echo "$file" | grep -oE "$roms_folder/[^/]+" | grep -oE "[^/]+$") + local compatible_compression_format=$(find_compatible_compression_format "$file") + if [[ ! $compatible_compression_format == "none" ]]; then + echo "$(basename "$file") can be compressed to $compatible_compression_format" + compress_game "$compatible_compression_format" "$file" + if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested + if [[ $(basename "$file") == *".cue" ]]; then + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + local file_path=$(dirname "$(realpath "$file")") + while IFS= read -r line + do # Remove associated .bin files + echo "Removing original file "$file_path/$line"" + rm -f "$file_path/$line" + done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file + echo "Removing original file $(basename "$file")" + rm -f "$file" + else + echo "Removing original file $(basename "$file")" + rm -f "$file" + fi + fi + else + echo "$(basename "$file") does not have any compatible compression formats." + fi + else + echo "File not found, please specify the full path to the file to be compressed." + fi + else + echo "Please use this command format \"--compress-one \"" + fi +} + +cli_compress_all_games() { + if echo "$1" | grep -qE 'chd|rvz|zip'; then + local compression_format="$1" + elif [[ "$1" == "all" ]]; then + local compression_format="all" + else + echo "Please enter a supported compression format. Options are \"chd\", \"rvz\", \"zip\" or \"all\"" + exit 1 + fi + local compressable_game="" + local all_compressable_games=() + if [[ $compression_format == "all" ]]; then + local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d') + else + local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d') + fi + + read -p "Do you want to have the original files removed after compression is complete? Please answer y/n and press Enter: " post_compression_cleanup + read -p "RetroDECK will now attempt to compress all compatible games. Press Enter key to continue..." + + while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type + do + local compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt") + if [[ ! -z "$compression_candidates" ]]; then + echo "Checking files for $system" + while IFS= read -r file + do + local compatible_compression_format=$(find_compatible_compression_format "$file") + if [[ ! "$compatible_compression_format" == "none" ]]; then + echo "$(basename "$file") can be compressed to $compatible_compression_format" + compress_game "$compatible_compression_format" "$file" + if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested + if [[ "$file" == *".cue" ]]; then + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + local file_path=$(dirname "$(realpath "$file")") + while IFS= read -r line + do # Remove associated .bin files + echo "Removing original file "$file_path/$line"" + rm -f "$file_path/$line" + done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file + echo "Removing original file "$file"" + rm -f $(realpath "$file") + else + echo "Removing original file "$file"" + rm -f $(realpath "$file") + fi + fi + else + echo "No compatible compression format found for $(basename "$file")" + fi + done < <(printf '%s\n' "$compression_candidates") + else + echo "No compatible files found for compression in $system" + fi + done < <(printf '%s\n' "$compressable_systems_list") +} diff --git a/functions/dialogs.sh b/functions/dialogs.sh new file mode 100644 index 00000000..985f5458 --- /dev/null +++ b/functions/dialogs.sh @@ -0,0 +1,239 @@ +#!/bin/bash + +debug_dialog() { + # This function is for displaying commands run by the Configurator without actually running them + # USAGE: debug_dialog "command" + + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Debug Dialog" \ + --text="$1" +} + +configurator_process_complete_dialog() { + # This dialog shows when a process is complete. + # USAGE: configurator_process_complete_dialog "process text" + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Quit" --extra-button="OK" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Process Complete" \ + --text="The process of $1 is now complete.\n\nYou may need to quit and restart RetroDECK for your changes to take effect\n\nClick OK to return to the Main Menu or Quit to return to RetroDECK." + + if [ ! $? == 0 ] # OK button clicked + then + configurator_welcome_dialog + fi +} + +configurator_generic_dialog() { + # This dialog is for showing temporary messages before another process happens. + # USAGE: configurator_generic_dialog "title text" "info text" + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "$1" \ + --text="$2" +} + +configurator_generic_question_dialog() { + # This dialog provides a generic dialog for getting a response from a user. + # USAGE: $(configurator_generic_question_dialog "title text" "action text") + # This function will return a "true" if the user clicks "Yes", and "false" if they click "No". + choice=$(zenity --title "RetroDECK - $1" --question --no-wrap --cancel-label="No" --ok-label="Yes" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --text="$2") + if [[ $? == "0" ]]; then + echo "true" + else + echo "false" + fi +} + +configurator_destination_choice_dialog() { + # This dialog is for making things easy for new users to move files to common locations. Gives the options for "Internal", "SD Card" and "Custom" locations. + # USAGE: $(configurator_destination_choice_dialog "folder being moved" "action text") + # This function returns one of the values: "Back" "Internal Storage" "SD Card" "Custom Location" + choice=$(zenity --title "RetroDECK Configurator Utility - Moving $1 folder" --info --no-wrap --ok-label="Back" --extra-button="Internal Storage" --extra-button="SD Card" --extra-button="Custom Location" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --text="$2") + + local rc=$? + if [[ $rc == "0" ]] && [[ -z "$choice" ]]; then + echo "Back" + else + echo $choice + fi +} + +configurator_reset_confirmation_dialog() { + # This dialog provides a confirmation for any reset functions, before the reset is actually performed. + # USAGE: $(configurator_reset_confirmation_dialog "emulator being reset" "action text") + # This function will return a "true" if the user clicks Confirm, and "false" if they click Cancel. + choice=$(zenity --title "RetroDECK Configurator Utility - Reset $1" --question --no-wrap --cancel-label="Cancel" --ok-label="Confirm" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --text="$2") + if [[ $? == "0" ]]; then + echo "true" + else + echo "false" + fi +} + +configurator_move_folder_dialog() { + # This dialog will take a folder variable name from retrodeck.cfg and move it to a new location. The variable will be updated in retrodeck.cfg as well as any emulator configs where it occurs. + # USAGE: configurator_move_folder_dialog "folder_variable_name" + local rd_dir_name="$1" # The folder variable name from retrodeck.cfg + local dir_to_move="$(get_setting_value "$rd_conf" "$rd_dir_name" "retrodeck" "paths")/" # The path of that folder variable + local source_root="$(echo $dir_to_move | sed -e 's/\(.*\)\/retrodeck\/.*/\1/')" # The root path of the folder, excluding retrodeck/. So /home/deck/retrodeck/roms becomes /home/deck + if [[ ! "$rd_dir_name" == "rdhome" ]]; then # If a sub-folder is being moved, find it's path without the source_root. So /home/deck/retrodeck/roms becomes retrodeck/roms + local rd_dir_path="$(echo "$dir_to_move" | sed "s/.*\(retrodeck\/.*\)/\1/; s/\/$//")" + else # Otherwise just set the retrodeck root folder + local rd_dir_path="$(basename $dir_to_move)" + fi + + if [[ -d "$dir_to_move" ]]; then # If the directory selected to move already exists at the expected location pulled from retrodeck.cfg + choice=$(configurator_destination_choice_dialog "RetroDECK Data" "Please choose a destination for the $(basename $dir_to_move) folder.") + case $choice in + + "Internal Storage" | "SD Card" | "Custom Location" ) # If the user picks a location + if [[ "$choice" == "Internal Storage" ]]; then # If the user wants to move the folder to internal storage, set the destination target as HOME + local dest_root="$HOME" + elif [[ "$choice" == "SD Card" ]]; then # If the user wants to move the folder to the predefined SD card location, set the target as sdcard from retrodeck.cfg + local dest_root="$sdcard" + else + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "Select the parent folder you would like to store the $(basename $dir_to_move) folder in." + local dest_root=$(directory_browse "RetroDECK directory location") # Set the destination root as the selected custom location + fi + + if [[ (! -z "$dest_root") && ( -w "$dest_root") ]]; then # If user picked a destination and it is writable + if [[ (-d "$dest_root/$rd_dir_path") && (! -L "$dest_root/$rd_dir_path") && (! $rd_dir_name == "rdhome") ]] || [[ "$(realpath $dir_to_move)" == "$dest_root/$rd_dir_path" ]]; then # If the user is trying to move the folder to where it already is (excluding symlinks that will be unlinked) + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "The $(basename $dir_to_move) folder is already at that location, please pick a new one." + configurator_move_folder_dialog "$rd_dir_name" + else + if [[ $(verify_space "$(echo $dir_to_move | sed 's/\/$//')" "$dest_root") ]]; then # Make sure there is enough space at the destination + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "Moving $(basename $dir_to_move) folder to $choice" + unlink "$dest_root/$rd_dir_path" # In case there is already a symlink at the picked destination + move "$dir_to_move" "$dest_root/$rd_dir_path" + if [[ -d "$dest_root/$rd_dir_path" ]]; then # If the move succeeded + eval "$rd_dir_name"="$dest_root/$rd_dir_path" # Set the new path for that folder variable in retrodeck.cfg + if [[ "$rd_dir_name" == "rdhome" ]]; then # If the whole retrodeck folder was moved... + prepare_emulator "postmove" "retrodeck" + fi + prepare_emulator "postmove" "all" # Update all the appropriate emulator path settings + conf_write # Write the settings to retrodeck.cfg + if [[ -z $(ls -1 "$source_root/retrodeck") ]]; then # Cleanup empty old_path/retrodeck folder if it was left behind + rmdir "$source_root/retrodeck" + fi + configurator_process_complete_dialog "moving the RetroDECK data directory to internal storage" + else + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "The moving process was not completed, please try again." + fi + else # If there isn't enough space in the picked destination + zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Move Directories" \ + --text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space." + fi + fi + else # If the user didn't pick any custom destination, or the destination picked is unwritable + if [[ ! -z "$dest_root" ]]; then + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "No destination was chosen, so no files have been moved." + else + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "The chosen destination is not writable.\nNo files have been moved.\n\nThis can happen when trying to select a location that RetroDECK does not have permission to write.\nThis can normally be fixed by adding the desired path to the RetroDECK permissions with Flatseal." + fi + fi + ;; + + esac + else # The folder to move was not found at the path pulled from retrodeck.cfg and it needs to be reconfigured manually. + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "The $(basename $dir_to_move) folder was not found at the expected location.\n\nThis may have happened if the folder was moved manually.\n\nPlease select the current location of the folder." + dir_to_move=$(directory_browse "RetroDECK $(basename $dir_to_move) directory location") + eval "$rd_dir_name"="$dir_to_move" + prepare_emulator "postmove" "all" + conf_write + configurator_generic_dialog "RetroDECK Configurator - Move Folder" "RetroDECK $(basename $dir_to_move) folder now configured at\n$dir_to_move." + configurator_move_folder_dialog "$rd_dir_name" + fi +} + +changelog_dialog() { + # This function will pull the changelog notes from the version it is passed (which must match the appdata version tag) from the net.retrodeck.retrodeck.appdata.xml file + # The function also accepts "all" as a version, and will print the entire changelog + # USAGE: changelog_dialog "version" + + if [[ "$1" == "all" ]]; then + xml sel -t -m "//release" -v "concat('RetroDECK version: ', @version)" -n -v "description" -n $rd_appdata | awk '{$1=$1;print}' | sed -e '/./b' -e :n -e 'N;s/\n$//;tn' > "/var/config/retrodeck/changelog.txt" + + zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Changelogs" \ + --filename="/var/config/retrodeck/changelog.txt" + else + local version_changelog=$(xml sel -t -m "//release[@version='$1']/description" -v . -n $rd_appdata | tr -s '\n' | sed 's/^\s*//') + + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Changelogs" \ + --text="In RetroDECK version $1, the following changes were made:\n$version_changelog" + fi +} + +get_cheevos_token_dialog() { + # This function will return a RetroAchvievements token from a valid username and password, will return "login failed" otherwise + # USAGE: get_cheevos_token_dialog + + local cheevos_info=$(zenity --forms --title="Cheevos" \ + --text="Username and password." \ + --separator="^" \ + --add-entry="Username" \ + --add-password="Password") + + IFS='^' read -r cheevos_username cheevos_password < <(printf '%s\n' "$cheevos_info") + local cheevos_response=$(curl --silent --data "r=login&u=$cheevos_username&p=$cheevos_password" $RA_API_URL) + local cheevos_success=$(echo $cheevos_response | jq .Success | tr -d '"') + local cheevos_token=$(echo $cheevos_response | jq .Token | tr -d '"') + local cheevos_login_timestamp=$(date +%s) + if [[ "$cheevos_success" == "true" ]]; then + echo "$cheevos_username,$cheevos_token,$cheevos_login_timestamp" + else + echo "failed" + fi +} + +desktop_mode_warning() { + # This function is a generic warning for issues that happen when running in desktop mode. + # Running in desktop mode can be verified with the following command: if [[ ! $XDG_CURRENT_DESKTOP == "gamescope" ]]; then + # This function will check if desktop mode is currently being used and if the warning has not been disabled, and show it if needed. + # USAGE: desktop_mode_warning + + if [[ $(check_desktop_mode) == "true" && $desktop_mode_warning == "true" ]]; then + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Never show this again" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Desktop Mode Warning" \ + --text="You appear to be running RetroDECK in the Steam Deck's Desktop mode!\n\nSome functions of RetroDECK may not work properly in Desktop mode, such as the Steam Deck's normal controls.\n\nRetroDECK is best enjoyed in Game mode!\n\nDo you still want to proceed?") + rc=$? # Capture return code, as "Yes" button has no text value + if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked + if [[ $choice == "No" ]]; then + exit 1 + elif [[ $choice == "Never show this again" ]]; then + set_setting_value $rd_conf "desktop_mode_warning" "false" retrodeck "options" # Store desktop mode warning variable for future checks + fi + fi + fi +} + +low_space_warning() { + # This function will verify that the drive with the $HOME path on it has at least 10% space free, so the user can be warned before it fills up + # USAGE: low_space_warning + + if [[ $low_space_warning == "true" ]]; then + local used_percent=$(df --output=pcent "$HOME" | tail -1 | tr -d " " | tr -d "%") + if [[ "$used_percent" -ge 90 && -d "$HOME/retrodeck" ]]; then # If there is any RetroDECK data on the main drive to move + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" --extra-button="Never show this again" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Low Space Warning" \ + --text="Your main drive is over 90% full!\n\nIf your drive fills completely this can lead to data loss or system crash.\n\nPlease consider moving some RetroDECK folders to other storage locations using the Configurator.") + if [[ $choice == "Never show this again" ]]; then + set_setting_value $rd_conf "low_space_warning" "false" retrodeck "options" # Store low space warning variable for future checks + fi + fi + fi +} diff --git a/functions/functions.sh b/functions/functions.sh new file mode 100644 index 00000000..2a7b1928 --- /dev/null +++ b/functions/functions.sh @@ -0,0 +1,534 @@ +#!/bin/bash + +directory_browse() { + # This function browses for a directory and returns the path chosen + # USAGE: path_to_be_browsed_for=$(directory_browse $action_text) + + local path_selected=false + + while [ $path_selected == false ] + do + local target="$(zenity --file-selection --title="Choose $1" --directory)" + if [ ! -z $target ] #yes + then + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ + --text="Directory $target chosen, is this correct?" + if [ $? == 0 ] + then + path_selected=true + echo $target + break + fi + else + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ + --text="No directory selected. Do you want to exit the selection process?" + if [ $? == 0 ] + then + break + fi + fi + done +} + +file_browse() { + # This function browses for a file and returns the path chosen + # USAGE: file_to_be_browsed_for=$(file_browse $action_text) + + local file_selected=false + + while [ $file_selected == false ] + do + local target="$(zenity --file-selection --title="Choose $1")" + if [ ! -z "$target" ] #yes + then + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ + --text="File $target chosen, is this correct?" + if [ $? == 0 ] + then + file_selected=true + echo "$target" + break + fi + else + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ + --text="No file selected. Do you want to exit the selection process?" + if [ $? == 0 ] + then + break + fi + fi + done +} + +verify_space() { + # Function used for verifying adequate space before moving directories around + # USAGE: verify_space $source_dir $dest_dir + # Function returns "true" if there is enough space, "false" if there is not + + source_size=$(du -sk "$1" | awk '{print $1}') + source_size=$((source_size+(source_size/10))) # Add 10% to source size for safety + dest_avail=$(df -k --output=avail "$2" | tail -1) + + if [[ $source_size -ge $dest_avail ]]; then + echo "false" + else + echo "true" + fi +} + +move() { + # Function to move a directory from one parent to another + # USAGE: move $source_dir $dest_dir + + source_dir="$(echo $1 | sed 's![^/]$!&/!')" # Add trailing slash if it is missing + dest_dir="$(echo $2 | sed 's![^/]$!&/!')" # Add trailing slash if it is missing + + ( + rsync -a --remove-source-files --ignore-existing --mkpath "$source_dir" "$dest_dir" # Copy files but don't overwrite conflicts + find "$source_dir" -type d -empty -delete # Cleanup empty folders that were left behind + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Move in Progress" \ + --text="Moving directory $(basename "$1") to new location of $2, please wait." + + if [[ -d "$source_dir" ]]; then # Some conflicting files remain + zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Move Directories" \ + --text="There were some conflicting files that were not moved.\n\nAll files that could be moved are in the new location,\nany files that already existed at the new location have not been moved and will need to be handled manually." + fi +} + +update_rd_conf() { + # This function will import a default retrodeck.cfg file and update it with any current settings. This will allow us to expand the file over time while retaining current user settings. + # USAGE: update_rd_conf + + # STAGE 1: For current files that haven't been broken into sections yet, where every setting name is unique + + conf_read # Read current settings into memory + mv -f $rd_conf $rd_conf_backup # Backup config file before update + cp $rd_defaults $rd_conf # Copy defaults file into place + conf_write # Write old values into new default file + + # STAGE 2: To handle presets sections that use duplicate setting names + + mv -f $rd_conf $rd_conf_backup # Backup config file agiain before update but after Stage 1 expansion + generate_single_patch $rd_defaults $rd_conf_backup $rd_update_patch retrodeck # Create a patch file for differences between defaults and current user settings + sed -i '/change^^version/d' $rd_update_patch # Remove version line from temporary patch file + deploy_single_patch $rd_defaults $rd_update_patch $rd_conf # Re-apply user settings to defaults file + set_setting_value $rd_conf "version" "$hard_version" retrodeck # Set version of currently running RetroDECK to updated retrodeck.cfg + rm -f $rd_update_patch # Cleanup temporary patch file + conf_read # Read all settings into memory + + # STAGE 3: Eliminate any preset incompatibility with existing user settings and new defaults + + while IFS= read -r current_setting_line # Read the existing retrodeck.cfg + do + if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header + local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name + else + if [[ ! ("$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" || "$current_section" == "cheevos" || "$current_section" == "cheevos_hardcore") ]]; then + local system_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line + local system_enabled=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$current_section") # Read the variables value from active retrodeck.cfg + local default_setting=$(get_setting_value "$rd_defaults" "$system_name" "retrodeck" "$current_section") # Read the variable value from the retrodeck defaults + if [[ "$system_enabled" == "true" ]]; then + while IFS=: read -r preset_being_checked known_incompatible_preset; do + if [[ "$current_section" == "$preset_being_checked" ]]; then + if [[ $(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$known_incompatible_preset") == "true" ]]; then + set_setting_value "$rd_conf" "$system_name" "false" "retrodeck" "$current_section" + fi + fi + done < "$incompatible_presets_reference_list" + fi + fi + fi + fi + done < $rd_conf +} + +conf_read() { + # This function will read the RetroDECK config file into memory + # USAGE: conf_read + + while IFS= read -r current_setting_line # Read the existing retrodeck.cfg + do + if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header + local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name + else + if [[ "$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" ]]; then + local current_setting_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line + local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "$current_section") # Read the variables value from retrodeck.cfg + eval "$current_setting_name=$current_setting_value" # Write the current setting name and value to memory + fi + fi + fi + done < $rd_conf +} + +conf_write() { + # This function will update the RetroDECK config file with matching variables from memory + # USAGE: conf_write + + while IFS= read -r current_setting_line # Read the existing retrodeck.cfg + do + if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header + local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name + else + if [[ "$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" ]]; then + local current_setting_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line + local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "$current_section") # Read the variables value from retrodeck.cfg + local memory_setting_value=$(eval "echo \$${current_setting_name}") # Read the variable names' value from memory + if [[ ! "$current_setting_value" == "$memory_setting_value" && ! -z "$memory_setting_value" ]]; then # If the values are different... + set_setting_value "$rd_conf" "$current_setting_name" "$memory_setting_value" "retrodeck" "$current_section" # Update the value in retrodeck.cfg + fi + fi + fi + fi + done < $rd_conf +} + +dir_prep() { + # This script is creating a symlink preserving old folder contents and moving them in the new one + + # Call me with: + # dir prep "real dir" "symlink location" + real="$1" + symlink="$2" + + echo -e "\n[DIR PREP]\nMoving $symlink in $real" #DEBUG + + # if the symlink dir is already a symlink, unlink it first, to prevent recursion + if [ -L "$symlink" ]; + then + echo "$symlink is already a symlink, unlinking to prevent recursives" #DEBUG + unlink "$symlink" + fi + + # if the dest dir exists we want to backup it + if [ -d "$symlink" ]; + then + echo "$symlink found" #DEBUG + mv -f "$symlink" "$symlink.old" + fi + + # if the real dir is already a symlink, unlink it first + if [ -L "$real" ]; + then + echo "$real is already a symlink, unlinking to prevent recursives" #DEBUG + unlink "$real" + fi + + # if the real dir doesn't exist we create it + if [ ! -d "$real" ]; + then + echo "$real not found, creating it" #DEBUG + mkdir -pv "$real" + fi + + # creating the symlink + echo "linking $real in $symlink" #DEBUG + mkdir -pv "$(dirname "$symlink")" # creating the full path except the last folder + ln -svf "$real" "$symlink" + + # moving everything from the old folder to the new one, delete the old one + if [ -d "$symlink.old" ]; + then + echo "Moving the data from $symlink.old to $real" #DEBUG + mv -f "$symlink.old"/{.[!.],}* $real + echo "Removing $symlink.old" #DEBUG + rm -rf "$symlink.old" + fi + + echo -e "$symlink is now $real\n" +} + +update_rpcs3_firmware() { + ( + mkdir -p "$roms_folder/ps3/tmp" + chmod 777 "$roms_folder/ps3/tmp" + wget "$rpcs3_firmware" -P "$roms_folder/ps3/tmp/" + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK RPCS3 Firmware Download" \ + --text="RetroDECK downloading the RPCS3 firmware, please wait." + rpcs3 --installfw "$roms_folder/ps3/tmp/PS3UPDAT.PUP" + rm -rf "$roms_folder/ps3/tmp" +} + +backup_retrodeck_userdata() { + zip -rq9 "$backups_folder/$(date +"%0m%0d")_retrodeck_userdata.zip" "$saves_folder" "$states_folder" "$bios_folder" "$media_folder" "$themes_folder" "$logs_folder" "$screenshots_folder" "$mods_folder" "$texture_packs_folder" "$borders_folder" > $logs_folder/$(date +"%0m%0d")_backup_log.log +} + +make_name_pretty() { + # This function will take an internal system name (like "gbc") and return a pretty version for user display ("Nintendo GameBoy Color") + # USAGE: make_name_pretty "system name" + local system=$(grep "$1^" "$pretty_system_names_reference_list") + IFS='^' read -r internal_name pretty_name < <(echo "$system") + echo "$pretty_name" +} + +finit_browse() { +# Function for choosing data directory location during first/forced init +path_selected=false +while [ $path_selected == false ] +do + local target="$(zenity --file-selection --title="Choose RetroDECK data directory location" --directory)" + if [[ ! -z "$target" ]]; then + if [[ -w "$target" ]]; then + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \ + --cancel-label="No" \ + --ok-label "Yes" \ + --text="Your RetroDECK data folder will be:\n\n$target/retrodeck\n\nis that ok?" + if [ $? == 0 ] #yes + then + path_selected=true + echo "$target/retrodeck" + break + else + zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" --text="Do you want to quit?" + if [ $? == 0 ] # yes, quit + then + exit 2 + fi + fi + fi + else + zenity --error --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --ok-label "Quit" \ + --text="No location was selected. Please run RetroDECK again to retry." + exit 2 + fi +done +} + +finit_user_options_dialog() { + finit_available_options=() + + while IFS="^" read -r enabled option_name option_desc option_tag + do + finit_available_options=("${finit_available_options[@]}" "$enabled" "$option_name" "$option_desc" "$option_tag") + done < $finit_options_list + + + local choices=$(zenity \ + --list --width=1200 --height=720 \ + --checklist --hide-column=4 --ok-label="Confirm Selections" --extra-button="Enable All" \ + --separator=" " --print-column=4 \ + --text="Choose which options to enable:" \ + --column "Enabled?" \ + --column "Option" \ + --column "Description" \ + --column "option_flag" \ + "${finit_available_options[@]}") + + echo "${choices[*]}" +} + +finit() { +# Force/First init, depending on the situation + + echo "Executing finit" + + # Internal or SD Card? + local finit_dest_choice=$(configurator_destination_choice_dialog "RetroDECK data" "Welcome to the first configuration of RetroDECK.\nThe setup will be quick but please READ CAREFULLY each message in order to avoid misconfigurations.\n\nWhere do you want your RetroDECK data folder to be located?\n\nThis folder will contain all ROMs, BIOSs and scraped data." ) + echo "Choice is $finit_dest_choice" + + case $finit_dest_choice in + + "Back" | "" ) # Back or X button quits + rm -f "$rd_conf" # Cleanup unfinished retrodeck.cfg if first install is interrupted + echo "Now quitting" + exit 2 + ;; + + "Internal Storage" ) # Internal + echo "Internal selected" + rdhome="$HOME/retrodeck" + if [[ -L $rdhome ]]; then #Remove old symlink from existing install, if it exists + unlink $rdhome + fi + ;; + + "SD Card" ) + echo "SD Card selected" + if [ ! -d "$sdcard" ] # SD Card path is not existing + then + echo "Error: SD card not found" + zenity --error --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --ok-label "Browse" \ + --text="SD Card was not find in the default location.\nPlease choose the SD Card root.\nA retrodeck folder will be created starting from the directory that you selected." + rdhome=$(finit_browse) # Calling the browse function + if [[ -z $rdhome ]]; then # If user hit the cancel button + rm -f "$rd_conf" # Cleanup unfinished retrodeck.cfg if first install is interrupted + exit 2 + fi + elif [ ! -w "$sdcard" ] #SD card found but not writable + then + echo "Error: SD card found but not writable" + zenity --error --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --ok-label "Quit" \ + --text="SD card was found but is not writable\nThis can happen with cards formatted on PC.\nPlease format the SD card through the Steam Deck's Game Mode and run RetroDECK again." + rm -f "$rd_conf" # Cleanup unfinished retrodeck.cfg if first install is interrupted + echo "Now quitting" + exit 2 + else + rdhome="$sdcard/retrodeck" + fi + ;; + + "Custom Location" ) + echo "Custom Location selected" + zenity --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK" \ + --ok-label "Browse" \ + --text="Please choose the root folder for the RetroDECK data.\nA retrodeck folder will be created starting from the directory that you selected." + rdhome=$(finit_browse) # Calling the browse function + if [[ -z $rdhome ]]; then # If user hit the cancel button + rm -f "$rd_conf" # Cleanup unfinished retrodeck.cfg if first install is interrupted + exit 2 + fi + ;; + + esac + + prepare_emulator "reset" "retrodeck" # Parse the [paths] section of retrodeck.cfg and set the value of / create all needed folders + + conf_write # Write the new values to retrodeck.cfg + + configurator_generic_dialog "RetroDECK Initial Setup" "The next dialog will be a list of optional actions to take during the initial setup.\n\nIf you choose to not do any of these now, they can be done later through the Configurator." + local finit_options_choices=$(finit_user_options_dialog) + + if [[ "$finit_options_choices" =~ (rpcs3_firmware|Enable All) ]]; then # Additional information on the firmware install process, as the emulator needs to be manually closed + configurator_generic_dialog "RPCS3 Firmware Install" "You have chosen to install the RPCS3 firmware during the RetroDECK first setup.\n\nThis process will take several minutes and requires network access.\n\nRPCS3 will be launched automatically at the end of the RetroDECK setup process.\nOnce the firmware is installed, please close the emulator to finish the process." + fi + + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \ + --text="RetroDECK will now install the needed files, which can take up to one minute.\nRetroDECK will start once the process is completed.\n\nPress OK to continue." + + ( + prepare_emulator "reset" "all" + build_retrodeck_current_presets + + # Optional actions based on user choices + if [[ "$finit_options_choices" =~ (rpcs3_firmware|Enable All) ]]; then + if [[ $(check_network_connectivity) == "true" ]]; then + update_rpcs3_firmware + fi + fi + if [[ "$finit_options_choices" =~ (rd_controller_profile|Enable All) ]]; then + install_retrodeck_controller_profile + fi + if [[ "$finit_options_choices" =~ (rd_prepacks|Enable All) ]]; then + install_retrodeck_starterpack + fi + + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Finishing Initialization" \ + --text="RetroDECK is finishing the initial setup process, please wait." + + create_lock +} + +install_retrodeck_starterpack() { + # This function will install the roms, gamelists and metadata for the RetroDECK Starter Pack, a curated selection of games the creators of RetroDECK enjoy. + # USAGE: install_retrodeck_starterpack + + ## DOOM section ## + cp /app/retrodeck/extras/doom1.wad "$roms_folder/doom/doom1.wad" # No -f in case the user already has it + mkdir -p "/var/config/emulationstation/.emulationstation/gamelists/doom" + if [[ ! -f "/var/config/emulationstation/.emulationstation/gamelists/doom/gamelist.xml" ]]; then # Don't overwrite an existing gamelist + cp "/app/retrodeck/rd_prepacks/doom/gamelist.xml" "/var/config/emulationstation/.emulationstation/gamelists/doom/gamelist.xml" + fi + mkdir -p "$media_folder/doom" + unzip -oq "/app/retrodeck/rd_prepacks/doom/doom.zip" -d "$media_folder/doom/" +} + +install_retrodeck_controller_profile() { + # This function will install the needed files for the custom RetroDECK controller profile + # NOTE: These files need to be stored in shared locations for Steam, outside of the normal RetroDECK folders and should always be an optional user choice + # BIGGER NOTE: As part of this process, all emulators will need to have their configs hard-reset to match the controller mappings of the profile + # USAGE: install_retrodeck_controller_profile + if [[ -d "$HOME/.steam/steam/tenfoot/resource/images/library/controller/binding_icons/" && -d "$HOME/.steam/steam/controller_base/templates/" ]]; then + rsync -a "/app/retrodeck/binding-icons/" "$HOME/.steam/steam/tenfoot/resource/images/library/controller/binding_icons/" + cp -f "$emuconfigs/defaults/retrodeck/RetroDECK_controller_config.vdf" "$HOME/.steam/steam/controller_base/templates/RetroDECK_controller_config.vdf" + else + configurator_generic_dialog "RetroDECK Controller Profile Install" "The target directories for the controller profile do not exist.\n\nThis may happen if you do not have Steam installed or the location is does not have permission to be read." + fi +} + +create_lock() { + # creating RetroDECK's lock file and writing the version in the config file + version=$hard_version + touch "$lockfile" + conf_write +} + +update_splashscreens() { + # This script will purge any existing ES graphics and reload them from RO space into somewhere ES will look for it + # USAGE: update_splashscreens + + rm -rf /var/config/emulationstation/.emulationstation/resources/graphics + mkdir -p /var/config/emulationstation/.emulationstation/resources/graphics + cp -rf /app/retrodeck/graphics/* /var/config/emulationstation/.emulationstation/resources/graphics +} + +deploy_helper_files() { + # This script will distribute helper documentation files throughout the filesystem according to the $helper_files_list + # USAGE: deploy_helper_files + + while IFS='^' read -r file dest + do + if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then + eval current_dest="$dest" + cp -f "$helper_files_folder/$file" "$current_dest/$file" + fi + + done < "$helper_files_list" +} + +easter_eggs() { + # This function will replace the RetroDECK startup splash screen with a different image if the day and time match a listing in easter_egg_checklist.cfg + # The easter_egg_checklist.cfg file has the current format: $start_date^$end_date^$start_time^$end_time^$splash_file + # Ex. The line "1001^1031^0000^2359^spooky.svg" would show the file "spooky.svg" during any time of day in the month of October + # The easter_egg_checklist.cfg is read in order, so lines higher in the file will have higher priority in the event of an overlap + # USAGE: easter_eggs + current_day=$(date +"%0m%0d") # Read the current date in a format that can be calculated in ranges + current_time=$(date +"%0H%0M") # Read the current time in a format that can be calculated in ranges + if [[ ! -z $(cat $easter_egg_checklist) ]]; then + while IFS="^" read -r start_date end_date start_time end_time splash_file # Read Easter Egg checklist file and separate values + do + if [[ $current_day -ge "$start_date" && $current_day -le "$end_date" && $current_time -ge "$start_time" && $current_time -le "$end_time" ]]; then # If current line specified date/time matches current date/time, set $splash_file to be deployed + new_splash_file="$splashscreen_dir/$splash_file" + break + else # When there are no matches, the default splash screen is set to deploy + new_splash_file="$default_splash_file" + fi + done < $easter_egg_checklist + else + new_splash_file="$default_splash_file" + fi + + cp -f "$new_splash_file" "$current_splash_file" # Deploy assigned splash screen +} + +start_retrodeck() { + easter_eggs # Check if today has a surprise splashscreen and load it if so + # normal startup + echo "Starting RetroDECK v$version" + emulationstation --home /var/config/emulationstation +} diff --git a/functions/global.sh b/functions/global.sh new file mode 100644 index 00000000..38a986b1 --- /dev/null +++ b/functions/global.sh @@ -0,0 +1,177 @@ +#!/bin/bash + +# This file is containing some global function needed for the script such as the config file tools + +source /app/libexec/050_save_migration.sh +source /app/libexec/checks.sh +source /app/libexec/compression.sh +source /app/libexec/dialogs.sh +source /app/libexec/functions.sh +source /app/libexec/multi_user.sh +source /app/libexec/patching.sh +source /app/libexec/post_update.sh +source /app/libexec/prepare_emulator.sh +source /app/libexec/presets.sh + +# Static variables +rd_conf="/var/config/retrodeck/retrodeck.cfg" # RetroDECK config file path +rd_conf_backup="/var/config/retrodeck/retrodeck.bak" # Backup of RetroDECK config file from update +emuconfigs="/app/retrodeck/emu-configs" # folder with all the default emulator configs +rd_defaults="$emuconfigs/defaults/retrodeck/retrodeck.cfg" # A default RetroDECK config file +rd_update_patch="/var/config/retrodeck/rd_update.patch" # A static location for the temporary patch file used during retrodeck.cfg updates +bios_checklist="$emuconfigs/defaults/retrodeck/reference_lists/bios_checklist.cfg" # A config file listing BIOS file information that can be verified +compression_targets="$emuconfigs/defaults/retrodeck/reference_lists/compression_targets.cfg" # A config file containing supported compression types per system +zip_compressable_extensions="$emuconfigs/defaults/retrodeck/reference_lists/zip_compressable_extensions.cfg" # A config file containing every file extension that is allowed to be compressed to .zip format, because there are a lot! +easter_egg_checklist="$emuconfigs/defaults/retrodeck/reference_lists/easter_egg_checklist.cfg" # A config file listing days and times when special splash screens should show up +input_validation="$emuconfigs/defaults/retrodeck/reference_lists/input_validation.cfg" # A config file listing valid CLI inputs +finit_options_list="$emuconfigs/defaults/retrodeck/reference_lists/finit_options_list.cfg" # A config file listing available optional installs during finit +splashscreen_dir="/var/config/emulationstation/.emulationstation/resources/graphics/extra-splashes" # The default location of extra splash screens +current_splash_file="/var/config/emulationstation/.emulationstation/resources/graphics/splash.svg" # The active splash file that will be shown on boot +default_splash_file="/var/config/emulationstation/.emulationstation/resources/graphics/splash-orig.svg" # The default RetroDECK splash screen +multi_user_data_folder="$rdhome/multi-user-data" # The default location of multi-user environment profiles +multi_user_emulator_config_dirs="$emuconfigs/defaults/retrodeck/reference_lists/multi_user_emulator_config_dirs.cfg" # A list of emulator config folders that can be safely linked/unlinked entirely in multi-user mode +backups_folder="$rdhome/backups" # A standard location for backup file storage +rd_es_themes="/app/share/emulationstation/themes" # The directory where themes packaged with RetroDECK are stored +lockfile="/var/config/retrodeck/.lock" # where the lockfile is located +default_sd="/run/media/mmcblk0p1" # Steam Deck SD default path +hard_version="$(cat '/app/retrodeck/version')" # hardcoded version (in the readonly filesystem) +rd_repo="https://github.com/XargonWan/RetroDECK" # The URL of the main RetroDECK GitHub repo +es_themes_list="https://gitlab.com/es-de/themes/themes-list/-/raw/master/themes.json" # The URL of the ES-DE 2.0 themes list +remote_network_target_1="https://flathub.org" # The URL of a common internet target for testing network access +remote_network_target_2="$rd_repo" # The URL of a common internet target for testing network access +remote_network_target_3="https://one.one.one.one" # The URL of a common internet target for testing network access +helper_files_folder="$emuconfigs/defaults/retrodeck/helper_files" # The parent folder of RetroDECK documentation files for deployment +helper_files_list="$emuconfigs/defaults/retrodeck/reference_lists/helper_files_list.cfg" # The list of files to be deployed and where they go +rd_appdata="/app/share/appdata/net.retrodeck.retrodeck.appdata.xml" # The shipped appdata XML file for this version +rpcs3_firmware="http://dus01.ps3.update.playstation.net/update/ps3/image/us/2023_0228_05fe32f5dc8c78acbcd84d36ee7fdc5b/PS3UPDAT.PUP" +RA_API_URL="https://retroachievements.org/dorequest.php" # API URL for RetroAchievements.org +presets_dir="$emuconfigs/defaults/retrodeck/presets" # Repository for all system preset config files +incompatible_presets_reference_list="$emuconfigs/defaults/retrodeck/reference_lists/incompatible_presets.cfg" # A config file listing all incompatible presets for reference (eg. cannot have borders and widescreen enabled simultaniously) +pretty_system_names_reference_list="$emuconfigs/defaults/retrodeck/reference_lists/pretty_system_names.cfg" # An internal translation list for turning internal names (eg. gbc) to "pretty" names (Nintendo GameBoy Color) + +# Config files for emulators with single config files + +citraconf="/var/config/citra-emu/qt-config.ini" +duckstationconf="/var/config/duckstation/settings.ini" +melondsconf="/var/config/melonDS/melonDS.ini" +ryujinxconf="/var/config/Ryujinx/Config.json" +xemuconf="/var/config/xemu/xemu.toml" +yuzuconf="/var/config/yuzu/qt-config.ini" + +# ES-DE config files + +es_settings="/var/config/emulationstation/.emulationstation/es_settings.xml" + +# RetroArch config files + +raconf="/var/config/retroarch/retroarch.cfg" +ra_core_conf="/var/config/retroarch/retroarch-core-options.cfg" + +# CEMU config files + +cemuconf="/var/config/Cemu/settings.xml" +cemucontrollerconf="/var/config/Cemu/controllerProfiles/controller0.xml" + +# Dolphin config files + +dolphinconf="/var/config/dolphin-emu/Dolphin.ini" +dolphingcpadconf="/var/config/dolphin-emu/GCPadNew.ini" +dolphingfxconf="/var/config/dolphin-emu/GFX.ini" +dolphinhkconf="/var/config/dolphin-emu/Hotkeys.ini" +dolphinqtconf="/var/config/dolphin-emu/Qt.ini" + +# PCSX2 config files + +pcsx2conf="/var/config/PCSX2/inis/PCSX2.ini" +pcsx2gsconf="/var/config/PCSX2/inis/GS.ini" # This file should be deprecated since moving to PCSX2-QT +pcsx2uiconf="/var/config/PCSX2/inis/PCSX2_ui.ini" # This file should be deprecated since moving to PCSX2-QT +pcsx2vmconf="/var/config/PCSX2/inis/PCSX2_vm.ini" # This file should be deprecated since moving to PCSX2-QT + +# PPSSPPDL config files + +ppssppconf="/var/config/ppsspp/PSP/SYSTEM/ppsspp.ini" +ppssppcontrolsconf="/var/config/ppsspp/PSP/SYSTEM/controls.ini" + +# Primehack config files + +primehackconf="/var/config/primehack/Dolphin.ini" +primehackgcpadconf="/var/config/primehack/GCPadNew.ini" +primehackgfxconf="/var/config/primehack/GFX.ini" +primehackhkconf="/var/config/primehack/Hotkeys.ini" +primehackqtconf="/var/config/primehack/Qt.ini" + +# RPCS3 config files + +rpcs3conf="/var/config/rpcs3/config.yml" +rpcs3vfsconf="/var/config/rpcs3/vfs.yml" + +# We moved the lockfile in /var/config/retrodeck in order to solve issue #53 - Remove in a few versions +if [ -f "$HOME/retrodeck/.lock" ] +then + mv "$HOME/retrodeck/.lock" $lockfile +fi + +# If there is no config file I initalize the file with the the default values +if [[ ! -f "$rd_conf" ]]; then + mkdir -p /var/config/retrodeck + echo "RetroDECK config file not found in $rd_conf" + echo "Initializing" + # if we are here means that the we are in a new installation, so the version is valorized with the hardcoded one + # Initializing the variables + if [ -z $version]; then + if [[ $(cat $lockfile) == *"0.4."* ]] || [[ $(cat $lockfile) == *"0.3."* ]] || [[ $(cat $lockfile) == *"0.2."* ]] || [[ $(cat $lockfile) == *"0.1."* ]]; then # If the previous version is very out of date, pre-rd_conf + echo "Running version workaround" + version=$(cat $lockfile) + else + version="$hard_version" + fi + fi + + # Check if SD card path has changed from SteamOS update + if [[ ! -d $default_sd && "$(ls -A /run/media/deck/)" ]]; then + configurator_generic_dialog "RetroDECK Setup" "The SD card was not found in the expected location.\nThis may happen when SteamOS is updated.\n\nPlease browse to the current location of the SD card.\n\nIf you are not using an SD card, please click \"Cancel\"." + default_sd=$(directory_browse "SD Card Location") + fi + + cp $rd_defaults $rd_conf # Load default settings file + set_setting_value $rd_conf "version" "$version" retrodeck # Set current version for new installs + set_setting_value $rd_conf "sdcard" "$default_sd" retrodeck "paths" # Set SD card location if default path has changed + + if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build + set_setting_value $rd_conf "update_repo" "RetroDECK-cooker" retrodeck "options" + set_setting_value $rd_conf "update_check" "true" retrodeck "options" + set_setting_value $rd_conf "developer_options" "true" retrodeck "options" + fi + + echo "Setting config file permissions" + chmod +rw $rd_conf + echo "RetroDECK config file initialized. Contents:" + echo + cat $rd_conf + conf_read # Load new variables into memory + +# If the config file is existing i just read the variables +else + echo "Found RetroDECK config file in $rd_conf" + echo "Loading it" + + if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build + set_setting_value $rd_conf "update_repo" "RetroDECK-cooker" retrodeck "options" + set_setting_value $rd_conf "update_check" "true" retrodeck "options" + set_setting_value $rd_conf "developer_options" "true" retrodeck "options" + fi + + conf_read + + # Verify rdhome is where it is supposed to be. + if [[ ! -d $rdhome ]]; then + prev_home_path=$rdhome + configurator_generic_dialog "RetroDECK Setup" "The RetroDECK data folder was not found in the expected location.\nThis may happen when SteamOS is updated.\n\nPlease browse to the current location of the \"retrodeck\" folder." + new_home_path=$(directory_browse "RetroDECK folder location") + set_setting_value $rd_conf "rdhome" "$new_home_path" retrodeck "paths" + conf_read + prepare_emulator "retrodeck" "postmove" + prepare_emulator "all" "postmove" + conf_write + fi +fi diff --git a/functions/multi_user.sh b/functions/multi_user.sh new file mode 100644 index 00000000..08d9bf4d --- /dev/null +++ b/functions/multi_user.sh @@ -0,0 +1,246 @@ +#!/bin/bash + +multi_user_set_default_dialog() { + chosen_user="$1" + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="No and don't ask again" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Default User" \ + --text="Would you like to set $chosen_user as the default user?\n\nIf the current user cannot be determined from the system, the default will be used.\nThis normally only happens in Desktop Mode.\n\nIf you would like to be asked which user is playing every time, click \"No and don't ask again\"") + rc=$? # Capture return code, as "Yes" button has no text value + if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked + if [[ $choice == "No and don't ask again" ]]; then + set_setting_value $rd_conf "ask_default_user" "false" retrodeck "options" + fi + else # User clicked "Yes" + set_setting_value $rd_conf "default_user" "$chosen_user" retrodeck "options" + fi +} + +multi_user_choose_current_user_dialog() { +full_userlist=() +while IFS= read -r user +do +full_userlist=("${full_userlist[@]}" "$user") +done < <(ls -1 "$multi_user_data_folder") + +chosen_user=$(zenity \ + --list --width=1200 --height=720 \ + --ok-label="Select User" \ + --text="Choose the current user:" \ + --column "Steam Username" --print-column=1 \ + "${full_userlist[@]}") + +if [[ ! -z $chosen_user && -z $default_user && $ask_default_user == "true" ]]; then + multi_user_set_default_dialog "$chosen_user" +fi +echo "$chosen_user" +} + +multi_user_enable_multi_user_mode() { + if [[ -z "$SteamAppUser" ]]; then + configurator_generic_dialog "RetroDECK Multi-User Mode" "The Steam username of the current user could not be determined from the system.\n\nThis can happen when running in Desktop mode.\n\nYou will be asked to specify the Steam username (not profile name) of the current user in the next dialog." + fi + if [[ -d "$multi_user_data_folder" && $(ls -1 "$multi_user_data_folder" | wc -l) -gt 0 ]]; then # If multi-user data folder exists from prior use and is not empty + if [[ -d "$multi_user_data_folder/$SteamAppUser" ]]; then # Current user has an existing save folder + configurator_generic_dialog "RetroDECK Multi-User Mode" "The current user $SteamAppUser has an existing folder in the multi-user data folder.\n\nThe saves here are likely older than the ones currently used by RetroDECK.\n\nThe old saves will be backed up to $backups_folder and the current saves will be loaded into the multi-user data folder." + mkdir -p "$backups_folder" + tar -C "$multi_user_data_folder" -cahf "$backups_folder/multi-user-backup_$SteamAppUser_$(date +"%Y_%m_%d").zip" "$SteamAppUser" + rm -rf "$multi_user_data_folder/$SteamAppUser" # Remove stale data after backup + fi + fi + set_setting_value $rd_conf "multi_user_mode" "true" retrodeck "options" + multi_user_determine_current_user + if [[ -d "$multi_user_data_folder/$SteamAppUser" ]]; then + configurator_process_complete_dialog "enabling multi-user support" + else + configurator_generic_dialog "RetroDECK Multi-User Mode" "It looks like something went wrong while enabling multi-user mode." + fi +} + +multi_user_disable_multi_user_mode() { + if [[ $(ls -1 "$multi_user_data_folder" | wc -l) -gt 1 ]]; then + full_userlist=() + while IFS= read -r user + do + full_userlist=("${full_userlist[@]}" "$user") + done < <(ls -1 "$multi_user_data_folder") + + single_user=$(zenity \ + --list --width=1200 --height=720 \ + --ok-label="Select User" \ + --text="Choose the current user:" \ + --column "Steam Username" --print-column=1 \ + "${full_userlist[@]}") + + if [[ ! -z "$single_user" ]]; then # Single user was selected + multi_user_return_to_single_user "$single_user" + set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" + configurator_process_complete_dialog "disabling multi-user support" + else + configurator_generic_dialog "RetroDECK Multi-User Mode" "No single user was selected, please try the process again." + configurator_retrodeck_multiuser_dialog + fi + else + single_user=$(ls -1 "$multi_user_data_folder") + multi_user_return_to_single_user "$single_user" + set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" + configurator_process_complete_dialog "disabling multi-user support" + fi +} + +multi_user_determine_current_user() { + if [[ $(get_setting_value $rd_conf "multi_user_mode" retrodeck "options") == "true" ]]; then # If multi-user environment is enabled in rd_conf + if [[ -d "$multi_user_data_folder" ]]; then + if [[ ! -z $SteamAppUser ]]; then # If running in Game Mode and this variable exists + if [[ -z $(ls -1 "$multi_user_data_folder" | grep "$SteamAppUser") ]]; then + multi_user_setup_new_user + else + multi_user_link_current_user_files + fi + else # Unable to find Steam user ID + if [[ $(ls -1 "$multi_user_data_folder" | wc -l) -gt 1 ]]; then + if [[ -z $default_user ]]; then # And a default user is not set + configurator_generic_dialog "RetroDECK Multi-User Mode" "The current user could not be determined from the system, and there are multiple users registered.\n\nPlease select which user is currently playing in the next dialog." + SteamAppUser=$(multi_user_choose_current_user_dialog) + if [[ ! -z $SteamAppUser ]]; then # User was chosen from dialog + multi_user_link_current_user_files + else + configurator_generic_dialog "RetroDECK Multi-User Mode" "No user was chosen, RetroDECK will launch with the files from the user who played most recently." + fi + else # The default user is set + if [[ ! -z $(ls -1 $multi_user_data_folder | grep "$default_user") ]]; then # Confirm user data folder exists + SteamAppUser=$default_user + multi_user_link_current_user_files + else # Default user has no data folder, something may have gone horribly wrong. Setting up as a new user. + multi_user_setup_new_user + fi + fi + else # If there is only 1 user in the userlist, default to that user + SteamAppUser=$(ls -1 $multi_user_data_folder) + multi_user_link_current_user_files + fi + fi + else # If the userlist file doesn't exist yet, create it and add the current user + if [[ ! -z "$SteamAppUser" ]]; then + multi_user_setup_new_user + else # If running in Desktop mode for the first time + configurator_generic_dialog "RetroDECK Multi-User Mode" "The current user could not be determined from the system and there is no existing userlist.\n\nPlease enter the Steam account username (not profile name) into the next dialog, or run RetroDECK in game mode." + if zenity --entry \ + --title="Specify Steam username" \ + --text="Enter Steam username:" + then # User clicked "OK" + SteamAppUser="$?" + if [[ ! -z "$SteamAppUser" ]]; then + multi_user_setup_new_user + else # But dialog box was blank + configurator_generic_dialog "RetroDECK Multi-User Mode" "No username was entered, so multi-user data folder cannot be created.\n\nDisabling multi-user mode, please try the process again." + set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" + fi + else # User clicked "Cancel" + configurator_generic_dialog "RetroDECK Multi-User Mode" "Cancelling multi-user mode activation." + set_setting_value $rd_conf "multi_user_mode" "false" retrodeck "options" + fi + fi + fi + else + configurator_generic_dialog "RetroDECK Multi-User Mode" "Multi-user mode is not currently enabled" + fi +} + +multi_user_return_to_single_user() { + single_user="$1" + echo "Returning to single-user mode for $single_user" + unlink "$saves_folder" + unlink "$states_folder" + unlink "$rd_conf" + mv -f "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf" + # RetroArch one-offs, because it has so many folders that should be shared between users + unlink "/var/config/retroarch/retroarch.cfg" + unlink "/var/config/retroarch/retroarch-core-options.cfg" + mv -f "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg" + mv -f "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg" + # XEMU one-offs, because it stores its config in /var/data, not /var/config like everything else + unlink "/var/config/xemu" + unlink "/var/data/xemu/xemu" + mkdir -p "/var/config/xemu" + mv -f "$multi_user_data_folder/$single_user/config/xemu"/{.[!.],}* "/var/config/xemu" + dir_prep "/var/config/xemu" "/var/data/xemu/xemu" + mkdir -p "$saves_folder" + mkdir -p "$states_folder" + mv -f "$multi_user_data_folder/$single_user/saves"/{.[!.],}* "$saves_folder" + mv -f "$multi_user_data_folder/$single_user/states"/{.[!.],}* "$states_folder" + for emu_conf in $(find "$multi_user_data_folder/$single_user/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') + do + if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then + unlink "/var/config/$emu_conf" + mkdir -p "/var/config/$emu_conf" + mv -f "$multi_user_data_folder/$single_user/config/$emu_conf"/{.[!.],}* "/var/config/$emu_conf" + fi + done + rm -r "$multi_user_data_folder/$single_user" # Should be empty, omitting -f for safety +} + +multi_user_setup_new_user() { + # TODO: RPCS3 one-offs + echo "Setting up new user" + unlink "$saves_folder" + unlink "$states_folder" + dir_prep "$multi_user_data_folder/$SteamAppUser/saves" "$saves_folder" + dir_prep "$multi_user_data_folder/$SteamAppUser/states" "$states_folder" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/retrodeck" + cp -L "$rd_conf" "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" # Copy existing rd_conf file for new user. + rm -f "$rd_conf" + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/retroarch" + if [[ ! -L "/var/config/retroarch/retroarch.cfg" ]]; then + mv "/var/config/retroarch/retroarch.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" + mv "/var/config/retroarch/retroarch-core-options.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" + else + cp "$emuconfigs/retroarch/retroarch.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" + cp "$emuconfigs/retroarch/retroarch-core-options.cfg" "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" + set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch" + set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch" + set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch" + fi + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg" + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg" + for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type l -printf '%f\n') # For all the config folders already linked to a different user + do + if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then + unlink "/var/config/$emu_conf" + prepare_emulator "reset" "$emu_conf" + fi + done + for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # For all the currently non-linked config folders, like from a newly-added emulator + do + if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then + dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf" + fi + done +} + +multi_user_link_current_user_files() { + echo "Linking existing user" + ln -sfT "$multi_user_data_folder/$SteamAppUser/saves" "$saves_folder" + ln -sfT "$multi_user_data_folder/$SteamAppUser/states" "$states_folder" + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf" + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch.cfg" "/var/config/retroarch/retroarch.cfg" + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retroarch/retroarch-core-options.cfg" "/var/config/retroarch/retroarch-core-options.cfg" + for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') # Find any new emulator config folders from last time this user played + do + if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then + dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf" + fi + done + for emu_conf in $(find "/var/config" -mindepth 1 -maxdepth 1 -type l -printf '%f\n') + do + if [[ ! -z $(grep "^$emu_conf$" "$multi_user_emulator_config_dirs") ]]; then + if [[ -d "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" ]]; then # If the current user already has a config folder for this emulator + ln -sfT "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "retrodeck/config/$emu_conf" + else # If the current user doesn't have a config folder for this emulator, init it and then link it + prepare_emulator "reset" "$emu_conf" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/$emu_conf" "/var/config/$emu_conf" + fi + fi + done +} diff --git a/functions/patching.sh b/functions/patching.sh new file mode 100644 index 00000000..32380327 --- /dev/null +++ b/functions/patching.sh @@ -0,0 +1,481 @@ +#!/bin/bash + +set_setting_value() { + # Function for editing settings + # USAGE: set_setting_value "$setting_file" "$setting_name" "$new_setting_value" "$system" "$section_name(optional)" + + local setting_name_to_change=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") + local setting_value_to_change=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$3") + local current_section_name=$(sed -e 's/%/\\%/g' <<< "$5") + + case $4 in + + "retrodeck" | "citra" | "melonds" | "yuzu" ) + if [[ -z $current_section_name ]]; then + sed -i 's^\^'"$setting_name_to_change"'=.*^'"$setting_name_to_change"'='"$setting_value_to_change"'^' "$1" + else + sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'=^s^\^'"$setting_name_to_change"'=.*^'"$setting_name_to_change"'='"$setting_value_to_change"'^' "$1" + fi + if [[ "$4" == "retrodeck" && ("$current_section_name" == "" || "$current_section_name" == "paths" || "$current_section_name" == "options") ]]; then # If a RetroDECK setting is being changed, also write it to memory for immediate use + eval "$setting_name_to_change=$setting_value_to_change" + fi + ;; + + "retroarch" ) + if [[ -z $current_section_name ]]; then + sed -i 's^\^'"$setting_name_to_change"' = \".*\"^'"$setting_name_to_change"' = \"'"$setting_value_to_change"'\"^' "$1" + else + sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"' = ^s^\^'"$setting_name_to_change"' = \".*\"^'"$setting_name_to_change"' = \"'"$setting_value_to_change"'\"^' "$1" + fi + ;; + + "dolphin" | "duckstation" | "pcsx2" | "ppsspp" | "primehack" | "xemu" ) + if [[ -z $current_section_name ]]; then + sed -i 's^\^'"$setting_name_to_change"' =.*^'"$setting_name_to_change"' = '"$setting_value_to_change"'^' "$1" + else + sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"' =^s^\^'"$setting_name_to_change"' =.*^'"$setting_name_to_change"' = '"$setting_value_to_change"'^' "$1" + fi + ;; + + "rpcs3" ) # This does not currently work for settings with a $ in them + if [[ -z $current_section_name ]]; then + sed -i 's^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' "$1" + else + sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' "$1" + fi + ;; + + "cemu" ) + if [[ -z "$current_section_name" ]]; then + xml ed -L -u "//$setting_name_to_change" -v "$setting_value_to_change" "$1" + else + xml ed -L -u "//$current_section_name/$setting_name_to_change" -v "$setting_value_to_change" "$1" + fi + ;; + + "es_settings" ) + sed -i 's^'"$setting_name_to_change"'" value=".*"^'"$setting_name_to_change"'" value="'"$setting_value_to_change"'"^' "$1" + ;; + + esac +} + +get_setting_name() { + # Function for getting the setting name from a full setting line from a config file + # USAGE: get_setting_name "$current_setting_line" $system + + local current_setting_line="$1" + + case $2 in + + "es_settings" ) + echo ''"$current_setting_line"'' | grep -o -P '(?<=name\=\").*(?=\" value)' + ;; + + "rpcs3" ) + echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?:\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g' + ;; + + * ) + echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?=\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g;s^\\$^^' + ;; + + esac +} + +get_setting_value() { +# Function for getting the current value of a setting from a config file +# USAGE: get_setting_value $setting_file "$setting_name" $system $section (optional) + + local current_setting_name="$2" + local current_section_name="$4" + + case $3 in + + "retrodeck" | "citra" | "melonds" | "yuzu" ) # For files with this syntax - setting_name=setting_value + if [[ -z $current_section_name ]]; then + echo $(grep -o -P "(?<=^$current_setting_name=).*" "$1") + else + sed -n -E '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'|\[^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' "$1" | grep -o -P "(?<=^$current_setting_name=).*" + fi + ;; + + "retroarch" ) # For files with this syntax - setting_name = "setting_value" + if [[ -z $current_section_name ]]; then + echo $(grep -o -P "(?<=^$current_setting_name = \").*(?=\")" "$1") + else + sed -n -E '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'|\[^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' "$1" | grep -o -P "(?<=^$current_setting_name = \").*(?=\")" + fi + ;; + + "dolphin" | "duckstation" | "pcsx2" | "ppsspp" | "primehack" | "xemu" ) # For files with this syntax - setting_name = setting_value + if [[ -z $current_section_name ]]; then + echo $(grep -o -P "(?<=^$current_setting_name = ).*" $1) + else + sed -n -E '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'|\[^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' "$1" | grep -o -P "(?<=^$current_setting_name = ).*" + fi + ;; + + "rpcs3" ) # For files with this syntax - setting_name: setting_value + if [[ -z $current_section_name ]]; then + echo $(grep -o -P "(?<=$current_setting_name: ).*" "$1") + else + sed -n '\^\['"$current_section_name"'\]^,\^\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^\^'"$current_setting_name"'^ p } }' "$1" | grep -o -P "(?<=$current_setting_name: ).*" + fi + ;; + + "cemu" ) + if [[ -z "$current_section_name" ]]; then + echo $(xml sel -t -v "//$current_setting_name" "$1") + else + echo $(xml sel -t -v "//$current_section_name/$current_setting_name" "$1") + fi + ;; + + "es_settings" ) + echo $(grep -o -P "(?<=$current_setting_name\" value=\").*(?=\")" "$1") + ;; + + esac +} + +add_setting_line() { + # This function will add a setting line to a file. This is useful for dynamically generated config files where a setting line may not exist until the setting is changed from the default. + # USAGE: add_setting_line $setting_file $setting_line $system $section (optional) + + local current_setting_line=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") + local current_section_name=$(sed -e 's/%/\\%/g' <<< "$4") + + case $3 in + + * ) + if [[ -z $current_section_name ]]; then + if [[ -f "$1" ]]; then + sed -i '$ a '"$current_setting_line"'' "$1" + else # If the file doesn't exist, sed add doesn't work for the first line + echo "$current_setting_line" > "$1" + fi + else + sed -i '/^\s*?\['"$current_section_name"'\]|\b'"$current_section_name"':$/a '"$current_setting_line"'' "$1" + fi + ;; + + esac +} + +add_setting() { + # This function will add a setting name and value to a file. This is useful for dynamically generated config files like Retroarch override files. + # USAGE: add_setting $setting_file $setting_name $setting_value $system $section (optional) + + local current_setting_name=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") + local current_setting_value=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$3") + local current_section_name=$(sed -e 's/%/\\%/g' <<< "$5") + + case $4 in + + "retroarch" ) + if [[ -z $current_section_name ]]; then + sed -i '$ a '"$current_setting_name"' = "'"$current_setting_value"'"' "$1" + else + sed -i '/^\s*?\['"$current_section_name"'\]|\b'"$current_section_name"':$/a '"$current_setting_name"' = "'"$current_setting_value"'"' "$1" + fi + ;; + + esac +} + +delete_setting() { + # This function will delete a setting line from a file. This is useful for dynamically generated config files like Retroarch override files + # USAGE: delete_setting $setting_file $setting_name $system $section (optional) + + local current_setting_name=$(sed -e 's^\\^\\\\^g;s^`^\\`^g' <<< "$2") + local current_section_name=$(sed -e 's/%/\\%/g' <<< "$4") + + case $3 in + + "retroarch" ) + if [[ -z $current_section_name ]]; then + sed -i '\^'"$current_setting_name"'^d' "$1" + sed -i '/^$/d' "$1" # Cleanup empty lines left behind + fi + ;; + + esac +} + +disable_setting() { + # This function will add a '#' to the beginning of a defined setting line, disabling it. + # USAGE: disable_setting $setting_file $setting_line $system $section (optional) + + local current_setting_line="$2" + local current_section_name="$4" + + case $3 in + + * ) + if [[ -z $current_section_name ]]; then + sed -i -E 's^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' "$1" + else + sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?'"$current_setting_line"'^s^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' "$1" + fi + ;; + + esac +} + +enable_setting() { + # This function will remove a '#' to the beginning of a defined setting line, enabling it. + # USAGE: enable_setting $setting_file $setting_line $system $section (optional) + + local current_setting_line="$2" + local current_section_name="$4" + + case $3 in + + * ) + if [[ -z $current_section_name ]]; then + sed -i -E 's^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' "$1" + else + sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?#'"$current_setting_line"'^s^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' "$1" + fi + ;; + + esac +} + +disable_file() { + # This function adds the suffix ".disabled" to the end of a file to prevent it from being used entirely. + # USAGE: disable_file $file_name + # NOTE: $filename can be a defined variable from global.sh or must have the full path to the file + + mv "$(realpath "$1")" "$(realpath "$1")".disabled +} + +enable_file() { + # This function removes the suffix ".disabled" to the end of a file to allow it to be used. + # USAGE: enable_file $file_name + # NOTE: $filename can be a defined variable from global.sh or must have the full path to the file and should not have ".disabled" as a suffix + + mv "$(realpath "$1".disabled)" "$(realpath "$(echo "$1" | sed -e 's/\.disabled//')")" +} + +generate_single_patch() { + # generate_single_patch $original_file $modified_file $patch_file $system + + local original_file="$1" + local modified_file="$2" + local patch_file="$3" + local system="$4" + + if [[ -f "$patch_file" ]]; then + rm "$patch_file" # Remove old patch file (maybe change this to create a backup instead?) + fi + + while read -r current_setting_line; # Look for changes from the original file to the modified one + do + printf -v escaped_setting_line '%q' "$current_setting_line" # Take care of special characters before they mess with future commands + escaped_setting_line=$(sed -E 's^\+^\\+^g' <<< "$escaped_setting_line") # Need to escape plus signs as well + + if [[ (! -z $current_setting_line) && (! $current_setting_line == "#!/bin/bash") && (! $current_setting_line == "[]") ]]; then # Ignore empty lines, empty arrays or Bash start lines + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") || ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # Capture section header lines + if [[ $current_setting_line =~ ^\[.+\] ]]; then # If normal section line + action="section" + current_section=$(sed 's^[][]^^g' <<< "$current_setting_line") # Remove brackets from section name + elif [[ ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # If RPCS3 section name + action="section" + current_section=$(sed 's^:$^^' <<< "$current_setting_line") # Remove colon from section name + fi + elif [[ (! -z "$current_section") ]]; then # If line is in a section... + if [[ ! -z $(grep -o -P "^\s*?#.*?$" <<< "$current_setting_line") ]]; then # Check for disabled lines + if [[ -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\s*?'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\s*?'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'^ p } }' "$modified_file") ]]; then # If disabled line is not disabled in new file... + action="disable_setting" + echo $action"^"$current_section"^"$(sed -n -E 's^\s*?#(.*?)$^\1^p' <<< $(sed -E 's/^[ \t]*//' <<< "$current_setting_line")) >> "$patch_file" + fi + elif [[ ! -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\s*?#'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\s*?#'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'^ p } }' "$modified_file") ]]; then # Check if line is disabled in new file + action="enable_setting" + echo $action"^"$current_section"^"$current_setting_line >> "$patch_file" + else # Look for setting value differences + current_setting_name=$(get_setting_name "$escaped_setting_line" "$system") + if [[ (-z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'\s*?[:=]^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$(sed -E 's/^[ \t]*//;' <<< "$escaped_setting_line")"'$^ p } }' "$modified_file")) ]]; then # If the same setting line is not found in the same section of the modified file... + if [[ ! -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'\s*?[:=]^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$current_setting_name"'\s*?[:=]^ p } }' "$modified_file") ]]; then # But the setting exists in that section, only with a different value... + new_setting_value=$(get_setting_value "$2" "$current_setting_name" "$system" $current_section) + action="change" + echo $action"^"$current_section"^"$(sed -e 's%\\\\%\\%g' <<< "$current_setting_name")"^"$new_setting_value"^"$system >> "$patch_file" + fi + fi + fi + elif [[ -z "$current_section" ]]; then # If line is not in a section... + if [[ ! -z $(grep -o -P "^\s*?#.*?$" <<< "$current_setting_line") ]]; then # Check for disabled lines + if [[ -z $(grep -o -P "^\s*?$current_setting_line$" "$modified_file") ]]; then # If disabled line is not disabled in new file... + action="disable_setting" + echo $action"^"$current_section"^"$(sed -n -E 's^\s*?#(.*?)$^\1^p' <<< "$current_setting_line") >> "$patch_file" + fi + elif [[ ! -z $(sed -n -E '\^\s*?#'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'$^p' "$modified_file") ]]; then # Check if line is disabled in new file + action="enable_setting" + echo $action"^"$current_section"^"$current_setting_line >> "$patch_file" + else # Look for setting value differences + if [[ (-z $(sed -n -E '\^\s*?\b'"$(sed -E 's/^[ \t]*//' <<< "$escaped_setting_line")"'$^p' "$modified_file")) ]]; then # If the same setting line is not found in the modified file... + current_setting_name=$(get_setting_name "$escaped_setting_line" "$system") + if [[ ! -z $(sed -n -E '\^\s*?\b'"$current_setting_name"'\s*?[:=]^p' "$modified_file") ]]; then # But the setting exists, only with a different value... + new_setting_value=$(get_setting_value $2 "$current_setting_name" "$system") + action="change" + echo $action"^"$current_section"^"$(sed -e 's%\\\\%\\%g' <<< "$current_setting_name")"^"$new_setting_value"^"$system >> "$patch_file" + fi + fi + fi + fi + fi + done < "$original_file" + + # Reset the variables for reuse + action="" + current_section="" + current_setting_name="" + current_setting_value="" + + while read -r current_setting_line; # Look for new lines (from dynamically generated config files) in modified file compared to original + do + + printf -v escaped_setting_line '%q' "$current_setting_line" # Take care of special characters before they mess with future commands + + if [[ (! -z $current_setting_line) && (! $current_setting_line == "#!/bin/bash") && (! $current_setting_line == "[]") ]]; then # Ignore empty lines, empty arrays or Bash start lines + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") || ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # Capture section header lines + if [[ $current_setting_line =~ ^\[.+\] ]]; then # If normal section line + action="section" + current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name + elif [[ ! -z $(grep -o -P "^\b.+?:$" <<< "$current_setting_line") ]]; then # If RPCS3 section name + action="section" + current_section=$(sed 's^:$^^' <<< $current_setting_line) # Remove colon from section name + fi + elif [[ (! -z $current_section) ]]; then + current_setting_name=$(get_setting_name "$escaped_setting_line" "$4") + if [[ -z $(sed -n -E '\^\['"$current_section"'\]|\b'"$current_section"':$^,\^\b'"$current_setting_name"'.*^{ \^\['"$current_section"'\]|\b'"$current_section"':$^! { \^\b'"$current_setting_name"'^p } }' $1 ) ]]; then # If setting name is not found in this section of the original file... + action="add_setting_line" # TODO: This should include the previous line, so that new lines can be inserted in the correct place rather than at the end. + echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> $3 + fi + elif [[ (-z $current_section) ]]; then + current_setting_name=$(get_setting_name "$escaped_setting_line" "$4") + if [[ -z $(sed -n -E '\^\s*?\b'"$current_setting_name"'\s*?[:=]^p' $1) ]]; then # If setting name is not found in the original file... + action="add_setting_line" # TODO: This should include the previous line, so that new lines can be inserted in the correct place rather than at the end. + echo $action"^"$current_section"^"$current_setting_line"^^"$4 >> $3 + fi + fi + fi + done < "$modified_file" +} + +deploy_single_patch() { + +# This function will take an "original" file and a patch file and generate a ready to use modified file +# USAGE: deploy_single_patch $original_file $patch_file $output_file + +cp -fv "$1" "$3" # Create a copy of the original file to be patched + +while IFS="^" read -r action current_section setting_name setting_value system_name +do + + case $action in + + "disable_file" ) + eval disable_file "$setting_name" + ;; + + "enable_file" ) + eval enable_file "$setting_name" + ;; + + "add_setting_line" ) + add_setting_line "$3" "$setting_name" "$system_name" "$current_section" + ;; + + "disable_setting" ) + disable_setting "$3" "$setting_name" "$system_name" "$current_section" + ;; + + "enable_setting" ) + enable_setting "$3" "$setting_name" "$system_name" "$current_section" + ;; + + "change" ) + if [[ "$setting_value" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval setting_value="$setting_value" + fi + set_setting_value "$3" "$setting_name" "$setting_value" "$system_name" "$current_section" + ;; + + *"#"* ) + # Comment line in patch file + ;; + + * ) + echo "Config line malformed: $action" + ;; + + esac +done < "$2" +} + +deploy_multi_patch() { + +# This function will take a single "batch" patch file and run all patches listed in it, across multiple config files +# USAGE: deploy_multi_patch $patch_file +# Patch file format should be as follows, with optional entries in (). Optional settings can be left empty, but must still have ^ dividers: +# $action^($current_section)^$setting_name^$setting_value^$system_name^($config file) + +while IFS="^" read -r action current_section setting_name setting_value system_name config_file +do + case $action in + + "disable_file" ) + if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval config_file="$config_file" + fi + disable_file "$config_file" + ;; + + "enable_file" ) + if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval config_file="$config_file" + fi + enable_file "$config_file" + ;; + + "add_setting_line" ) + if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval config_file="$config_file" + fi + add_setting_line "$config_file" "$setting_name" "$system_name" "$current_section" + ;; + + "disable_setting" ) + if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval config_file="$config_file" + fi + disable_setting "$config_file" "$setting_name" "$system_name" "$current_section" + ;; + + "enable_setting" ) + if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval config_file="$config_file" + fi + enable_setting "$config_file" "$setting_name" "$system_name" "$current_section" + ;; + + "change" ) + if [[ "$setting_value" = \$* ]]; then # If patch setting value is a reference to an internal variable name + eval setting_value="$setting_value" + fi + set_setting_value "$config_file" "$setting_name" "$setting_value" "$system_name" "$current_section" + ;; + + *"#"* ) + # Comment line in patch file + ;; + + * ) + echo "Config line malformed: $action" + ;; + + esac +done < "$1" +} diff --git a/functions/post_update.sh b/functions/post_update.sh new file mode 100644 index 00000000..4eea301b --- /dev/null +++ b/functions/post_update.sh @@ -0,0 +1,251 @@ +#!/bin/bash + +post_update() { + + # post update script + echo "Executing post-update script" + + local prev_version=$(sed -e 's/[\.a-z]//g' <<< $version) + + if [[ $prev_version -le "050" ]]; then # If updating from prior to save sorting change at 0.5.0b + save_migration + fi + + # Everything within the following ( ) will happen behind the Zenity dialog. The save migration was a long process so it has its own individual dialogs. + + ( + if [[ $prev_version -le "062" ]]; then + # In version 0.6.2b, the following changes were made that required config file updates/reset: + # - Primehack preconfiguration completely redone. "Stop emulation" hotkey set to Start+Select, Xbox and Nintendo keymap profiles were created, Xbox set as default. + # - Duckstation save and state locations were dir_prep'd to the rdhome/save and /state folders, which was not previously done. Much safer now! + # - Fix PICO-8 folder structure. ROM and save folders are now sane and binary files will go into ~/retrodeck/bios/pico-8/ + + rm -rf /var/config/primehack # Purge old Primehack config files. Saves are safe as they are linked into /var/data/primehack. + prepare_emulator "reset" "primehack" + + dir_prep "$rdhome/saves/duckstation" "/var/data/duckstation/memcards" + dir_prep "$rdhome/states/duckstation" "/var/data/duckstation/savestates" + + mv "$bios_folder/pico8" "$bios_folder/pico8_olddata" # Move legacy (and incorrect / non-functional ) PICO-8 location for future cleanup / less confusion + dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed + dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway) + dir_prep "$bios_folder/pico-8/cdata" "$saves_folder/pico-8" # PICO-8 saves folder + fi + if [[ $prev_version -le "063" ]]; then + # In version 0.6.3b, the following changes were made that required config file updates/reset: + # - Put Dolphin and Primehack save states in different folders inside $rd_home/states + # - Fix symlink to hard-coded PICO-8 config folder (dir_prep doesn't like ~) + # - Overwrite Citra and Yuzu configs, as controller mapping was broken due to emulator updates. + + dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves" + dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves" + + rm -rf "$HOME/~/" # Remove old incorrect location from 0.6.2b + rm -f "$HOME/.lexaloffle/pico-8" # Remove old symlink to prevent recursion + dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed + dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder structure was backwards, fixing for consistency. + + cp -f "$emuconfigs/citra/qt-config.ini" /var/config/citra-emu/qt-config.ini + sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini + cp -fr "$emuconfigs/yuzu/"* /var/config/yuzu/ + sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini + + # Remove unneeded tools folder, as location has changed to RO space + rm -rfv /var/config/retrodeck/tools/ + fi + if [[ $prev_version -le "064" ]]; then + # In version 0.6.4b, the following changes were made: + # Changed settings in Primehack: The audio output was not selected by default, default AR was also incorrect. + # Changed settings in Duckstation and PCSX2: The "ask on exit" was disabled and "save on exit" was enabled. + # The default configs have been updated for new installs and resets, a patch was created to address existing installs. + + deploy_multi_patch "emu-configs/patches/updates/064b_update.patch" + fi + if [[ $prev_version -le "065" ]]; then + # In version 0.6.5b, the following changes were made: + # Change Yuzu GPU accuracy to normal for better performance + + set_setting_value $yuzuconf "gpu_accuracy" "0" "yuzu" "Renderer" + fi + if [[ $prev_version -le "070" ]]; then + # In version 0.7.0b, the following changes were made that required config file updates/reset or other changes to the filesystem: + # - Update retrodeck.cfg and set new paths to $rdhome by default + # - Update PCSX2 and Duckstation configs to latest templates (to accomadate RetroAchievements feature) and move Duckstation config folder from /var/data to /var/config + # - New ~/retrodeck/mods and ~/retrodeck/texture_packs directories are added and symlinked to multiple different emulators (where supported) + # - Expose ES-DE gamelists folder to user at ~/retrodeck/gamelists + # - Copy new borders into RA config location + # - Copy new RetroArch control remaps into RA config location + # - Add shipped Amiga bios if it doesn't already exist + # - Update RPCS3 vfs file contents. migrate from old location if needed + # - Disable ESDE update checks for existing installs + # - Move Duckstation saves and states to new locations + # - Clean up legacy tools files (Configurator is now accessible through the main ES-DE menu) + # - Move Dolphin and Primehack save folder names + # - Move PPSSPP saves/states to appropriate folders + # - Set ESDE user themes folder directly + # - Disable auto-save/load in existing RA / PCSX2 / Duckstation installs for proper preset functionality + # - Disable ask-on-exit in existing Citra / Dolphin / Duckstation / Primehack installs for proper preset functionality + # - Disable auto-load-state in existing PPSSPP installs for proper preset functionality + # - Init Cemu as it is a new emulator + # - Init PICO-8 as it has newly-shipped config files + + update_rd_conf # Expand retrodeck.cfg to latest template + set_setting_value $rd_conf "screenshots_folder" "$rdhome/screenshots" + set_setting_value $rd_conf "mods_folder" "$rdhome/mods" + set_setting_value $rd_conf "texture_packs_folder" "$rdhome/texture_packs" + set_setting_value $rd_conf "borders_folder" "$rdhome/borders" + conf_read + + mv -f "$pcsx2conf" "$pcsx2conf.bak" + generate_single_patch "$emuconfigs/PCSX2/PCSX2.ini" "$pcsx2conf.bak" "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch" pcsx2 + deploy_single_patch "$emuconfigs/PCSX2/PCSX2.ini" "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch" "$pcsx2conf" + rm -f "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch" + dir_prep "/var/config/duckstation" "/var/data/duckstation" + mv -f "$duckstationconf" "$duckstationconf.bak" + generate_single_patch "$emuconfigs/duckstation/settings.ini" "$duckstationconf.bak" "/var/config/duckstation/duckstation-cheevos-upgrade.patch" pcsx2 + deploy_single_patch "$emuconfigs/duckstation/settings.ini" "/var/config/duckstation/duckstation-cheevos-upgrade.patch" "$duckstationconf" + rm -f "/var/config/duckstation/duckstation-cheevos-upgrade.patch" + + mkdir -p "$mods_folder" + mkdir -p "$texture_packs_folder" + mkdir -p "$borders_folder" + + dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods" + dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures" + dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods" + dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures" + dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods" + dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures" + dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load" + dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks" + dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES" + dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture" + dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures" + + dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists" + + dir_prep "$borders_folder" "/var/config/retroarch/overlays/borders" + rsync -a "/app/retrodeck/emu-configs/retroarch/borders/" "/var/config/retroarch/overlays/borders" + + rsync -a --mkpath "$emuconfigs/defaults/retrodeck/presets/remaps/" "/var/config/retroarch/config/remaps/" + + if [[ ! -f "$bios_folder/capsimg.so" ]]; then + cp -f "/app/retrodeck/extras/Amiga/capsimg.so" "$bios_folder/capsimg.so" + fi + + cp -f $emuconfigs/rpcs3/vfs.yml /var/config/rpcs3/vfs.yml + sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$rpcs3vfsconf" + set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3/" "rpcs3" + if [[ -d "$roms_folder/ps3/emudir" ]]; then # The old location exists, meaning the emulator was run at least once. + mkdir "$bios_folder/rpcs3" + mv "$roms_folder/ps3/emudir/"* "$bios_folder/rpcs3/" + rm "$roms_folder/ps3/emudir" + configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "As part of this update and due to a RPCS3 config upgrade, the files that used to exist at\n\n~/retrodeck/roms/ps3/emudir\n\nare now located at\n\n~/retrodeck/bios/rpcs3.\nYour existing files have been moved automatically." + fi + mkdir -p "$bios_folder/rpcs3/dev_hdd0" + mkdir -p "$bios_folder/rpcs3/dev_hdd1" + mkdir -p "$bios_folder/rpcs3/dev_flash" + mkdir -p "$bios_folder/rpcs3/dev_flash2" + mkdir -p "$bios_folder/rpcs3/dev_flash3" + mkdir -p "$bios_folder/rpcs3/dev_bdvd" + mkdir -p "$bios_folder/rpcs3/dev_usb000" + dir_prep "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata" "$saves_folder/ps3/rpcs3" + + set_setting_value $es_settings "ApplicationUpdaterFrequency" "never" "es_settings" + + if [[ -f "$saves_folder/duckstation/shared_card_1.mcd" || -f "$saves_folder/duckstation/shared_card_2.mcd" ]]; then + configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "As part of this update, the location of saves and states for Duckstation has been changed.\n\nYour files will be moved automatically, and can now be found at\n\n~.../saves/psx/duckstation/memcards/\nand\n~.../states/psx/duckstation/" + fi + mkdir -p "$saves_folder/psx/duckstation/memcards" + mv "$saves_folder/duckstation/"* "$saves_folder/psx/duckstation/memcards/" + rmdir "$saves_folder/duckstation" # File-safe folder cleanup + unlink "/var/config/duckstation/memcards" + set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList" + mkdir -p "$states_folder/psx" + mv -t "$states_folder/psx/" "$states_folder/duckstation" + unlink "/var/config/duckstation/savestates" + dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates" + + rm -rf /var/config/retrodeck/tools + rm -rf /var/config/emulationstation/.emulationstation/gamelists/tools/ + + mv "$saves_folder/gc/dolphin/EUR" "$saves_folder/gc/dolphin/EU" + mv "$saves_folder/gc/dolphin/USA" "$saves_folder/gc/dolphin/US" + mv "$saves_folder/gc/dolphin/JAP" "$saves_folder/gc/dolphin/JP" + dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR" + dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA" + dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP" + mv "$saves_folder/gc/primehack/EUR" "$saves_folder/gc/primehack/EU" + mv "$saves_folder/gc/primehack/USA" "$saves_folder/gc/primehack/US" + mv "$saves_folder/gc/primehack/JAP" "$saves_folder/gc/primehack/JP" + dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR" + dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA" + dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP" + + dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA" + dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE" + + set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings" + set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings" + sed -i '$ a ' "$es_settings" # Add new default line to existing file + set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings" + unlink "/var/config/emulationstation/ROMs" + unlink "/var/config/emulationstation/.emulationstation/downloaded_media" + unlink "/var/config/emulationstation/.emulationstation/themes" + + set_setting_value "$raconf" "savestate_auto_load" "false" "retroarch" + set_setting_value "$raconf" "savestate_auto_save" "false" "retroarch" + set_setting_value "$pcsx2conf" "SaveStateOnShutdown" "false" "pcsx2" "EmuCore" + set_setting_value "$duckstationconf" "SaveStateOnExit" "false" "duckstation" "Main" + set_setting_value "$duckstationconf" "Enabled" "false" "duckstation" "Cheevos" + + set_setting_value "$citraconf" "confirmClose" "false" "citra" "UI" + set_setting_value "$citraconf" "confirmClose\default" "false" "citra" "UI" + set_setting_value "$dolphinconf" "ConfirmStop" "False" "dolphin" "Interface" + set_setting_value "$duckstationconf" "ConfirmPowerOff" "false" "duckstation" "Main" + set_setting_value "$primehackconf" "ConfirmStop" "False" "primehack" "Interface" + + set_setting_value "$ppssppconf" "AutoLoadSaveState" "0" "ppsspp" "General" + + prepare_emulator "reset" "cemu" + + prepare_emulator "reset" "pico8" + + configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "Would you like to install the official controller profile?\n(this will reset your custom emulator settings)\n\nAfter installation you can enable it from from Controller Settings -> Templates." + if [[ $(configurator_generic_question_dialog "RetroDECK Official Controller Profile" "Would you like to install the official RetroDECK controller profile?") == "true" ]]; then + install_retrodeck_controller_profile + prepare_emulator "reset" "all" + fi + fi + + # The following commands are run every time. + + if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled + rsync -a "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/dolphin-emu/Load/DynamicInputTextures/" + fi + if [[ -d "/var/data/primehack/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled + rsync -a "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/primehack/Load/DynamicInputTextures/" + fi + + update_splashscreens + build_retrodeck_current_presets + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Finishing Upgrade" \ + --text="RetroDECK is finishing the upgrade process, please wait." + + version=$hard_version + conf_write + + if grep -qF "cooker" <<< $hard_version; then + changelog_dialog "$(echo $version | cut -d'-' -f2)" + else + changelog_dialog "$version" + fi +} diff --git a/functions/prepare_emulator.sh b/functions/prepare_emulator.sh new file mode 100644 index 00000000..f7d7dad0 --- /dev/null +++ b/functions/prepare_emulator.sh @@ -0,0 +1,619 @@ +#!/bin/bash + +prepare_emulator() { + # This function will perform one of several actions on one or more emulators + # The actions currently include "reset" and "postmove" + # The "reset" action will initialize the emulator + # The "postmove" action will update the emulator settings after one or more RetroDECK folders were moved + # An emulator can be called by name, by parent folder name in the /var/config root or use the option "all" to perform the action on all emulators equally + # The function will also behave differently depending on if the initial request was from the Configurator, the CLI interface or a normal function call if needed + # USAGE: prepare_emulator "$action" "$emulator" "$call_source(optional)" + + action="$1" + emulator="$2" + call_source="$3" + + if [[ "$emulator" == "retrodeck" ]]; then + if [[ "$action" == "reset" ]]; then # Update the paths of all folders in retrodeck.cfg and create them + while read -r config_line; do + local current_setting_name=$(get_setting_name "$config_line" "retrodeck") + if [[ ! $current_setting_name =~ (rdhome|sdcard) ]]; then # Ignore these locations + local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "paths") + eval "$current_setting_name=$rdhome/$(basename $current_setting_value)" + mkdir -p "$rdhome/$(basename $current_setting_value)" + fi + done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f') + fi + if [[ "$action" == "postmove" ]]; then # Update the paths of any folders that came with the retrodeck folder during a move + while read -r config_line; do + local current_setting_name=$(get_setting_name "$config_line" "retrodeck") + if [[ ! $current_setting_name =~ (rdhome|sdcard) ]]; then # Ignore these locations + local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "paths") + if [[ -d "$rdhome/$(basename $current_setting_value)" ]]; then # If the folder exists at the new ~/retrodeck location + eval "$current_setting_name=$rdhome/$(basename $current_setting_value)" + fi + fi + done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f') + fi + fi + + if [[ "$emulator" =~ ^(emulationstation|all)$ ]]; then # For use after ESDE-related folders are moved or a reset + if [[ "$action" == "reset" ]]; then + rm -rf /var/config/emulationstation/ + mkdir -p /var/config/emulationstation/.emulationstation/ + cp -f /app/retrodeck/es_settings.xml /var/config/emulationstation/.emulationstation/es_settings.xml + set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings" + set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings" + set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings" + emulationstation --home /var/config/emulationstation --create-system-dirs + update_splashscreens + dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists" + fi + if [[ "$action" == "postmove" ]]; then + set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings" + set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings" + set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings" + dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists" + fi + fi + + if [[ "$emulator" =~ ^(retroarch|RetroArch|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/retroarch" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/retroarch" + cp -fv $emuconfigs/retroarch/retroarch.cfg "$multi_user_data_folder/$SteamAppUser/config/retroarch/" + cp -fv $emuconfigs/retroarch/retroarch-core-options.cfg "$multi_user_data_folder/$SteamAppUser/config/retroarch/" + else # Single-user actions + rm -rf /var/config/retroarch + mkdir -p /var/config/retroarch + dir_prep "$bios_folder" "/var/config/retroarch/system" + dir_prep "$logs_folder/retroarch" "/var/config/retroarch/logs" + mkdir -pv /var/config/retroarch/shaders/ + cp -rf /app/share/libretro/shaders /var/config/retroarch/ + dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders" + rsync -a --mkpath "/app/share/libretro/cores/" "/var/config/retroarch/cores/" + cp -fv $emuconfigs/retroarch/retroarch.cfg /var/config/retroarch/ + cp -fv $emuconfigs/retroarch/retroarch-core-options.cfg /var/config/retroarch/ + rsync -a --mkpath "$emuconfigs/retroarch/core-overrides/" "/var/config/retroarch/config/" + rsync -a --mkpath "$emuconfigs/defaults/retrodeck/presets/remaps/" "/var/config/retroarch/config/remaps/" + dir_prep "$borders_folder" "/var/config/retroarch/overlays/borders" + rsync -a --mkpath "/app/retrodeck/emu-configs/retroarch/borders/" "/var/config/retroarch/overlays/borders/" + set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch" + set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch" + set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch" + set_setting_value "$raconf" "log_dir" "$logs_folder" "retroarch" + fi + # Shared actions + + # PPSSPP + echo "--------------------------------" + echo "Initializing PPSSPP_LIBRETRO" + echo "--------------------------------" + if [ -d $bios_folder/PPSSPP/flash0/font ] + then + mv -fv $bios_folder/PPSSPP/flash0/font $bios_folder/PPSSPP/flash0/font.bak + fi + cp -rf "/app/retrodeck/extras/PPSSPP" "$bios_folder/PPSSPP" + if [ -d $bios_folder/PPSSPP/flash0/font.bak ] + then + mv -f $bios_folder/PPSSPP/flash0/font.bak $bios_folder/PPSSPP/flash0/font + fi + + # MSX / SVI / ColecoVision / SG-1000 + echo "-----------------------------------------------------------" + echo "Initializing MSX / SVI / ColecoVision / SG-1000 LIBRETRO" + echo "-----------------------------------------------------------" + cp -rf "/app/retrodeck/extras/MSX/Databases" "$bios_folder/Databases" + cp -rf "/app/retrodeck/extras/MSX/Machines" "$bios_folder/Machines" + + # AMIGA + echo "-----------------------------------------------------------" + echo "Initializing AMIGA LIBRETRO" + echo "-----------------------------------------------------------" + cp -f "/app/retrodeck/extras/Amiga/capsimg.so" "$bios_folder/capsimg.so" + + dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$bios_folder" "/var/config/retroarch/system" + dir_prep "$logs_folder/retroarch" "/var/config/retroarch/logs" + dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders" + dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache" + dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture" + set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch" + set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch" + set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch" + set_setting_value "$raconf" "log_dir" "$logs_folder" "retroarch" + fi + fi + + if [[ "$emulator" =~ ^(cemu|Cemu|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing CEMU" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/Cemu" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/Cemu" + cp -fr "$emuconfigs/cemu/"* "$multi_user_data_folder/$SteamAppUser/config/Cemu/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/Cemu/settings.ini" "mlc_path" "$bios_folder/cemu" "cemu" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/Cemu/settings.ini" "Entry" "$roms_folder/wiiu" "cemu" "GamePaths" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/Cemu" "/var/config/Cemu" + else + rm -rf /var/config/Cemu + mkdir -pv /var/config/Cemu/ + cp -fr "$emuconfigs/cemu/"* /var/config/Cemu/ + set_setting_value "$cemuconf" "mlc_path" "$bios_folder/cemu" "cemu" + set_setting_value "$cemuconf" "Entry" "$roms_folder/wiiu" "cemu" "GamePaths" + fi + # Shared actions + dir_prep "$saves_folder/wiiu/cemu" "$bios_folder/cemu/usr/save" + fi + if [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves + set_setting_value "$cemuconf" "mlc_path" "$bios_folder/cemu" "cemu" + set_setting_value "$cemuconf" "Entry" "$roms_folder/wiiu" "cemu" "GamePaths" + dir_prep "$saves_folder/wiiu/cemu" "$bios_folder/cemu/usr/save" + fi + fi + + if [[ "$emulator" =~ ^(citra|citra-emu|Citra|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "------------------------" + echo "Initializing CITRA" + echo "------------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/citra-emu" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/citra-emu" + cp -fv $emuconfigs/citra/qt-config.ini "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/citra-emu" "/var/config/citra-emu" + else # Single-user actions + rm -rf /var/config/citra-emu + mkdir -pv /var/config/citra-emu/ + cp -f $emuconfigs/citra/qt-config.ini /var/config/citra-emu/qt-config.ini + set_setting_value "$citraconf" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage" + set_setting_value "$citraconf" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage" + set_setting_value "$citraconf" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI" + set_setting_value "$citraconf" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI" + fi + # Shared actions + mkdir -pv "$saves_folder/n3ds/citra/nand/" + mkdir -pv "$saves_folder/n3ds/citra/sdmc/" + dir_prep "$bios_folder/citra/sysdata" "/var/data/citra-emu/sysdata" + dir_prep "$logs_folder/citra" "/var/data/citra-emu/log" + dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods" + dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$rdhome/bios/citra/sysdata" "/var/data/citra-emu/sysdata" + dir_prep "$rdhome/.logs/citra" "/var/data/citra-emu/log" + dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods" + dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures" + set_setting_value "$citraconf" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage" + set_setting_value "$citraconf" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage" + set_setting_value "$citraconf" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI" + set_setting_value "$citraconf" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI" + fi + fi + + if [[ "$emulator" =~ ^(dolphin|dolphin-emu|Dolphin|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing DOLPHIN" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" + cp -fvr "$emuconfigs/dolphin/"* "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "BIOS" "$bios_folder" "dolphin" "GBA" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "SavesPath" "$saves_folder/gba" "dolphin" "GBA" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "ISOPath0" "$roms_folder/wii" "dolphin" "General" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "ISOPath1" "$roms_folder/gc" "dolphin" "General" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" "/var/config/dolphin-emu" + else # Single-user actions + rm -rf /var/config/dolphin-emu + mkdir -pv /var/config/dolphin-emu/ + cp -fvr "$emuconfigs/dolphin/"* /var/config/dolphin-emu/ + set_setting_value "$dolphinconf" "BIOS" "$bios_folder" "dolphin" "GBA" + set_setting_value "$dolphinconf" "SavesPath" "$saves_folder/gba" "dolphin" "GBA" + set_setting_value "$dolphinconf" "ISOPath0" "$roms_folder/wii" "dolphin" "General" + set_setting_value "$dolphinconf" "ISOPath1" "$roms_folder/gc" "dolphin" "General" + set_setting_value "$dolphinconf" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General" + fi + # Shared actions + dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR" # TODO: Multi-user one-off + dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA" # TODO: Multi-user one-off + dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP" # TODO: Multi-user one-off + dir_prep "$screenshots_folder" "/var/data/dolphin-emu/ScreenShots" + dir_prep "$states_folder/dolphin" "/var/data/dolphin-emu/StateSaves" + dir_prep "$saves_folder/wii/dolphin" "/var/data/dolphin-emu/Wii" + dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods" + dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR" + dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA" + dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP" + dir_prep "$screenshots_folder" "/var/data/dolphin-emu/ScreenShots" + dir_prep "$states_folder/dolphin" "/var/data/dolphin-emu/StateSaves" + dir_prep "$saves_folder/wii/dolphin" "/var/data/dolphin-emu/Wii" + dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods" + dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures" + set_setting_value "$dolphinconf" "BIOS" "$bios_folder" "dolphin" "GBA" + set_setting_value "$dolphinconf" "SavesPath" "$saves_folder/gba" "dolphin" "GBA" + set_setting_value "$dolphinconf" "ISOPath0" "$roms_folder/wii" "dolphin" "General" + set_setting_value "$dolphinconf" "ISOPath1" "$roms_folder/gc" "dolphin" "General" + set_setting_value "$dolphinconf" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General" + fi + fi + + if [[ "$emulator" =~ ^(duckstation|Duckstation|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "------------------------" + echo "Initializing DUCKSTATION" + echo "------------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/duckstation" + mkdir -p "$multi_user_data_folder/$SteamAppUser/data/duckstation/" + cp -fv "$emuconfigs/duckstation/"* "$multi_user_data_folder/$SteamAppUser/data/duckstation" + set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "SearchDirectory" "$bios_folder" "duckstation" "BIOS" + set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards" + set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards" + set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards" + set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/duckstation" "/var/config/duckstation" + else # Single-user actions + rm -rf /var/config/duckstation + mkdir -p /var/config/duckstation/ + cp -fv "$emuconfigs/duckstation/"* /var/config/duckstation + set_setting_value "$duckstationconf" "SearchDirectory" "$bios_folder" "duckstation" "BIOS" + set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList" + fi + # Shared actions + dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates" # This is hard-coded in Duckstation, always needed + dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + set_setting_value "$duckstationconf" "SearchDirectory" "$bios_folder" "duckstation" "BIOS" + set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards" + set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList" + dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates" # This is hard-coded in Duckstation, always needed + dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures" + fi + fi + + if [[ "$emulator" =~ ^(melonds|melonDS|MelonDS|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing MELONDS" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/melonDS" + mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/melonDS/" + cp -fvr $emuconfigs/melonds/melonDS.ini "$multi_user_data_folder/$SteamAppUser/config/melonDS/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "BIOS9Path" "$bios_folder/bios9.bin" "melonds" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "BIOS7Path" "$bios_folder/bios7.bin" "melonds" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "FirmwarePath" "$bios_folder/firmware.bin" "melonds" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "SaveFilePath" "$saves_folder/nds/melonds" "melonds" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "SavestatePath" "$states_folder/nds/melonds" "melonds" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/melonDS" "/var/config/melonDS" + else # Single-user actions + rm -rf /var/config/melonDS + mkdir -pv /var/config/melonDS/ + cp -fvr $emuconfigs/melonds/melonDS.ini /var/config/melonDS/ + set_setting_value "$melondsconf" "BIOS9Path" "$bios_folder/bios9.bin" "melonds" + set_setting_value "$melondsconf" "BIOS7Path" "$bios_folder/bios7.bin" "melonds" + set_setting_value "$melondsconf" "FirmwarePath" "$bios_folder/firmware.bin" "melonds" + set_setting_value "$melondsconf" "SaveFilePath" "$saves_folder/nds/melonds" "melonds" + set_setting_value "$melondsconf" "SavestatePath" "$states_folder/nds/melonds" "melonds" + fi + # Shared actions + mkdir -pv "$saves_folder/nds/melonds" + mkdir -pv "$states_folder/nds/melonds" + dir_prep "$bios_folder" "/var/config/melonDS/bios" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$bios_folder" "/var/config/melonDS/bios" + set_setting_value "$melondsconf" "BIOS9Path" "$bios_folder/bios9.bin" "melonds" + set_setting_value "$melondsconf" "BIOS7Path" "$bios_folder/bios7.bin" "melonds" + set_setting_value "$melondsconf" "FirmwarePath" "$bios_folder/firmware.bin" "melonds" + set_setting_value "$melondsconf" "SaveFilePath" "$saves_folder/nds/melonds" "melonds" + set_setting_value "$melondsconf" "SavestatePath" "$states_folder/nds/melonds" "melonds" + fi + fi + + if [[ "$emulator" =~ ^(pcsx2|PCSX2|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing PCSX2" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/PCSX2" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis" + cp -fvr "$emuconfigs/PCSX2/"* "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "Bios" "$bios_folder" "pcsx2" "Folders" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "Snapshots" "$screenshots_folder" "pcsx2" "Folders" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/PCSX2" "/var/config/PCSX2" + else # Single-user actions + rm -rf /var/config/PCSX2 + mkdir -pv "/var/config/PCSX2/inis" + cp -fvr "$emuconfigs/PCSX2/"* /var/config/PCSX2/inis/ + set_setting_value "$pcsx2conf" "Bios" "$bios_folder" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "Snapshots" "$screenshots_folder" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList" + fi + # Shared actions + mkdir -pv "$saves_folder/ps2/pcsx2/memcards" + mkdir -pv "$states_folder/ps2/pcsx2" + dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + set_setting_value "$pcsx2conf" "Bios" "$bios_folder" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "Snapshots" "$screenshots_folder" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders" + set_setting_value "$pcsx2conf" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList" + dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures" + fi + fi + + if [[ "$emulator" =~ ^(pico8|pico-8|all)$ ]]; then + if [[ ("$action" == "reset") || ("$action" == "postmove") ]]; then + dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed + dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway) + dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder + cp -fv "$emuconfigs/pico-8/config.txt" "$bios_folder/pico-8/config.txt" + cp -fv "$emuconfigs/pico-8/sdl_controllers.txt" "$bios_folder/pico-8/sdl_controllers.txt" + fi + fi + + if [[ "$emulator" =~ ^(ppsspp|PPSSPP|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "------------------------" + echo "Initializing PPSSPPSDL" + echo "------------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/ppsspp" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/" + cp -fv "$emuconfigs/ppssppsdl/"* "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/ppsspp.ini" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/ppsspp" "/var/config/ppsspp" + else # Single-user actions + rm -rf /var/config/ppsspp + mkdir -p /var/config/ppsspp/PSP/SYSTEM/ + cp -fv "$emuconfigs/ppssppsdl/"* /var/config/ppsspp/PSP/SYSTEM/ + set_setting_value "$ppssppconf" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General" + fi + # Shared actions + dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA" + dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE" + dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + set_setting_value "$ppssppconf" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General" + dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA" + dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE" + dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES" + fi + fi + + if [[ "$emulator" =~ ^(primehack|Primehack|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing Primehack" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/primehack" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/primehack" + cp -fvr "$emuconfigs/primehack/"* "$multi_user_data_folder/$SteamAppUser/config/primehack/" + set_setting_value ""$multi_user_data_folder/$SteamAppUser/config/primehack/Dolphin.ini"" "ISOPath0" "$roms_folder/gc" "primehack" "General" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/primehack" "/var/config/primehack" + else # Single-user actions + rm -rf /var/config/primehack + mkdir -pv /var/config/primehack/ + cp -fvr "$emuconfigs/primehack/"* /var/config/primehack/ + set_setting_value "$primehackconf" "ISOPath0" "$roms_folder/gc" "primehack" "General" + fi + # Shared actions + dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR" + dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA" + dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP" + dir_prep "$screenshots_folder" "/var/data/primehack/ScreenShots" + dir_prep "$states_folder/primehack" "/var/data/primehack/StateSaves" + mkdir -pv /var/data/primehack/Wii/ + dir_prep "$saves_folder/wii/primehack" "/var/data/primehack/Wii" + dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods" + dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR" + dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA" + dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP" + dir_prep "$screenshots_folder" "/var/data/primehack/ScreenShots" + dir_prep "$states_folder/primehack" "/var/data/primehack/StateSaves" + dir_prep "$saves_folder/wii/primehack" "/var/data/primehack/Wii/" + dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods" + dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures" + set_setting_value "$primehackconf" "ISOPath0" "$roms_folder/gc" "primehack" "General" + fi + fi + + if [[ "$emulator" =~ ^(rpcs3|RPCS3|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "------------------------" + echo "Initializing RPCS3" + echo "------------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/rpcs3" + mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/rpcs3/" + cp -fr "$emuconfigs/rpcs3/"* "$multi_user_data_folder/$SteamAppUser/config/rpcs3/" + # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name. + sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$multi_user_data_folder/$SteamAppUser/config/rpcs3/vfs.yml" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/rpcs3/vfs.yml" "/games/" "$roms_folder/ps3/" "rpcs3" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/rpcs3" "/var/config/rpcs3" + else # Single-user actions + rm -rf /var/config/rpcs3 + mkdir -pv /var/config/rpcs3/ + cp -fr "$emuconfigs/rpcs3/"* /var/config/rpcs3/ + # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name. + sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$rpcs3vfsconf" + set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3/" "rpcs3" + dir_prep "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata" "$saves_folder/ps3/rpcs3" + fi + # Shared actions + mkdir -p "$bios_folder/rpcs3/dev_hdd0" + mkdir -p "$bios_folder/rpcs3/dev_hdd1" + mkdir -p "$bios_folder/rpcs3/dev_flash" + mkdir -p "$bios_folder/rpcs3/dev_flash2" + mkdir -p "$bios_folder/rpcs3/dev_flash3" + mkdir -p "$bios_folder/rpcs3/dev_bdvd" + mkdir -p "$bios_folder/rpcs3/dev_usb000" + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name. + sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3"'^' "$rpcs3vfsconf" + set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3" "rpcs3" + fi + fi + + # if [[ "$emulator" =~ ^(ryujunx|Ryujinx|all)$ ]]; then + # if [[ "$action" == "reset" ]]; then # Run reset-only commands + # echo "------------------------" + # echo "Initializing RYUJINX" + # echo "------------------------" + # if [[ $multi_user_mode == "true" ]]; then + # rm -rf "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" + # mkdir -p "$multi_user_data_folder/$SteamAppUser/config/Ryujinx/system" + # cp -fv $emuconfigs/ryujinx/* "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" + # sed -i 's#/home/deck/retrodeck#'$rdhome'#g' "$multi_user_data_folder/$SteamAppUser/config/Ryujinx/Config.json" + # dir_prep "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" "/var/config/Ryujinx" + # else + # # removing config directory to wipe legacy files + # rm -rf /var/config/Ryujinx + # mkdir -p /var/config/Ryujinx/system + # cp -fv $emuconfigs/ryujinx/* /var/config/Ryujinx + # sed -i 's#/home/deck/retrodeck#'$rdhome'#g' "$ryujinxconf" + # fi + # fi + # if [[ "$action" == "reset" ]] || [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves + # dir_prep "$bios_folder/switch/keys" "/var/config/Ryujinx/system" + # fi + # if [[ "$action" == "postmove" ]]; then # Run only post-move commands + # sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' "$ryujinxconf" # This is an unfortunate one-off because set_setting_value does not currently support JSON + # fi + # fi + + if [[ "$emulator" =~ ^(xemu|XEMU|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "------------------------" + echo "Initializing XEMU" + echo "------------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf /var/config/xemu + rm -rf /var/data/xemu + rm -rf "$multi_user_data_folder/$SteamAppUser/config/xemu" + mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/xemu/" + cp -fv $emuconfigs/xemu/xemu.toml "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "screenshot_dir" "'$screenshots_folder'" "xemu" "General" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/config/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look + dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/data/xemu/xemu" + else # Single-user actions + rm -rf /var/config/xemu + rm -rf /var/data/xemu + dir_prep "/var/config/xemu" "/var/data/xemu/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look + cp -fv $emuconfigs/xemu/xemu.toml "$xemuconf" + set_setting_value "$xemuconf" "screenshot_dir" "'$screenshots_folder'" "xemu" "General" + set_setting_value "$xemuconf" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files" + fi # Shared actions + mkdir -pv $saves_folder/xbox/xemu/ + # Preparing HD dummy Image if the image is not found + if [ ! -f $bios_folder/xbox_hdd.qcow2 ] + then + cp -f "/app/retrodeck/extras/XEMU/xbox_hdd.qcow2" "$bios_folder/xbox_hdd.qcow2" + fi + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + set_setting_value "$xemuconf" "screenshot_dir" "'$screenshots_folder'" "xemu" "General" + set_setting_value "$xemuconf" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files" + set_setting_value "$xemuconf" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files" + fi + fi + + if [[ "$emulator" =~ ^(yuzu|Yuzu|all)$ ]]; then + if [[ "$action" == "reset" ]]; then # Run reset-only commands + echo "----------------------" + echo "Initializing YUZU" + echo "----------------------" + if [[ $multi_user_mode == "true" ]]; then # Multi-user actions + rm -rf "$multi_user_data_folder/$SteamAppUser/config/yuzu" + mkdir -p "$multi_user_data_folder/$SteamAppUser/config/yuzu" + cp -fvr "$emuconfigs/yuzu/"* "$multi_user_data_folder/$SteamAppUser/config/yuzu/" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI" + set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI" + dir_prep "$multi_user_data_folder/$SteamAppUser/config/yuzu" "/var/config/yuzu" + else # Single-user actions + rm -rf /var/config/yuzu + mkdir -pv /var/config/yuzu/ + cp -fvr "$emuconfigs/yuzu/"* /var/config/yuzu/ + set_setting_value "$yuzuconf" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage" + set_setting_value "$yuzuconf" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage" + set_setting_value "$yuzuconf" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI" + set_setting_value "$yuzuconf" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI" + fi + # Shared actions + dir_prep "$saves_folder/switch/yuzu/nand" "/var/data/yuzu/nand" + dir_prep "$saves_folder/switch/yuzu/sdmc" "/var/data/yuzu/sdmc" + dir_prep "$bios_folder/switch/keys" "/var/data/yuzu/keys" + dir_prep "$bios_folder/switch/registered" "/var/data/yuzu/nand/system/Contents/registered" + dir_prep "$logs_folder/yuzu" "/var/data/yuzu/log" + dir_prep "$screenshots_folder" "/var/data/yuzu/screenshots" + dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load" + # removing dead symlinks as they were present in a past version + if [ -d $bios_folder/switch ]; then + find $bios_folder/switch -xtype l -exec rm {} \; + fi + fi + if [[ "$action" == "postmove" ]]; then # Run only post-move commands + dir_prep "$bios_folder/switch/keys" "/var/data/yuzu/keys" + dir_prep "$bios_folder/switch/registered" "/var/data/yuzu/nand/system/Contents/registered" + dir_prep "$saves_folder/switch/yuzu/nand" "/var/data/yuzu/nand" + dir_prep "$saves_folder/switch/yuzu/sdmc" "/var/data/yuzu/sdmc" + dir_prep "$logs_folder/yuzu" "/var/data/yuzu/log" + dir_prep "$screenshots_folder" "/var/data/yuzu/screenshots" + dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load" + set_setting_value "$yuzuconf" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage" + set_setting_value "$yuzuconf" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage" + set_setting_value "$yuzuconf" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI" + set_setting_value "$yuzuconf" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI" + fi + fi +} diff --git a/functions/presets.sh b/functions/presets.sh new file mode 100644 index 00000000..664b7893 --- /dev/null +++ b/functions/presets.sh @@ -0,0 +1,207 @@ +#!/bin/bash + +change_preset_dialog() { + # This function will build a list of all systems compatible with a given preset, their current enable/disabled state and allow the user to change one or more + # USAGE: change_preset_dialog "$preset" + + local preset="$1" + pretty_preset_name=${preset//_/ } # Preset name prettification + pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification + local current_preset_settings=() + local current_enabled_systems=() + local current_disabled_systems=() + local changed_systems=() + local changed_presets=() + local section_results=$(sed -n '/\['"$preset"'\]/, /\[/{ /\['"$preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d') + + while IFS= read -r config_line + do + system_name=$(get_setting_name "$config_line" "retrodeck") + all_systems=("${all_systems[@]}" "$system_name") + system_value=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$preset") + if [[ "$system_value" == "true" ]]; then + current_enabled_systems=("${current_enabled_systems[@]}" "$system_name") + elif [[ "$system_value" == "false" ]]; then + current_disabled_systems=("${current_disabled_systems[@]}" "$system_name") + fi + current_preset_settings=("${current_preset_settings[@]}" "$system_value" "$(make_name_pretty $system_name)" "$system_name") + done < <(printf '%s\n' "$section_results") + + choice=$(zenity \ + --list --width=1200 --height=720 \ + --checklist \ + --separator="," \ + --hide-column=3 --print-column=3 \ + --text="Enable $pretty_preset_name:" \ + --column "Enabled" \ + --column "Emulator" \ + --column "internal_system_name" \ + "${current_preset_settings[@]}") + + local rc=$? + + if [[ ! -z $choice || "$rc" == 0 ]]; then + ( + IFS="," read -ra choices <<< "$choice" + for emulator in "${all_systems[@]}"; do + if [[ " ${choices[*]} " =~ " ${emulator} " && ! " ${current_enabled_systems[*]} " =~ " ${emulator} " ]]; then + changed_systems=("${changed_systems[@]}" "$emulator") + if [[ ! " ${changed_presets[*]} " =~ " ${preset} " ]]; then + changed_presets=("${changed_presets[@]}" "$preset") + fi + set_setting_value "$rd_conf" "$emulator" "true" "retrodeck" "$preset" + # Check for conflicting presets for this system + while IFS=: read -r preset_being_checked known_incompatible_preset; do + if [[ "$preset" == "$preset_being_checked" ]]; then + if [[ $(get_setting_value "$rd_conf" "$emulator" "retrodeck" "$known_incompatible_preset") == "true" ]]; then + changed_presets=("${changed_presets[@]}" "$known_incompatible_preset") + set_setting_value "$rd_conf" "$emulator" "false" "retrodeck" "$known_incompatible_preset" + fi + fi + done < "$incompatible_presets_reference_list" + fi + if [[ ! " ${choices[*]} " =~ " ${emulator} " && ! " ${current_disabled_systems[*]} " =~ " ${emulator} " ]]; then + changed_systems=("${changed_systems[@]}" "$emulator") + if [[ ! " ${changed_presets[*]} " =~ " ${preset} " ]]; then + changed_presets=("${changed_presets[@]}" "$preset") + fi + set_setting_value "$rd_conf" "$emulator" "false" "retrodeck" "$preset" + fi + done + for emulator in "${changed_systems[@]}"; do + build_preset_config $emulator ${changed_presets[*]} + done + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Presets Configuration" \ + --text="Setting up your presets, please wait..." + else + echo "No choices made" + fi +} + +build_preset_config() { + # This function will apply one or more presets for a given system, as listed in retrodeck.cfg + # USAGE: build_preset_config "system name" "preset class 1" "preset class 2" "preset class 3" + + local system_being_changed="$1" + shift + local presets_being_changed="$*" + for current_preset in $presets_being_changed + do + local preset_section=$(sed -n '/\['"$current_preset"'\]/, /\[/{ /\['"$current_preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d') + while IFS= read -r system_line + do + local read_system_name=$(get_setting_name "$system_line") + if [[ "$read_system_name" == "$system_being_changed" ]]; then + local read_system_enabled=$(get_setting_value "$rd_conf" "$read_system_name" "retrodeck" "$current_preset") + while IFS='^' read -r action read_preset read_setting_name new_setting_value section + do + case "$action" in + + "config_file_format" ) + if [[ "$read_preset" == "retroarch-all" ]]; then + local retroarch_all="true" + local read_config_format="retroarch" + else + local read_config_format="$read_preset" + fi + ;; + + "target_file" ) + if [[ "$read_preset" = \$* ]]; then + eval read_preset=$read_preset + fi + local read_target_file="$read_preset" + ;; + + "defaults_file" ) + if [[ "$read_preset" = \$* ]]; then + eval read_preset=$read_preset + fi + local read_defaults_file="$read_preset" + ;; + + "change" ) + if [[ "$read_preset" == "$current_preset" ]]; then + if [[ "$read_system_enabled" == "true" ]]; then + if [[ "$new_setting_value" = \$* ]]; then + eval new_setting_value=$new_setting_value + fi + if [[ "$read_config_format" == "retroarch" && ! "$retroarch_all" == "true" ]]; then # If this is a RetroArch core, generate the override file + if [[ ! -f "$read_target_file" ]]; then + mkdir -p "$(realpath "$(dirname "$read_target_file")")" + echo "$read_setting_name = \""$new_setting_value"\"" > "$read_target_file" + else + if [[ -z $(grep "$read_setting_name" "$read_target_file") ]]; then + add_setting "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section" + else + set_setting_value "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section" + fi + fi + else + set_setting_value "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section" + fi + else + if [[ "$read_config_format" == "retroarch" && ! "$retroarch_all" == "true" ]]; then + if [[ -f "$read_target_file" ]]; then + delete_setting "$read_target_file" "$read_setting_name" "$read_config_format" "$section" + if [[ -z $(cat "$read_target_file") ]]; then # If the override file is empty + rm -f "$read_target_file" + fi + if [[ -z $(ls -1 "$(dirname "$read_target_file")") ]]; then # If the override folder is empty + rmdir "$(realpath "$(dirname "$read_target_file")")" + fi + fi + else + local default_setting_value=$(get_setting_value "$read_defaults_file" "$read_setting_name" "$read_config_format" "$section") + set_setting_value "$read_target_file" "$read_setting_name" "$default_setting_value" "$read_config_format" "$section" + fi + fi + fi + ;; + + "enable" ) + if [[ "$read_preset" == "$current_preset" ]]; then + if [[ "$read_system_enabled" == "true" ]]; then + enable_file "$read_setting_name" + else + disable_file "$read_setting_name" + fi + fi + ;; + + * ) + echo "Other data: $action $read_preset $read_setting_name $new_setting_value $section" # DEBUG + ;; + + esac + done < <(cat "$presets_dir/$read_system_name"_presets.cfg) + fi + done < <(printf '%s\n' "$preset_section") + done +} + +build_retrodeck_current_presets() { + # This function will read the presets sections of the retrodeck.cfg file and build the default state + # This can also be used to build the "current" state post-update after adding new systems + # USAGE: build_retrodeck_current_presets + + while IFS= read -r current_setting_line # Read the existing retrodeck.cfg + do + if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it + if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header + local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name + else + if [[ ! ("$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" || "$current_section" == "cheevos" || "$current_section" == "cheevos_hardcore") ]]; then + local system_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line + local system_enabled=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$current_section") # Read the variables value from active retrodeck.cfg + if [[ "$system_enabled" == "true" ]]; then + build_preset_config "$system_name" "$current_section" + fi + fi + fi + fi + done < $rd_conf +} diff --git a/global.sh b/global.sh deleted file mode 100755 index 51bba9c0..00000000 --- a/global.sh +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/bash - -# This file is containing some global function needed for the script such as the config file tools - -source /app/libexec/functions.sh - -# Static variables -rd_conf="/var/config/retrodeck/retrodeck.cfg" # RetroDECK config file path -rd_conf_backup="/var/config/retrodeck/retrodeck.bak" # Backup of RetroDECK config file from update -emuconfigs="/app/retrodeck/emu-configs" # folder with all the default emulator configs -rd_defaults="$emuconfigs/defaults/retrodeck/retrodeck.cfg" # A default RetroDECK config file -rd_update_patch="/var/config/retrodeck/rd_update.patch" # A static location for the temporary patch file used during retrodeck.cfg updates -bios_checklist="$emuconfigs/defaults/retrodeck/bios_checklist.cfg" # A config file listing BIOS file information that can be verified -compression_targets="$emuconfigs/defaults/retrodeck/compression_targets.cfg" # A config file containing supported compression types per system -easter_egg_checklist="$emuconfigs/defaults/retrodeck/easter_egg_checklist.cfg" # A config file listing days and times when special splash screens should show up -splashscreen_dir="/var/config/emulationstation/.emulationstation/resources/graphics/extra-splashes" # The default location of extra splash screens -current_splash_file="/var/config/emulationstation/.emulationstation/resources/graphics/splash.svg" # The active splash file that will be shown on boot -default_splash_file="/var/config/emulationstation/.emulationstation/resources/graphics/splash-orig.svg" # The default RetroDECK splash screen -lockfile="/var/config/retrodeck/.lock" # where the lockfile is located -default_sd="/run/media/mmcblk0p1" # Steam Deck SD default path -hard_version="$(cat '/app/retrodeck/version')" # hardcoded version (in the readonly filesystem) - -# Config files for emulators with single config files - -citraconf="/var/config/citra-emu/qt-config.ini" -duckstationconf="/var/data/duckstation/settings.ini" -melondsconf="/var/config/melonDS/melonDS.ini" -rpcs3conf="/var/config/rpcs3/config.yml" -yuzuconf="/var/config/yuzu/qt-config.ini" - -# ES-DE config files - -es_settings="/var/config/emulationstation/.emulationstation/es_settings.xml" - -# RetroArch config files - -raconf="/var/config/retroarch/retroarch.cfg" -ra_core_conf="/var/config/retroarch/retroarch-core-options.cfg" - -# Dolphin config files - -dolphinconf="/var/config/dolphin-emu/Dolphin.ini" -dolphingcpadconf="/var/config/dolphin-emu/GCPadNew.ini" -dolphingfxconf="/var/config/dolphin-emu/GFX.ini" -dolphinhkconf="/var/config/dolphin-emu/Hotkeys.ini" -dolphinqtconf="/var/config/dolphin-emu/Qt.ini" - -# PCSX2 config files - -pcsx2conf="/var/config/PCSX2/inis/GS.ini" -pcsx2uiconf="/var/config/PCSX2/inis/PCSX2_ui.ini" -pcsx2vmconf="/var/config/PCSX2/inis/PCSX2_vm.ini" - -# PCSX2-QT config file - -pcsx2qtconf="/var/config/PCSX2/inis/PCSX2.ini" - -# Primehack config files - -primehackconf="/var/config/primehack/Dolphin.ini" -primehackgcpadconf="/var/config/primehack/GCPadNew.ini" -primehackgfxconf="/var/config/primehack/GFX.ini" -primehackhkconf="/var/config/primehack/Hotkeys.ini" -primehackqtconf="/var/config/primehack/Qt.ini" - -# We moved the lockfile in /var/config/retrodeck in order to solve issue #53 - Remove in a few versions -if [ -f "$HOME/retrodeck/.lock" ] -then - mv "$HOME/retrodeck/.lock" $lockfile -fi - -# If there is no config file I initalize the file with the the default values -if [ ! -f "$rd_conf" ] -then - mkdir -p /var/config/retrodeck - echo "RetroDECK config file not found in $rd_conf" - echo "Initializing" - # if we are here means that the we are in a new installation, so the version is valorized with the hardcoded one - # Initializing the variables - if [ -z $version]; then - if [[ $(cat $lockfile) == *"0.4."* ]] || [[ $(cat $lockfile) == *"0.3."* ]] || [[ $(cat $lockfile) == *"0.2."* ]] || [[ $(cat $lockfile) == *"0.1."* ]]; then # If the previous version is very out of date, pre-rd_conf - echo "Running version workaround" - version=$(cat $lockfile) - else - version="$hard_version" - fi - fi - - # Check if SD card path has changed from SteamOS update - if [[ ! -d $default_sd && "$(ls -A /run/media/deck/)" ]]; then - configurator_generic_dialog "The SD card was not found in the expected location.\nThis may happen when SteamOS is updated.\n\nPlease browse to the current location of the SD card.\n\nIf you are not using an SD card, please click \"Cancel\"." - default_sd=$(directory_browse "SD Card Location") - fi - - cp $rd_defaults $rd_conf # Load default settings - set_setting_value $rd_conf "version" "$version" retrodeck # Set current version for new installs - set_setting_value $rd_conf "sdcard" "$default_sd" retrodeck # Set SD card location if default path has changed - - echo "Setting config file permissions" - chmod +rw $rd_conf - echo "RetroDECK config file initialized. Contents:" - echo - cat $rd_conf - source $rd_conf # Load new variables into memory - -# If the config file is existing i just read the variables (source it) -else - echo "Found RetroDECK config file in $rd_conf" - echo "Loading it" - source "$rd_conf" - - # Verify rdhome is where it is supposed to be. - if [[ ! -d $rdhome ]]; then - prev_home_path=$rdhome - configurator_generic_dialog "The RetroDECK data folder was not found in the expected location.\nThis may happen when SteamOS is updated.\n\nPlease browse to the current location of the \"retrodeck\" folder." - new_home_path=$(directory_browse "RetroDECK folder location") - sed -i 's#'$prev_home_path'#'$new_home_path'#g' $rd_conf - source "$rd_conf" - emulators_post_move - fi -fi diff --git a/net.retrodeck.retrodeck.Configurator.desktop b/net.retrodeck.retrodeck.Configurator.desktop new file mode 100644 index 00000000..89c01fff --- /dev/null +++ b/net.retrodeck.retrodeck.Configurator.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=RetroDECK Configurator +GenericName=RetroDECK Configuration Utility +Type=Application +Comment=A handy tool to change common RetroDECK settings +Icon=net.retrodeck.retrodeck +Exec=/app/tools/configurator.sh +Terminal=false +StartupNotify=false +Keywords=multi;engine;emulator;standalone;steam;deck +Categories=Game;Emulator; diff --git a/net.retrodeck.retrodeck.appdata.xml b/net.retrodeck.retrodeck.appdata.xml index f928a69d..550b9233 100644 --- a/net.retrodeck.retrodeck.appdata.xml +++ b/net.retrodeck.retrodeck.appdata.xml @@ -4,7 +4,7 @@ net.retrodeck.retrodeck net.retrodeck.retrodeck.desktop RetroDECK - Your one in all application for emulation and retro gaming on the Steam Deck and more! + RetroDECK brings an environment to catalog and play your retro games directly on your Steam Deck. RetroDECK Team https://retrodeck.net https://github.com/XargonWan/RetroDECK/issues @@ -65,6 +65,20 @@ GPL-3.0 CC0-1.0 + + https://github.com/XargonWan/RetroDECK/releases/tag/0.6.4b + +

New features - General:

+
    +
  • Added CEMU, WiiU Emulator
  • +
  • Dolphin (Standalone) is now default for GameCube and Wii
  • +
+

Bug fixes and other changes:

+
    +
  • PLACEHOLDER
  • +
+
+
https://github.com/XargonWan/RetroDECK/releases/tag/0.6.6b @@ -540,4 +554,4 @@
- \ No newline at end of file + diff --git a/net.retrodeck.retrodeck.yml b/net.retrodeck.retrodeck.yml index 01e22193..73ab7ffd 100644 --- a/net.retrodeck.retrodeck.yml +++ b/net.retrodeck.retrodeck.yml @@ -1,18 +1,16 @@ app-id: net.retrodeck.retrodeck runtime: org.kde.Platform -runtime-version: 5.15-21.08 -#runtime-version: 6.3 # bumped because of pcsx2-qt +runtime-version: 5.15-22.08 sdk: org.kde.Sdk sdk-extensions: - org.freedesktop.Sdk.Extension.llvm14 # Needed for rpcs3 - #- org.freedesktop.Sdk.Extension.dotnet6 # Needed for Ryujinx - Removed, check if it's not breaking something else base: io.qt.qtwebengine.BaseApp # Needed for Yuzu -base-version: 5.15-21.08 # Needed for Yuzu +base-version: 5.15-22.08 # Needed for Yuzu command: retrodeck.sh finish-args: - - --socket=x11 - #- --socket=wayland + - --socket=fallback-x11 + - --socket=wayland - --socket=pulseaudio - --share=ipc - --share=network @@ -24,22 +22,20 @@ finish-args: - --talk-name=org.freedesktop.ScreenSaver - --talk-name=org.freedesktop.PowerManagement.Inhibit - --talk-name=org.freedesktop.login1.Manager + - --talk-name=org.freedesktop.Flatpak - --filesystem=xdg-run/app/com.discordapp.Discord:create - # Yuzu - # - --filesystem=home:ro # This may break Yuzu, let's see - # - --filesystem=/run/media:ro # Dolphin - --allow=bluetooth - #- --env=QT_QPA_PLATFORM=xcb #not sure if this will break something - # rpcs3 - #- --socket=fallback-x11 + # PPSSPP + # It allows an SDL application to specify its window class, which can be useful for window managers and desktop environments to identify and group similar windows + - --env=SDL_VIDEO_X11_WMCLASS=net.retrodeck.retrodeck + - --env=SDL_VIDEO_WAYLAND_WMCLASS=net.retrodeck.retrodeck cleanup: # ES-DE - /include - /share/ffmpeg - /lib/cmake - #- /lib/debug - /lib/pkgconfig # Yuzu - /include @@ -52,6 +48,9 @@ cleanup: - /src - '*.a' - '*.la' + # XMLSTARLET + - /lib/debug + - /share/runtime cleanup-commands: # Yuzu - /app/cleanup-BaseApp.sh @@ -66,31 +65,32 @@ modules: # The version number is hardcoded in /app/retrodeck/version # # UPDATE STEPS FOR MAIN: - # [X] Update the VERSION variable - # [X] Update the appdata.xml with the version number and notes - # [X] change branch into main in version-initialization (first one) - # [X] change branch into main in retrodeck module (last one) - # [X] if header (before modules) was edited, edit it even in flathub.yml + # [ ] Update the VERSION variable + # [ ] Update the appdata.xml with the version number and notes + # [ ] change branch into main in version-initialization (first one) + # [ ] change branch into main in retrodeck module (last one) + # [ ] >>>>> if header (before modules) was edited, edit it even in flathub.yml # - name: version-initialization buildsystem: simple build-commands: - | - - VERSION="0.6.6b" + + VERSION=$(git rev-parse --abbrev-ref HEAD) git checkout ${GITHUB_REF_NAME} mkdir -p ${FLATPAK_DEST}/retrodeck/ if [[ $VERSION == *"cooker"* ]]; then - VERSION="$VERSION-[$(git rev-parse --short HEAD)]" + VERSION="$VERSION-VERSIONPLACEHOLDER" fi echo $VERSION >> ${FLATPAK_DEST}/retrodeck/version cat ${FLATPAK_DEST}/retrodeck/version + echo "Version is $VERSION" sources: - type: git url: https://github.com/XargonWan/RetroDECK.git - branch: main + branch: cooker-0.7.0b - name: xmlstarlet config-opts: @@ -107,39 +107,6 @@ modules: - autoreconf -vfi post-install: - ln -s "xml" "${FLATPAK_DEST}/bin/xmlstarlet" ||: - cleanup: ['*'] - - # pcsx2-qt needs QT6, maybe others, here until every qt emulator will support qt6 (not yuzu atm) - # from: https://github.com/flathub/org.profex_xrd.Profex - - # - name: qt6-core5compat - # buildsystem: cmake-ninja - # builddir: true - # sources: - # - type: archive - # url: https://download.qt.io/official_releases/qt/6.2/6.2.4/submodules/qt5compat-everywhere-src-6.2.4.tar.xz - # sha256: 5de2b9e25bf7de161fbb88ecdd468ed1788bc899392fc05ed80aa590ebb352fa - # x-checker-data: - # type: html - # url: https://download.qt.io/official_releases/qt/6.2/ - # version-pattern: '>([\d\.-]*)/<' - # url-template: https://download.qt.io/official_releases/qt/6.2/$version/submodules/qt5compat-everywhere-src-$version.tar.xz - # post-install: - # - mkdir -p /app/lib/mkspecs - # - cp -R /app/mkspecs/* /app/lib/mkspecs/ - # - ln -fsr ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/libQt*.so* -t ${FLATPAK_DEST}/lib/ - # - sed -i 's/\\([0-9]\\+\\.[0-9]\\+\\)\\.[0-9]\\+ ${_Qt6.*_FIND_VERSION_EXACT}/\\1/' - # ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/cmake/Qt6*/Qt6*Config.cmake - # - sed -e 's@PATHS \"${CMAKE_CURRENT_LIST_DIR}/..\" NO_DEFAULT_PATH@PATHS \"${CMAKE_CURRENT_LIST_DIR}/..\" - # \"/usr/lib/${CMAKE_CXX_LIBRARY_ARCHITECTURE}/cmake/\" NO_DEFAULT_PATH@' -i - # ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/cmake/Qt6*/Qt6*Config.cmake - # - sed -e 's@\\($$QT_MODULE_BIN_BASE\\)@\\1 '${FLATPAK_DEST}'/bin @' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri - # - sed -e 's@\\($$QT_MODULE_INCLUDE_BASE \\)@\\1'${FLATPAK_DEST}'/include @' - # -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri - # - sed -e 's@$$QT_MODULE_INCLUDE_BASE/@'${FLATPAK_DEST}'/include/@g' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri - # - sed -e 's@$$QT_MODULE_LIB_BASE@'${FLATPAK_DEST}'/lib@g' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri - # cleanup: - # - /app/mkspecs # mesa repo got a double certificate issue and gnutils cannot handle that so GLU download fails, # this affects even the shared-modules's glu so I have to replace it temporarly @@ -194,9 +161,76 @@ modules: url: https://github.com/CharlesThobe/chdman.git commit: f7cadf1720cbeba8a14f2685830ff424a0c7f6cd + - name: rclone + buildsystem: simple + build-commands: + - cp rclone ${FLATPAK_DEST}/bin/ + sources: + - type: archive + url: https://github.com/rclone/rclone/releases/download/v1.61.1/rclone-v1.61.1-linux-amd64.zip + sha256: 6d6455e1cb69eb0615a52cc046a296395e44d50c0f32627ba8590c677ddf50a9 + + # Source: https://github.com/flathub/com.valvesoftware.Steam.Utility.steamtinkerlaunch/blob/129c9192f874405d21612d95f9749dc2bcaf8cea/modules/rsync.yml#L5 + - name: rsync + no-autogen: true + config-opts: + - --prefix=${FLATPAK_DEST} + - --with-included-popt + - --with-included-zlib + - --disable-debug + - --disable-xxhash # Unable to meet dependency -- rsync refuses to see the required xxhash.h file + sources: + - type: archive + url: https://download.samba.org/pub/rsync/src/rsync-3.2.7.tar.gz + sha256: 4e7d9d3f6ed10878c58c5fb724a67dacf4b6aac7340b13e488fb2dc41346f2bb + x-checker-data: + type: anitya + project-id: 4217 + stable-only: true + url-template: https://download.samba.org/pub/rsync/src/rsync-$version.tar.gz + + - name: jq + buildsystem: simple + build-commands: + - cp jq-linux64 ${FLATPAK_DEST}/bin/jq + - chmod +x ${FLATPAK_DEST}/bin/jq + sources: + - type: file + url: https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 + sha256: af986793a515d500ab2d35f8d2aecd656e764504b789b66d7e1a0b727a124c44 + + - name: yq + buildsystem: simple + build-commands: + - cp yq_linux_amd64 ${FLATPAK_DEST}/bin/yq + - chmod +x ${FLATPAK_DEST}/bin/yq + sources: + - type: file + url: https://github.com/mikefarah/yq/releases/download/v4.33.3/yq_linux_amd64 + sha256: 4ee662847c588c3ef2fec8bfb304e8739e3dbaba87ccb9a608d691c88f5b64dc + + - name: glslang + buildsystem: cmake-ninja + config-opts: + - -DCMAKE_BUILD_TYPE=Release + - -DENABLE_CTEST=OFF + cleanup: + - /include + - /lib/cmake + sources: + - type: archive + url: https://github.com/KhronosGroup/glslang/archive/12.1.0.tar.gz + sha256: 1515e840881d1128fb6d831308433f731808f818f2103881162f3ffd47b15cd5 + x-checker-data: + type: anitya + stable-only: true + project-id: 205796 + url-template: https://github.com/KhronosGroup/glslang/archive/$version.tar.gz + # ES-DE - START # https://gitlab.com/es-de/emulationstation-de + #This is disabled because we added the extension (line 11), check if the videos are ok. - name: ffmpeg config-opts: - --disable-static @@ -231,13 +265,33 @@ modules: - name: pugixml buildsystem: cmake-ninja config-opts: - - -DBUILD_SHARED_LIBS=on . + - -DBUILD_SHARED_LIBS=ON + cleanup: + - /include + - /lib/cmake + - /lib/pkgconfig sources: - type: archive - url: https://github.com/zeux/pugixml/releases/download/v1.11.4/pugixml-1.11.4.tar.gz - sha256: 8ddf57b65fb860416979a3f0640c2ad45ddddbbafa82508ef0a0af3ce7061716 + url: https://github.com/zeux/pugixml/releases/download/v1.13/pugixml-1.13.tar.gz + sha256: 40c0b3914ec131485640fa57e55bf1136446026b41db91c1bef678186a12abbe + x-checker-data: + type: anitya + project-id: 3728 + url-template: https://github.com/zeux/pugixml/releases/download/v$version/pugixml-$version.tar.gz - # When updating this module remember to check those: https://gitlab.com/es-de/emulationstation-de/-/tree/v1.2.6/resources/systems/unix + - name: libgit2 + buildsystem: cmake-ninja + config-opts: + - -DCMAKE_BUILD_TYPE=Release + - -DBUILD_SHARED_LIBS:BOOL=ON + - -DTHREADSAFE=ON + sources: + - type: git + url: https://github.com/libgit2/libgit2.git + tag: v1.6.3 + + # When updating this module remember to check those: + # https://gitlab.com/es-de/emulationstation-de/-/blob/[VERSION]/resources/systems/unix/es_find_rules.xml # But we don't include them 1:1 as RetroDECK got some specific configs in some cases - name: emulationstation-de buildsystem: cmake-ninja @@ -249,13 +303,14 @@ modules: sources: - type: git url: https://gitlab.com/es-de/emulationstation-de - branch: 608d8a3c09abc5db398cdadc09e18fd2dfbaf570 + branch: 7a1e420c9df3b801a65e9bcdc0ac92e2d708836e - type: shell commands: - - sed -i 's/QUIT EMULATIONSTATION/QUIT RETRODECK/g' es-app/src/guis/GuiMenu.cpp - sed -i 's#"EMULATIONSTATION-DE V" + Utils::String::toUpper(PROGRAM_VERSION_STRING)#"RetroDECK v'$(cat ${FLATPAK_DEST}/retrodeck/version)', ES-DE v" + Utils::String::toUpper(PROGRAM_VERSION_STRING)#g' es-app/src/guis/GuiMenu.cpp + - type: patch + path: rd-submodules/es-de/es-de-retrodeck-mods.patch # ES-DE - END @@ -271,36 +326,6 @@ modules: url: https://github.com/anthonycaccese/art-book-next-es-de.git commit: a0dc0cccaa3f1475feb58e551fe732d982e161c0 - - name: alekfull-nx-es-de - buildsystem: simple - build-commands: - - mkdir -p ${FLATPAK_DEST}/share/emulationstation/themes/alekfull-nx-es-de/ - - mv -f * ${FLATPAK_DEST}/share/emulationstation/themes/alekfull-nx-es-de/ - sources: - - type: git - url: https://github.com/anthonycaccese/alekfull-nx-es-de.git - commit: 5011e5dca75663ff18602f3af9d17e9e880880ef - - - name: retrofix-revisited-es-de - buildsystem: simple - build-commands: - - mkdir -p ${FLATPAK_DEST}/share/emulationstation/themes/retrofix-revisited-es-de/ - - mv -f * ${FLATPAK_DEST}/share/emulationstation/themes/retrofix-revisited-es-de/ - sources: - - type: git - url: https://github.com/anthonycaccese/retrofix-revisited-es-de.git - commit: 23b80225078d2a3723039a8e94b6147c84065028 - - - name: nso-menu-interpreted-es-de - buildsystem: simple - build-commands: - - mkdir -p ${FLATPAK_DEST}/share/emulationstation/themes/nso-menu-interpreted-es-de/ - - mv -f * ${FLATPAK_DEST}/share/emulationstation/themes/nso-menu-interpreted-es-de/ - sources: - - type: git - url: https://github.com/anthonycaccese/nso-menu-interpreted-es-de.git - commit: f129c2d88e060a6c5d7643de5aeb02a0cc013de3 - # ES-DE Themes - END # External manifests start @@ -316,7 +341,7 @@ modules: sources: - type: git url: https://github.com/libretro/RetroArch.git - commit: 938ab716bd290b0f469068500966a834b5782929 + commit: 6616b807edea5b56683e9fbca8b003b436c22b13 - type: file path: rd-submodules/retroarch/retroarch.cfg post-install: @@ -354,7 +379,7 @@ modules: sources: - type: git url: https://github.com/libretro/RetroArch.git - commit: 938ab716bd290b0f469068500966a834b5782929 + commit: 6616b807edea5b56683e9fbca8b003b436c22b13 - name: retroarch-filers-audio subdir: libretro-common/audio/dsp_filters make-install-args: @@ -362,7 +387,7 @@ modules: sources: - type: git url: https://github.com/libretro/RetroArch.git - commit: 938ab716bd290b0f469068500966a834b5782929 + commit: 6616b807edea5b56683e9fbca8b003b436c22b13 - name: retroarch-assets make-install-args: - PREFIX=${FLATPAK_DEST} @@ -432,6 +457,48 @@ modules: - type: archive url: https://buildbot.libretro.com/stable/1.15.0/linux/x86_64/RetroArch_cores.7z sha256: 2230bc38eaf87406efd0c2b7bdd1cf9e813ba113505600f14a7ef9eb06f8c7c0 + + - name: retroarch-sameduck-core + buildsystem: simple + build-commands: + - mv sameduck_libretro.so /app/share/libretro/cores/sameduck_libretro.so + sources: + - type: archive + url: https://buildbot.libretro.com/nightly/linux/x86_64/latest/sameduck_libretro.so.zip + sha256: SAMEDUCKSHAPLACEHOLDER + + - name: ppsspp-bios + buildsystem: simple + build-commands: + - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/PPSSPP + - mv -f assets/* ${FLATPAK_DEST}/retrodeck/extras/PPSSPP/ + sources: + - type: archive + url: https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip + sha256: PPSSPPBIOSHASHPLACEHOLDER + + - name: msx-bios + buildsystem: simple + build-commands: + - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/MSX + - mv -f Databases ${FLATPAK_DEST}/retrodeck/extras/MSX/Databases + - mv -f Machines ${FLATPAK_DEST}/retrodeck/extras/MSX/Machines + sources: + - type: archive + url: http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip + sha256: MSXBIOSHASHPLACEHOLDER + strip-components: 0 + + - name: amiga-bios + buildsystem: simple + build-commands: + - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/Amiga + - cp -f Linux/x86-64/capsimg.so ${FLATPAK_DEST}/retrodeck/extras/Amiga/capsimg.so + sources: + - type: archive + url: https://github.com/rsn8887/capsimg/releases/download/1.1/Capsimg_for_Retroarch.zip + sha256: 16c1b511b8e1374a2b6461a66bb6f07b7d2627eb4e941fd1497a432330acaad1 + strip-components: 0 # PPSSPP - START # https://github.com/flathub/org.ppsspp.PPSSPP @@ -439,12 +506,11 @@ modules: - name: ppsspp buildsystem: cmake-ninja config-opts: - - -DUSE_SYSTEM_FFMPEG=OFF # default: off, turn this on? + - -DUSE_SYSTEM_FFMPEG=OFF - -DUSE_SYSTEM_LIBZIP=ON - -DUSE_SYSTEM_ZSTD=ON - -DUSE_WAYLAND_WSI=ON - #- -DUSING_X11_VULKAN=ON - -DUSING_QT_UI=OFF - -DBUILD_TESTING=OFF @@ -462,11 +528,12 @@ modules: sources: - type: git url: &ppsspp-url https://github.com/hrydgard/ppsspp.git - tag: v1.14.4 - commit: cd535263c1ad65fd03869591a8bd706680cbf04b + tag: v1.15.4 + commit: 9a80120dc09997e40c0a73fda05c3e07a347259f x-checker-data: - type: git - tag-pattern: ^v([\d.]+)$ + type: anitya + project-id: 12295 + tag-template: v$version is-main-source: true - name: ppsspp-localization @@ -500,12 +567,13 @@ modules: - ln -s "${FLATPAK_DEST}/yuzu/usr/bin/yuzu" "${FLATPAK_DEST}/bin/yuzu" sources: - type: file - url: https://github.com/yuzu-emu/yuzu-mainline/releases/download/mainline-0-1369/yuzu-mainline-20230312-54c359d1e.AppImage - sha256: 219874f72ea09856c8f1349d7bf744ecbd2823a469bd29f036b386924f5c5a97 + url: https://github.com/yuzu-emu/yuzu-mainline/releases/download/mainline-0-1465/yuzu-mainline-20230611-b9fc07fc0.AppImage + sha256: 3a5c90947d0e5ca839921a4b77ec11b71176dcd4fb6f64c81757af1ba0f6f4d3 # Yuzu - END # CITRA - START + # DO NOT UPDATE! WENT ON QT6 # https://github.com/flathub/org.citra_emu.citra - rd-submodules/shared-modules/SDL2/SDL2-with-libdecor.json @@ -534,8 +602,8 @@ modules: sources: - type: archive url: >- - https://github.com/citra-emu/citra-nightly/releases/download/nightly-1872/citra-unified-source-20230330-f96047f.tar.xz - sha256: 3c49b691d46a1253df7477d1e9d771b7d15b967459851c096150e9952e160bfa + https://github.com/citra-emu/citra-nightly/releases/download/nightly-1898/citra-unified-source-20230504-70335a7.tar.xz + sha256: b320585bd8c4c075f63d3d9c74b830718e58fcf04d987a5dcead402a72abf753 x-checker-data: type: json url: https://api.github.com/repos/citra-emu/citra-nightly/releases/latest @@ -564,14 +632,15 @@ modules: - ln -s "${FLATPAK_DEST}/pcsx2-qt/usr/bin/pcsx2-qt" "${FLATPAK_DEST}/bin/pcsx2-qt" sources: - type: file - url: https://github.com/PCSX2/pcsx2/releases/download/v1.7.4303/pcsx2-v1.7.4303-linux-AppImage-64bit-Qt.AppImage - sha256: 5680bcc510f0898e6078c60ef2ef1d987b8414e1296c5ff88bd87933e4a314b3 + url: https://github.com/PCSX2/pcsx2/releases/download/v1.7.4570/pcsx2-v1.7.4570-linux-AppImage-64bit-Qt.AppImage + sha256: fab77713f37140451d37b237092df479fa61325a97c038fad5a9c687f1e5f2b1 # PCSX2 - END # Dolphin - START # https://github.com/flathub/org.DolphinEmu.dolphin-emu # WHEN UPADTING: remember to update rd-submodules/dolphin contents + # NOTE: this is the last QT5 build, do not update until we don't fully switch to QT6! # needed for the emulate bluetooth adapter feature to work - name: bluez @@ -674,29 +743,21 @@ modules: dolphin-emu "$@" dest-filename: dolphin-emu-wrapper + - name: universal_dynamic_input + buildsystem: simple + build-commands: + - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/DynamicInputTextures + - cp -r * ${FLATPAK_DEST}/retrodeck/extras/DynamicInputTextures/ + sources: + - type: git + url: https://github.com/Venomalia/UniversalDynamicInput.git + commit: UNIVERSALDYNAMICINPUTCOMMITPLACEHOLDER + # Dolphin - END # XEMU - START # https://github.com/flathub/app.xemu.xemu - # certificate issue, check libglu module for more info - # - name: libglu - # buildsystem: meson - # cleanup: - # - /include - # - /lib/debug - # - /lib/pkgconfig - # - /lib/*.a - # sources: - # - type: archive - # url: http://mesa.freedesktop.org/archive/glu/glu-9.0.2.tar.xz - # sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4 - # x-checker-data: - # type: anitya - # project-id: 13518 - # stable-only: true - # url-template: http://mesa.freedesktop.org/archive/glu/glu-$version.tar.xz - - name: libpcap buildsystem: cmake-ninja cleanup: @@ -708,8 +769,8 @@ modules: - /share sources: - type: archive - url: https://www.tcpdump.org/release/libpcap-1.10.3.tar.gz - sha256: 2a8885c403516cf7b0933ed4b14d6caa30e02052489ebd414dc75ac52e7559e6 + url: https://www.tcpdump.org/release/libpcap-1.10.4.tar.gz + sha256: ed19a0383fad72e3ad435fd239d7cd80d64916b87269550159d20e47160ebe5f x-checker-data: type: anitya project-id: 1702 @@ -749,8 +810,8 @@ modules: sources: - type: git url: https://github.com/xemu-project/xemu.git - tag: v0.7.86 - commit: 4a99fd0f1855fc52e15885812abd3ee4bb2b3847 + tag: v0.7.92 + commit: d557a294feb3ecae8ec22adca0909e2d3adcc459 x-checker-data: type: json url: https://api.github.com/repos/xemu-project/xemu/releases/latest @@ -758,6 +819,16 @@ modules: timestamp-query: .published_at version-query: .tag_name + - name: xemu-dummy-hdd + buildsystem: simple + build-commands: + - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/XEMU + - mv -f "xbox_hdd.qcow2" "${FLATPAK_DEST}/retrodeck/extras/XEMU/xbox_hdd.qcow2" + sources: + - type: archive + url: https://github.com/mborgerson/xemu-hdd-image/releases/latest/download/xbox_hdd.qcow2.zip + sha256: XEMUHDDHASHPLACEHOLDER + # XEMU - END # MELONDS - START @@ -782,6 +853,8 @@ modules: - type: git url: https://github.com/melonDS-emu/melonDS.git commit: 430de6b2702bb93faa8c2004aff3fbd084db4a1e + - type: patch + path: rd-submodules/melonds/hotkeys.patch # MELONDS - END @@ -796,8 +869,8 @@ modules: buildsystem: cmake-ninja builddir: true build-options: - append-ld-library-path: /usr/lib/sdk/llvm14/lib - append-path: /usr/lib/sdk/llvm14/bin + append-ld-library-path: /usr/lib/sdk/llvm16/lib + append-path: /usr/lib/sdk/llvm16/bin cflags: &optflags -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong -grecord-gcc-switches -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer @@ -812,16 +885,20 @@ modules: ldflags: -fuse-ld=lld config-opts: - -DCMAKE_BUILD_TYPE=RelWithDebInfo - - -DBUILD_LLVM_SUBMODULE=ON + #- -DBUILD_LLVM_SUBMODULE=ON this was replaced by the fllowing: + - -DBUILD_LLVM=OFF - -DUSE_NATIVE_INSTRUCTIONS=OFF - -DUSE_PRECOMPILED_HEADERS=OFF + - -DUSE_SDL=ON - -DUSE_SYSTEM_CURL=ON - - -DUSE_SYSTEM_FFMPEG=ON + # Disabled this to force RPCS3 to use our built FFMPEG + - -DUSE_SYSTEM_FFMPEG=OFF - -DUSE_SYSTEM_LIBPNG=ON + - -DUSE_SYSTEM_SDL=ON - -DUSE_SYSTEM_ZLIB=ON - - -DITTAPI_SOURCE_DIR=/run/build/rpcs3/ittapi - -Wno-dev post-install: + - cp /usr/lib/sdk/llvm16/lib/libLLVM-16.so /app/lib/ - |- set -eux @@ -831,17 +908,7 @@ modules: sources: - type: git url: https://github.com/RPCS3/rpcs3.git - commit: 3e556c710b3256d23b9e524e44d45ba8bbf63814 - - type: git - url: https://github.com/intel/ittapi.git - commit: 4a3762fbc517475bfb0586efc513e51c164108c9 - dest: ittapi/ittapi - disable-shallow-clone: true - # remove git-lfs hook - - type: inline - dest: ittapi/ittapi/.git/hooks - dest-filename: post-checkout - contents: + commit: 5d7e75c5d8c7492ae655ea38bb7ead4b868a2f17 # RPCS3 - END @@ -885,179 +952,179 @@ modules: # # PRIMEHACK - END - # # PRIMEHACK APPIMAGE START - - # Duckstation - START - # https://github.com/flathub/org.duckstation.DuckStation - # Disabled until we completely switch to QT6 - - # - name: duckstation - # buildsystem: cmake-ninja - # no-make-install: true - # builddir: true - # config-opts: - # - -DCMAKE_BUILD_TYPE=RelWithDebInfo - # - -DUSE_EGL=ON - # - -DUSE_SDL2=ON - # - -DUSE_WAYLAND=ON - # - -DUSE_X11=ON - # - -DUSE_DRMKMS=ON - # - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON - # post-install: - # - install -m755 bin/duckstation-qt /app/bin - # - cp -r ../data/* bin/translations /app/bin - # sources: - # - type: git - # url: https://github.com/stenzek/duckstation.git - # commit: 6f709468601183083b8581d4952aaba7baf77084 - # # Cloning dep/msvc/qt is only necessary for Windows - # disable-submodules: true - - # Duckstation - END - - # Duckstation-DontUpdate - START - # Old version moved to QT6 so it's either this or AppImage - # But AppImage is a single one that keep getting updated at the same link so the sha (that's mandatory) will break the build - # So yeah we're stuck with this for a while - - - name: duckstation-DontUpdate - buildsystem: cmake-ninja - no-make-install: true - builddir: true - config-opts: - - -DCMAKE_BUILD_TYPE=Release - - -DUSE_EGL=ON - - -DUSE_SDL2=ON - - -DUSE_WAYLAND=ON - - -DUSE_X11=ON - - -DUSE_DRMKMS=ON - - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON - post-install: - - install -m 755 -t /app/bin/ bin/duckstation-nogui bin/duckstation-qt - - |- - for px in 16 32 48 64 128 256; do - install -Dm644 ../extras/icons/icon-${px}px.png /app/share/icons/hicolor/${px}x${px}/apps/org.duckstation.DuckStation.png - done - - cp -r ../data/* bin/translations /app/bin - sources: - - type: git - url: https://github.com/stenzek/duckstation.git - commit: 3fb61865e505ba639609fbf16cb8bdf5c66e020c - - # Duckstation-DontUpdate - END - # Duckstation-AppImage - START # https://github.com/stenzek/duckstation/releases/tag/preview - # - name: Duckstation-AppImage - # buildsystem: simple - # build-commands: - # - chmod +x DuckStation-*.AppImage - # - ./DuckStation-x64*.AppImage --appimage-extract - # - mkdir -p "${FLATPAK_DEST}/duckstation" - # - cp -r squashfs-root/* "${FLATPAK_DEST}/duckstation" - # - ln -s "${FLATPAK_DEST}/duckstation/usr/bin/duckstation" "${FLATPAK_DEST}/bin/duckstation" - # sources: - # - type: file - # url: https://github.com/stenzek/duckstation/releases/download/preview/DuckStation-x64.AppImage - # sha256: a107d1837df020cb4e7b8a542059665428883af69c1cf063edd29e2d75634867 + - name: Duckstation-AppImage + buildsystem: simple + build-commands: + - chmod +x DuckStation-*.AppImage + - ./DuckStation-x64*.AppImage --appimage-extract + - mkdir -p "${FLATPAK_DEST}/duckstation" + - cp -r squashfs-root/* "${FLATPAK_DEST}/duckstation" + - ln -s "${FLATPAK_DEST}/duckstation/usr/bin/duckstation-qt" "${FLATPAK_DEST}/bin/duckstation-qt" + sources: + - type: file + url: https://github.com/stenzek/duckstation/releases/download/preview/DuckStation-x64.AppImage + sha256: DUCKSTATIONSHAPLACEHOLDER # Duckstation-AppImage - END # Cemu - START # https://github.com/cemu-project/Cemu/releases + # https://github.com/flathub/info.cemu.Cemu - # Yes, this is old, do not update as we need libespol.so.1 + - name: boost + buildsystem: simple + build-commands: + - ./bootstrap.sh --prefix=${FLATPAK_DEST} --with-toolset=gcc --with-libraries=filesystem,system,program_options,nowide + - ./b2 install variant=release link=shared runtime-link=shared cxxflags="$CXXFLAGS" + linkflags="$LDFLAGS" -j ${FLATPAK_BUILDER_N_JOBS} + cleanup: + - /include + - /lib/cmake + sources: + - type: archive + url: https://boostorg.jfrog.io/artifactory/main/release/1.82.0/source/boost_1_82_0.tar.bz2 + sha256: a6e1ab9b0860e6a2881dd7b21fe9f737a095e5f33a3a874afc6a345228597ee6 + x-checker-data: + type: anitya + project-id: 6845 + stable-only: true + url-template: https://boostorg.jfrog.io/artifactory/main/release/$version/source/boost_${major}_${minor}_$patch.tar.bz2 - #- name: Cemu-binary - # buildsystem: simple - # build-commands: - # - mv Cemu ${FLATPAK_DEST}/bin/Cemu - # - chmod 777 ${FLATPAK_DEST}/bin/Cemu - # - mkdir -p ${FLATPAK_DEST}/config/cemu - # - mv gameProfiles ${FLATPAK_DEST}/config/cemu/gameProfiles - # - mv resources ${FLATPAK_DEST}/config/cemu/resources - # - mv shaderCache ${FLATPAK_DEST}/config/cemu/shaderCache - # sources: - # - type: archive - # url: https://github.com/cemu-project/Cemu/releases/download/v2.0-10/cemu-2.0-10-ubuntu-20.04-x64.zip - # sha256: b6cb5560e9a15be5991db4ca0ce1de70d233d094e388477b05d663a542dbbd5c + - name: libzip + buildsystem: cmake-ninja + config-opts: + - -DBUILD_DOC=OFF + - -DBUILD_EXAMPLES=OFF + - -DBUILD_REGRESS=OFF + - -DBUILD_TOOLS=OFF + cleanup: + - /bin + - /include + - /lib/cmake + - /lib/pkgconfig + sources: + - type: archive + url: https://libzip.org/download/libzip-1.9.2.tar.xz + sha256: c93e9852b7b2dc931197831438fee5295976ee0ba24f8524a8907be5c2ba5937 + x-checker-data: + type: anitya + project-id: 10649 + url-template: https://libzip.org/download/libzip-$version.tar.xz + + - name: rapidjson + buildsystem: cmake-ninja + config-opts: + - -DRAPIDJSON_BUILD_DOC=OFF + - -DRAPIDJSON_BUILD_EXAMPLES=OFF + - -DRAPIDJSON_BUILD_TESTS=OFF + - -DRAPIDJSON_BUILD_THIRDPARTY_GTEST=OFF + cleanup: + - /include + - /lib/cmake + - /lib/pkgconfig + - /share/doc + sources: + - type: archive + url: https://github.com/Tencent/rapidjson/archive/refs/tags/v1.1.0.tar.gz + sha256: bf7ced29704a1e696fbccf2a2b4ea068e7774fa37f6d7dd4039d0787f8bed98e + x-checker-data: + type: anitya + project-id: 7422 + stable-only: true + url-template: https://github.com/Tencent/rapidjson/archive/refs/tags/v$version.tar.gz + + - name: glm + buildsystem: cmake-ninja + cleanup: ['*'] + no-make-install: true + post-install: + - install -d ${FLATPAK_DEST}/include + - cp -R glm ${FLATPAK_DEST}/include + - cp -R cmake/glm ${FLATPAK_DEST}/lib/cmake + sources: + - type: archive + url: https://github.com/g-truc/glm/releases/download/0.9.9.8/glm-0.9.9.8.zip + sha256: 37e2a3d62ea3322e43593c34bae29f57e3e251ea89f4067506c94043769ade4c + + - name: fmt + buildsystem: cmake-ninja + config-opts: + - -DFMT_TEST=Off + cleanup: + - '*' + sources: + - type: archive + url: https://github.com/fmtlib/fmt/archive/9.1.0.tar.gz + sha256: 5dea48d1fcddc3ec571ce2058e13910a0d4a6bab4cc09a809d8b1dd1c88ae6f2 + x-checker-data: + type: anitya + project-id: 11526 + url-template: https://github.com/fmtlib/fmt/archive/$version.tar.gz + + - name: wxwidgets + buildsystem: cmake-ninja + cleanup: + - /bin + - /include + - /lib/cmake + - /lib/wx + - /share + sources: + - type: git + url: https://github.com/wxWidgets/wxWidgets + tag: v3.2.2.1 + commit: a812fffda3fe686c94e24bff27e8effd96e4de64 + x-checker-data: + type: anitya + project-id: 5150 + stable-only: true + tag-template: v$version + + - name: Cemu + buildsystem: cmake-ninja + config-opts: + - -DPORTABLE=false + - -DENABLE_VCPKG=false + build-options: + env: + - LC_ALL=C + sources: + - type: git + url: https://github.com/cemu-project/Cemu + # TODO: Update tag pattern on next stable ^v([\d.]+)$ + x-checker-data: + type: git + tag-pattern: ^v([\d.]+-\d+)$ + tag: v2.0-39 + commit: eda4cf4b241d56c5c16f6aa4d135b8a269676a76 + - type: script + commands: + - | + for d in DiscordCanary Discord; do + for i in {0..9}; do + test -S $XDG_RUNTIME_DIR/discord-ipc-$i || + ln -sf {app/com.discordapp.$d,$XDG_RUNTIME_DIR}/discord-ipc-$i; + done + done + Cemu_relwithdebinfo "$@" + dest-filename: Cemu-wrapper + post-install: + - install -Dm644 -t ${FLATPAK_DEST}/share/icons/hicolor/128x128/apps/ dist/linux/info.cemu.Cemu.png + - install -D -t ${FLATPAK_DEST}/bin/ bin/Cemu_relwithdebinfo Cemu-wrapper # Cemu - END - # Ryujinx - START - # https://github.com/flathub/org.ryujinx.Ryujinx - # - # THIS MUST BE AT THE END OF THE MANIFEST OR THE BINARY WILL GET CORRUPTED - # - - # - name: Ryujinx - # buildsystem: simple - # build-options: - # no-debuginfo: true - # no-debuginfo-compression: true - # strip: false - # arch: - # x86_64: - # env: - # RUNTIME: linux-x64 - # env: - # PKG_CONFIG_PATH: /app/lib/pkgconfig:/app/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig - # DOTNET_CLI_TELEMETRY_OPTOUT: 'true' - # DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 'true' - # RYUJINX_VERSION: 1.1.500 - # RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: flathub - # RYUJINX_TARGET_RELEASE_CHANNEL_REPO: org.ryujinx.Ryujinx - # RYUJINX_TARGET_RELEASE_CHANNEL_NAME: master - # build-commands: - # - | - # export PATH=$PATH:/run/build/Ryujinx/dotnet-sdk - # export RYUJINX_GIT_SHORT_HASH=$(git rev-parse --short HEAD) - # export RUNTIME_FRAMEWORK_VERSION=$(find nuget-sources -name 'microsoft.netcore.app.host.linux-x64.*' | grep -oP '(\d.\d.\d+.nupkg)' | grep -oP '(\d.\d.\d+)') - # sed -r --in-place "s/\%\%RYUJINX_BUILD_VERSION\%\%/$RYUJINX_VERSION/g;" Ryujinx.Common/ReleaseInformations.cs - # sed -r --in-place "s/\%\%RYUJINX_BUILD_GIT_HASH\%\%/$RYUJINX_GIT_SHORT_HASH/g;" Ryujinx.Common/ReleaseInformations.cs - # sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_NAME/g;" Ryujinx.Common/ReleaseInformations.cs - # sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_OWNER/g;" Ryujinx.Common/ReleaseInformations.cs - # sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_REPO/g;" Ryujinx.Common/ReleaseInformations.cs - # mkdir -p /app/bin - # dotnet publish -c Release -r $RUNTIME /p:DebugType=embedded Ryujinx /p:Version=$RYUJINX_VERSION /p:SourceRevisionId=$RYUJINX_GIT_SHORT_HASH /p:ExtraDefineConstants=DISABLE_UPDATER /p:RuntimeFrameworkVersion=$RUNTIME_FRAMEWORK_VERSION --self-contained --source nuget-sources - # if [ $? -ne 0 ]; then - # exit 1; - # fi; - # cp -r --remove-destination /run/build/Ryujinx/Ryujinx/bin/Release/net7.0/$RUNTIME/publish/* /app/bin/ - # mkdir -p /app/lib/ffmpeg - # ln -s /usr/lib/x86_64-linux-gnu/libX11.so.6 /app/lib/libX11.so - # install -Dm755 ryujinx-wrapper /app/bin/ryujinx-wrapper - # sources: - # - type: git - # url: https://github.com/Ryujinx/Ryujinx.git - # commit: 2b23463daa01226c5569d8e61d1d0959570354cf - # - type: archive - # only-arches: - # - x86_64 - # dest: dotnet-sdk - # url: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/7.0.101/dotnet-sdk-7.0.101-linux-x64.tar.gz - # sha256: 454e2da3d02c74c2f6d2446c94fd9075f8db80ff6c9b9d41d5e470683e16a1d5 - # x-checker-data: - # type: html - # url: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/7.0/latest.version - # version-pattern: ^([\d\.a-z-]+)$ - # url-template: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/$version/dotnet-sdk-$version-linux-x64.tar.gz - # - rd-submodules/ryujinx/nuget_sources.json - # - type: file - # path: rd-submodules/ryujinx/ryujinx-wrapper - - # Ryujinx - END - # External manifests end - name: retrodeck buildsystem: simple build-commands: - # Initializing retrodeck and emulationstation config folders + # Initializing RO retrodeck config folder - mkdir -p ${FLATPAK_DEST}/retrodeck - - mkdir -p ${FLATPAK_DEST}/emulationstation # Prep the ES-DE and RetroArch config files - I will have to SED/XMLSTARLET them soon - rm -rf /app/share/emulationstation/resources/systems/unix/es_find_rules.xml @@ -1066,14 +1133,15 @@ modules: - cp es-configs/es_systems.xml /app/share/emulationstation/resources/systems/unix/ # These must be put in home folder, managed by retrodeck.sh - cp es-configs/es_settings.xml ${FLATPAK_DEST}/retrodeck/es_settings.xml + - mv -f -t ${FLATPAK_DEST}/retrodeck es-configs/rd_prepacks - # Logo, res, move graphics directory to mutable space so splash can be changed after build - - mv -f -t ${FLATPAK_DEST}/emulationstation /app/share/emulationstation/resources/graphics - - ln -s ${FLATPAK_DEST}/emulationstation/graphics /app/share/emulationstation/resources/graphics - - cp -f res/extra-splashes/* ${FLATPAK_DEST}/emulationstation/graphics - - cp -f res/splash.svg ${FLATPAK_DEST}/emulationstation/graphics/splash.svg - - cp -f res/splash.svg ${FLATPAK_DEST}/emulationstation/graphics/splash-orig.svg + # Logo, res, move graphics directory away from default location so splash can be changed after build + - mv -f -t ${FLATPAK_DEST}/retrodeck /app/share/emulationstation/resources/graphics + - cp -f res/splash.svg ${FLATPAK_DEST}/retrodeck/graphics/splash.svg + - cp -f res/splash.svg ${FLATPAK_DEST}/retrodeck/graphics/splash-orig.svg + - cp -rf res/extra-splashes/ ${FLATPAK_DEST}/retrodeck/graphics - cp -f res/icon.svg /app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg + - mv -f -t ${FLATPAK_DEST}/retrodeck res/binding-icons # RetroDECK core script - cp retrodeck.sh /app/bin/retrodeck.sh @@ -1083,24 +1151,29 @@ modules: - mkdir -p /app/tools - cp tools/configurator.sh /app/tools/configurator.sh - chmod +x /app/tools/configurator.sh - - cp es-configs/tools-gamelist.xml /app/tools/gamelist.xml + #- cp es-configs/tools-gamelist.xml /app/retrodeck/tools-gamelist.xml + - cp tools/retrodeck_function_wrapper.sh /app/tools/retrodeck_function_wrapper.sh + - chmod +x /app/tools/retrodeck_function_wrapper.sh # Function libraries - mkdir -p /app/libexec - - cp global.sh /app/libexec/global.sh - - cp functions.sh /app/libexec/functions.sh - - cp post_update.sh /app/libexec/post_update.sh + - cp -r functions/* "/app/libexec/" - # Desktop entry + # Desktop entries - cp net.retrodeck.retrodeck.desktop /app/share/applications/net.retrodeck.retrodeck.desktop + - cp net.retrodeck.retrodeck.Configurator.desktop /app/share/applications/net.retrodeck.retrodeck.Configurator.desktop # TODO: group the configs per-emu and optimize the following cps, like already done with Dolphin. Please not that some files may be renamed, check retrodeck.sh to know how (and fix it after the edit) # Initializing default emulator configs - cp -r emu-configs ${FLATPAK_DEST}/retrodeck/emu-configs/ - # Overlays - #- cp -r overlays ${FLATPAK_DEST}/retrodeck/overlays Disabled in 0.4.2b as it will be introduced in 0.5.0b + # PICO-8 wrapper + - cp ${FLATPAK_DEST}/retrodeck/emu-configs/pico-8/pico8-wrapper.sh /app/bin/pico8 + - chmod +x /app/bin/pico8 + + # Needed for ffmpeg (RPCS3) + - mkdir -p ${FLATPAK_DEST}/lib/ffmpeg # Placing appdata - mkdir -p ${FLATPAK_DEST}/share/appdata @@ -1109,4 +1182,4 @@ modules: sources: - type: git url: https://github.com/XargonWan/RetroDECK.git - branch: main \ No newline at end of file + branch: cooker-0.7.0b diff --git a/post_update.sh b/post_update.sh deleted file mode 100644 index 70b0c01d..00000000 --- a/post_update.sh +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/bash - -post_update() { - - # post update script - echo "Executing post-update script" - - local prev_version=$(sed -e 's/[\.a-z]//g' <<< $version) - - if [[ $prev_version -le "050" ]]; then # If updating from prior to save sorting change at 0.5.0b - - # Finding existing ROMs folder - if [ -d "$default_sd/retrodeck" ] - then - # ROMs on SD card - roms_folder="$default_sd/retrodeck/roms" - if [[ ! -L $rdhome && ! -L $rdhome/roms ]]; then # Add a roms folder symlink back to ~/retrodeck if missing, to fix things like PS2 autosaves until user migrates whole ~retrodeck directory - ln -s $roms_folder $rdhome/roms - fi - else - # ROMs on Internal - roms_folder="$HOME/retrodeck/roms" - fi - echo "ROMs folder found at $roms_folder" - - # Unhiding downloaded media from the previous versions - if [ -d "$rdhome/.downloaded_media" ] - then - mv -fv "$rdhome/.downloaded_media" "$media_folder" - fi - - # Unhiding themes folder from the previous versions - if [ -d "$rdhome/.themes" ] - then - mv -fv "$rdhome/.themes" "$themes_folder" - fi - - # Doing the dir prep as we don't know from which version we came - dir_prep "$media_folder" "/var/config/emulationstation/.emulationstation/downloaded_media" - dir_prep "$themes_folder" "/var/config/emulationstation/.emulationstation/themes" - mkdir -pv $rdhome/.logs #this was added later, maybe safe to remove in a few versions - - # Resetting es_settings, now we need it but in the future I should think a better solution, maybe with sed - cp -fv /app/retrodeck/es_settings.xml /var/config/emulationstation/.emulationstation/es_settings.xml - - # 0.4 -> 0.5 - # Perform save and state migration if needed - - # Moving PCSX2 Saves - mv -fv /var/config/PCSX2/sstates/* $rdhome/states/ps2/pcsx2 - mv -fv /var/config/PCSX2/memcards/* $rdhome/saves/ps2/memcards - - # Moving Citra saves from legacy location to 0.5.0b structure - - mv -fv $rdhome/saves/Citra/* $rdhome/saves/n3ds/citra - rmdir $rdhome/saves/Citra # Old folder cleanup - - versionwheresaveschanged="0.4.5b" # Hardcoded break point between unsorted and sorted saves - - if [[ $(sed -e "s/\.//g" <<< $hard_version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]] && [[ ! $(sed -e "s/\.//g" <<< $version) > $(sed -e "s/\.//g" <<< $versionwheresaveschanged) ]]; then # Check if user is upgrading from the version where save organization was changed. Try not to reuse this, it things 0.4.5b is newer than 0.4.5 - migration_logfile=$rdhome/.logs/savemove_"$(date +"%Y_%m_%d_%I_%M_%p").log" - save_backup_file=$rdhome/savebackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip" - state_backup_file=$rdhome/statesbackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip" - - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --text="You are updating to a version of RetroDECK where save file locations have changed!\n\nYour existing files will be backed up for safety and then sorted automatically.\n\nIf a file cannot be sorted automatically it will remain where it is for manual sorting.\n\nPLEASE BE PATIENT! This process can take several minutes if you have a large ROM library." - - allgames=($(find "$roms_folder" -maxdepth 2 -mindepth 2 ! -name "systeminfo.txt" ! -name "systems.txt" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" ! -name "*^*" | sed -e "s/ /\^/g")) # Build an array of all games and multi-disc-game-containing folders, adding whitespace placeholder - - allsaves=($(find "$saves_folder" -mindepth 1 -maxdepth 1 -name "*.*" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" | sed -e "s/ /\^/g")) # Build an array of all save files, ignoring standalone emulator sub-folders, adding whitespace placeholder - - allstates=($(find "$states_folder" -mindepth 1 -maxdepth 1 -name "*.*" ! -name "gc" ! -name "n3ds" ! -name "nds" ! -name "wii" ! -name "xbox" | sed -e "s/ /\^/g")) # Build an array of all state files, ignoring standalone emulator sub-folders, adding whitespace placeholder - - totalsaves=${#allsaves[@]} - totalstates=${#allstates[@]} - filesleft= - current_dest_folder= - gamestoskip= - - tar -C $rdhome -czf $save_backup_file saves # Backup save directory for safety - echo "Saves backed up to" $save_backup_file >> $migration_logfile - tar -C $rdhome -czf $state_backup_file states # Backup state directory for safety - echo "States backed up to" $state_backup_file >> $migration_logfile - - ( - movefile() { # Take matching save and rom files and sort save into appropriate system folder - echo "# $filesleft $currentlybeingmoved remaining..." # These lines update the Zenity progress bar - progress=$(( 100 - (( 100 / "$totalfiles" ) * "$filesleft" ))) - echo $progress - filesleft=$((filesleft-1)) - if [[ ! " ${gamestoskip[*]} " =~ " ${1} " ]]; then # If the current game name exists multiple times in array ie. /roms/snes/Mortal Kombat 3.zip and /roms/genesis/Mortal Kombat 3.zip, skip and alert user to sort manually - game=$(sed -e "s/\^/ /g" <<< "$1") # Remove whitespace placeholder - gamebasename=$(basename "$game" | sed -e 's/\..*//') # Extract pure file name ie. /roms/snes/game1.zip becomes game1 - systemdir="$(basename "$(dirname "$1")")" # Extract parent directory identifying system ROM belongs to - matches=($(find "$roms_folder" -maxdepth 2 -mindepth 2 -name "$gamebasename"".*" | sed -e 's/ /^/g' | sed -e 's/\..*//')) # Search for multiple instances of pure game name, adding to skip list if found - if [[ ${#matches[@]} -gt 1 ]]; then - echo "ERROR: Multiple ROMS found with name:" $gamebasename "Please sort saves and states for these ROMS manually" >> $migration_logfile - gamestoskip+=("$1") - return - fi - echo "INFO: Examining ROM file:" "$game" >> $migration_logfile - echo "INFO: System detected as" $systemdir >> $migration_logfile - sosfile=$(sed -e "s/\^/ /g" <<< "$2") # Remove whitespace placeholder from s-ave o-r s-tate file - sospurebasename="$(basename "$sosfile")" # Extract pure file name ie. /saves/game1.sav becomes game1 - echo "INFO: Current save or state being examined for match:" $sosfile >> $migration_logfile - echo "INFO: Matching save or state" $sosfile "and game" $game "found." >> $migration_logfile - echo "INFO: Moving save or state to" $current_dest_folder"/"$systemdir"/"$sosbasename >> $migration_logfile - if [[ ! -d $current_dest_folder"/"$systemdir ]]; then # If system directory doesn't exist for save yet, create it - echo "WARNING: Creating missing system directory" $current_dest_folder"/"$systemdir - mkdir $current_dest_folder/$systemdir - fi - mv "$sosfile" -t $current_dest_folder/$systemdir # Move save to appropriate system directory - return - else - echo "WARNING: Game with name" "$(basename "$1" | sed -e "s/\^/ /g")" "already found. Skipping to next game..." >> $migration_logfile # Inform user of game being skipped due to duplicate ROM names - fi - } - - find "$roms_folder" -mindepth 2 -maxdepth 2 -name "*\^*" -exec echo "ERROR: Game named" {} "found, please move save manually" \; >> $migration_logfile # Warn user if any of their files have the whitespace replacement character used by the script - - totalfiles=$totalsaves #set variables for save file migration - filesleft=$totalsaves - currentlybeingmoved="saves" - current_dest_folder=$saves_folder - - for i in "${allsaves[@]}"; do # For each save file, compare to every ROM file name looking for a match - found= - currentsave=($(basename "$i" | sed -e 's/\..*//')) # Extract pure file name ie. /saves/game1.sav becomes game1 - for j in "${allgames[@]}"; do - currentgame=($(basename "$j" | sed -e 's/\..*//')) # Extract pure file name ie. /roms/snes/game1.zip becomes game1 - [[ $currentgame == $currentsave ]] && { found=1; break; } # If names match move to next stage, otherwise skip - done - [[ -n $found ]] && movefile $j $i || echo "ERROR: No ROM match found for save file" $i | sed -e 's/\^/ /g' >> $migration_logfile # If a match is found, run movefile() otherwise warn user of stranded save file - done - - totalfiles=$totalstates #set variables for state file migration - filesleft=$totalstates - currentlybeingmoved="states" - current_dest_folder=$states_folder - - for i in "${allstates[@]}"; do # For each state file, compare to every ROM file name looking for a match - found= - currentstate=($(basename "$i" | sed -e 's/\..*//')) # Extract pure file name ie. /states/game1.sav becomes game1 - for j in "${allgames[@]}"; do - currentgame=($(basename "$j" | sed -e 's/\..*//')) # Extract pure file name ie. /roms/snes/game1.zip becomes game1 - [[ $currentgame == $currentstate ]] && { found=1; break; } # If names match move to next stage, otherwise skip - done - [[ -n $found ]] && movefile $j $i || echo "ERROR: No ROM match found for state file" $i | sed -e 's/\^/ /g' >> $migration_logfile # If a match is found, run movefile() otherwise warn user of stranded state file - done - - ) | - zenity --progress \ - --icon-name=net.retrodeck.retrodeck \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title="Processing Files" \ - --text="# files remaining..." \ - --percentage=0 \ - --no-cancel \ - --auto-close - - if [[ $(cat $migration_logfile | grep "ERROR" | wc -l) -eq 0 ]]; then - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --text="The migration process has sorted all of your files automatically.\n\nEverything should be working normally, if you experience any issues please check the RetroDECK wiki or contact us directly on the Discord." - - else - cat $migration_logfile | grep "ERROR" > "$rdhome/manual_sort_needed.log" - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --text="The migration process was unable to sort $(cat $migration_logfile | grep "ERROR" | wc -l) files automatically.\n\nThese files will need to be moved manually to their new locations, find more detail on the RetroDECK wiki.\n\nA log of the files that need manual sorting can be found at $rdhome/manual_sort_needed.log" - fi - - else - echo "Version" $version "is after the save and state organization was changed, no need to sort again" - fi - fi - - # Everything within the following ( ) will happen behind the Zenity dialog. The save migration was a long process so it has its own individual dialogs. - - ( - if [[ $prev_version -le "062" ]]; then - # In version 0.6.2b, the following changes were made that required config file updates/reset: - # - Primehack preconfiguration completely redone. "Stop emulation" hotkey set to Start+Select, Xbox and Nintendo keymap profiles were created, Xbox set as default. - # - Duckstation save and state locations were dir_prep'd to the rdhome/save and /state folders, which was not previously done. Much safer now! - # - Fix PICO-8 folder structure. ROM and save folders are now sane and binary files will go into ~/retrodeck/bios/pico-8/ - - rm -rf /var/config/primehack # Purge old Primehack config files. Saves are safe as they are linked into /var/data/primehack. - primehack_init - - dir_prep "$rdhome/saves/duckstation" "/var/data/duckstation/memcards" - dir_prep "$rdhome/states/duckstation" "/var/data/duckstation/savestates" - - mv "$bios_folder/pico8" "$bios_folder/pico8_olddata" # Move legacy (and incorrect / non-functional ) PICO-8 location for future cleanup / less confusion - dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed - dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway) - dir_prep "$bios_folder/pico-8/cdata" "$saves_folder/pico-8" # PICO-8 saves folder - fi - if [[ $prev_version -le "063" ]]; then - # In version 0.6.3b, the following changes were made that required config file updates/reset: - # - Put Dolphin and Primehack save states in different folders inside $rd_home/states - # - Fix symlink to hard-coded PICO-8 config folder (dir_prep doesn't like ~) - # - Overwrite Citra and Yuzu configs, as controller mapping was broken due to emulator updates. - - dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves" - dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves" - - rm -rf "$HOME/~/" # Remove old incorrect location from 0.6.2b - rm -f "$HOME/.lexaloffle/pico-8" # Remove old symlink to prevent recursion - dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed - dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder structure was backwards, fixing for consistency. - - cp -fv $emuconfigs/citra/qt-config.ini /var/config/citra-emu/qt-config.ini - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini - cp -fvr $emuconfigs/yuzu/* /var/config/yuzu/ - sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini - - # Remove unneeded tools folder, as location has changed to RO space - rm -rfv /var/config/retrodeck/tools/ - fi - if [[ $prev_version -le "064" ]]; then - # In version 0.6.4b, the following changes were made: - # Changed settings in Primehack: The audio output was not selected by default, default AR was also incorrect. - # Changed settings in Duckstation and PCSX2: The "ask on exit" was disabled and "save on exit" was enabled. - # The default configs have been updated for new installs and resets, a patch was created to address existing installs. - - deploy_multi_patch "emu-configs/patches/updates/064b_update.patch" - fi - if [[ $prev_version -le "065" ]]; then - # In version 0.6.5b, the following changes were made: - # Change Yuzu GPU accuracy to normal for better performance - - set_setting_value $yuzuconf "gpu_accuracy" "0" "yuzu" "Renderer" - fi - - # The following commands are run every time. - - update_rd_conf - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Finishing Upgrade" \ - --text="RetroDECK is finishing the upgrade process, please wait." - source $rd_conf # Load new config file variables - create_lock -} \ No newline at end of file diff --git a/rd-submodules/es-de/es-de-retrodeck-mods.patch b/rd-submodules/es-de/es-de-retrodeck-mods.patch new file mode 100644 index 00000000..f5f49bbd --- /dev/null +++ b/rd-submodules/es-de/es-de-retrodeck-mods.patch @@ -0,0 +1,58 @@ +diff -au1r emulationstation-de/es-app/src/guis/GuiMenu.cpp emulationstation-de/es-app/src/guis/GuiMenu.cpp +--- emulationstation-de/es-app/src/guis/GuiMenu.cpp 2023-04-12 09:08:12.394935336 -0400 ++++ emulationstation-de/es-app/src/guis/GuiMenu.cpp 2023-04-12 16:25:04.618753274 -0400 +@@ -10,2 +10,3 @@ + #include "guis/GuiMenu.h" ++#include "utils/PlatformUtil.h" + +@@ -66,2 +67,4 @@ + ++ addEntry("RETRODECK CONFIGURATOR", 0x777777FF, false, [this] { openRetroDeckConfigurator(); }); ++ + if (!Settings::getInstance()->getBool("ForceKiosk") && +@@ -69,3 +72,3 @@ + #if defined(__APPLE__) +- addEntry("QUIT EMULATIONSTATION", 0x777777FF, false, [this] { openQuitMenu(); }); ++ addEntry("QUIT RETRODECK", 0x777777FF, false, [this] { openQuitMenu(); }); + #else +@@ -74,3 +77,3 @@ + else +- addEntry("QUIT EMULATIONSTATION", 0x777777FF, false, [this] { openQuitMenu(); }); ++ addEntry("QUIT RETRODECK", 0x777777FF, false, [this] { openQuitMenu(); }); + #endif +@@ -1704,2 +1707,15 @@ + ++void GuiMenu::openRetroDeckConfigurator() ++{ ++ // Launch the configurator.sh script ++ std::string command; ++ std::string startDirectory; ++ bool runInBackground; ++ command = "bash /app/tools/configurator.sh"; ++ startDirectory = "/app/tools"; ++ runInBackground = false; ++ int result = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground); ++ // You can add any checks for the script's outcome here. ++} ++ + void GuiMenu::openQuitMenu() +@@ -1732,3 +1748,3 @@ + }); +- auto quitText = std::make_shared("QUIT EMULATIONSTATION", ++ auto quitText = std::make_shared("QUIT RETRODECK", + Font::get(FONT_SIZE_MEDIUM), 0x777777FF); +diff -au1r emulationstation-de/es-app/src/guis/GuiMenu.h emulationstation-de/es-app/src/guis/GuiMenu.h +--- emulationstation-de/es-app/src/guis/GuiMenu.h 2023-04-12 09:08:12.394935336 -0400 ++++ emulationstation-de/es-app/src/guis/GuiMenu.h 2023-04-12 09:33:25.023871033 -0400 +@@ -46,2 +46,3 @@ + void openOtherOptions(); ++ void openRetroDeckConfigurator(); + void openQuitMenu(); +diff -au1r emulationstation-de/es-core/src/Window.cpp emulationstation-de/es-core/src/Window.cpp +--- emulationstation-de/es-core/src/Window.cpp 2023-04-12 09:08:12.398268670 -0400 ++++ emulationstation-de/es-core/src/Window.cpp 2023-04-14 11:03:48.261309278 -0400 +@@ -179,3 +179,3 @@ + progressBarRect.barPosY += borderThickness; +- progressBarRect.color = 0x79010FFF; ++ progressBarRect.color = 0xC858E6FF; + mProgressBarRectangles.emplace_back(progressBarRect); diff --git a/rd-submodules/mame/floppy.patch b/rd-submodules/mame/floppy.patch new file mode 100644 index 00000000..1754f616 --- /dev/null +++ b/rd-submodules/mame/floppy.patch @@ -0,0 +1,41 @@ +diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp +index 3c00336d..cda94d92 100644 +--- a/src/devices/imagedev/floppy.cpp ++++ b/src/devices/imagedev/floppy.cpp +@@ -1707,9 +1707,10 @@ void floppy_sound_device::sound_stream_update(sound_stream &stream, std::vector< + { + idx = m_spin_playback_sample; + sampleend = m_sample[idx].data.size(); +- out = m_sample[idx].data[m_spin_samplepos++]; +- +- if (m_spin_samplepos >= sampleend) ++ m_spin_samplepos++; ++ if (m_spin_samplepos < sampleend) ++ out = m_sample[idx].data[m_spin_samplepos]; ++ else + { + // Motor sample has completed + switch (m_spin_playback_sample) +@@ -1763,7 +1764,8 @@ void floppy_sound_device::sound_stream_update(sound_stream &stream, std::vector< + idx = m_step_base + m_seek_playback_sample; + sampleend = m_sample[idx].data.size(); + // Mix it into the stream value +- out += m_sample[idx].data[(int)m_seek_samplepos]; ++ if (m_seek_samplepos < sampleend) ++ out += m_sample[idx].data[(int)m_seek_samplepos]; + // By adding different values than 1, we can change the playback speed + // This will be used to adjust the seek sound + m_seek_samplepos += m_seek_pitch; +@@ -1781,8 +1783,10 @@ void floppy_sound_device::sound_stream_update(sound_stream &stream, std::vector< + sampleend = m_sample[idx].data.size(); + + // Mix it into the stream value +- out += m_sample[idx].data[m_step_samplepos++]; +- if (m_step_samplepos >= sampleend) ++ m_step_samplepos++; ++ if (m_step_samplepos < sampleend) ++ out += m_sample[idx].data[m_step_samplepos]; ++ else + { + // Step sample done + m_step_samplepos = 0; \ No newline at end of file diff --git a/rd-submodules/mame/mame.ini b/rd-submodules/mame/mame.ini new file mode 100644 index 00000000..0164486f --- /dev/null +++ b/rd-submodules/mame/mame.ini @@ -0,0 +1,33 @@ +# +# CORE SEARCH PATH OPTIONS +# +homepath $HOME/.mame +rompath /app/share/mame/roms +hashpath /app/share/mame/hash +samplepath /app/share/mame/samples +artpath /app/share/mame/artwork +ctrlrpath /app/share/mame/ctrlr +inipath $HOME/.mame;/app/share/mame/ini +fontpath /app/bin/ +cheatpath /app/share/mame/cheat +crosshairpath /app/share/mame/crosshair +pluginspath /app/share/mame/plugins +languagepath /app/share/mame/language +swpath /app/share/mame/software + +# +# CORE OUTPUT DIRECTORY OPTIONS +# +cfg_directory $HOME/.mame/cfg +nvram_directory $HOME/.mame/nvram +input_directory $HOME/.mame/inp +state_directory $HOME/.mame/sta +snapshot_directory $HOME/.mame/snap +diff_directory $HOME/.mame/diff +comment_directory $HOME/.mame/comments +share_directory $HOME/.mame/share + +# +# OSD VIDEO OPTIONS +# +video opengl \ No newline at end of file diff --git a/rd-submodules/mame/sound.patch b/rd-submodules/mame/sound.patch new file mode 100644 index 00000000..84b51ff6 --- /dev/null +++ b/rd-submodules/mame/sound.patch @@ -0,0 +1,28 @@ +diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp +index a0293063..c4989abb 100644 +--- a/src/emu/sound.cpp ++++ b/src/emu/sound.cpp +@@ -761,6 +761,9 @@ read_stream_view sound_stream::update_view(attotime start, attotime end, u32 out + } + g_profiler.stop(); + ++ if (!m_output_view[outputnum].valid()) ++ m_output_view[outputnum] = empty_view(start, end); ++ + // return the requested view + return read_stream_view(m_output_view[outputnum], start); + } +diff --git a/src/emu/sound.h b/src/emu/sound.h +index 15f6a574..bfa45c45 100644 +--- a/src/emu/sound.h ++++ b/src/emu/sound.h +@@ -284,6 +284,9 @@ public: + return *this; + } + ++ // check basic constraints ++ bool valid() const { return m_buffer != nullptr; } ++ + // return the local gain + sample_t gain() const { return m_gain; } + \ No newline at end of file diff --git a/rd-submodules/mame/ym3802.patch b/rd-submodules/mame/ym3802.patch new file mode 100644 index 00000000..a48925ab --- /dev/null +++ b/rd-submodules/mame/ym3802.patch @@ -0,0 +1,13 @@ +diff --git a/src/devices/machine/ym3802.cpp b/src/devices/machine/ym3802.cpp +index 4a8f6a7ffae..d1bf2b961f6 100644 +--- a/src/devices/machine/ym3802.cpp ++++ b/src/devices/machine/ym3802.cpp +@@ -45,7 +45,7 @@ void ym3802_device::device_start() + + void ym3802_device::device_reset() + { +- m_reg.clear(); ++ m_reg.assign(REG_MAX, 0); + reset_irq(0xff); + transmit_register_reset(); + receive_register_reset(); \ No newline at end of file diff --git a/rd-submodules/melonds/hotkeys.patch b/rd-submodules/melonds/hotkeys.patch new file mode 100644 index 00000000..8a90570c --- /dev/null +++ b/rd-submodules/melonds/hotkeys.patch @@ -0,0 +1,18 @@ +diff -au1r melonDS/src/frontend/qt_sdl/main.cpp melonDS/src/frontend/qt_sdl/main.cpp +--- melonDS/src/frontend/qt_sdl/main.cpp 2023-05-06 17:27:24.822375255 +0200 ++++ melonDS/src/frontend/qt_sdl/main.cpp 2023-05-06 17:47:19.587498189 +0200 +@@ -1467,3 +1467,3 @@ + actSaveState[0] = submenu->addAction("File..."); +- actSaveState[0]->setShortcut(QKeySequence(Qt::ShiftModifier | Qt::Key_F9)); ++ actSaveState[0]->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_S)); + actSaveState[0]->setData(QVariant(0)); +@@ -1483,3 +1483,3 @@ + actLoadState[0] = submenu->addAction("File..."); +- actLoadState[0]->setShortcut(QKeySequence(Qt::Key_F9)); ++ actLoadState[0]->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_A)); + actLoadState[0]->setData(QVariant(0)); +@@ -1489,3 +1489,3 @@ + actUndoStateLoad = menu->addAction("Undo state load"); +- actUndoStateLoad->setShortcut(QKeySequence(Qt::Key_F12)); ++ actUndoStateLoad->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_8)); + connect(actUndoStateLoad, &QAction::triggered, this, &MainWindow::onUndoStateLoad); diff --git a/rd-submodules/retroarch b/rd-submodules/retroarch index 717b7809..0b1cfb79 160000 --- a/rd-submodules/retroarch +++ b/rd-submodules/retroarch @@ -1 +1 @@ -Subproject commit 717b78093797270877ec416e58082f1c71d435d8 +Subproject commit 0b1cfb79e591e10488a3262d6b38db843c39a409 diff --git a/rd-submodules/vita3k/vita3k-14-01-23.zip b/rd-submodules/vita3k/vita3k-14-01-23.zip new file mode 100644 index 00000000..4cd7532e Binary files /dev/null and b/rd-submodules/vita3k/vita3k-14-01-23.zip differ diff --git a/removed-modules.yml b/removed-modules.yml new file mode 100644 index 00000000..968982ed --- /dev/null +++ b/removed-modules.yml @@ -0,0 +1,154 @@ + sdk-extensions: + #- org.freedesktop.Sdk.Extension.dotnet6 # Needed for Ryujinx - Removed, check if it's not breaking something else + finish-args: + #- --env=QT_QPA_PLATFORM=xcb #not sure if this will break something + + # pcsx2-qt needs QT6, maybe others, here until every qt emulator will support qt6 (not yuzu atm) + # from: https://github.com/flathub/org.profex_xrd.Profex + + # - name: qt6-core5compat + # buildsystem: cmake-ninja + # builddir: true + # sources: + # - type: archive + # url: https://download.qt.io/official_releases/qt/6.2/6.2.4/submodules/qt5compat-everywhere-src-6.2.4.tar.xz + # sha256: 5de2b9e25bf7de161fbb88ecdd468ed1788bc899392fc05ed80aa590ebb352fa + # x-checker-data: + # type: html + # url: https://download.qt.io/official_releases/qt/6.2/ + # version-pattern: '>([\d\.-]*)/<' + # url-template: https://download.qt.io/official_releases/qt/6.2/$version/submodules/qt5compat-everywhere-src-$version.tar.xz + # post-install: + # - mkdir -p /app/lib/mkspecs + # - cp -R /app/mkspecs/* /app/lib/mkspecs/ + # - ln -fsr ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/libQt*.so* -t ${FLATPAK_DEST}/lib/ + # - sed -i 's/\\([0-9]\\+\\.[0-9]\\+\\)\\.[0-9]\\+ ${_Qt6.*_FIND_VERSION_EXACT}/\\1/' + # ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/cmake/Qt6*/Qt6*Config.cmake + # - sed -e 's@PATHS \"${CMAKE_CURRENT_LIST_DIR}/..\" NO_DEFAULT_PATH@PATHS \"${CMAKE_CURRENT_LIST_DIR}/..\" + # \"/usr/lib/${CMAKE_CXX_LIBRARY_ARCHITECTURE}/cmake/\" NO_DEFAULT_PATH@' -i + # ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/cmake/Qt6*/Qt6*Config.cmake + # - sed -e 's@\\($$QT_MODULE_BIN_BASE\\)@\\1 '${FLATPAK_DEST}'/bin @' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri + # - sed -e 's@\\($$QT_MODULE_INCLUDE_BASE \\)@\\1'${FLATPAK_DEST}'/include @' + # -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri + # - sed -e 's@$$QT_MODULE_INCLUDE_BASE/@'${FLATPAK_DEST}'/include/@g' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri + # - sed -e 's@$$QT_MODULE_LIB_BASE@'${FLATPAK_DEST}'/lib@g' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri + # cleanup: + # - /app/mkspecs + + # XEMU: libglu removed due to a certificate issue, check libglu module for more info + # - name: libglu + # buildsystem: meson + # cleanup: + # - /include + # - /lib/debug + # - /lib/pkgconfig + # - /lib/*.a + # sources: + # - type: archive + # url: http://mesa.freedesktop.org/archive/glu/glu-9.0.2.tar.xz + # sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4 + # x-checker-data: + # type: anitya + # project-id: 13518 + # stable-only: true + # url-template: http://mesa.freedesktop.org/archive/glu/glu-$version.tar.xz + + # Duckstation - START + # https://github.com/flathub/org.duckstation.DuckStation + # Disabled until we completely switch to QT6 + + # - name: duckstation + # buildsystem: cmake-ninja + # no-make-install: true + # builddir: true + # config-opts: + # - -DCMAKE_BUILD_TYPE=RelWithDebInfo + # - -DUSE_EGL=ON + # - -DUSE_SDL2=ON + # - -DUSE_WAYLAND=ON + # - -DUSE_X11=ON + # - -DUSE_DRMKMS=ON + # - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON + # post-install: + # - install -m755 bin/duckstation-qt /app/bin + # - cp -r ../data/* bin/translations /app/bin + # sources: + # - type: git + # url: https://github.com/stenzek/duckstation.git + # commit: 6f709468601183083b8581d4952aaba7baf77084 + # # Cloning dep/msvc/qt is only necessary for Windows + # disable-submodules: true + + # Duckstation - END + + # Duckstation-DontUpdate - START + # Old version moved to QT6 so it's either this or AppImage + # But AppImage is a single one that keep getting updated at the same link so the sha (that's mandatory) will break the build + # So yeah we're stuck with this for a while + + # - name: duckstation-DontUpdate + # buildsystem: cmake-ninja + # no-make-install: true + # builddir: true + # config-opts: + # - -DCMAKE_BUILD_TYPE=Release + # - -DUSE_EGL=ON + # - -DUSE_SDL2=ON + # - -DUSE_WAYLAND=ON + # - -DUSE_X11=ON + # - -DUSE_DRMKMS=ON + # - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON + # post-install: + # - install -m 755 -t /app/bin/ bin/duckstation-nogui bin/duckstation-qt + # - |- + # for px in 16 32 48 64 128 256; do + # install -Dm644 ../extras/icons/icon-${px}px.png /app/share/icons/hicolor/${px}x${px}/apps/org.duckstation.DuckStation.png + # done + # - cp -r ../data/* bin/translations /app/bin + # sources: + # - type: git + # url: https://github.com/stenzek/duckstation.git + # commit: 3fb61865e505ba639609fbf16cb8bdf5c66e020c + + # Duckstation-DontUpdate - END + + # Ryujinx Appimage - START + # https://ryujinx.org/download + + # - name: Ryujinx + # buildsystem: simple + # build-commands: + # - | + # tar -zxvf ryujinx-1.1.685-linux_x64.tar.gz + # mv -v publish ${FLATPAK_DEST}/ryujinx + # ln -sv ${FLATPAK_DEST}/ryujinx/Ryujinx ${FLATPAK_DEST}/bin/Ryujinx + # sources: + # - type: file + # url: https://github.com/Ryujinx/release-channel-master/releases/download/1.1.685/ryujinx-1.1.685-linux_x64.tar.gz + # sha256: bc4d7076106d7aa59c3a3ea22b83c553e5fa1a897815831adcf18cc13d729e15 + + # Ryujinx Appimage - END + + # Vita3K - START + # Very broken, disabled + # NOTE: this is a continuos release, it's provided but not supported + # to update this module: + # wget https://github.com/Vita3K/Vita3K/releases/download/continuous/ubuntu-latest.zip -O rd-submodules/vita3k/vita3k-14-01-23.zip + # sha256sum rd-submodules/vita3k/vita3k*.zip + # change url and sha + # check the branch in the url + + # - name: Vita3K + # buildsystem: simple + # build-commands: + # - | + # mkdir -p ${FLATPAK_DEST}/vita3k + # cp -r * ${FLATPAK_DEST}/vita3k + # chmod +x ${FLATPAK_DEST}/vita3k/Vita3K + # ln -s ${FLATPAK_DEST}/vita3k/Vita3K /app/bin/Vita3K + # sources: + # - type: archive + # url: https://github.com/Vita3K/Vita3K/releases/download/continuous/ubuntu-latest.zip + # sha256: VITASHAPLACEHOLDER + + # Vita3K - END \ No newline at end of file diff --git a/res/binding-icons/RD-Arcade-BLUE.png b/res/binding-icons/RD-Arcade-BLUE.png new file mode 100644 index 00000000..aac42d98 Binary files /dev/null and b/res/binding-icons/RD-Arcade-BLUE.png differ diff --git a/res/binding-icons/RD-Arcade-GREEN.png b/res/binding-icons/RD-Arcade-GREEN.png new file mode 100644 index 00000000..68672af9 Binary files /dev/null and b/res/binding-icons/RD-Arcade-GREEN.png differ diff --git a/res/binding-icons/RD-Arcade-RED.png b/res/binding-icons/RD-Arcade-RED.png new file mode 100644 index 00000000..56e6b6a6 Binary files /dev/null and b/res/binding-icons/RD-Arcade-RED.png differ diff --git a/res/binding-icons/RD-Arcade-YELLOW.png b/res/binding-icons/RD-Arcade-YELLOW.png new file mode 100644 index 00000000..1a1cf755 Binary files /dev/null and b/res/binding-icons/RD-Arcade-YELLOW.png differ diff --git a/res/binding-icons/RD-Arrow-01.png b/res/binding-icons/RD-Arrow-01.png new file mode 100644 index 00000000..5d2d61df Binary files /dev/null and b/res/binding-icons/RD-Arrow-01.png differ diff --git a/res/binding-icons/RD-Arrow-02.png b/res/binding-icons/RD-Arrow-02.png new file mode 100644 index 00000000..7c34235e Binary files /dev/null and b/res/binding-icons/RD-Arrow-02.png differ diff --git a/res/binding-icons/RD-Arrow-03.png b/res/binding-icons/RD-Arrow-03.png new file mode 100644 index 00000000..6c81c6ef Binary files /dev/null and b/res/binding-icons/RD-Arrow-03.png differ diff --git a/res/binding-icons/RD-Arrow-04.png b/res/binding-icons/RD-Arrow-04.png new file mode 100644 index 00000000..da201c93 Binary files /dev/null and b/res/binding-icons/RD-Arrow-04.png differ diff --git a/res/binding-icons/RD-Arrow-05.png b/res/binding-icons/RD-Arrow-05.png new file mode 100644 index 00000000..d2bf2041 Binary files /dev/null and b/res/binding-icons/RD-Arrow-05.png differ diff --git a/res/binding-icons/RD-Arrow-06.png b/res/binding-icons/RD-Arrow-06.png new file mode 100644 index 00000000..65ce6093 Binary files /dev/null and b/res/binding-icons/RD-Arrow-06.png differ diff --git a/res/binding-icons/RD-Arrow-07.png b/res/binding-icons/RD-Arrow-07.png new file mode 100644 index 00000000..0ec313f3 Binary files /dev/null and b/res/binding-icons/RD-Arrow-07.png differ diff --git a/res/binding-icons/RD-Arrow-08.png b/res/binding-icons/RD-Arrow-08.png new file mode 100644 index 00000000..68c2f983 Binary files /dev/null and b/res/binding-icons/RD-Arrow-08.png differ diff --git a/res/binding-icons/RD-Arrow-09.png b/res/binding-icons/RD-Arrow-09.png new file mode 100644 index 00000000..a5e06052 Binary files /dev/null and b/res/binding-icons/RD-Arrow-09.png differ diff --git a/res/binding-icons/RD-Arrow-10.png b/res/binding-icons/RD-Arrow-10.png new file mode 100644 index 00000000..a6576cda Binary files /dev/null and b/res/binding-icons/RD-Arrow-10.png differ diff --git a/res/binding-icons/RD-Arrow-11.png b/res/binding-icons/RD-Arrow-11.png new file mode 100644 index 00000000..3d11d414 Binary files /dev/null and b/res/binding-icons/RD-Arrow-11.png differ diff --git a/res/binding-icons/RD-Arrow-12.png b/res/binding-icons/RD-Arrow-12.png new file mode 100644 index 00000000..bcfa0b6f Binary files /dev/null and b/res/binding-icons/RD-Arrow-12.png differ diff --git a/res/binding-icons/RD-Arrow-13.png b/res/binding-icons/RD-Arrow-13.png new file mode 100644 index 00000000..ff370c91 Binary files /dev/null and b/res/binding-icons/RD-Arrow-13.png differ diff --git a/res/binding-icons/RD-Arrow-14.png b/res/binding-icons/RD-Arrow-14.png new file mode 100644 index 00000000..8aef5d3a Binary files /dev/null and b/res/binding-icons/RD-Arrow-14.png differ diff --git a/res/binding-icons/RD-Arrow-15.png b/res/binding-icons/RD-Arrow-15.png new file mode 100644 index 00000000..e778831f Binary files /dev/null and b/res/binding-icons/RD-Arrow-15.png differ diff --git a/res/binding-icons/RD-Arrow-16.png b/res/binding-icons/RD-Arrow-16.png new file mode 100644 index 00000000..12a1e506 Binary files /dev/null and b/res/binding-icons/RD-Arrow-16.png differ diff --git a/res/binding-icons/RD-Arrow-17.png b/res/binding-icons/RD-Arrow-17.png new file mode 100644 index 00000000..636b43d2 Binary files /dev/null and b/res/binding-icons/RD-Arrow-17.png differ diff --git a/res/binding-icons/RD-Arrow-18.png b/res/binding-icons/RD-Arrow-18.png new file mode 100644 index 00000000..ae2584a5 Binary files /dev/null and b/res/binding-icons/RD-Arrow-18.png differ diff --git a/res/binding-icons/RD-Arrow-19.png b/res/binding-icons/RD-Arrow-19.png new file mode 100644 index 00000000..1cb8ff0c Binary files /dev/null and b/res/binding-icons/RD-Arrow-19.png differ diff --git a/res/binding-icons/RD-Arrow-20.png b/res/binding-icons/RD-Arrow-20.png new file mode 100644 index 00000000..ec7841f3 Binary files /dev/null and b/res/binding-icons/RD-Arrow-20.png differ diff --git a/res/binding-icons/RD-Arrow-21.png b/res/binding-icons/RD-Arrow-21.png new file mode 100644 index 00000000..953dd433 Binary files /dev/null and b/res/binding-icons/RD-Arrow-21.png differ diff --git a/res/binding-icons/RD-Arrow-22.png b/res/binding-icons/RD-Arrow-22.png new file mode 100644 index 00000000..84867637 Binary files /dev/null and b/res/binding-icons/RD-Arrow-22.png differ diff --git a/res/binding-icons/RD-Arrow-23.png b/res/binding-icons/RD-Arrow-23.png new file mode 100644 index 00000000..03428b31 Binary files /dev/null and b/res/binding-icons/RD-Arrow-23.png differ diff --git a/res/binding-icons/RD-Arrow-24.png b/res/binding-icons/RD-Arrow-24.png new file mode 100644 index 00000000..f357241f Binary files /dev/null and b/res/binding-icons/RD-Arrow-24.png differ diff --git a/res/binding-icons/RD-Arrow-25.png b/res/binding-icons/RD-Arrow-25.png new file mode 100644 index 00000000..171466d3 Binary files /dev/null and b/res/binding-icons/RD-Arrow-25.png differ diff --git a/res/binding-icons/RD-Arrow-26.png b/res/binding-icons/RD-Arrow-26.png new file mode 100644 index 00000000..0b919ddb Binary files /dev/null and b/res/binding-icons/RD-Arrow-26.png differ diff --git a/res/binding-icons/RD-Arrow-27.png b/res/binding-icons/RD-Arrow-27.png new file mode 100644 index 00000000..2d0b726c Binary files /dev/null and b/res/binding-icons/RD-Arrow-27.png differ diff --git a/res/binding-icons/RD-Arrow-28.png b/res/binding-icons/RD-Arrow-28.png new file mode 100644 index 00000000..94a4dc90 Binary files /dev/null and b/res/binding-icons/RD-Arrow-28.png differ diff --git a/res/binding-icons/RD-Arrow-29.png b/res/binding-icons/RD-Arrow-29.png new file mode 100644 index 00000000..48467360 Binary files /dev/null and b/res/binding-icons/RD-Arrow-29.png differ diff --git a/res/binding-icons/RD-Arrow-30.png b/res/binding-icons/RD-Arrow-30.png new file mode 100644 index 00000000..d424c374 Binary files /dev/null and b/res/binding-icons/RD-Arrow-30.png differ diff --git a/res/binding-icons/RD-Arrow-31.png b/res/binding-icons/RD-Arrow-31.png new file mode 100644 index 00000000..5add6c15 Binary files /dev/null and b/res/binding-icons/RD-Arrow-31.png differ diff --git a/res/binding-icons/RD-Arrow-32.png b/res/binding-icons/RD-Arrow-32.png new file mode 100644 index 00000000..1f7694c4 Binary files /dev/null and b/res/binding-icons/RD-Arrow-32.png differ diff --git a/res/binding-icons/RD-Arrow-33.png b/res/binding-icons/RD-Arrow-33.png new file mode 100644 index 00000000..09cbaffd Binary files /dev/null and b/res/binding-icons/RD-Arrow-33.png differ diff --git a/res/binding-icons/RD-Arrow-34.png b/res/binding-icons/RD-Arrow-34.png new file mode 100644 index 00000000..44bce1e3 Binary files /dev/null and b/res/binding-icons/RD-Arrow-34.png differ diff --git a/res/binding-icons/RD-Arrow-35.png b/res/binding-icons/RD-Arrow-35.png new file mode 100644 index 00000000..5561cb07 Binary files /dev/null and b/res/binding-icons/RD-Arrow-35.png differ diff --git a/res/binding-icons/RD-Arrow-36.png b/res/binding-icons/RD-Arrow-36.png new file mode 100644 index 00000000..4866476f Binary files /dev/null and b/res/binding-icons/RD-Arrow-36.png differ diff --git a/res/binding-icons/RD-Arrow-37.png b/res/binding-icons/RD-Arrow-37.png new file mode 100644 index 00000000..af35d422 Binary files /dev/null and b/res/binding-icons/RD-Arrow-37.png differ diff --git a/res/binding-icons/RD-ESC.png b/res/binding-icons/RD-ESC.png new file mode 100644 index 00000000..f25834ff Binary files /dev/null and b/res/binding-icons/RD-ESC.png differ diff --git a/res/binding-icons/RD-Enter.png b/res/binding-icons/RD-Enter.png new file mode 100644 index 00000000..22bbb9a8 Binary files /dev/null and b/res/binding-icons/RD-Enter.png differ diff --git a/res/binding-icons/RD-F1.png b/res/binding-icons/RD-F1.png new file mode 100644 index 00000000..bc221527 Binary files /dev/null and b/res/binding-icons/RD-F1.png differ diff --git a/res/binding-icons/RD-F4.png b/res/binding-icons/RD-F4.png new file mode 100644 index 00000000..c9bafb28 Binary files /dev/null and b/res/binding-icons/RD-F4.png differ diff --git a/res/binding-icons/RD-Tab.png b/res/binding-icons/RD-Tab.png new file mode 100644 index 00000000..2bce83e0 Binary files /dev/null and b/res/binding-icons/RD-Tab.png differ diff --git a/res/binding-icons/RD-applets-screenshooter.png b/res/binding-icons/RD-applets-screenshooter.png new file mode 100644 index 00000000..23b8e8e5 Binary files /dev/null and b/res/binding-icons/RD-applets-screenshooter.png differ diff --git a/res/binding-icons/RD-application-x-iso.png b/res/binding-icons/RD-application-x-iso.png new file mode 100644 index 00000000..cd7cb423 Binary files /dev/null and b/res/binding-icons/RD-application-x-iso.png differ diff --git a/res/binding-icons/RD-battery-full-charging.png b/res/binding-icons/RD-battery-full-charging.png new file mode 100644 index 00000000..c0558ae3 Binary files /dev/null and b/res/binding-icons/RD-battery-full-charging.png differ diff --git a/res/binding-icons/RD-battery-missing.png b/res/binding-icons/RD-battery-missing.png new file mode 100644 index 00000000..2953acb8 Binary files /dev/null and b/res/binding-icons/RD-battery-missing.png differ diff --git a/res/binding-icons/RD-camera-photo.png b/res/binding-icons/RD-camera-photo.png new file mode 100644 index 00000000..64c16ab1 Binary files /dev/null and b/res/binding-icons/RD-camera-photo.png differ diff --git a/res/binding-icons/RD-distributor-logo-netbsd.png b/res/binding-icons/RD-distributor-logo-netbsd.png new file mode 100644 index 00000000..815a2445 Binary files /dev/null and b/res/binding-icons/RD-distributor-logo-netbsd.png differ diff --git a/res/binding-icons/RD-document-save.png b/res/binding-icons/RD-document-save.png new file mode 100644 index 00000000..b6980cbe Binary files /dev/null and b/res/binding-icons/RD-document-save.png differ diff --git a/res/binding-icons/RD-edit-find.png b/res/binding-icons/RD-edit-find.png new file mode 100644 index 00000000..2583ab21 Binary files /dev/null and b/res/binding-icons/RD-edit-find.png differ diff --git a/res/binding-icons/RD-edit-undo-red.png b/res/binding-icons/RD-edit-undo-red.png new file mode 100644 index 00000000..a766a96e Binary files /dev/null and b/res/binding-icons/RD-edit-undo-red.png differ diff --git a/res/binding-icons/RD-edit-undo.png b/res/binding-icons/RD-edit-undo.png new file mode 100644 index 00000000..b37a6529 Binary files /dev/null and b/res/binding-icons/RD-edit-undo.png differ diff --git a/res/binding-icons/RD-emblem-documents.png b/res/binding-icons/RD-emblem-documents.png new file mode 100644 index 00000000..2596501a Binary files /dev/null and b/res/binding-icons/RD-emblem-documents.png differ diff --git a/res/binding-icons/RD-emblem-downloads.png b/res/binding-icons/RD-emblem-downloads.png new file mode 100644 index 00000000..dde0658b Binary files /dev/null and b/res/binding-icons/RD-emblem-downloads.png differ diff --git a/res/binding-icons/RD-emblem-encrypted-locked.png b/res/binding-icons/RD-emblem-encrypted-locked.png new file mode 100644 index 00000000..1c1f7b51 Binary files /dev/null and b/res/binding-icons/RD-emblem-encrypted-locked.png differ diff --git a/res/binding-icons/RD-emblem-encrypted-unlocked.png b/res/binding-icons/RD-emblem-encrypted-unlocked.png new file mode 100644 index 00000000..20390ea4 Binary files /dev/null and b/res/binding-icons/RD-emblem-encrypted-unlocked.png differ diff --git a/res/binding-icons/RD-emblem-favorite.png b/res/binding-icons/RD-emblem-favorite.png new file mode 100644 index 00000000..a850c5b0 Binary files /dev/null and b/res/binding-icons/RD-emblem-favorite.png differ diff --git a/res/binding-icons/RD-emblem-generic.png b/res/binding-icons/RD-emblem-generic.png new file mode 100644 index 00000000..475bfcb7 Binary files /dev/null and b/res/binding-icons/RD-emblem-generic.png differ diff --git a/res/binding-icons/RD-emblem-new.png b/res/binding-icons/RD-emblem-new.png new file mode 100644 index 00000000..f0d59167 Binary files /dev/null and b/res/binding-icons/RD-emblem-new.png differ diff --git a/res/binding-icons/RD-emblem-synchronizing.png b/res/binding-icons/RD-emblem-synchronizing.png new file mode 100644 index 00000000..812ac184 Binary files /dev/null and b/res/binding-icons/RD-emblem-synchronizing.png differ diff --git a/res/binding-icons/RD-emblem-unlocked.png b/res/binding-icons/RD-emblem-unlocked.png new file mode 100644 index 00000000..5332ef8b Binary files /dev/null and b/res/binding-icons/RD-emblem-unlocked.png differ diff --git a/res/binding-icons/RD-emblem-unreadable.png b/res/binding-icons/RD-emblem-unreadable.png new file mode 100644 index 00000000..0cd3cdfe Binary files /dev/null and b/res/binding-icons/RD-emblem-unreadable.png differ diff --git a/res/binding-icons/RD-folder-applications.png b/res/binding-icons/RD-folder-applications.png new file mode 100644 index 00000000..0e1215e1 Binary files /dev/null and b/res/binding-icons/RD-folder-applications.png differ diff --git a/res/binding-icons/RD-folder-blue-backup.png b/res/binding-icons/RD-folder-blue-backup.png new file mode 100644 index 00000000..f173f08a Binary files /dev/null and b/res/binding-icons/RD-folder-blue-backup.png differ diff --git a/res/binding-icons/RD-folder-blue-games.png b/res/binding-icons/RD-folder-blue-games.png new file mode 100644 index 00000000..67507a69 Binary files /dev/null and b/res/binding-icons/RD-folder-blue-games.png differ diff --git a/res/binding-icons/RD-go-next.png b/res/binding-icons/RD-go-next.png new file mode 100644 index 00000000..279b8b2e Binary files /dev/null and b/res/binding-icons/RD-go-next.png differ diff --git a/res/binding-icons/RD-go-previous.png b/res/binding-icons/RD-go-previous.png new file mode 100644 index 00000000..a00cabc0 Binary files /dev/null and b/res/binding-icons/RD-go-previous.png differ diff --git a/res/binding-icons/RD-godot.png b/res/binding-icons/RD-godot.png new file mode 100644 index 00000000..d29092b3 Binary files /dev/null and b/res/binding-icons/RD-godot.png differ diff --git a/res/binding-icons/RD-icon_circle_2_180x180.png b/res/binding-icons/RD-icon_circle_2_180x180.png new file mode 100644 index 00000000..bab446bb Binary files /dev/null and b/res/binding-icons/RD-icon_circle_2_180x180.png differ diff --git a/res/binding-icons/RD-io.github.antimicrox.antimicrox.png b/res/binding-icons/RD-io.github.antimicrox.antimicrox.png new file mode 100644 index 00000000..a961b0b6 Binary files /dev/null and b/res/binding-icons/RD-io.github.antimicrox.antimicrox.png differ diff --git a/res/binding-icons/RD-list-add.png b/res/binding-icons/RD-list-add.png new file mode 100644 index 00000000..fa48ad3b Binary files /dev/null and b/res/binding-icons/RD-list-add.png differ diff --git a/res/binding-icons/RD-list-remove.png b/res/binding-icons/RD-list-remove.png new file mode 100644 index 00000000..724e8514 Binary files /dev/null and b/res/binding-icons/RD-list-remove.png differ diff --git a/res/binding-icons/RD-media-playback-pause.png b/res/binding-icons/RD-media-playback-pause.png new file mode 100644 index 00000000..3480a713 Binary files /dev/null and b/res/binding-icons/RD-media-playback-pause.png differ diff --git a/res/binding-icons/RD-media-playback-start.png b/res/binding-icons/RD-media-playback-start.png new file mode 100644 index 00000000..375801a7 Binary files /dev/null and b/res/binding-icons/RD-media-playback-start.png differ diff --git a/res/binding-icons/RD-notification-network-ethernet-connected.png b/res/binding-icons/RD-notification-network-ethernet-connected.png new file mode 100644 index 00000000..f61f11d0 Binary files /dev/null and b/res/binding-icons/RD-notification-network-ethernet-connected.png differ diff --git a/res/binding-icons/RD-notification-network-wireless.png b/res/binding-icons/RD-notification-network-wireless.png new file mode 100644 index 00000000..7bc8975e Binary files /dev/null and b/res/binding-icons/RD-notification-network-wireless.png differ diff --git a/res/binding-icons/RD-octopi.png b/res/binding-icons/RD-octopi.png new file mode 100644 index 00000000..746c1bb9 Binary files /dev/null and b/res/binding-icons/RD-octopi.png differ diff --git a/res/binding-icons/RD-org.xfce.session.png b/res/binding-icons/RD-org.xfce.session.png new file mode 100644 index 00000000..1b5febd8 Binary files /dev/null and b/res/binding-icons/RD-org.xfce.session.png differ diff --git a/res/binding-icons/RD-pcsxr-icon.png b/res/binding-icons/RD-pcsxr-icon.png new file mode 100644 index 00000000..118e83b4 Binary files /dev/null and b/res/binding-icons/RD-pcsxr-icon.png differ diff --git a/res/binding-icons/RD-playonlinux.png b/res/binding-icons/RD-playonlinux.png new file mode 100644 index 00000000..e7b383ab Binary files /dev/null and b/res/binding-icons/RD-playonlinux.png differ diff --git a/res/binding-icons/RD-preferences-desktop-accessibility.png b/res/binding-icons/RD-preferences-desktop-accessibility.png new file mode 100644 index 00000000..577cd803 Binary files /dev/null and b/res/binding-icons/RD-preferences-desktop-accessibility.png differ diff --git a/res/binding-icons/RD-preferences-desktop-display.png b/res/binding-icons/RD-preferences-desktop-display.png new file mode 100644 index 00000000..218908f2 Binary files /dev/null and b/res/binding-icons/RD-preferences-desktop-display.png differ diff --git a/res/binding-icons/RD-preferences-desktop-emoticons.png b/res/binding-icons/RD-preferences-desktop-emoticons.png new file mode 100644 index 00000000..279d8c1a Binary files /dev/null and b/res/binding-icons/RD-preferences-desktop-emoticons.png differ diff --git a/res/binding-icons/RD-preferences-desktop-icons.png b/res/binding-icons/RD-preferences-desktop-icons.png new file mode 100644 index 00000000..c6727a37 Binary files /dev/null and b/res/binding-icons/RD-preferences-desktop-icons.png differ diff --git a/res/binding-icons/RD-preferences-desktop-keyboard.png b/res/binding-icons/RD-preferences-desktop-keyboard.png new file mode 100644 index 00000000..2403518f Binary files /dev/null and b/res/binding-icons/RD-preferences-desktop-keyboard.png differ diff --git a/res/binding-icons/RD-preferences-system-search.png b/res/binding-icons/RD-preferences-system-search.png new file mode 100644 index 00000000..e7c60acb Binary files /dev/null and b/res/binding-icons/RD-preferences-system-search.png differ diff --git a/res/binding-icons/RD-preferences-system-windows-actions.png b/res/binding-icons/RD-preferences-system-windows-actions.png new file mode 100644 index 00000000..f4dd7342 Binary files /dev/null and b/res/binding-icons/RD-preferences-system-windows-actions.png differ diff --git a/res/binding-icons/RD-preferences-tweaks-shadows.png b/res/binding-icons/RD-preferences-tweaks-shadows.png new file mode 100644 index 00000000..9966c413 Binary files /dev/null and b/res/binding-icons/RD-preferences-tweaks-shadows.png differ diff --git a/res/binding-icons/RD-process-stop.png b/res/binding-icons/RD-process-stop.png new file mode 100644 index 00000000..d827b134 Binary files /dev/null and b/res/binding-icons/RD-process-stop.png differ diff --git a/res/binding-icons/RD-pvz.png b/res/binding-icons/RD-pvz.png new file mode 100644 index 00000000..2c64757d Binary files /dev/null and b/res/binding-icons/RD-pvz.png differ diff --git a/res/binding-icons/RD-retroarch.png b/res/binding-icons/RD-retroarch.png new file mode 100644 index 00000000..684f8f20 Binary files /dev/null and b/res/binding-icons/RD-retroarch.png differ diff --git a/res/binding-icons/RD-security-low.png b/res/binding-icons/RD-security-low.png new file mode 100644 index 00000000..fd686adb Binary files /dev/null and b/res/binding-icons/RD-security-low.png differ diff --git a/res/binding-icons/RD-steam.png b/res/binding-icons/RD-steam.png new file mode 100644 index 00000000..c0dc9b16 Binary files /dev/null and b/res/binding-icons/RD-steam.png differ diff --git a/res/binding-icons/RD-supertuxkart.png b/res/binding-icons/RD-supertuxkart.png new file mode 100644 index 00000000..417e433d Binary files /dev/null and b/res/binding-icons/RD-supertuxkart.png differ diff --git a/res/binding-icons/RD-system-reboot.png b/res/binding-icons/RD-system-reboot.png new file mode 100644 index 00000000..f3d4b35f Binary files /dev/null and b/res/binding-icons/RD-system-reboot.png differ diff --git a/res/binding-icons/RD-system-switch-user.png b/res/binding-icons/RD-system-switch-user.png new file mode 100644 index 00000000..82d0ecac Binary files /dev/null and b/res/binding-icons/RD-system-switch-user.png differ diff --git a/res/binding-icons/RD-tesseract.png b/res/binding-icons/RD-tesseract.png new file mode 100644 index 00000000..72ccbb57 Binary files /dev/null and b/res/binding-icons/RD-tesseract.png differ diff --git a/res/binding-icons/RD-text-x-generic.png b/res/binding-icons/RD-text-x-generic.png new file mode 100644 index 00000000..58b0fc31 Binary files /dev/null and b/res/binding-icons/RD-text-x-generic.png differ diff --git a/res/binding-icons/RD-tools-check-spelling.png b/res/binding-icons/RD-tools-check-spelling.png new file mode 100644 index 00000000..4d717891 Binary files /dev/null and b/res/binding-icons/RD-tools-check-spelling.png differ diff --git a/res/binding-icons/RD-urbanterror.png b/res/binding-icons/RD-urbanterror.png new file mode 100644 index 00000000..4efb05aa Binary files /dev/null and b/res/binding-icons/RD-urbanterror.png differ diff --git a/res/binding-icons/RD-user-red-home.png b/res/binding-icons/RD-user-red-home.png new file mode 100644 index 00000000..bf924158 Binary files /dev/null and b/res/binding-icons/RD-user-red-home.png differ diff --git a/res/binding-icons/RD-utilities-terminal.png b/res/binding-icons/RD-utilities-terminal.png new file mode 100644 index 00000000..c19c8d16 Binary files /dev/null and b/res/binding-icons/RD-utilities-terminal.png differ diff --git a/res/binding-icons/RD-video-x-generic.png b/res/binding-icons/RD-video-x-generic.png new file mode 100644 index 00000000..5b772904 Binary files /dev/null and b/res/binding-icons/RD-video-x-generic.png differ diff --git a/res/binding-icons/RD-view-refresh.png b/res/binding-icons/RD-view-refresh.png new file mode 100644 index 00000000..69eaf39c Binary files /dev/null and b/res/binding-icons/RD-view-refresh.png differ diff --git a/res/binding-icons/RD-zoom-fit-best.png b/res/binding-icons/RD-zoom-fit-best.png new file mode 100644 index 00000000..f8d1744b Binary files /dev/null and b/res/binding-icons/RD-zoom-fit-best.png differ diff --git a/res/binding-icons/RD-zoom-in.png b/res/binding-icons/RD-zoom-in.png new file mode 100644 index 00000000..6860adeb Binary files /dev/null and b/res/binding-icons/RD-zoom-in.png differ diff --git a/res/binding-icons/RD-zoom-original.png b/res/binding-icons/RD-zoom-original.png new file mode 100644 index 00000000..1be8ca80 Binary files /dev/null and b/res/binding-icons/RD-zoom-original.png differ diff --git a/res/binding-icons/RD-zoom-out.png b/res/binding-icons/RD-zoom-out.png new file mode 100644 index 00000000..fe98a7fd Binary files /dev/null and b/res/binding-icons/RD-zoom-out.png differ diff --git a/retrodeck.sh b/retrodeck.sh index 4de1c492..763229c5 100644 --- a/retrodeck.sh +++ b/retrodeck.sh @@ -1,7 +1,6 @@ #!/bin/bash source /app/libexec/global.sh -source /app/libexec/post_update.sh # Arguments section @@ -18,7 +17,8 @@ Arguments: -v, --version Print RetroDECK version --info-msg Print paths and config informations --configurator Starts the RetroDECK Configurator - --compress Compresses target file to .chd format. Supports .cue, .iso and .gdi formats + --compress-one Compresses target file to a compatible format + --compress-all Compresses all supported games into compatible format. Available formats are \"chd\", \"zip\", \"rvz\" and \"all\". --reset-emulator Reset one or more emulator configs to the default values --reset-retrodeck Starts the initial RetroDECK installer (backup your data first!) @@ -39,22 +39,29 @@ https://retrodeck.net cat $rd_conf exit ;; - --compress*) - cli_compress_file "$2" + --compress-one*) + cli_compress_single_game "$2" exit ;; + --compress-all*) + cli_compress_all_games "$2" + ;; --configurator*) sh /app/tools/configurator.sh - exit + if [[ $(configurator_generic_question_dialog "RetroDECK Configurator" "Would you like to launch RetroDECK after closing the Configurator?") == "false" ]]; then + exit + else + shift + fi ;; --reset-emulator*) echo "You are about to reset one or more RetroDECK emulators." - echo "Available options are: retroarch citra dolphin duckstation melonds pcsx2 ppsspp primehack rpcs3 xemu yuzu all-emulators" + echo "Available options are: retroarch cemu citra dolphin duckstation melonds pcsx2 ppsspp primehack rpcs3 xemu yuzu all-emulators" read -p "Please enter the emulator you would like to reset: " emulator - if [[ "$emulator" =~ ^(retroarch|citra|dolphin|duckstation|melonds|pcsx2|ppsspp|primehack|rpcs3|xemu|yuzu|all-emulators)$ ]]; then + if [[ "$emulator" =~ ^(retroarch|cemu|citra|dolphin|duckstation|melonds|pcsx2|ppsspp|primehack|rpcs3|xemu|yuzu|all-emulators)$ ]]; then read -p "You are about to reset $emulator to default settings. Enter 'y' to continue, 'n' to stop: " response if [[ $response == [yY] ]]; then - cli_emulator_reset $emulator + prepare_emulator "reset" "$emulator" "cli" read -p "The process has been completed, press Enter key to start RetroDECK." shift # Continue launch after previous command is finished else @@ -84,20 +91,67 @@ https://retrodeck.net exit 1 ;; *) - echo "Please specify a valid option. Use -h for more information." + validate_input "$i" + if [[ ! $input_validated == "true" ]]; then + echo "Please specify a valid option. Use -h for more information." + fi ;; esac done # UPDATE TRIGGERED # if lockfile exists -if [ -f "$lockfile" ] -then +if [ -f "$lockfile" ]; then # ...but the version doesn't match with the config file - if [ "$hard_version" != "$version" ]; - then + if [ "$hard_version" != "$version" ]; then echo "Config file's version is $version but the actual version is $hard_version" - post_update # Executing post update script + if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build + configurator_generic_dialog "RetroDECK Cooker Warning" "RUNNING COOKER VERSIONS OF RETRODECK CAN BE EXTREMELY DANGEROUS AND ALL OF YOUR RETRODECK DATA\n(INCLUDING BIOS FILES, BORDERS, DOWNLOADED MEDIA, GAMELISTS, MODS, ROMS, SAVES, STATES, SCREENSHOTS, TEXTURE PACKS AND THEMES)\nARE AT RISK BY CONTINUING!" + set_setting_value $rd_conf "update_repo" "RetroDECK-cooker" retrodeck "options" + set_setting_value $rd_conf "update_check" "true" retrodeck "options" + set_setting_value $rd_conf "developer_options" "true" retrodeck "options" + cooker_base_version=$(echo $hard_version | cut -d'-' -f2) + choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Upgrade" --extra-button="Don't Upgrade" --extra-button="Full Wipe and Fresh Install" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Cooker Upgrade" \ + --text="You appear to be upgrading to a \"cooker\" build of RetroDECK.\n\nWould you like to perform the standard post-update process, skip the post-update process or remove ALL existing RetroDECK folders and data (including ROMs and saves) to start from a fresh install?\n\nPerforming the normal post-update process multiple times may lead to unexpected results.") + rc=$? # Capture return code, as "Yes" button has no text value + if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked + if [[ $choice == "Don't Upgrade" ]]; then # If user wants to bypass the post_update.sh process this time. + echo "Skipping upgrade process for cooker build, updating stored version in retrodeck.cfg" + set_setting_value $rd_conf "version" "$hard_version" retrodeck # Set version of currently running RetroDECK to updated retrodeck.cfg + elif [[ $choice == "Full Wipe and Fresh Install" ]]; then # Remove all RetroDECK data and start a fresh install + if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "This is going to remove all of the data in all locations used by RetroDECK!\n\n(INCLUDING BIOS FILES, BORDERS, DOWNLOADED MEDIA, GAMELISTS, MODS, ROMS, SAVES, STATES, SCREENSHOTS, TEXTURE PACKS AND THEMES)\n\nAre you sure you want to contine?") == "true" ]]; then + if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "Are you super sure?\n\nThere is no going back from this process, everything is gonzo.\nDust in the wind.\n\nYesterdays omelette.") == "true" ]]; then + if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "But are you super DUPER sure? We REAAAALLLLLYY want to make sure you know what is happening here.\n\nThe ~/retrodeck and ~/.var/app/net.retrodeck.retrodeck folders and ALL of their contents\nare about to be PERMANENTLY removed.\n\nStill sure you want to proceed?") == "true" ]]; then + configurator_generic_dialog "RetroDECK Cooker Reset" "Ok, if you're that sure, here we go!" + if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "(Are you actually being serious here? Because we are...\n\nNo backsies.)") == "true" ]]; then + echo "Removing RetroDECK data and starting fresh" + rm -rf /var + rm -rf "$HOME/retrodeck" + source /app/libexec/global.sh + finit + fi + fi + fi + fi + fi + else + echo "Performing normal upgrade process for version" $cooker_base_version + version=$cooker_base_version # Temporarily assign cooker base version to $version so update script can read it properly. + post_update + fi + else # If newly-installed version is a normal build. + if grep -qF "cooker" <<< $version; then # If previously installed version was a cooker build + cooker_base_version=$(echo $version | cut -d'-' -f2) + version=$cooker_base_version # Temporarily assign cooker base version to $version so update script can read it properly. + set_setting_value $rd_conf "update_repo" "RetroDECK" retrodeck "options" + set_setting_value $rd_conf "update_check" "false" retrodeck "options" + set_setting_value $rd_conf "update_ignore" "" retrodeck "options" + set_setting_value $rd_conf "developer_options" "false" retrodeck "options" + fi + post_update # Executing post update script + fi fi # Else, LOCKFILE IS NOT EXISTING (WAS REMOVED) # if the lock file doesn't exist at all means that it's a fresh install or a triggered reset @@ -106,12 +160,22 @@ else finit # Executing First/Force init fi -source $rd_conf # Load latest variable values +if [[ $multi_user_mode == "true" ]]; then + multi_user_determine_current_user +fi -# Check if running in Desktop mode and warn if true, unless desktop_mode_warning=false in retrodeck.cfg +# Run optional startup checks desktop_mode_warning +low_space_warning + +# Check if there is a new version of RetroDECK available, if update_check=true in retrodeck.cfg and there is network connectivity available. +if [[ $update_check == "true" ]]; then + if [[ $(check_network_connectivity) == "true" ]]; then + check_for_version_update + fi +fi # Normal Startup -start_retrodeck \ No newline at end of file +start_retrodeck diff --git a/tools/configurator.sh b/tools/configurator.sh index 44f2869f..ee790af0 100644 --- a/tools/configurator.sh +++ b/tools/configurator.sh @@ -3,41 +3,69 @@ # VARIABLES SECTION source /app/libexec/global.sh -source /app/libexec/functions.sh # DIALOG SECTION # Configurator Option Tree # Welcome -# - Move RetroDECK -# - RetroArch Presets -# - Change Rewind Setting -# - Enable/Disable Rewind -# - RetroAchivement Login -# - Login prompt -# - Emulator Options (Behind one-time power user warning dialog) -# - Launch RetroArch -# - Launch Citra -# - Launch Dolphin -# - Launch Duckstation -# - Launch MelonDS -# - Launch PCSX2 -# - Launch PPSSPP -# - Launch Primehack -# - Launch RPCS3 -# - Launch XEMU -# - Launch Yuzu -# - Tools and Troubleshooting -# - Multi-file game check -# - Basic BIOS file check -# - Advanced BIOS file check -# - Compress Games -# - Manual single-game selection -# - Multi-file compression (CHD) -# - Reset -# - Reset Specific Emulator +# - Presets & Settings +# - Global: Presets & Settings +# - Widescreen: Enable/Disable +# - Ask-To-Exit: Enable/Disable +# - RetroAchievements: Login +# - RetroAchievements: Logout +# - RetroAchievements: Hardcore Mode +# - Swap A/B and X/Y Buttons +# - RetroArch: Presets & Settings +# - Borders: Enable/Disable +# - Rewind: Enable/Disable +# - Wii & GameCube: Presets & Settings +# - Dolphin Textures: Universal Dynamic Input +# - Primehack Textures: Universal Dynamic Input +# - Open Emulator (Behind one-time power user warning dialog) +# - RetroArch +# - Cemu +# - Citra +# - Dolphin +# - Duckstation +# - MelonDS +# - PCSX2 +# - PPSSPP +# - Primehack +# - RPCS3 +# - XEMU +# - Yuzu +# - Tools +# - Tool: Move Folders +# - Move all of RetroDECK +# - Move ROMs folder +# - Move BIOS folder +# - Move Downloaded Media folder +# - Move Saves folder +# - Move States folder +# - Move Themes folder +# - Move Screenshots folder +# - Move Mods folder +# - Move Texture Packs folder +# - Tool: Compress Games +# - Compress Single Game +# - Compress Multiple Games - CHD +# - Compress Multiple Games - ZIP +# - Compress Multiple Games - RVZ +# - Compress Multiple Games - All Formats +# - Compress All Games +# - Install: RetroDECK SD Controller Profile +# - Install: PS3 firmware +# - RetroDECK: Change Update Setting +# - Troubleshooting +# - Backup: RetroDECK Userdata +# - Check & Verify: BIOS +# - Check & Verify: Multi-file structure +# - RetroDECK: Reset +# - Reset Specific Emulator # - Reset RetroArch +# - Reset Cemu # - Reset Citra # - Reset Dolphin # - Reset Duckstation @@ -46,216 +74,323 @@ source /app/libexec/functions.sh # - Reset PPSSPP # - Reset Primehack # - Reset RPCS3 -# - Reset Ryujinx # - Reset XEMU # - Reset Yuzu -# - Reset All Emulators -# - Reset All - -# Code for the menus should be put in reverse order, so functions for sub-menus exists before it is called by the parent menu +# - Reset All Emulators +# - Reset RetroDECK +# - RetroDECK: About +# - RetroDECK Version History +# - Full changelog +# - Version-specific changelogs +# - RetroDECK Credits +# - Developer Options (Hidden) +# - Change Multi-user mode +# - Change Update channel +# - Browse the wiki +# - USB Import tool +# - Install: RetroDECK Starter Pack # DIALOG TREE FUNCTIONS -configurator_reset_dialog() { - choice=$(zenity --list --title="RetroDECK Configurator Utility - Reset Options" --cancel-label="Back" \ +configurator_welcome_dialog() { + if [[ $developer_options == "true" ]]; then + welcome_menu_options=("Presets & Settings" "Here you find various presets, tweaks and settings to customize your RetroDECK experience" \ + "Open Emulator" "Launch and configure each emulators settings (for advanced users)" \ + "RetroDECK: Tools" "Compress games, move RetroDECK and install optional features" \ + "RetroDECK: Troubleshooting" "Backup data, perform BIOS / multi-disc file checks checks and emulator resets" \ + "RetroDECK: About" "Show additional information about RetroDECK" \ + "Developer Options" "Welcome to the DANGER ZONE") + else + welcome_menu_options=("Presets & Settings" "Here you find various presets, tweaks and settings to customize your RetroDECK experience" \ + "Open Emulator" "Launch and configure each emulators settings (for advanced users)" \ + "RetroDECK: Tools" "Compress games, move RetroDECK and install optional features" \ + "RetroDECK: Troubleshooting" "Backup data, perform BIOS / multi-disc file checks checks and emulator resets" \ + "RetroDECK: About" "Show additional information about RetroDECK" ) + fi + + choice=$(zenity --list --title="RetroDECK Configurator Utility" --cancel-label="Quit" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --column="Choice" --column="Action" \ - "Reset Specific Emulator" "Reset only one specific emulator to default settings" \ - "Reset All Emulators" "Reset all emulators to default settings" \ - "Reset RetroDECK" "Reset RetroDECK to default settings" ) + "${welcome_menu_options[@]}") case $choice in - "Reset Specific Emulator" ) - emulator_to_reset=$(zenity --list \ - --title "RetroDECK Configurator Utility - Reset Specific Standalone Emulator" --cancel-label="Back" \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ - --text="Which emulator do you want to reset to default?" \ - --column="Emulator" --column="Action" \ - "RetroArch" "Reset RetroArch to default settings" \ - "Citra" "Reset Citra to default settings" \ - "Dolphin" "Reset Dolphin to default settings" \ - "Duckstation" "Reset Duckstation to default settings" \ - "MelonDS" "Reset MelonDS to default settings" \ - "PCSX2" "Reset PCSX2 to default settings" \ - "PPSSPP" "Reset PPSSPP to default settings" \ - "Primehack" "Reset Primehack to default settings" \ - "RPCS3" "Reset RPCS3 to default settings" \ - "XEMU" "Reset XEMU to default settings" \ - "Yuzu" "Reset Yuzu to default settings" ) - - case $emulator_to_reset in - - "RetroArch" ) - if [[ $(configurator_reset_confirmation_dialog "RetroArch" "Are you sure you want to reset the RetroArch emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - ra_init - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "Citra" ) - if [[ $(configurator_reset_confirmation_dialog "Citra" "Are you sure you want to reset the Citra emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - citra_init - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "Dolphin" ) - if [[ $(configurator_reset_confirmation_dialog "Dolphin" "Are you sure you want to reset the Dolphin emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - dolphin_init - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "Duckstation" ) - if [[ $(configurator_reset_confirmation_dialog "Duckstation" "Are you sure you want to reset the Duckstation emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - duckstation_init - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "MelonDS" ) - if [[ $(configurator_reset_confirmation_dialog "MelonDS" "Are you sure you want to reset the MelonDS emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - melonds_init - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "PCSX2" ) - if [[ $(configurator_reset_confirmation_dialog "PCSX2" "Are you sure you want to reset the PCSX2 emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - pcsx2_init - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "PPSSPP" ) - if [[ $(configurator_reset_confirmation_dialog "PPSSPP" "Are you sure you want to reset the PPSSPP emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - ppssppsdl_init - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "Primehack" ) - if [[ $(configurator_reset_confirmation_dialog "Primehack" "Are you sure you want to reset the Primehack emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - primehack_init - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "RPCS3" ) - if [[ $(configurator_reset_confirmation_dialog "RPCS3" "Are you sure you want to reset the RPCS3 emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - rpcs3_init - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "XEMU" ) - if [[ $(configurator_reset_confirmation_dialog "XEMU" "Are you sure you want to reset the XEMU emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - xemu_init - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "Yuzu" ) - if [[ $(configurator_reset_confirmation_dialog "Yuzu" "Are you sure you want to reset the Yuzu emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - yuzu_init - configurator_process_complete_dialog "resetting $emulator_to_reset" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi - ;; - - "" ) # No selection made or Back button clicked - configurator_reset_dialog - ;; - - esac + "Presets & Settings" ) + configurator_presets_and_settings_dialog ;; -"Reset All Emulators" ) - if [[ $(configurator_reset_confirmation_dialog "all emulators" "Are you sure you want to reset all emulators to default settings?\n\nThis process cannot be undone.") == "true" ]]; then - ra_init - standalones_init - configurator_process_complete_dialog "resetting all emulators" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi -;; + "Open Emulator" ) + configurator_power_user_warning_dialog + ;; -"Reset RetroDECK" ) - if [[ $(configurator_reset_confirmation_dialog "RetroDECK" "Are you sure you want to reset RetroDECK entirely?\n\nThis process cannot be undone.") == "true" ]]; then - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Reset RetroDECK" \ - --text="You are resetting RetroDECK to its default state.\n\nAfter the process is complete you will need to exit RetroDECK and run it again, where you will go through the initial setup process." - rm -f "$lockfile" - rm -f "$rd_conf" - configurator_process_complete_dialog "resetting RetroDECK" - else - configurator_generic_dialog "Reset process cancelled." - configurator_reset_dialog - fi -;; + "RetroDECK: Tools" ) + configurator_retrodeck_tools_dialog + ;; -"" ) # No selection made or Back button clicked - configurator_welcome_dialog -;; + "RetroDECK: Troubleshooting" ) + configurator_retrodeck_troubleshooting_dialog + ;; + + "RetroDECK: About" ) + configurator_about_retrodeck_dialog + ;; + + "Developer Options" ) + configurator_generic_dialog "RetroDECK Configurator - Developer Options" "The following features and options are potentially VERY DANGEROUS for your RetroDECK install!\n\nThey should be considered the bleeding-edge of upcoming RetroDECK features, and never used when you have important saves/states/roms that are not backed up!\n\nYOU HAVE BEEN WARNED!" + configurator_developer_dialog + ;; + + "" ) + exit 1 + ;; esac } -configurator_retroachivement_dialog() { - login=$(zenity --forms --title="RetroDECK Configurator Utility - RetroArch RetroAchievements Login" --cancel-label="Back" \ +configurator_presets_and_settings_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - Presets & Settings" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ - --text="Enter your RetroAchievements Account details.\n\nBe aware that this tool cannot verify your login details and currently only supports logging in with RetroArch.\nFor registration and more info visit\nhttps://retroachievements.org/\n" \ - --separator="=SEP=" \ - --add-entry="Username" \ - --add-password="Password") + --column="Choice" --column="Action" \ + "Global: Presets & Settings" "Here you find presets and settings that that span over multiple emulators" \ + "RetroArch: Presets & Settings" "Here you find presets and settings for RetroArch and its cores" \ + "Wii & GameCube: Presets & Settings" "Here you find presets and settings for Dolphin and Primehack" ) - if [ $? == 0 ]; then # OK button clicked - arrIN=(${login//=SEP=/ }) - user=${arrIN[0]} - pass=${arrIN[1]} + case $choice in - set_setting_value $raconf cheevos_enable true retroarch - set_setting_value $raconf cheevos_username $user retroarch - set_setting_value $raconf cheevos_password $pass retroarch + "Global: Presets & Settings" ) + configurator_global_presets_and_settings_dialog + ;; - configurator_process_complete_dialog "logging in to RetroArch RetroAchievements" - else + "RetroArch: Presets & Settings" ) + configurator_retroarch_presets_and_settings_dialog + ;; + + "Wii & GameCube: Presets & Settings" ) + configurator_wii_and_gamecube_presets_and_settings_dialog + ;; + + "" ) # No selection made or Back button clicked configurator_welcome_dialog + ;; + + esac +} + +configurator_global_presets_and_settings_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - Global: Presets & Settings" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Action" \ + "Widescreen: Enable/Disable" "Enable or disable widescreen in supported systems" \ + "Ask-to-Exit: Enable/Disable" "Enable or disable emulators confirming when quitting in supported systems" \ + "RetroAchievements: Login" "Log into the RetroAchievements service in supported systems" \ + "RetroAchievements: Logout" "Disable RetroAchievements service in ALL supported systems" \ + "RetroAchievements: Hardcore Mode" "Enable RetroAchievements hardcore mode (no cheats, rewind, save states etc.) in supported emulators" \ + "Swap A/B and X/Y Buttons" "Enable or disable a swapped A/B and X/Y button layout in supported systems" ) + + case $choice in + + "Widescreen: Enable/Disable" ) + change_preset_dialog "widescreen" + configurator_global_presets_and_settings_dialog + ;; + + "Ask-to-Exit: Enable/Disable" ) + change_preset_dialog "ask_to_exit" + configurator_global_presets_and_settings_dialog + ;; + + "RetroAchievements: Login" ) + local cheevos_creds=$(get_cheevos_token_dialog) + if [[ ! "$cheevos_creds" == "failed" ]]; then + configurator_generic_dialog "RetroDECK Configurator Utility - RetroAchievements" "RetroAchievements login successful, please select systems you would like to enable achievements for in the next dialog." + IFS=',' read -r cheevos_username cheevos_token cheevos_login_timestamp < <(printf '%s\n' "$cheevos_creds") + change_preset_dialog "cheevos" + else + configurator_generic_dialog "RetroDECK Configurator Utility - RetroAchievements" "RetroAchievements login failed, please verify your username and password and try the process again." + fi + configurator_global_presets_and_settings_dialog + ;; + + "RetroAchievements: Logout" ) # This is a workaround to allow disabling cheevos without having to enter login credentials + local cheevos_emulators=$(sed -n '/\[cheevos\]/, /\[/{ /\[cheevos\]/! { /\[/! p } }' $rd_conf | sed '/^$/d') + for setting_line in $cheevos_emulators; do + emulator=$(get_setting_name "$setting_line" "retrodeck") + set_setting_value "$rdconf" "$emulator" "false" "retrodeck" "cheevos" + build_preset_config "$emulator" "cheevos" + done + configurator_generic_dialog "RetroDECK Configurator Utility - RetroAchievements" "RetroAchievements has been disabled in all supported systems." + configurator_global_presets_and_settings_dialog + ;; + + "RetroAchievements: Hardcore Mode" ) + change_preset_dialog "cheevos_hardcore" + configurator_global_presets_and_settings_dialog + ;; + + "Swap A/B and X/Y Buttons" ) + change_preset_dialog "nintendo_button_layout" + configurator_global_presets_and_settings_dialog + ;; + + "" ) # No selection made or Back button clicked + configurator_presets_and_settings_dialog + ;; + + esac +} + +configurator_retroarch_presets_and_settings_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroArch: Presets & Settings" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Action" \ + "Borders: Enable/Disable" "Enable or disable borders in supported systems" \ + "Rewind: Enable/Disable" "Enable or disable the Rewind function in RetroArch." ) + + case $choice in + + "Borders: Enable/Disable" ) + change_preset_dialog "borders" + configurator_retroarch_presets_and_settings_dialog + ;; + + "Rewind: Enable/Disable" ) + configurator_retroarch_rewind_dialog + ;; + + "" ) # No selection made or Back button clicked + configurator_presets_and_settings_dialog + ;; + + esac +} + +configurator_retroarch_rewind_dialog() { + if [[ $(get_setting_value "$raconf" rewind_enable retroarch) == "true" ]]; then + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroArch Rewind" \ + --text="Rewind is currently enabled. Do you want to disable it?." + + if [ $? == 0 ] + then + set_setting_value "$raconf" "rewind_enable" "false" retroarch + configurator_process_complete_dialog "disabling Rewind" + else + configurator_retroarch_presets_and_settings_dialog + fi + else + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroArch Rewind" \ + --text="Rewind is currently disabled, do you want to enable it?\n\nNOTE:\nThis may impact performance on some more demanding systems." + + if [ $? == 0 ] + then + set_setting_value "$raconf" "rewind_enable" "true" retroarch + configurator_process_complete_dialog "enabling Rewind" + else + configurator_retroarch_presets_and_settings_dialog + fi + fi +} + +configurator_wii_and_gamecube_presets_and_settings_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - Wii & GameCube: Presets & Settings" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Action" \ + "Dolphin Textures: Universal Dynamic Input" "Enable/Disable Venomalia's Universal Dynamic Input Textures for Dolphin" \ + "Primehack Textures: Universal Dynamic Input" "Enable/Disable: Venomalia's Universal Dynamic Input Textures for Primehack") + + case $choice in + + "Dolphin Textures: Universal Dynamic Input" ) + configurator_dolphin_input_textures_dialog + ;; + + "Primehack Textures: Universal Dynamic Input" ) + configurator_primehack_input_textures_dialog + ;; + + "" ) # No selection made or Back button clicked + configurator_presets_and_settings_dialog + ;; + + esac +} + +configurator_dolphin_input_textures_dialog() { + if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - Dolphin Textures: Universal Dynamic Input" \ + --text="Custom input textures are currently enabled. Do you want to disable them?." + + if [ $? == 0 ] + then + # set_setting_value $dolphingfxconf "HiresTextures" "False" dolphin # TODO: Break out a preset for texture packs so this can be enabled and disabled independently. + rm -rf "/var/data/dolphin-emu/Load/DynamicInputTextures" + configurator_process_complete_dialog "disabling Dolphin custom input textures" + else + configurator_wii_and_gamecube_presets_and_settings_dialog + fi + else + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - Dolphin Textures: Universal Dynamic Input" \ + --text="Custom input textures are currently disabled. Do you want to enable them?.\n\nThis process may take several minutes to complete." + + if [ $? == 0 ] + then + set_setting_value $dolphingfxconf "HiresTextures" "True" dolphin + ( + mkdir "/var/data/dolphin-emu/Load/DynamicInputTextures" + rsync -a "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/dolphin-emu/Load/DynamicInputTextures/" + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Dolphin Custom Input Textures Install" + configurator_process_complete_dialog "enabling Dolphin custom input textures" + else + configurator_wii_and_gamecube_presets_and_settings_dialog + fi + fi +} + +configurator_primehack_input_textures_dialog() { + if [[ -d "/var/data/primehack/Load/DynamicInputTextures" ]]; then + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - Dolphin Custom Input Textures" \ + --text="Custom input textures are currently enabled. Do you want to disable them?." + + if [ $? == 0 ] + then + # set_setting_value $primehackgfxconf "HiresTextures" "False" primehack # TODO: Break out a preset for texture packs so this can be enabled and disabled independently. + rm -rf "/var/data/primehack/Load/DynamicInputTextures" + configurator_process_complete_dialog "disabling Primehack custom input textures" + else + configurator_wii_and_gamecube_presets_and_settings_dialog + fi + else + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - Primehack Custom Input Textures" \ + --text="Custom input textures are currently disabled. Do you want to enable them?.\n\nThis process may take several minutes to complete." + + if [ $? == 0 ] + then + set_setting_value $primehackgfxconf "HiresTextures" "True" primehack + ( + mkdir "/var/data/primehack/Load/DynamicInputTextures" + rsync -a "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/primehack/Load/DynamicInputTextures/" + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Primehack Custom Input Textures Install" + configurator_process_complete_dialog "enabling Primehack custom input textures" + else + configurator_wii_and_gamecube_presets_and_settings_dialog + fi fi } @@ -263,40 +398,41 @@ configurator_power_user_warning_dialog() { if [[ $power_user_warning == "true" ]]; then choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Never show this again" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Desktop Mode Warning" \ - --text="Making manual changes to an emulators configuration may create serious issues,\nand some settings may be overwitten during RetroDECK updates.\n\nSome standalone emulator functions may not work properly outside of Desktop mode.\n\nPlease continue only if you know what you're doing.\n\nDo you want to continue?") + --title "RetroDECK Power User Warning" \ + --text="Making manual changes to an emulators configuration may create serious issues,\nand some settings may be overwitten during RetroDECK updates or when using presets.\n\nSome standalone emulator functions may not work properly outside of Desktop mode.\n\nPlease continue only if you know what you're doing.\n\nDo you want to continue?") fi rc=$? # Capture return code, as "Yes" button has no text value if [[ $rc == "0" ]]; then # If user clicked "Yes" - configurator_power_user_changes_dialog + configurator_open_emulator_dialog else # If any button other than "Yes" was clicked if [[ $choice == "No" ]]; then configurator_welcome_dialog elif [[ $choice == "Never show this again" ]]; then - set_setting_value $rd_conf "power_user_warning" "false" retrodeck # Store desktop mode warning variable for future checks - configurator_power_user_changes_dialog + set_setting_value $rd_conf "power_user_warning" "false" retrodeck "options" # Store power user warning variable for future checks + configurator_open_emulator_dialog fi fi } -configurator_power_user_changes_dialog() { +configurator_open_emulator_dialog() { emulator=$(zenity --list \ - --title "RetroDECK Configurator Utility - Emulator Options" --cancel-label="Back" \ + --title "RetroDECK Configurator Utility - Open Emulator" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --text="Which emulator do you want to launch?" \ --hide-header \ - --column=emulator \ - "RetroArch" \ - "Citra" \ - "Dolphin" \ - "Duckstation" \ - "MelonDS" \ - "PCSX2" \ - "PPSSPP" \ - "Primehack" \ - "RPCS3" \ - "XEMU" \ - "Yuzu") + --column="Emulator" --column="Action" \ + "RetroArch" "Open the multi-emulator frontend RetroArch" \ + "Cemu" "Open the Wii U emulator CEMU" \ + "Citra" "Open the N3DS emulator Citra" \ + "Dolphin" "Open the Wii & GC emulator Dolphin" \ + "Duckstation" "Open the PSX emulator Duckstation" \ + "MelonDS" "Open the NDS emulator MelonDS" \ + "PCSX2" "Open the PS2 emulator PSXC2" \ + "PPSSPP" "Open the PSP emulator PPSSPP" \ + "Primehack" "Open the Metroid Prime emulator Primehack" \ + "RPCS3" "Open the PS3 emulator RPCS3" \ + "XEMU" "Open the Xbox emulator XEMU" \ + "Yuzu" "Open the Switch emulator Yuzu" ) case $emulator in @@ -304,6 +440,10 @@ configurator_power_user_changes_dialog() { retroarch ;; + "Cemu" ) + Cemu-wrapper + ;; + "Citra" ) citra-qt ;; @@ -349,53 +489,60 @@ configurator_power_user_changes_dialog() { ;; esac + + configurator_open_emulator_dialog } -configurator_retroarch_rewind_dialog() { - if [[ $(get_setting_value $raconf rewind_enable retroarch) == "true" ]]; then - zenity --question \ - --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator - Rewind" \ - --text="Rewind is currently enabled. Do you want to disable it?." - - if [ $? == 0 ] - then - set_setting_value $raconf "rewind_enable" "false" retroarch - configurator_process_complete_dialog "disabling Rewind" - else - configurator_retroarch_options_dialog - fi - else - zenity --question \ - --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator - Rewind" \ - --text="Rewind is currently disabled, do you want to enable it?\n\nNOTE:\nThis may impact performance on some more demanding systems." - - if [ $? == 0 ] - then - set_setting_value $raconf "rewind_enable" "true" retroarch - configurator_process_complete_dialog "enabling Rewind" - else - configurator_retroarch_options_dialog - fi - fi -} - -configurator_retroarch_options_dialog() { - choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroArch Options" --cancel-label="Back" \ +configurator_retrodeck_tools_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Tools" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --column="Choice" --column="Action" \ - "Change Rewind Setting" "Enable or disable the Rewind function in RetroArch." \ - "RetroAchievements Login" "Log into the RetroAchievements service in RetroArch." ) + "Tool: Move Folders" "Move RetroDECK folders between internal/SD card or to a custom location" \ + "Tool: Compress Games" "Compress games for systems that support it" \ + "Install: RetroDECK SD Controller Profile" "Install the custom RetroDECK controller layout for the Steam Deck" \ + "Install: PS3 Firmware" "Download and install PS3 firmware for use with the RPCS3 emulator" \ + "RetroDECK: Change Update Setting" "Enable or disable online checks for new versions of RetroDECK" ) case $choice in - "Change Rewind Setting" ) - configurator_retroarch_rewind_dialog + "Tool: Move Folders" ) + configurator_retrodeck_move_tool_dialog ;; - "RetroAchievements Login" ) - configurator_retroachivement_dialog + "Tool: Compress Games" ) + configurator_generic_dialog "RetroDECK Configurator - Compression Tool" "Depending on your library and compression choices, the process can sometimes take a long time.\nPlease be patient once it is started!" + configurator_compression_tool_dialog + ;; + + "Install: RetroDECK SD Controller Profile" ) + configurator_generic_dialog "RetroDECK Configurator - Install: RetroDECK Controller Profile" "We are now offering a new official RetroDECK controller profile!\nIt is an optional component that helps you get the most out of RetroDECK with a new in-game radial menu for unified hotkeys across emulators.\n\nThe files need to be installed outside of the normal ~/retrodeck folder, so we wanted your permission before proceeding.\n\nThe files will be installed at the following shared Steam locations:\n\n$HOME/.steam/steam/tenfoot/resource/images/library/controller/binding_icons/\n$HOME/.steam/steam/controller_base/templates/RetroDECK_controller_config.vdf" + if [[ $(configurator_generic_question_dialog "Install: RetroDECK Controller Profile" "Would you like to install the official RetroDECK controller profile?") == "true" ]]; then + install_retrodeck_controller_profile + configurator_generic_dialog "RetroDECK Configurator - Install: RetroDECK Controller Profile" "The RetroDECK controller profile install is complete.\nSee the Wiki for more details on how to use it to its fullest potential!" + fi + configurator_retrodeck_tools_dialog + ;; + + "Install: PS3 Firmware" ) + if [[ $(check_network_connectivity) == "true" ]]; then + configurator_generic_dialog "RetroDECK Configurator - Install: PS3 firmware" "This tool will download firmware required by RPCS3 to emulate PS3 games.\n\nThe process will take several minutes, and the emulator will launch to finish the installation.\nPlease close RPCS3 manually once the installation is complete." + ( + update_rpcs3_firmware + ) | + zenity --progress --pulsate \ + --icon-name=net.retrodeck.retrodeck \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title="Downloading PS3 Firmware" \ + --no-cancel \ + --auto-close + else + configurator_generic_dialog "RetroDECK Configurator - Install: PS3 Firmware" "You do not appear to currently have Internet access, which is required by this tool. Please try again when network access has been restored." + configurator_retrodeck_tools_dialog + fi + ;; + + "RetroDECK: Change Update Setting" ) + configurator_online_update_setting_dialog ;; "" ) # No selection made or Back button clicked @@ -405,31 +552,141 @@ configurator_retroarch_options_dialog() { esac } +configurator_retrodeck_move_tool_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Move Tool" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Action" \ + "Move all of RetroDECK" "Move the entire retrodeck folder to a new location" \ + "Move ROMs folder" "Move only the ROMs folder to a new location" \ + "Move BIOS folder" "Move only the BIOS folder to a new location" \ + "Move Downloaded Media folder" "Move only the Downloaded Media folder to a new location" \ + "Move Saves folder" "Move only the Saves folder to a new location" \ + "Move States folder" "Move only the States folder to a new location" \ + "Move Themes folder" "Move only the Themes folder to a new location" \ + "Move Screenshots folder" "Move only the Screenshots folder to a new location" \ + "Move Mods folder" "Move only the Mods folder to a new location" \ + "Move Texture Packs folder" "Move only the Texture Packs folder to a new location" ) + + case $choice in + + "Move all of RetroDECK" ) + configurator_move_folder_dialog "rdhome" + ;; + + "Move ROMs folder" ) + configurator_move_folder_dialog "roms_folder" + ;; + + "Move BIOS folder" ) + configurator_move_folder_dialog "bios_folder" + ;; + + "Move Downloaded Media folder" ) + configurator_move_folder_dialog "media_folder" + ;; + + "Move Saves folder" ) + configurator_move_folder_dialog "saves_folder" + ;; + + "Move States folder" ) + configurator_move_folder_dialog "states_folder" + ;; + + "Move Themes folder" ) + configurator_move_folder_dialog "themes_folder" + ;; + + "Move Screenshots folder" ) + configurator_move_folder_dialog "screenshots_folder" + ;; + + "Move Mods folder" ) + configurator_move_folder_dialog "mods_folder" + ;; + + "Move Texture Packs folder" ) + configurator_move_folder_dialog "texture_packs_folder" + ;; + + esac + + configurator_retrodeck_tools_dialog +} + +configurator_compression_tool_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Compression Tool" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Action" \ + "Compress Single Game" "Compress a single game into a compatible format" \ + "Compress Multiple Games - CHD" "Compress one or more games compatible with the CHD format" \ + "Compress Multiple Games - ZIP" "Compress one or more games compatible with the ZIP format" \ + "Compress Multiple Games - RVZ" "Compress one or more games compatible with the RVZ format" \ + "Compress Multiple Games - All Formats" "Compress one or more games compatible with any format" \ + "Compress All Games" "Compress all games into compatible formats" ) + + case $choice in + + "Compress Single Game" ) + configurator_compress_single_game_dialog + ;; + + "Compress Multiple Games - CHD" ) + configurator_compress_multiple_games_dialog "chd" + ;; + + "Compress Multiple Games - ZIP" ) + configurator_compress_multiple_games_dialog "zip" + ;; + + "Compress Multiple Games - RVZ" ) + configurator_compress_multiple_games_dialog "rvz" + ;; + + "Compress Multiple Games - All Formats" ) + configurator_compress_multiple_games_dialog "all" + ;; + + "Compress All Games" ) + configurator_compress_multiple_games_dialog "everything" + ;; + + "" ) # No selection made or Back button clicked + configurator_retrodeck_tools_dialog + ;; + + esac +} + configurator_compress_single_game_dialog() { local file=$(file_browse "Game to compress") if [[ ! -z "$file" ]]; then - if [[ $(validate_for_chd "$file") == "true" ]]; then + local compatible_compression_format=$(find_compatible_compression_format "$file") + if [[ ! $compatible_compression_format == "none" ]]; then local post_compression_cleanup=$(configurator_compression_cleanup_dialog) - local filename_no_path=$(basename "$file") - local filename_no_extension="${filename_no_path%.*}" - local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file") - local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension" ( - echo "# Compressing $filename_no_path, please wait..." - compress_to_chd "$source_file" "$dest_file" - if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested - if [[ "$file" == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do - echo "# Removing file $line" - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") - echo "# Removing file $filename_no_path" - rm -f "$file" - else - echo "# Removing file $filename_no_path" + if [[ $compatible_compression_format == "chd" ]]; then + if [[ $(validate_for_chd "$file") == "true" ]]; then + echo "# Compressing $(basename "$file") to $compatible_compression_format format" + compress_game "chd" "$file" + if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested + if [[ "$file" == *".cue" ]]; then + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + local file_path=$(dirname "$(realpath "$file")") + while IFS= read -r line + do + rm -f "$file_path/$line" + done < <(printf '%s\n' "$cue_bin_files") + rm -f "$file" + else + rm -f "$file" + fi + fi + fi + else + echo "# Compressing $(basename "$file") to $compatible_compression_format format" + compress_game "$compatible_compression_format" "$file" + if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested rm -f "$file" fi fi @@ -437,130 +694,134 @@ configurator_compress_single_game_dialog() { zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --title "RetroDECK Configurator Utility - Compression in Progress" - configurator_generic_dialog "The compression process is complete!" - configurator_compress_games_dialog + configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete!" + configurator_compression_tool_dialog + else - configurator_generic_dialog "File type not recognized. Supported file types are .cue, .gdi and .iso" - configurator_compress_games_dialog + configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The selected file does not have any compatible compressed format." + configurator_compression_tool_dialog fi else - configurator_generic_dialog "No file selected, returning to main menu" - configurator_welcome_dialog + configurator_compression_tool_dialog fi } -configurator_compress_multi_game_dialog() { - # This dialog will display any games it finds to be compressable, from the systems listed under each compression type in - local compression_format=$1 - local compressable_game="" +configurator_compress_multiple_games_dialog() { + # This dialog will display any games it finds to be compressable, from the systems listed under each compression type in compression_targets.cfg + local compressable_games_list=() local all_compressable_games=() - local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d') + local games_to_compress=() + local target_selection="$1" + + if [[ "$1" == "everything" ]]; then + local compression_format="all" + else + local compression_format="$1" + fi + + if [[ $compression_format == "all" ]]; then + local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d') + else + local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d') + fi while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type do - if [[ $compression_format == "chd" ]]; then - compression_candidates=$(find "$roms_folder/$system" -type f \( -name "*.cue" -o -name "*.iso" -o -name "*.gdi" \) ! -path "*.m3u*") - # TODO: Add ZIP file compression search here + compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt") + if [[ ! -z $compression_candidates ]]; then + while IFS= read -r game + do + local compatible_compression_format=$(find_compatible_compression_format "$game") + if [[ $compression_format == "chd" ]]; then + if [[ $compatible_compression_format == "chd" ]]; then + all_compressable_games=("${all_compressable_games[@]}" "$game") + compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") + fi + elif [[ $compression_format == "zip" ]]; then + if [[ $compatible_compression_format == "zip" ]]; then + all_compressable_games=("${all_compressable_games[@]}" "$game") + compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") + fi + elif [[ $compression_format == "rvz" ]]; then + if [[ $compatible_compression_format == "rvz" ]]; then + all_compressable_games=("${all_compressable_games[@]}" "$game") + compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") + fi + elif [[ $compression_format == "all" ]]; then + if [[ ! $compatible_compression_format == "none" ]]; then + all_compressable_games=("${all_compressable_games[@]}" "$game") + compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") + fi + fi + done < <(printf '%s\n' "$compression_candidates") fi - while IFS= read -r game - do - if [[ $(validate_for_chd "$game") == "true" ]]; then - all_compressable_games=("${all_compressable_games[@]}" "$game") - compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") - fi - done < <(printf '%s\n' "$compression_candidates") done < <(printf '%s\n' "$compressable_systems_list") - choice=$(zenity \ - --list --width=1200 --height=720 \ - --checklist --hide-column=3 --ok-label="Compress Selected" --extra-button="Compress All" \ - --separator="," --print-column=3 \ - --text="Choose which games to compress:" \ - --column "Compress?" \ - --column "Game" \ - --column "Game Full Path" \ - "${compressable_games_list[@]}") + if [[ ! "$target_selection" == "everything" ]]; then # If the user chose to not auto-compress everything + choice=$(zenity \ + --list --width=1200 --height=720 --title "RetroDECK Configurator - RetroDECK: Compression Tool" \ + --checklist --hide-column=3 --ok-label="Compress Selected" --extra-button="Compress All" \ + --separator="," --print-column=3 \ + --text="Choose which games to compress:" \ + --column "Compress?" \ + --column "Game" \ + --column "Game Full Path" \ + "${compressable_games_list[@]}") - local rc=$? - if [[ $rc == "0" && ! -z $choice ]]; then # User clicked "Compress Selected" with at least one game selected + local rc=$? + if [[ $rc == "0" && ! -z $choice ]]; then # User clicked "Compress Selected" with at least one game selected + IFS="," read -ra games_to_compress <<< "$choice" + local total_games_to_compress=${#games_to_compress[@]} + local games_left_to_compress=$total_games_to_compress + elif [[ ! -z $choice ]]; then # User clicked "Compress All" + games_to_compress=("${all_compressable_games[@]}") + local total_games_to_compress=${#all_compressable_games[@]} + local games_left_to_compress=$total_games_to_compress + fi + else # The user chose to auto-compress everything + games_to_compress=("${all_compressable_games[@]}") + fi + + if [[ ! $(echo "${#games_to_compress[@]}") == "0" ]]; then local post_compression_cleanup=$(configurator_compression_cleanup_dialog) - IFS="," read -ra games_to_compress <<< "$choice" ( for file in "${games_to_compress[@]}"; do - local filename_no_path=$(basename "$file") - local filename_no_extension="${filename_no_path%.*}" - local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file") - local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension" - echo "# Compressing $filename_no_path" # Update Zenity dialog text - compress_to_chd "$source_file" "$dest_file" + local compression_format=$(find_compatible_compression_format "$file") + echo "# Compressing $(basename "$file") into $compression_format format" # Update Zenity dialog text + progress=$(( 100 - (( 100 / "$total_games_to_compress" ) * "$games_left_to_compress" ))) + echo $progress + games_left_to_compress=$((games_left_to_compress-1)) + compress_game "$compression_format" "$file" if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested if [[ "$file" == *".cue" ]]; then local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") local file_path=$(dirname "$(realpath "$file")") while IFS= read -r line do - echo "# Removing file $line" rm -f "$file_path/$line" done < <(printf '%s\n' "$cue_bin_files") - echo "# Removing file $filename_no_path" rm -f $(realpath "$file") else - echo "# Removing file $filename_no_path" rm -f "$(realpath "$file")" fi fi done ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --title "RetroDECK Configurator Utility - Compression in Progress" - configurator_generic_dialog "The compression process is complete!" - configurator_compress_games_dialog + configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete!" + configurator_compression_tool_dialog else - if [[ ! -z $choice ]]; then # User clicked "Compress All" - local post_compression_cleanup=$(configurator_compression_cleanup_dialog) - ( - for file in "${all_compressable_games[@]}"; do - local filename_no_path=$(basename "$file") - local filename_no_extension="${filename_no_path%.*}" - local source_file=$(dirname "$(realpath "$file")")"/"$(basename "$file") - local dest_file=$(dirname "$(realpath "$file")")"/""$filename_no_extension" - echo "# Compressing $filename_no_path" # Update Zenity dialog text - compress_to_chd "$source_file" "$dest_file" - if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested - if [[ "$file" == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do - echo "# Removing file $line" - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") - echo "# Removing file $filename_no_path" - rm -f $(realpath "$file") - else - echo "# Removing file $filename_no_path" - rm -f $(realpath "$file") - fi - fi - done - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Compression in Progress" - configurator_generic_dialog "The compression process is complete!" - configurator_compress_games_dialog - else - configurator_compress_games_dialog - fi + configurator_compression_tool_dialog fi } configurator_compression_cleanup_dialog() { zenity --icon-name=net.retrodeck.retrodeck --question --no-wrap --cancel-label="No" --ok-label="Yes" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Compression Cleanup" \ + --title "RetroDECK Configurator - RetroDECK: Compression Tool" \ --text="Do you want to remove old files after they are compressed?\n\nClicking \"No\" will leave all files behind which will need to be cleaned up manually and may result in game duplicates showing in the RetroDECK library." local rc=$? # Capture return code, as "Yes" button has no text value if [[ $rc == "0" ]]; then # If user clicked "Yes" @@ -570,24 +831,73 @@ configurator_compression_cleanup_dialog() { fi } -configurator_compress_games_dialog() { - choice=$(zenity --list --title="RetroDECK Configurator Utility - Change Options" --cancel-label="Back" \ +configurator_online_update_setting_dialog() { + if [[ $(get_setting_value $rd_conf "update_check" retrodeck "options") == "true" ]]; then + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroDECK Online Update Check" \ + --text="Online update checks for RetroDECK are currently enabled.\n\nDo you want to disable them?" + + if [ $? == 0 ] # User clicked "Yes" + then + set_setting_value $rd_conf "update_check" "false" retrodeck "options" + else # User clicked "Cancel" + configurator_retrodeck_tools_dialog + fi + else + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroDECK Online Update Check" \ + --text="Online update checks for RetroDECK are currently disabled.\n\nDo you want to enable them?" + + if [ $? == 0 ] # User clicked "Yes" + then + set_setting_value $rd_conf "update_check" "true" retrodeck "options" + else # User clicked "Cancel" + configurator_retrodeck_tools_dialog + fi + fi +} + +configurator_retrodeck_troubleshooting_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Troubleshooting" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --column="Choice" --column="Action" \ - "Compress Single Game" "Compress a single game into a compatible format" \ - "Compress Multiple Games - CHD" "Compress one or more games compatible with the CHD format" ) + "Backup: RetroDECK Userdata" "Compress and backup important RetroDECK user data folders" \ + "Check & Verify: BIOS Files" "Show information about common BIOS files" \ + "Check & Verify: Multi-file structure" "Verify the proper structure of multi-file or multi-disc games" \ + "RetroDECK: Reset" "Reset specific parts or all of RetroDECK" ) case $choice in - "Compress Single Game" ) - configurator_compress_single_game_dialog + "Backup: RetroDECK Userdata" ) + configurator_generic_dialog "RetroDECK Configurator - Backup: RetroDECK Userdata" "This tool will compress important RetroDECK userdata (basically everything except the ROMs folder) into a zip file.\n\nThis process can take several minutes, and the resulting zip file can be found in the ~/retrodeck/backups folder." + ( + backup_retrodeck_userdata + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Backup in Progress" \ + --text="Backing up RetroDECK userdata, please wait..." + if [[ -f $backups_folder/$(date +"%0m%0d")_retrodeck_userdata.zip ]]; then + configurator_generic_dialog "RetroDECK Configurator - Backup: RetroDECK Userdata" "The backup process is now complete." + else + configurator_generic_dialog "RetroDECK Configurator - Backup: RetroDECK Userdata" "The backup process could not be completed,\nplease check the logs folder for more information." + fi + configurator_retrodeck_troubleshooting_dialog ;; - "Compress Multiple Games - CHD" ) - configurator_compress_multi_game_dialog "chd" + "Check & Verify: BIOS Files" ) + configurator_check_bios_files ;; - # TODO: Add ZIP compression option + "Check & Verify: Multi-file structure" ) + configurator_check_multifile_game_structure + ;; + + "RetroDECK: Reset" ) + configurator_reset_dialog + ;; "" ) # No selection made or Back button clicked configurator_welcome_dialog @@ -596,49 +906,8 @@ configurator_compress_games_dialog() { esac } -configurator_check_multifile_game_structure() { - local folder_games=($(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")) - if [[ ${#folder_games[@]} -gt 1 ]]; then - echo "$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")" > $logs_folder/multi_file_games_"$(date +"%Y_%m_%d_%I_%M_%p").log" - zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK" \ - --text="The following games were found to have the incorrect folder structure:\n\n$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")\n\nIncorrect folder structure can result in failure to launch games or saves being in the incorrect location.\n\nPlease see the RetroDECK wiki for more details!\n\nYou can find this list of games in ~/retrodeck/.logs" - else - configurator_generic_dialog "No incorrect multi-file game folder structures found." - fi - configurator_troubleshooting_tools_dialog -} - -configurator_check_bios_files_basic() { - configurator_generic_dialog "This check will look for BIOS files that RetroDECK has identified as working.\n\nThere may be additional BIOS files that will function with the emulators that are not checked.\n\nSome more advanced emulators such as Yuzu will have additional methods for verifiying the BIOS files are in working order." - bios_checked_list=() - - while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc - do - bios_file_found="No" - bios_hash_matched="No" - if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then - bios_file_found="Yes" - if [[ $bios_hash == "Unknown" ]]; then - bios_hash_matched="Unknown" - elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then - bios_hash_matched="Yes" - fi - fi - if [[ $bios_file_found == "Yes" && ($bios_hash_matched == "Yes" || $bios_hash_matched == "Unknown") && ! " ${bios_checked_list[*]} " =~ " ${bios_system} " ]]; then - bios_checked_list=("${bios_checked_list[@]}" "$bios_system" ) - fi - done < $bios_checklist - systems_with_bios=${bios_checked_list[@]} - - configurator_generic_dialog "The following systems have been found to have at least one valid BIOS file.\n\n$systems_with_bios\n\nFor more information on the BIOS files found please use the Advanced check tool." - - configurator_troubleshooting_tools_dialog -} - -configurator_check_bios_files_advanced() { - configurator_generic_dialog "This check will look for BIOS files that RetroDECK has identified as working.\n\nThere may be additional BIOS files that will function with the emulators that are not checked.\n\nSome more advanced emulators such as Yuzu will have additional methods for verifiying the BIOS files are in working order." +configurator_check_bios_files() { + configurator_generic_dialog "RetroDECK Configurator - Check & Verify: BIOS Files" "This check will look for BIOS files that RetroDECK has identified as working.\n\nNot all BIOS files are required for games to work, please check the BIOS description for more information on its purpose.\n\nThere may be additional BIOS files that will function with the emulators that are not checked.\n\nSome more advanced emulators such as Yuzu will have additional methods for verifiying the BIOS files are in working order." bios_checked_list=() while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc @@ -656,7 +925,7 @@ configurator_check_bios_files_advanced() { bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc") done < $bios_checklist - zenity --list --title="RetroDECK Configurator Utility - Verify BIOS Files" --cancel-label="Back" \ + zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --column "BIOS File Name" \ --column "System" \ @@ -665,40 +934,138 @@ configurator_check_bios_files_advanced() { --column "BIOS File Description" \ "${bios_checked_list[@]}" - configurator_troubleshooting_tools_dialog + configurator_retrodeck_troubleshooting_dialog } -configurator_troubleshooting_tools_dialog() { - choice=$(zenity --list --title="RetroDECK Configurator Utility - Change Options" --cancel-label="Back" \ +configurator_check_multifile_game_structure() { + local folder_games=($(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")) + if [[ ${#folder_games[@]} -gt 1 ]]; then + echo "$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")" > $logs_folder/multi_file_games_"$(date +"%Y_%m_%d_%I_%M_%p").log" + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - Check & Verify: Multi-file structure" \ + --text="The following games were found to have the incorrect folder structure:\n\n$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")\n\nIncorrect folder structure can result in failure to launch games or saves being in the incorrect location.\n\nPlease see the RetroDECK wiki for more details!\n\nYou can find this list of games in ~/retrodeck/.logs" + else + configurator_generic_dialog "RetroDECK Configurator - Check & Verify: Multi-file structure" "No incorrect multi-file game folder structures found." + fi + configurator_retrodeck_troubleshooting_dialog +} + +configurator_reset_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Reset" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --column="Choice" --column="Action" \ - "Move RetroDECK" "Move RetroDECK files between internal/SD card or to a custom location" \ - "Multi-file game structure check" "Verify the proper structure of multi-file or multi-disc games" \ - "Basic BIOS file check" "Show a list of systems that BIOS files are found for" \ - "Advanced BIOS file check" "Show advanced information about common BIOS files" \ - "Compress Games" "Compress games to CHD format for systems that support it" ) + "Reset Specific Emulator" "Reset only one specific emulator to default settings" \ + "Reset All Emulators" "Reset all emulators to default settings" \ + "Reset RetroDECK" "Reset RetroDECK to default settings" ) case $choice in - "Move RetroDECK" ) - configurator_generic_dialog "This option will move the RetroDECK data folder (ROMs, saves, BIOS etc.) to a new location.\n\nPlease choose where to move the RetroDECK data folder." - configurator_move_dialog + "Reset Specific Emulator" ) + emulator_to_reset=$(zenity --list \ + --title "RetroDECK Configurator Utility - Reset Specific Standalone Emulator" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --text="Which emulator do you want to reset to default?" \ + --column="Emulator" --column="Action" \ + "RetroArch" "Reset the multi-emulator frontend RetroArch to default settings" \ + "Cemu" "Reset the Wii U emulator Cemu to default settings" \ + "Citra" "Reset the N3DS emulator Citra to default settings" \ + "Dolphin" "Reset the Wii/GameCube emulator Dolphin to default settings" \ + "Duckstation" "Reset the PSX emulator Duckstation to default settings" \ + "MelonDS" "Reset the NDS emulator MelonDS to default settings" \ + "PCSX2" "Reset the PS2 emulator PCSX2 to default settings" \ + "PPSSPP" "Reset the PSP emulator PPSSPP to default settings" \ + "Primehack" "Reset the Metroid Prime emulator Primehack to default settings" \ + "RPCS3" "Reset the PS3 emulator RPCS3 to default settings" \ + "XEMU" "Reset the XBOX emulator XEMU to default settings" \ + "Yuzu" "Reset the Switch emulator Yuzu to default settings" ) + + case $emulator_to_reset in + + "RetroArch" | "XEMU" ) # Emulators that require network access + if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then + prepare_emulator "reset" "$emulator_to_reset" "configurator" + configurator_process_complete_dialog "resetting $emulator_to_reset" + else + configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled." + configurator_reset_dialog + fi + ;; + + "Cemu" | "Citra" | "Dolphin" | "Duckstation" | "MelonDS" | "PCSX2" | "PPSSPP" | "Primehack" | "RPCS3" | "Ryujinx" | "Yuzu" ) + if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then + prepare_emulator "reset" "$emulator_to_reset" "configurator" + configurator_process_complete_dialog "resetting $emulator_to_reset" + else + configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled." + configurator_reset_dialog + fi + ;; + + "" ) # No selection made or Back button clicked + configurator_reset_dialog + ;; + + esac ;; - "Multi-file game structure check" ) - configurator_check_multifile_game_structure +"Reset All Emulators" ) + if [[ $(configurator_reset_confirmation_dialog "all emulators" "Are you sure you want to reset all emulators to default settings?\n\nThis process cannot be undone.") == "true" ]]; then + ( + prepare_emulator "reset" "all" + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Finishing Initialization" \ + --text="RetroDECK is finishing the reset process, please wait." + configurator_process_complete_dialog "resetting all emulators" + else + configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled." + configurator_reset_dialog + fi +;; + +"Reset RetroDECK" ) + if [[ $(configurator_reset_confirmation_dialog "RetroDECK" "Are you sure you want to reset RetroDECK entirely?\n\nThis process cannot be undone.") == "true" ]]; then + zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Reset RetroDECK" \ + --text="You are resetting RetroDECK to its default state.\n\nAfter the process is complete you will need to exit RetroDECK and run it again, where you will go through the initial setup process." + rm -f "$lockfile" + rm -f "$rd_conf" + configurator_process_complete_dialog "resetting RetroDECK" + else + configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled." + configurator_reset_dialog + fi +;; + +"" ) # No selection made or Back button clicked + configurator_retrodeck_troubleshooting_dialog +;; + + esac +} + +configurator_about_retrodeck_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: About" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Description" \ + "Version History" "View the version changelogs for RetroDECK" \ + "Credits" "View the contribution credits for RetroDECK" ) + + case $choice in + + "Version History" ) + configurator_version_history_dialog ;; - "Basic BIOS file check" ) - configurator_check_bios_files_basic - ;; - - "Advanced BIOS file check" ) - configurator_check_bios_files_advanced - ;; - - "Compress Games" ) - configurator_compress_games_dialog + "Credits" ) + zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Credits" \ + --filename="$emuconfigs/defaults/retrodeck/reference_lists/retrodeck_credits.txt" + configurator_about_retrodeck_dialog ;; "" ) # No selection made or Back button clicked @@ -708,190 +1075,223 @@ configurator_troubleshooting_tools_dialog() { esac } -configurator_move_dialog() { - if [[ -d $rdhome ]]; then - destination=$(configurator_destination_choice_dialog "RetroDECK Data" "Please choose a destination for the RetroDECK data folder.") - case $destination in +configurator_version_history_dialog() { + local version_array=($(xml sel -t -v '//component/releases/release/@version' -n $rd_appdata)) + local all_versions_list=() - "Back" ) - configurator_move_dialog - ;; + for rd_version in ${version_array[*]}; do + all_versions_list=("${all_versions_list[@]}" "RetroDECK $rd_version Changelog" "View the changes specific to version $rd_version") + done - "Internal Storage" ) - if [[ ! -L "$HOME/retrodeck" && -d "$HOME/retrodeck" ]]; then - configurator_generic_dialog "The RetroDECK data folder is already at that location, please pick a new one." - configurator_move_dialog - else - configurator_generic_dialog "Moving RetroDECK data folder to $destination" - unlink $HOME/retrodeck # Remove symlink for $rdhome - move $rdhome "$HOME" - if [[ ! -d $rdhome && -d $HOME/retrodeck ]]; then # If the move succeeded - rdhome="$HOME/retrodeck" - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - emulators_post_move - conf_write - - configurator_process_complete_dialog "moving the RetroDECK data directory to internal storage" - else - configurator_generic_dialog "The moving process was not completed, please try again." - fi - fi - ;; - - "SD Card" ) - if [[ -L "$HOME/retrodeck" && -d "$sdcard/retrodeck" && "$rdhome" == "$sdcard/retrodeck" ]]; then - configurator_generic_dialog "The RetroDECK data folder is already configured to that location, please pick a new one." - configurator_move_dialog - else - if [[ ! -w $sdcard ]]; then - configurator_generic_dialog "The SD card was found but is not writable\nThis can happen with cards formatted on PC or for other reasons.\nPlease format the SD card through the Steam Deck's Game Mode and try the moving process again." - configurator_welcome_dialog - else - if [[ $(verify_space $rdhome $sdcard) == "true" ]]; then - configurator_generic_dialog "Moving RetroDECK data folder to $destination" - if [[ -L "$HOME/retrodeck/roms" ]]; then # Check for ROMs symlink user may have created - unlink "$HOME/retrodeck/roms" - fi - unlink $HOME/retrodeck # Remove symlink for $rdhome - - ( - dir_prep "$sdcard/retrodeck" "$rdhome" - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move in Progress" \ - --text="Moving directory $rdhome to new location of $sdcard/retrodeck, please wait." - - if [[ -L $rdhome && ! $rdhome == "$HOME/retrodeck" ]]; then # Clean up extraneus symlinks from previous moves - unlink $rdhome - fi - - if [[ ! -L "$HOME/retrodeck" ]]; then # Always link back to original directory - ln -svf "$sdcard/retrodeck" "$HOME" - fi - - rdhome="$sdcard/retrodeck" - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - emulators_post_move - conf_write - configurator_process_complete_dialog "moving the RetroDECK data directory to SD card" - else - zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move Directories" \ - --text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space." - fi - fi - fi - ;; - - "Custom Location" ) - configurator_generic_dialog "Select the root folder you would like to store the RetroDECK data folder in.\n\nA new folder \"retrodeck\" will be created in the destination chosen." - custom_dest=$(directory_browse "RetroDECK directory location") - if [[ ! -w $custom_dest ]]; then - configurator_generic_dialog "The destination was found but is not writable\n\nThis can happen if RetroDECK does not have permission to write to this location.\n\nThis can typically be solved through the utility Flatseal, please make the needed changes and try the moving process again." - configurator_welcome_dialog - else - if [[ $(verify_space $rdhome $custom_dest) ]];then - configurator_generic_dialog "Moving RetroDECK data folder to $custom_dest/retrodeck" - if [[ -L $rdhome/roms ]]; then # Check for ROMs symlink user may have created - unlink $rdhome/roms - fi - - unlink $HOME/retrodeck # Remove symlink for $rdhome if the previous location was not internal - - ( - dir_prep "$custom_dest/retrodeck" "$rdhome" - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move in Progress" \ - --text="Moving directory $rdhome to new location of $custom_dest/retrodeck, please wait." - - if [[ ! -L "$HOME/retrodeck" ]]; then - ln -svf "$custom_dest/retrodeck" "$HOME" - fi - - if [[ -L $rdhome && ! $rdhome == "$HOME/retrodeck" ]]; then # Clean up extraneus symlinks from previous moves - unlink $rdhome - fi - - rdhome="$custom_dest/retrodeck" - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - emulators_post_move - conf_write - configurator_process_complete_dialog "moving the RetroDECK data directory to SD card" - else - zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Move Directories" \ - --text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space." - fi - fi - ;; - - esac - else - configurator_generic_dialog "The RetroDECK data folder was not found at the expected location.\n\nThis may have happened if the folder was moved manually.\n\nPlease select the current location of the RetroDECK data folder." - rdhome=$(directory_browse "RetroDECK directory location") - roms_folder="$rdhome/roms" - saves_folder="$rdhome/saves" - states_folder="$rdhome/states" - bios_folder="$rdhome/bios" - media_folder="$rdhome/downloaded_media" - themes_folder="$rdhome/themes" - emulator_post_move - conf_write - configurator_generic_dialog "RetroDECK data folder now configured at $rdhome. Please start the moving process again." - configurator_move_dialog - fi -} - -configurator_welcome_dialog() { - choice=$(zenity --list --title="RetroDECK Configurator Utility" --cancel-label="Quit" \ + choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK Version History" --cancel-label="Back" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ - --column="Choice" --column="Action" \ - "RetroArch Presets" "Change RetroArch presets, log into RetroAchievements etc." \ - "Emulator Options" "Launch and configure each emulators settings (for advanced users)" \ - "Tools and Troubleshooting" "Move RetroDECK to a new location, compress games and perform basic troubleshooting" \ - "Reset" "Reset specific parts or all of RetroDECK" ) + --column="Choice" --column="Description" \ + "Full RetroDECK Changelog" "View the list of all changes that have ever been made to RetroDECK" \ + "${all_versions_list[@]}") case $choice in - "RetroArch Presets" ) - configurator_retroarch_options_dialog + "Full RetroDECK Changelog" ) + changelog_dialog "all" ;; - "Emulator Options" ) - configurator_power_user_warning_dialog - ;; - - "Tools and Troubleshooting" ) - configurator_troubleshooting_tools_dialog - ;; - - "Reset" ) - configurator_reset_dialog + "RetroDECK"*"Changelog" ) + local version=$(echo "$choice" | sed 's/^RetroDECK \(.*\) Changelog$/\1/') + changelog_dialog "$version" ;; esac + + configurator_about_retrodeck_dialog +} + +configurator_developer_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - Developer Options" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Description" \ + "Change Multi-user mode" "Enable or disable multi-user support" \ + "Change Update Channel" "Change between normal and cooker builds" \ + "Browse the Wiki" "Browse the RetroDECK wiki online" \ + "USB Import" "Prepare a USB device for ROMs or import an existing collection" \ + "Install RetroDECK Starter Pack" "Install the optional RetroDECK starter pack" ) + + case $choice in + + "Change Multi-user mode" ) + configurator_retrodeck_multiuser_dialog + ;; + + "Change Update Channel" ) + configurator_online_update_channel_dialog + ;; + + "Browse the Wiki" ) + xdg-open "https://github.com/XargonWan/RetroDECK/wiki" + configurator_developer_dialog + ;; + + "USB Import" ) + configurator_usb_import_dialog + ;; + + "Install RetroDECK Starter Pack" ) + if [[ $(configurator_generic_question_dialog "Install: RetroDECK Starter Pack" "The RetroDECK creators have put together a collection of classic retro games you might enjoy!\n\nWould you like to have them automatically added to your library?") == "true" ]]; then + install_retrodeck_starterpack + fi + configurator_developer_dialog + ;; + + "" ) # No selection made or Back button clicked + configurator_welcome_dialog + ;; + esac +} + +configurator_retrodeck_multiuser_dialog() { + if [[ $(get_setting_value $rd_conf "multi_user_mode" retrodeck "options") == "true" ]]; then + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroDECK Multi-user Support" \ + --text="Multi-user support is current enabled. Do you want to disable it?\n\nIf there are more than one user configured,\nyou will be given a choice of which to use as the single RetroDECK user.\n\nThis users files will be moved to the default locations.\n\nOther users files will remain in the mutli-user-data folder.\n" + + if [ $? == 0 ] # User clicked "Yes" + then + multi_user_disable_multi_user_mode + else # User clicked "Cancel" + configurator_developer_dialog + fi + else + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroDECK Multi-user support" \ + --text="Multi-user support is current disabled. Do you want to enable it?\n\nThe current users saves and states will be backed up and then moved to the \"retrodeck/multi-user-data\" folder.\nAdditional users will automatically be stored in their own folder here as they are added." + + if [ $? == 0 ] + then + multi_user_enable_multi_user_mode + else + configurator_developer_dialog + fi + fi +} + +configurator_online_update_channel_dialog() { + if [[ $(get_setting_value $rd_conf "update_repo" retrodeck "options") == "RetroDECK" ]]; then + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroDECK Change Update Branch" \ + --text="You are currently on the production branch of RetroDECK updates. Would you like to switch to the cooker branch?\n\nAfter installing a cooker build, you may need to remove the \"stable\" branch install of RetroDECK to avoid overlap." + + if [ $? == 0 ] # User clicked "Yes" + then + set_setting_value $rd_conf "update_repo" "RetroDECK-cooker" retrodeck "options" + else # User clicked "Cancel" + configurator_developer_dialog + fi + else + zenity --question \ + --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator - RetroDECK Change Update Branch" \ + --text="You are currently on the cooker branch of RetroDECK updates. Would you like to switch to the production branch?\n\nAfter installing a production build, you may need to remove the \"cooker\" branch install of RetroDECK to avoid overlap." + + if [ $? == 0 ] # User clicked "Yes" + then + set_setting_value $rd_conf "update_repo" "RetroDECK" retrodeck "options" + else # User clicked "Cancel" + configurator_developer_dialog + fi + fi +} + +configurator_usb_import_dialog() { + choice=$(zenity --list --title="RetroDECK Configurator Utility - Developer Options" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --column="Choice" --column="Description" \ + "Prepare USB device" "Create ROM folders on a selected USB device" \ + "Import from USB" "Import collection from a previously prepared device" ) + + case $choice in + + "Prepare USB device" ) + external_devices=() + + while read -r size device_path; do + device_name=$(basename "$device_path") + external_devices=("${external_devices[@]}" "$device_name" "$size" "$device_path") + done < <(df --output=size,target | grep media | grep -v $default_sd | awk '{$1=$1;print}') + + if [[ "${#external_devices[@]}" -gt 0 ]]; then + choice=$(zenity --list --title="RetroDECK Configurator Utility - USB Migration Tool" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --hide-column=3 --print-column=3 \ + --column "Device Name" \ + --column "Device Size" \ + --column "path" \ + "${external_devices[@]}") + + if [[ ! -z "$choice" ]]; then + emulationstation --home "$choice" --create-system-dirs + rm -rf "$choice/.emulationstation" # Cleanup unnecessary folder + fi + else + configurator_generic_dialog "RetroDeck Configurator - USB Import" "There were no USB devices found." + fi + configurator_usb_import_dialog + ;; + + "Import from USB" ) + external_devices=() + + while read -r size device_path; do + if [[ -d "$device_path/ROMs" ]]; then + device_name=$(basename "$device_path") + external_devices=("${external_devices[@]}" "$device_name" "$size" "$device_path") + fi + done < <(df --output=size,target | grep media | grep -v $default_sd | awk '{$1=$1;print}') + + if [[ "${#external_devices[@]}" -gt 0 ]]; then + choice=$(zenity --list --title="RetroDECK Configurator Utility - USB Migration Tool" --cancel-label="Back" \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ + --hide-column=3 --print-column=3 \ + --column "Device Name" \ + --column "Device Size" \ + --column "path" \ + "${external_devices[@]}") + + if [[ ! -z "$choice" ]]; then + if [[ $(verify_space "$choice/ROMs" "$roms_folder") == "false" ]]; then + if [[ $(configurator_generic_question_dialog "RetroDECK Configurator Utility - USB Migration Tool" "You MAY not have enough free space to import this ROM library.\n\nThis utility only imports new additions from the USB device, so if there are a lot of the same ROMs in both locations you are likely going to be fine\nbut we are not able to verify how much data will be transferred before it happens.\n\nIf you are unsure, please verify your available free space before continuing.\n\nDo you want to continue now?") == "true" ]]; then + ( + rsync -a --mkpath "$choice/ROMs/"* "$roms_folder" + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - USB Import In Progress" + configurator_generic_dialog "RetroDECK Configurator - USB Migration Tool" "The import process is complete!" + fi + else + ( + rsync -a --mkpath "$choice/ROMs/"* "$roms_folder" + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - USB Import In Progress" + configurator_generic_dialog "RetroDECK Configurator - USB Migration Tool" "The import process is complete!" + fi + fi + else + configurator_generic_dialog "RetroDeck Configurator - USB Import" "There were no USB devices found with an importable folder." + fi + configurator_usb_import_dialog + ;; + + "" ) # No selection made or Back button clicked + configurator_developer_dialog + ;; + esac + } # START THE CONFIGURATOR -configurator_welcome_dialog \ No newline at end of file +configurator_welcome_dialog diff --git a/tools/retrodeck_function_wrapper.sh b/tools/retrodeck_function_wrapper.sh new file mode 100644 index 00000000..98148ab8 --- /dev/null +++ b/tools/retrodeck_function_wrapper.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# This wrapper will run a single RetroDECK function with any number of arguments +# USAGE: /bin/bash retrodeck_function_wrapper.sh ... + +source /app/libexec/global.sh + +# Check if a function was specified +if [[ $# -lt 1 ]]; then + echo "Usage: $0 function_name [args...]" + exit 1 +fi + +# Get the function name and remove it from the list of arguments +function_name="$1" +shift + +# Check if the function exists +if ! declare -f "$function_name" >/dev/null 2>&1; then + echo "Function '$function_name' not found" + exit 1 +fi + +# Call the function with any remaining arguments +"$function_name" "$@"