Compare commits

...

687 Commits

Author SHA1 Message Date
Logan McNaughton 97a8b63c9c fix disconnect (#1096) 2026-06-16 16:46:57 +00:00
Logan McNaughton d6d0b66078 bump version (#1095) 2026-06-16 16:41:13 +00:00
Logan McNaughton b173598320 reset timeout (#1094) 2026-06-16 14:45:04 +00:00
Logan McNaughton f211eede3b retry socket creation (#1093)
* retry sockey creation

* more

* more

* more

* more
2026-06-16 14:22:53 +00:00
Logan McNaughton b123ed9fa3 input delay cannot be less than 1 (#1092) 2026-06-16 14:02:02 +00:00
Logan McNaughton 2b0d8e5423 skip save states (#1091)
* skip save states

* more
2026-06-16 13:34:18 +00:00
Logan McNaughton 49b8024fbe Revert translation changes (#1090)
* revert translation changes

* more
2026-06-16 13:05:58 +00:00
Logan McNaughton be987e1434 don't spam errors (#1089) 2026-06-16 12:58:16 +00:00
Logan McNaughton 27e2b89fcf re-arrange netplay setup (#1088)
* re-arrange netplay setup

* more

* more

* more

* more

* more

* more

* more

* more
2026-06-16 12:48:31 +00:00
Logan McNaughton c261a746a3 enable rollback (#1087)
* enable rollback

* more
2026-06-16 10:43:50 +00:00
Logan McNaughton c290e60af1 put tokio runtime in dedicated thread (#1086)
* put tokio runtime in dedicated thread

* more

* more

* more

* more
2026-06-16 09:33:27 +00:00
Logan McNaughton 19142a30c6 use unbounded channel (#1084)
* use unbounded channel

* more
2026-06-15 17:44:20 +00:00
Logan McNaughton 2ca317d742 put rec back (#1083) 2026-06-15 15:56:53 +00:00
Logan McNaughton 45963aeea5 Fix ping recommendation (#1082)
* don't block tokio

* more

* more

* more

* more

* more
2026-06-15 15:29:51 +00:00
Logan McNaughton 4929f2cc51 remove highest ping (#1081) 2026-06-15 13:02:29 +00:00
Logan McNaughton 90e51f5f09 setup callbacks at start (#1080)
* setup callbacks at start

* more

* more
2026-06-15 09:44:33 +00:00
Logan McNaughton 9b7aeccd48 close window on user request (#1079)
* close window on user request

* more

* more

* more
2026-06-15 06:53:54 +00:00
Logan McNaughton 10d55bd25c move netplay init (#1078)
* move netplay init

* more
2026-06-14 20:36:54 +00:00
Logan McNaughton 16224cd5a6 use spinbox for latency (#1077)
* use spinbox for latency

* more

* more
2026-06-14 18:28:36 +00:00
Logan McNaughton d62d4c852a Increase timeout duration from 2 to 3 seconds (#1075) 2026-06-14 10:50:35 +00:00
Logan McNaughton 6d6349c79d Increase timeout duration from 2 to 3 seconds (#1074) 2026-06-14 08:27:11 +00:00
Logan McNaughton 9d2eec1732 bump version (#1073) 2026-06-14 06:53:05 +00:00
Logan McNaughton d6da1656b8 clean up ICE config (#1072) 2026-06-13 17:29:36 +00:00
Logan McNaughton ae7bac65d5 use custom ICE server config (#1071)
* use custom ICE server config

* more

* more

* more

* more

* more

* more
2026-06-13 16:28:33 +00:00
Logan McNaughton 99c4d6dff8 average top 3 values (#1070) 2026-06-13 13:07:10 +00:00
Logan McNaughton 74600b4b25 pump sdl events before callbacks (#1069) 2026-06-13 13:00:12 +00:00
Logan McNaughton 6cae2ed3ac dont use usize in netplay messages (#1068) 2026-06-13 09:55:12 +00:00
Logan McNaughton 611b56186d update recommendation formula (#1067)
* update recommendation formula

* more
2026-06-13 09:14:43 +00:00
Logan McNaughton dfa673e6e9 add note about input delay (#1066)
* add note about input delay

* more
2026-06-13 08:00:29 +00:00
Logan McNaughton be74e3358a Use mpsc instead of mutex (#1065)
* use mpsc

* more

* more

* more
2026-06-12 14:16:06 +00:00
Logan McNaughton 4cc85d595f pass channel to ggrs (#1064)
* pass channel to ggrs

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2026-06-12 13:34:21 +00:00
Logan McNaughton b2d7a12033 wait for mesh (#1063)
* wait for mesh

* more

* more
2026-06-12 07:02:53 +00:00
Logan McNaughton 65cffbba0c cap recommendation (#1062) 2026-06-12 05:36:56 +00:00
Logan McNaughton 5f8e3b9760 run netplay_close on window close (#1061)
* run netplay_close on window close

* more
2026-06-11 19:16:06 +00:00
Logan McNaughton 397a15349c handle close messages (#1060) 2026-06-11 12:53:00 +00:00
Logan McNaughton 235a4af0a9 check number of peers (#1059) 2026-06-11 07:38:05 +00:00
Logan McNaughton b171d48f87 print errors (#1058) 2026-06-11 05:36:00 +00:00
Logan McNaughton bfeba94e20 show error (#1057) 2026-06-11 05:29:28 +00:00
Logan McNaughton aa0bde0999 use tls-vendored (#1056) 2026-06-11 05:16:13 +00:00
Logan McNaughton 72e4a6b94a early rollback code (#1054)
* some rollback test

* more
2026-06-10 15:09:07 +00:00
Logan McNaughton 88f00f5638 clean up if statement (#1053) 2026-06-10 12:07:10 +00:00
Logan McNaughton db21800d9f move rewind check (#1051)
* move rewind check

* more
2026-06-10 10:54:39 +00:00
Logan McNaughton 4a63f469bf update VI on V_START (#1050)
* update VI on V_START

* more

* more

* more

* more
2026-06-10 08:55:51 +00:00
Logan McNaughton 810852997a improve ping loop (#1049) 2026-06-09 20:27:12 +00:00
Logan McNaughton 02d53beeac bump ver (#1048) 2026-06-09 17:11:49 +00:00
Logan McNaughton d589d8bac2 improve loop management (#1047)
* improve loop management

* more
2026-06-09 16:56:56 +00:00
Logan McNaughton 0deb1d11fc fix some netplay state (#1046) 2026-06-09 16:09:11 +00:00
Logan McNaughton 6cc6153abb improve wait room (#1045) 2026-06-09 14:47:16 +00:00
Logan McNaughton af163dac62 Fixed input delay (#1044)
* disable rollback

* more

* more

* more

* more

* more

* more
2026-06-09 14:10:49 +00:00
Logan McNaughton 8c4be03ab7 Revert "move netplay poll (#1042)" (#1043)
This reverts commit fce57f8ee2.
2026-06-09 05:21:36 +00:00
Logan McNaughton fce57f8ee2 move netplay poll (#1042) 2026-06-08 19:19:12 +00:00
Logan McNaughton d48423da77 cargo update (#1040)
* cargo update

* add cmake for mac

* more
2026-06-08 14:28:51 +00:00
Logan McNaughton f691578698 use idle (#1039) 2026-06-08 13:23:22 +00:00
Logan McNaughton 42a4a46dd9 Fix formatting for device information in bug report (#1038)
Updated formatting for CPU and GPU fields in bug report template.
2026-06-08 08:53:20 +00:00
Logan McNaughton e1d715bc38 state updates (#1036)
* state updates

* more
2026-06-08 08:40:58 +00:00
Logan McNaughton 4285290452 update issue template (#1037) 2026-06-08 07:32:20 +00:00
Logan McNaughton d79834eb50 add to rdp state (#1035)
* add to rdp state

* more

* more
2026-06-07 20:31:26 +00:00
Logan McNaughton 1244706b6e update issue template (#1034) 2026-06-07 18:43:58 +00:00
Logan McNaughton a1a7699516 use check_framebuffers (#1031) 2026-06-07 15:10:49 +00:00
Logan McNaughton 577741907f move speed limiter out of save state (#1030) 2026-06-07 09:55:18 +00:00
Logan McNaughton ba35935d2e Update issue templates (#1029) 2026-06-07 08:44:52 +00:00
Logan McNaughton a7df8d837f don't count FPS during rollback (#1027) 2026-06-07 07:28:09 +00:00
Logan McNaughton 820c577f5f use tokio::spawn (#1026) 2026-06-07 06:21:16 +00:00
Logan McNaughton 8b3a1a40f2 improve tokio setup (#1024)
* improve tokio setup

* more

* more

* Revert "more"

This reverts commit e0e1db4482.

* more

* more
2026-06-06 20:44:30 +00:00
Logan McNaughton 21238c8e41 cleanup if statement (#1023) 2026-06-06 19:20:53 +00:00
Logan McNaughton 73f145a35c Increase ping sample size from 10 to 12 (#1022) 2026-06-06 13:57:53 +00:00
Logan McNaughton 3184305c41 increase disconnect timeout (#1020) 2026-06-06 12:42:13 +00:00
Logan McNaughton 06dc40fd3e change netplay auth (#1019) 2026-06-06 12:22:23 +00:00
Logan McNaughton c7ac333cb7 fix ping calc (#1018) 2026-06-06 09:30:36 +00:00
Logan McNaughton 1d6e415422 use wss (#1017)
* use wss

* more
2026-06-06 09:06:40 +00:00
Logan McNaughton c89c5d1cc3 increase disconnect timeout (#1016)
* increase disconnect timeout

* more
2026-06-06 06:22:52 +00:00
Logan McNaughton 19dc966abd use different rooms for lobby and game (#1009) 2026-06-05 21:35:59 +00:00
Logan McNaughton 077c1f439c is_system_pal (#1007) 2026-06-05 17:21:29 +00:00
Logan McNaughton 9140138843 Don't render frame during roll forward (#1006)
* no update check on android

* more

* more

* more

* more

* more
2026-06-05 15:37:56 +00:00
Logan McNaughton 618e3a32f2 netplay error checking (#1005)
* netplay error checking

* more

* more

* more

* more

* more

* more

* more

* more
2026-06-05 12:16:01 +00:00
Logan McNaughton 681f8670f5 GGRS netplay (#1004)
* update netplay

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2026-06-05 07:43:31 +00:00
Logan McNaughton 0a44124c20 process savestates on swap buffer (#1003) 2026-06-01 20:30:31 +00:00
Logan McNaughton eb64a9ad43 switch idle command (#1002)
* switch idle command

* more
2026-06-01 11:43:39 +00:00
Logan McNaughton 5a5ff40efc set_rdram should not be needed (#1001)
* set_rdram should not be needed

* more
2026-06-01 09:07:37 +00:00
Connor Welsh cd6726d451 set application ID (#998) 2026-05-31 21:05:26 +00:00
Logan McNaughton cbc973a559 idle RDP before load state (#1000)
* idle RDP before load state

* more
2026-05-31 20:25:28 +00:00
Logan McNaughton d968983ceb Savestate tweaks (#999)
* move savestate processing

* fix stack overflow

* more

* more
2026-05-31 19:29:28 +00:00
Logan McNaughton 5175d50aa8 save video state before cloning device (#997) 2026-05-31 17:49:07 +00:00
Logan McNaughton e25818b451 keep static device intact (#996) 2026-05-31 16:22:50 +00:00
Logan McNaughton 4453e66bcf Improve state load time (#995)
* load state speed improvements

* more

* more

* more
2026-05-31 14:40:40 +00:00
Logan McNaughton 19432f33ba use hashmap for lut (#994) 2026-05-31 07:45:02 +00:00
Logan McNaughton 5c7170268e Don't store luts in savestate (#993)
* use hashmap for tlb

* more

* more

* more

* more

* more
2026-05-31 06:37:11 +00:00
Logan McNaughton 79d2c023e6 change message length (#992) 2026-05-30 19:16:15 +00:00
Logan McNaughton 864175fae6 Rewind (#991)
* rewind

* more
2026-05-30 19:00:33 +00:00
Logan McNaughton 7fc2412c9c move state to new thread (#990)
* move state to new thread

* more

* more
2026-05-30 12:26:38 +00:00
Logan McNaughton 3fdbe9a4f7 implement default for Ui (#989)
* implement default for Ui

* more
2026-05-30 11:36:32 +00:00
Logan McNaughton 399b5d65e5 Fix MBC3 latch (#987)
* Fix MBC3 latch

* more
2026-05-30 07:43:22 +00:00
Logan McNaughton 24e5a3fac4 move joystick update (#985) 2026-05-29 14:51:27 +00:00
Logan McNaughton 31420b6777 move state compression into thread (#984) 2026-05-29 13:01:45 +00:00
Logan McNaughton 7379484932 add load state func for audio (#983)
* add load state func for audio

* more

* more
2026-05-29 08:06:46 +00:00
Logan McNaughton d36ce10ab3 remove nested listview for cheats (#982) 2026-05-29 05:57:57 +00:00
Logan McNaughton 57807f09c8 update NDK (#981)
* update NDK

* Add ANDROID_NDK_ROOT environment variable
2026-05-29 05:42:41 +00:00
Logan McNaughton 0745d75c2f Add Android APK download link to README (#980) 2026-05-28 20:29:10 +00:00
Logan McNaughton a78f47ecfe fix download folder (#979) 2026-05-28 19:53:59 +00:00
Logan McNaughton 1df705c4f9 fix keystore path (#978) 2026-05-28 19:17:07 +00:00
Logan McNaughton f7ed2c5273 move itch upload (#977) 2026-05-28 18:33:11 +00:00
Logan McNaughton 8bd4c936f8 bump rust (#976) 2026-05-28 18:09:08 +00:00
Logan McNaughton 34e55d9cb5 fix small speed limiter bug (#975)
* fix small speed limiter bug

* more
2026-05-28 13:54:42 +00:00
Logan McNaughton 8a8596a66b clippy fixes (#974) 2026-05-28 13:25:23 +00:00
Logan McNaughton 40ab4ceb2b fix name of apk (#973) 2026-05-28 13:10:39 +00:00
Logan McNaughton a8dbbba6e3 update sessions async (#972)
* update sessions async

* more
2026-05-28 12:58:26 +00:00
Logan McNaughton 5b0cc0130e minSdk to 33 for android (#971) 2026-05-28 11:24:49 +00:00
Logan McNaughton bb32a0a8ba update android release settings (#970)
* update android release settings

* more

* more

* more

* more
2026-05-28 11:04:52 +00:00
Logan McNaughton e23894c2e6 make usb handle same as discord (#969) 2026-05-28 10:04:44 +00:00
Logan McNaughton e0efa80f44 Don't reload RDP processor (#968)
* change rdram pointer

* more

* more

* more

* more

* more

* more

* more
2026-05-28 09:56:35 +00:00
Logan McNaughton cb734f8df1 fix overflow in load state (#967)
* fix overflow in load state

* more
2026-05-28 09:21:58 +00:00
Logan McNaughton 3197d415e0 timeout handles (#966)
* timeout handles

* more
2026-05-28 09:12:40 +00:00
Logan McNaughton 9dfc42c723 use setSustainedPerformanceMode (#965)
* use setSustainedPerformanceMode

* more
2026-05-27 18:45:43 +00:00
Logan McNaughton 14b973ec5f remove event watch on close (#964) 2026-05-27 16:24:25 +00:00
Logan McNaughton 81a3cea9c7 fix ra init on android (#963)
* fix ra init on android

* more

* more
2026-05-27 13:39:37 +00:00
Logan McNaughton dc6138076f use const for unknown name (#962) 2026-05-27 12:23:43 +00:00
Logan McNaughton a9f7285c0f auto set version (#961) 2026-05-27 12:11:02 +00:00
Logan McNaughton 7106a461b5 Update android manifest (#960)
* Update android manifest

* more
2026-05-27 11:17:27 +00:00
Logan McNaughton 69e3ebcc26 match controllers on android (#959)
* match controllers on android

* more

* more
2026-05-27 10:03:36 +00:00
Logan McNaughton f80f0f5f02 handle pause on android (#958) 2026-05-27 08:11:48 +00:00
Logan McNaughton a447bc8104 pass all args (#957) 2026-05-26 20:43:21 +00:00
Logan McNaughton 32f54f157b Run rom android (#956)
* run rom android

* more

* more

* more

* more

* more

* more

* more

* more
2026-05-26 18:09:57 +00:00
Logan McNaughton 9c9f1a3000 connect to native code (#955)
* connect to native code

* more

* more

* more

* more

* more

* more

* more

* more
2026-05-26 13:03:00 +00:00
Logan McNaughton 9d7b13d4c9 include sdl libs for android (#954) 2026-05-26 07:39:51 +00:00
Logan McNaughton 60cbf59ddf add intent for input profile (#952)
* add intent for input profile

* more

* more
2026-05-25 19:35:04 +00:00
Logan McNaughton 6f00e630e0 fix order in activity result (#951)
* fix order in activity result

* more
2026-05-25 18:37:12 +00:00
Logan McNaughton 7599f71c17 add sdl for android 2026-05-25 19:59:24 +02:00
Logan McNaughton 411cb0efa7 remove dialog windows (#948) 2026-05-25 09:31:33 +00:00
Logan McNaughton 00ec554783 wait a little longer for broadcast response (#947) 2026-05-23 18:57:44 +00:00
Logan McNaughton d25d3a460a save settings on android (#946)
* save settings on android

* more

* more
2026-05-23 13:44:14 +00:00
Logan McNaughton 8eec90c35c remove focusscope (#945) 2026-05-23 09:36:33 +00:00
Logan McNaughton a596e01ef2 clean up controller detection (#943) 2026-05-23 08:19:44 +00:00
Logan McNaughton 43ebc37f87 fix RA on android (#942) 2026-05-23 07:31:39 +00:00
Logan McNaughton 6223f10fae improve jni paths (#941) 2026-05-23 07:04:23 +00:00
Logan McNaughton c16e927288 use native-tls (#940)
* use native-tls

* Add linker argument for aarch64 macOS target

* Update linker settings in config.toml

Remove linker configuration for macOS and consolidate for Windows.

* Revert "Update linker settings in config.toml"

This reverts commit 33c8da07bf.

* more
2026-05-23 05:34:01 +00:00
Logan McNaughton 6ef33204e8 remove duplicate code (#938) 2026-05-22 17:49:15 +00:00
Logan McNaughton 3f9d62248a rom reading on android (#937) 2026-05-22 14:42:08 +00:00
Logan McNaughton 18fbd8e56c Remove AndroidX usage declaration (#936)
Removed AndroidX usage declaration from properties.
2026-05-22 13:50:50 +00:00
Logan McNaughton e5c74d05aa Improve some dialogs (#935)
* improve dialogs

* more
2026-05-22 10:43:37 +00:00
Logan McNaughton 82c22dc18e check file exists on android (#934)
* check file exists on android

* more

* more

* more
2026-05-22 07:43:20 +00:00
Logan McNaughton 66a74b5693 keep file permissions (#933) 2026-05-22 06:05:59 +00:00
Logan McNaughton 367b8bdb5c Handle intent results (#932)
* Handle intent results

* more

* more

* more

* more
2026-05-21 20:06:55 +00:00
Logan McNaughton b865c88d99 Use Gradle (#931)
* remove cargo-apk

* add gradle

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* Revert "more"

This reverts commit 19395aac13.

* more

* more

* more

* more

* more

* more

* more

* more

* more
2026-05-21 16:16:12 +00:00
Logan McNaughton 53b39010a0 no vru on android (#930)
* no vru on android

* more

* more
2026-05-21 05:57:09 +00:00
Logan McNaughton 7ad8bed7df Netplay window adjustments (#929)
* adjust netplay windows

* more

* more
2026-05-20 15:01:31 +00:00
Logan McNaughton 01ea4c422a hold a ref to AndroidApp (#928)
* hold a ref to AndroidApp

* more

* more

* more

* more

* more
2026-05-20 14:16:17 +00:00
Logan McNaughton 7eb090a622 fix some popups (#927) 2026-05-20 10:43:24 +00:00
Logan McNaughton 48956dc016 move some android guards around (#926)
* move some android guards around

* more
2026-05-20 09:41:12 +00:00
Logan McNaughton 2eb8a0dc1d move save_settings into callback (#925) 2026-05-20 08:34:33 +00:00
Logan McNaughton c53ffebece only show window in safe area (#924) 2026-05-20 07:47:34 +00:00
Logan McNaughton 06d0aa53bc enable ui dragging (#923) 2026-05-20 07:14:43 +00:00
Logan McNaughton 28b1424357 don't hold android app reference (#922)
* don't hold android app reference

* more

* more
2026-05-20 06:57:56 +00:00
Logan McNaughton e852439b6a Fix open on Android (#921)
* fix open

* more

* more

* mroe
2026-05-19 19:56:36 +00:00
Logan McNaughton 5850c514f2 Populate controller list on android (#920)
* list controllers in UI for android

* more

* more
2026-05-19 17:30:09 +00:00
Logan McNaughton 11a49fd687 open crate only for gui (#919) 2026-05-19 13:36:48 +00:00
Logan McNaughton be9ba1366e move some android guards (#917)
* move some android guards

* more
2026-05-19 12:10:25 +00:00
Logan McNaughton dbe67f1034 More UI tweaks (#916)
* More UI tweaks

* more

* more
2026-05-19 09:50:01 +00:00
Logan McNaughton 7eecfa3275 use robius open (#915)
* use robius open

* more
2026-05-19 08:50:42 +00:00
Logan McNaughton e1b4039a52 dont use open on android (#914) 2026-05-19 07:43:55 +00:00
Logan McNaughton 9f2cfb5a9f read RA settings from CLI (#913)
* read RA settings from CLI

* more
2026-05-19 07:20:08 +00:00
Logan McNaughton 41e66825d0 Update UI (#911)
* rework UI

* more

* more

* more
2026-05-19 06:50:00 +00:00
Logan McNaughton a78393ca91 More basic Android stuff (#910)
* enable tokio

* data dirs

* jni pointer

* more

* more

* more

* more

* more

* more

* more

* more
2026-05-18 15:08:01 +00:00
Logan McNaughton 8dde32cb21 fix label (#909) 2026-05-17 19:53:10 +00:00
Logan McNaughton 1538513fb7 add apk icon (#908)
* add apk icon

* more

* more

* more

* more
2026-05-17 18:07:57 +00:00
Logan McNaughton 30c8aef24e move netplay_id (#907) 2026-05-17 16:44:21 +00:00
Logan McNaughton 8daa65d93e only use --release for tags (#906)
* only use --release for tags

* more

* more

* more
2026-05-17 16:14:48 +00:00
Logan McNaughton df5fcae69b Remove Android SDK setup from build.yml (#905) 2026-05-17 15:26:13 +00:00
Logan McNaughton e3b63908de show controller during config (#904) 2026-05-17 14:43:37 +00:00
Logan McNaughton 8c53de9cc7 Don't set NDK version (#903)
* Set ANDROID_NDK_ROOT

* Update build.yml
2026-05-17 14:11:29 +00:00
Logan McNaughton 78cb758a26 Add LIBCLANG_PATH to build workflow (#902) 2026-05-17 13:40:14 +00:00
Logan McNaughton 8fea9ef212 update ndk (#901) 2026-05-17 09:51:50 +00:00
Logan McNaughton 38fdc24a49 Use cargo-ndk for env (#900)
* Use cargo-ndk for env

* Update build.yml
2026-05-17 09:00:57 +00:00
Logan McNaughton 069c64ab08 build apk (#899)
* build apk

* more

* more

* more

* more

* more

* more

* more

* more

* more
2026-05-16 20:09:19 +00:00
Logan McNaughton 2005fb1421 don't update window when minimized (#898) 2026-05-16 18:46:00 +00:00
Logan McNaughton 04b15fee2f fail early if cheats cannot be read (#897) 2026-05-15 18:05:20 +00:00
Logan McNaughton eda3dda613 error if cheats cannot be read (#896) 2026-05-15 17:44:04 +00:00
Logan McNaughton 03be98b571 build android lib (#895)
* build android lib

* more

* more

* more

* more
2026-05-15 14:10:23 +00:00
Logan McNaughton 93bf103f03 move around RA code (#894)
* move around RA code

* more

* more

* more
2026-05-15 12:36:11 +00:00
Logan McNaughton c8f485cd93 Build clib (#893)
* Build clib

* more

* more

* more

* linker

* more

* more

* more

* more

* more

* more
2026-05-15 11:18:48 +00:00
Logan McNaughton 3a301c517d shorten message (#891) 2026-05-15 06:58:19 +00:00
Logan McNaughton d17c577ccd use port 48646 for UNFloader (#890) 2026-05-14 19:55:42 +00:00
Logan McNaughton 8c331c25eb Sort translation files (#889)
* Sort translation files

* more
2026-05-14 15:16:53 +00:00
Logan McNaughton 8341ef5731 Add Discord Rich Presence (#888)
* add rich presence

* more

* more

* more

* more

* more

* more

* more

* more

* more

* update translations

* more
2026-05-14 14:30:36 +00:00
Logan McNaughton 40a29d927f shorten some messages (#887) 2026-05-14 08:34:42 +00:00
Logan McNaughton 9846c2243c fix typo in RAM name (#885) 2026-05-13 12:48:18 +00:00
Logan McNaughton c1dc4fe589 automatically attach assets to release (#884)
* automatically attach assets to release

* more
2026-05-13 08:03:15 +00:00
Logan McNaughton 06052b729b add missing newline (#881) 2026-05-12 11:55:42 +00:00
Logan McNaughton d7c912b53e Update russian translation (#880) 2026-05-12 11:16:28 +00:00
Logan McNaughton b792ebbd45 Change German translation for 'Transfer Pak' (#879) 2026-05-12 10:26:41 +00:00
Logan McNaughton e7071047e3 Add Russian translation (#878) 2026-05-12 10:22:44 +00:00
Logan McNaughton 6496288c4e don't reallocate rdram during load state (#877)
* don't reallocate rdram during load state

* more
2026-05-12 08:11:46 +00:00
Logan McNaughton 1ab8987f2d Update lint.yml to include fetch-depth option (#876)
Add fetch-depth option to checkout step in lint workflow.
2026-05-12 06:55:01 +00:00
Logan McNaughton 034b39bec5 Add Brazilian Portuguese translation (#875)
* Add Brazilian Portuguese translation"

* fix typo

* couple more fixes
2026-05-12 06:48:33 +00:00
Logan McNaughton 5368ae3d37 German translation updates (#874) 2026-05-12 05:46:04 +00:00
Logan McNaughton f963742009 put back checks for proper type of controller (#873) 2026-05-11 15:42:15 +00:00
Logan McNaughton a8ae9dbc6a Add more starter translations (#872)
* Add more starter translations

* more
2026-05-11 11:41:45 +00:00
Logan McNaughton b55a031971 Update translation readme (#871) 2026-05-11 10:26:40 +00:00
Logan McNaughton 27ffedbdee es changes (#870) 2026-05-11 05:35:22 +00:00
Logan McNaughton 493f08afaf remove some spaces from translation strings (#868) 2026-05-10 18:44:18 +00:00
Logan McNaughton 0659da24fa bundle AI generated spanish translation (#867)
* bundle AI generated spanish translation

* more

* more

* more

* more

* more

* more

* more
2026-05-10 14:24:34 +00:00
Logan McNaughton 5596dad111 improve some translation wrappers (#866) 2026-05-10 13:08:13 +00:00
Logan McNaughton a5b7561c51 clean up read_cart_word (#865)
* clean up read_cart_word

* more

* more
2026-05-10 09:28:48 +00:00
Logan McNaughton fe23e4bad9 put default profile first (#864) 2026-05-09 18:58:29 +00:00
Logan McNaughton 5b3b8265e5 set offset using let match (#863) 2026-05-09 18:02:18 +00:00
Logan McNaughton a7cbf866e8 pump events before flush (#862) 2026-05-09 17:05:38 +00:00
Logan McNaughton 7fae21d7ac Use SDL_GetJoystickAxisInitialState (#858)
* add initial_state to input profile

* more

* more

* more

* more

* more

* more

* more

* more

* more
2026-05-09 13:47:55 +00:00
Logan McNaughton 55bf63210a Don't save timestamp to GB save (#860)
* use real time for GB RTC

* more

* more

* more
2026-05-09 13:12:20 +00:00
Logan McNaughton 2b72c24dbe GB RTC saving (#857)
* GB RTC saving

* GB RTC saving

* GB RTC saving

* GB RTC saving

* GB RTC saving

* GB RTC saving

* GB RTC saving

* GB RTC saving

* GB RTC saving

* more
2026-05-09 07:57:25 +00:00
Logan McNaughton 455365a71d move sdl hint (#856) 2026-05-09 06:35:00 +00:00
Logan McNaughton 1f6b575440 move gb time into variable (#855)
* move gb time into variable

* more
2026-05-08 20:05:25 +00:00
Logan McNaughton 86304018dd remove un-needed window() (#854)
* remove un-needed window()

* more
2026-05-08 14:36:23 +00:00
Logan McNaughton c44ab9602c GBC RTC support (#853)
* GBC RTC support

* more

* more

* more

* more

* more

* more
2026-05-08 14:03:13 +00:00
Logan McNaughton 13be114823 look for bin in compressed files (#851)
* look for bin in compressed files

* more

* more

* more

* more

* more

* more

* more
2026-05-08 07:36:16 +00:00
Logan McNaughton f793eb06be bump to 1.1.20 (#849) 2026-05-07 06:49:49 +00:00
Logan McNaughton 61532f7b45 move sdl init (#848)
* move sdl init

* more

* more

* more

* more
2026-05-06 20:09:21 +00:00
Logan McNaughton a69a74bf37 cleanup some if statements (#846) 2026-05-06 11:57:04 +00:00
Logan McNaughton 6d4d5468f9 save rom dir (#845) 2026-05-06 11:17:28 +00:00
Logan McNaughton 7015d44da7 fix ghost image with SSAA (#844) 2026-05-06 11:05:48 +00:00
Logan McNaughton 172867527b add option for SSAA (#843) 2026-05-06 09:52:13 +00:00
Logan McNaughton 323e8cf1f0 move sdl quit calls (#842)
* move sdl quit calls

* more
2026-05-06 08:59:05 +00:00
Logan McNaughton 172d10d7cb update controllers when clicking on controller config (#841)
* update controllers when clicking on controller config

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2026-05-06 07:44:39 +00:00
Logan McNaughton 945d456f9c disable fps display on close (#839)
* disable fps display on close

* another check
2026-05-04 12:52:25 +00:00
Logan McNaughton a4f635265b guards around postcard (#838) 2026-05-04 11:52:46 +00:00
Logan McNaughton f45f951af8 fast forward controller hotkey (#837)
* fast forward controller hotkey

* more
2026-05-04 08:59:20 +00:00
Logan McNaughton 883852a828 more error messages (#836) 2026-05-04 08:36:50 +00:00
Logan McNaughton 90052257bb Use eprintln (#835)
* use eprintln

* more

* more
2026-05-04 07:49:38 +00:00
Logan McNaughton 1184d3d77a better error message (#834) 2026-05-03 14:22:50 +00:00
Logan McNaughton 12280bb35b more crash protection (#832)
* more crash protection

* more

* more
2026-05-03 14:02:17 +00:00
Logan McNaughton 17f3f2dc63 more crash protection (#833)
* more crash protection

* more
2026-05-03 13:59:59 +00:00
Logan McNaughton 3d6ca17a9a more crash protection (#831) 2026-05-03 13:11:08 +00:00
Logan McNaughton 01863a70a8 avoid some controller crashes (#830)
* avoid some controller crashes

* more

* more
2026-05-03 07:50:13 +00:00
Logan McNaughton 801cc1bc74 cargo update (#827) 2026-05-03 05:49:27 +00:00
Logan McNaughton 9ed8d835c0 add merge_group to workflow (#828) 2026-05-03 05:49:07 +00:00
Logan McNaughton b754891d45 ensure audio is playing (#826)
* ensure audio is playing

* more
2026-05-03 07:18:28 +02:00
Logan McNaughton 9cc6d48493 ensure file dialog order for transferpak (#824)
* ensure file dialog order for transferpak

* more
2026-05-02 22:13:59 +02:00
Logan McNaughton b865538d6e avoid panic with invalid cheat (#823)
* avoid panic with invalid cheat

* more

* more
2026-05-02 17:59:51 +02:00
Logan McNaughton abacaddf8a avoid crash on missing GB files (#822)
* avoid crash on missing GB files

* more

* more
2026-05-02 17:06:56 +02:00
Logan McNaughton b86c5daa2c add controller hotkeys (#821)
* add controller hotkeys

* more

* more

* more

* more

* more

* more
2026-05-02 09:04:42 +02:00
Logan McNaughton df8d7d9ff0 allow single controller mpk files (#820) 2026-05-01 21:32:08 +02:00
Logan McNaughton 8c7d3d4893 protect against null ptr dereference (#819)
* protect against null ptr dereference

* more
2026-05-01 20:44:14 +02:00
Logan McNaughton b88f041bd8 don't check for update inside itch app (#817) 2026-05-01 17:42:07 +02:00
Logan McNaughton e860b96bd8 Controller code cleanup (#816)
* controller hotkeys

* more

* more

* more

* more

* more
2026-04-28 08:37:59 +02:00
Logan McNaughton b2ef544513 handle controller reconnection (#815) 2026-04-27 16:38:20 +02:00
dependabot[bot] ca00ee1a42 Bump apple-actions/import-codesign-certs from 6 to 7 (#814)
Bumps [apple-actions/import-codesign-certs](https://github.com/apple-actions/import-codesign-certs) from 6 to 7.
- [Release notes](https://github.com/apple-actions/import-codesign-certs/releases)
- [Commits](https://github.com/apple-actions/import-codesign-certs/compare/v6...v7)

---
updated-dependencies:
- dependency-name: apple-actions/import-codesign-certs
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 05:59:33 +02:00
Logan McNaughton 511d8461c2 add note about modifying profile (#812) 2026-04-26 17:46:12 +02:00
Logan McNaughton fe42efadfa limit frequent audio adjustments (#810) 2026-04-25 17:05:54 +02:00
Logan McNaughton c1e73320b1 adjust audio buffer management (#809)
* adjust audio buffer management

* more

* more
2026-04-25 16:05:28 +02:00
Logan McNaughton 47dd6d61b0 update setup-butler (#808) 2026-04-25 11:20:56 +02:00
Logan McNaughton 212557610b use bash shell (#807) 2026-04-25 07:53:30 +02:00
Logan McNaughton 5e6a7731f4 update to 1.1.19 (#806)
* update to 1.1.19

* more
2026-04-25 07:22:58 +02:00
Logan McNaughton 65c63dfc5d Always set user agent (#805)
* Always set user agent

* more
2026-04-25 07:15:47 +02:00
Logan McNaughton ae4e7cb01f Update download links (#804) 2026-04-24 22:12:24 +02:00
Logan McNaughton a233c72dad add itch.io link (#803) 2026-04-24 10:54:47 +02:00
Logan McNaughton b267b83248 upload to itch.io (#802) 2026-04-24 10:23:28 +02:00
Logan McNaughton 6c2ae4dc5a update mac signing command (#801) 2026-04-23 20:01:01 +02:00
Logan McNaughton 0a884e85df Fix macos sandboxing (#800)
* Fix macos sandboxing

* more

* more

* more

* more

* more

* more

* more
2026-04-23 19:32:53 +02:00
Logan McNaughton 47098f60dd use timer for message lengths (#799)
* use timer for message lengths

* more

* more

* more

* more

* more

* more
2026-04-23 18:00:15 +02:00
Logan McNaughton ca4a20f524 update cargo to v1.1.17 (#798) 2026-04-23 11:02:02 +02:00
Logan McNaughton 3b145909e8 show more detailed version in --version (#797) 2026-04-23 08:57:03 +02:00
Logan McNaughton 6eb3367f1b don't show hardcore switch if it is not enabled (#795) 2026-04-22 09:32:22 +02:00
Logan McNaughton 03f83fe917 fix git version with shallow clones (#794)
* fix git version with shallow clones

* more
2026-04-22 09:08:54 +02:00
Logan McNaughton c4771f91e0 print error to screen (#793)
* print error to screen

* mmore
2026-04-21 22:35:14 +02:00
Danny Kirkham bdd12352e1 Enable accessibility features (#791) 2026-04-21 18:23:10 +02:00
Logan McNaughton 224bd2df1d clean up RA variables (#789)
* clean up RA variables

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2026-04-21 12:57:41 +02:00
Logan McNaughton 412f928781 improve function order (#788)
* improve function order

* more
2026-04-20 22:53:42 +02:00
Logan McNaughton 779ef9fe77 update fullscreen note (#787) 2026-04-20 19:27:09 +02:00
Logan McNaughton 048d1d662f Track recent roms (#786)
* track recent roms

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2026-04-20 16:53:40 +02:00
Logan McNaughton cf3a27cecf Use switch instead of checkbox (#785) 2026-04-20 12:27:44 +02:00
Logan McNaughton b8c3556df6 cleanup loop (#784) 2026-04-20 10:34:27 +02:00
Logan McNaughton 9e337295ca don't launch game if already running (#783) 2026-04-20 10:13:15 +02:00
Logan McNaughton 8cb57811a6 make rfd optional (#782) 2026-04-20 09:27:29 +02:00
Logan McNaughton 82c02461f8 handle file dropping (#781)
* handle file dropping

* more
2026-04-20 09:11:09 +02:00
Logan McNaughton 26253b5ed7 just create config (#780) 2026-04-20 07:14:05 +02:00
Logan McNaughton f520aeab82 use tokio process (#779) 2026-04-20 07:00:39 +02:00
Logan McNaughton edb6960d4f Make Slint optional (#778)
* make slint optional

* more

* more
2026-04-19 23:15:56 +02:00
Logan McNaughton a488f0d91a fix some typos (#777) 2026-04-19 18:51:01 +02:00
Logan McNaughton 73d895a64a add vsync option (#776) 2026-04-19 18:25:36 +02:00
Logan McNaughton 805bcba249 run VRU dialog in main thread (#774)
* run VRU dialog in main thread

* more
2026-04-19 17:00:50 +02:00
Logan McNaughton 66abd14c3b add small note to netplay join (#773) 2026-04-19 14:09:27 +02:00
Logan McNaughton d856499f59 fix image positioning (#772)
* fix image positioning

* more
2026-04-19 07:57:57 +02:00
Logan McNaughton bc3dd4d39a Hotkey for onscreen FPS (#770)
* fps counter

* more
2026-04-18 21:55:37 +02:00
Logan McNaughton 5a91d09f9e improved transferpak setup (#769)
* improved transferpak setup

* more

* more

* more
2026-04-18 16:48:55 +02:00
Logan McNaughton b09f8bf891 update MACOSX_DEPLOYMENT_TARGET (#768) 2026-04-18 10:08:30 +02:00
Logan McNaughton 8ee10e40ad add provisionprofile (#767)
* add provisionprofile

* more
2026-04-18 08:02:30 +02:00
Logan McNaughton f8a7153fdd enable vsync if required (#765)
* enable vsync if required

* add note

* more

* more
2026-04-17 15:07:15 +02:00
Logan McNaughton a592d0eb84 remove uses of to_owned (#764)
* remove uses of to_owned

* more

* more
2026-04-17 09:59:32 +02:00
Logan McNaughton 28aa8ea280 use tokio::fs (#763) 2026-04-17 09:27:42 +02:00
Logan McNaughton cb87f79710 writeback GB ram files (#762) 2026-04-17 08:56:53 +02:00
Logan McNaughton be117214c3 Update README with notable features of Gopher64 (#761)
Added features list for Gopher64 emulator
2026-04-17 08:48:47 +02:00
Logan McNaughton bb056a77f4 bump version (#760) 2026-04-16 15:56:35 +02:00
Logan McNaughton d4a90155f9 Rust 1.95.0 (#759) 2026-04-16 15:21:01 +02:00
Logan McNaughton e24a9a8126 cleaner fix for MBC30 issue (#758)
* cleaner fix for MBC30 issue

* more
2026-04-16 13:31:17 +02:00
Logan McNaughton 83fab4c638 MBC30 support (#757) 2026-04-16 12:38:45 +02:00
Logan McNaughton 8196b52289 Fix MBC30 support (#756) 2026-04-16 11:56:57 +02:00
Logan McNaughton 8dadbbbf58 update slint to 1.16.0 (#755) 2026-04-16 11:09:09 +02:00
Logan McNaughton 093b39b17d Improve netplay RA guard (#752)
* remove double guard for netplay+RA

* more

* more
2026-04-15 19:00:39 +02:00
Logan McNaughton 7100750e2d show proper error on failed login (#751)
* show proper error on failed login

* more
2026-04-15 16:02:34 +02:00
Logan McNaughton 40e250386e add note about strange char* comparison (#750)
* add note about strange char* comparison

* more
2026-04-15 13:54:27 +02:00
Logan McNaughton d2e47509b2 remove unused param (#749) 2026-04-15 13:39:49 +02:00
Logan McNaughton 451d66beee video code cleanup (#748) 2026-04-15 13:25:04 +02:00
Logan McNaughton 20bad48894 store C strings in vars (#747) 2026-04-15 13:10:15 +02:00
Logan McNaughton b40ec6940f finish up RA support (#745)
* finish up RA support

* more

* capture some corner cases

* fix post data

* more

* more

* fix range

* more

* more

* more

* more

* show in-progress achievements

* more

* more

* more

* more
2026-04-15 12:57:52 +02:00
Logan McNaughton d12f16fe29 minor code cleanup (#746) 2026-04-15 12:36:21 +02:00
dependabot[bot] d061a856d2 Bump rand from 0.10.0 to 0.10.1 in the cargo group across 1 directory (#744)
Bumps the cargo group with 1 update in the / directory: [rand](https://github.com/rust-random/rand).


Updates `rand` from 0.10.0 to 0.10.1
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-random/rand/compare/0.10.0...0.10.1)

---
updated-dependencies:
- dependency-name: rand
  dependency-version: 0.10.1
  dependency-type: direct:production
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-14 07:26:44 +02:00
Logan McNaughton 7725aa2692 RA tweaks (#743)
* prevent crash

* more

* more
2026-04-13 22:38:31 +02:00
Logan McNaughton baa14de3f3 show leaderboard and challenge together (#742) 2026-04-13 21:22:36 +02:00
Logan McNaughton c14b461612 more RA (#741)
* more RA

* more

* more
2026-04-13 20:39:57 +02:00
Logan McNaughton 595089187d leaderboard tracker (#740)
* leaderboard tracker

* more

* more

* more

* more
2026-04-13 13:30:18 +02:00
Logan McNaughton c4b86eb4b1 challenge indicators (#739)
* Add Challenge Indicators

* more

* more

* use c++20

* shorten messages

* progress

* more

* more

* more

* more
2026-04-13 09:16:15 +02:00
Logan McNaughton 4240a99ad5 cache message images (#738) 2026-04-12 19:00:45 +02:00
Logan McNaughton 9d7db93c70 fix font clarity (#737) 2026-04-12 15:21:52 +02:00
Logan McNaughton 9b71d3aa0b print message for failed login (#736) 2026-04-12 12:33:11 +02:00
Logan McNaughton e8898c52fc More RA code (#733)
* implement RC_CLIENT_EVENT_SERVER_ERROR

* handle more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2026-04-12 12:10:15 +02:00
Logan McNaughton 4b5c8d03a9 use a const pointer (#732) 2026-04-11 16:35:04 +02:00
Logan McNaughton 2706f8f6a5 use sized savestate functions (#730)
* use sized savestate functions

* fix lint
2026-04-11 08:44:22 +02:00
Logan McNaughton e4391b3089 add some warning messages (#729) 2026-04-10 21:51:06 +02:00
Logan McNaughton 4b54ea279d Build on MacOS 15 (#728) 2026-04-10 20:21:12 +02:00
Logan McNaughton 9f6194d64f better startup message (#727)
* better startup message

* more
2026-04-10 07:56:18 +02:00
Logan McNaughton 8bb3179534 Improve startup messages (#726)
* improve startup messages

* more
2026-04-09 20:05:54 +02:00
Logan McNaughton 35dbd957cc reduce font size a bit (#725)
* reduce font size a bit

* remove duplicate messages
2026-04-09 17:22:26 +02:00
Logan McNaughton 125f79a0e6 show message for RA progress (#724) 2026-04-09 15:15:29 +02:00
Logan McNaughton f865ccfacd pull tags in github action (#723)
* pull tags in github action

* more detailed version

* more
2026-04-09 13:50:48 +02:00
Logan McNaughton 914798e717 more descriptive git naming (#722) 2026-04-09 13:13:56 +02:00
Logan McNaughton 406ebba93d run ra do_idle for VRU window (#721) 2026-04-09 11:31:00 +02:00
Logan McNaughton d8ec09d475 centralize hardcore check (#720) 2026-04-09 11:17:57 +02:00
Logan McNaughton a1da699580 add RA show profile button (#719)
* add RA show profile button

* lint
2026-04-09 09:37:57 +02:00
Logan McNaughton 1226052035 cleanup some cli options (#718) 2026-04-09 09:20:23 +02:00
Logan McNaughton 2917e662df better defaults for window size (#717) 2026-04-08 22:31:28 +02:00
Logan McNaughton 601713e102 RetroAchievements hardcore support (#716)
* enable hardcore mode

* more
2026-04-08 21:57:18 +02:00
Logan McNaughton 6ed53e4e9d Upload signed windows builds (#715)
* upload windows signed artifact

* more

* more

* more

* more
2026-04-08 13:09:32 +02:00
Logan McNaughton 650fd270e1 add messages for RA leaderboards (#714) 2026-04-08 09:54:08 +02:00
Logan McNaughton 54d82713ac dont check for update with flatpak (#713) 2026-04-07 19:42:07 +02:00
Logan McNaughton 11cb242ed2 sign mac bundle (#712)
* sign mac bundle

* xcrun

* use zip

* more
2026-04-07 19:31:04 +02:00
Logan McNaughton e932239a63 RetroAchievements (#710)
* retroachievements

* add rc_api_info

* disable hardcore

* clear password after login attempt

* proper check for hardcore

* more set_hardcore

* change checkbox

* add more stubs

* add more UI

* add button for RA website

* cleanup http callback
2026-04-07 08:59:03 +02:00
Logan McNaughton 5207bd4b27 remove governor crate (#709)
* remove governor crate

* more
2026-04-04 09:27:45 +02:00
Logan McNaughton d378ae187a write savestate in thread (#708) 2026-04-03 16:32:40 +02:00
Logan McNaughton e72ddf73f0 use 4 worker threads (#707) 2026-04-03 16:00:00 +02:00
Logan McNaughton 4bba36f0c3 add libpng to macos build (#706)
* add libpng to macos build

* more

* signing

* more

* more

* more
2026-04-02 14:52:16 +02:00
Logan McNaughton 20b5cf3e4d Improve MacOS opt flags (#705) 2026-04-02 08:19:32 +02:00
Logan McNaughton 973f4bb28d Create MacOS bundle (#701)
* Create MacOS bundle

* more

* more

* more

* Update framework link search path in build.rs

* Update framework link search path in build.rs

* Remove MoltenVK linking from build.rs

Removed MoltenVK framework linking from build script.

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2026-04-01 20:35:46 +02:00
Logan McNaughton de0db4b46d static link moltenvk (#700)
* static link moltenvk

* more

* more

* static freetype
2026-03-31 20:09:06 +02:00
Logan McNaughton 11d3e52779 use status vs spawn/wait (#699) 2026-03-31 19:12:06 +02:00
Logan McNaughton cef70faf1e move MACOSX_DEPLOYMENT_TARGET 2026-03-31 15:02:53 +02:00
Logan McNaughton 9b0b3e67a4 change dinput arg type 2026-03-31 13:58:56 +02:00
Logan McNaughton ebd22415cd honor setting 2026-03-31 11:40:50 +02:00
Logan McNaughton 5177aaab53 dont pass fullscreen 2026-03-31 11:38:36 +02:00
Logan McNaughton ad5dc8311a remove custom stack size (#698)
* remove custom stack size

* new command

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* config

* more

* more
2026-03-31 10:54:14 +02:00
Logan McNaughton cc538f942f use limiter clock 2026-03-30 09:20:44 +02:00
Logan McNaughton 9528473f11 use Duration for comparing time (#696) 2026-03-29 18:54:35 +02:00
Logan McNaughton 8b770cfd18 Update linux deps based on SDL wiki (#695) 2026-03-28 20:00:44 +01:00
Logan McNaughton 46cb6738a2 Use upstream sse2neon (#694)
* Use upstream sse2neon

* update commit
2026-03-28 19:24:53 +01:00
Logan McNaughton 9b8040873d Update parallel-rdp (#693)
* Update parallel-rdp

* more

* more
2026-03-26 17:02:52 +01:00
Logan McNaughton bff39ab04d Rust 1.94.1 (#692)
* Rust 1.94.1

* more

* more
2026-03-26 16:28:29 +01:00
Logan McNaughton 86ce5795fa fix netplay start if player 1 leaves (#691)
* fix netplay start if player 1 leaves

* more

* more
2026-03-25 10:56:17 +01:00
Logan McNaughton a834a4f9a4 Eliminate macOS Vulkan hint in SDL initialization (#690)
Removed macOS-specific Vulkan library hint from SDL initialization.
2026-03-24 18:06:49 +01:00
Logan McNaughton 1a4de8e911 Don't use caching for releases 2026-03-24 14:43:14 +01:00
Logan McNaughton 0f607e61aa Use MacOS 26 (#689) 2026-03-24 13:38:23 +01:00
Logan McNaughton 6220a566eb Enable Win ARM build (#686)
* Enable Win ARM build

* change ss2neon source

* update sse2neon
2026-03-24 13:29:02 +01:00
Logan McNaughton 5da6a6c3ee clippy fixes (#688)
* clippy fixes

* fix fmt
2026-03-24 11:09:16 +01:00
Logan McNaughton 567dd3a79d Reset hotkey (#682)
* Start soft reset work

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2026-03-21 19:57:27 +01:00
dependabot[bot] 4a0a80b045 Bump rustls-webpki in the cargo group across 1 directory (#685)
Bumps the cargo group with 1 update in the / directory: [rustls-webpki](https://github.com/rustls/webpki).


Updates `rustls-webpki` from 0.103.9 to 0.103.10
- [Release notes](https://github.com/rustls/webpki/releases)
- [Commits](https://github.com/rustls/webpki/compare/v/0.103.9...v/0.103.10)

---
updated-dependencies:
- dependency-name: rustls-webpki
  dependency-version: 0.103.10
  dependency-type: indirect
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-21 10:46:18 +01:00
Logan McNaughton 74b087e77e cargo update 2026-03-20 20:39:02 +01:00
Logan McNaughton faadefe96e format cpp code 2026-03-19 19:17:23 +01:00
Logan McNaughton 72df783d8c Add CLI option to load a save state (#681)
* Add CLI option to load a save state

* more

* more

* more
2026-03-19 14:06:53 +01:00
Logan McNaughton e7dfd02e17 cargo update 2026-03-17 19:38:00 +01:00
Logan McNaughton c6703244b3 better window cleanup 2026-03-17 19:15:19 +01:00
Logan McNaughton 8291a93337 draw every 100ms in input profile creation 2026-03-17 19:09:10 +01:00
Logan McNaughton 3e177ea4be move SDL_HINT_VULKAN_LIBRARY 2026-03-16 14:58:02 +01:00
Logan McNaughton 6de1ef3548 change message in input profile 2026-03-16 14:55:27 +01:00
Logan McNaughton 73a3e6a22a Add hint for MoltenVK (#678) 2026-03-15 10:49:24 +01:00
Logan McNaughton fcceca5976 fix mac build (#676)
* fix mac build

* add freetype

* set deployment target

* test

* test

* more

* test

* more

* more

* more

* more

* test

* put back

* link CoreFoundation

* more

* more

* more
2026-03-12 12:49:59 +01:00
Logan McNaughton acf5e08b97 cargo update 2026-03-10 09:29:49 +01:00
Logan McNaughton 768fcdaf7f bump to v1.1.16 2026-03-05 21:21:47 +01:00
Logan McNaughton 1c6e23b7f2 Update parallel-rdp 2026-03-05 20:42:24 +01:00
Logan McNaughton b4ae7db3dd Update to Rust 1.94.0 (#672) 2026-03-05 20:37:50 +01:00
Logan McNaughton e750b6eed1 upload unzipped artifact (#670) 2026-02-27 19:11:00 +01:00
Logan McNaughton f8b777248a update sdl 2026-02-22 08:12:10 +01:00
Logan McNaughton 51e9b3aa55 cargo update 2026-02-15 21:41:10 +01:00
Logan McNaughton efbeaeab88 rust 1.93.1 2026-02-12 22:49:42 +01:00
Logan McNaughton f24a5e7f05 reapply cheats when loading save state 2026-02-11 16:13:36 +01:00
Logan McNaughton 55170fcca3 use Xoshiro256PlusPlus (#668) 2026-02-09 12:16:10 +01:00
Logan McNaughton b952c45e0b cargo update 2026-02-09 10:44:19 +01:00
Logan McNaughton b13f37baf8 bump to 1.1.15 2026-02-06 09:53:09 +01:00
Logan McNaughton db40ec5034 cargo update (rand) 2026-02-06 09:51:12 +01:00
Logan McNaughton cedb2d5c22 update slint 2026-02-04 18:05:03 +01:00
Logan McNaughton 22d57677cb cargo update 2026-02-03 20:49:46 +01:00
Logan McNaughton f29f497405 bump to 1.1.14 2026-01-29 21:58:40 +01:00
Logan McNaughton 0aab9f71e1 cargo update 2026-01-29 21:58:06 +01:00
Logan McNaughton 7f84eb2aff add missing gamepad button types 2026-01-26 21:44:03 +01:00
Logan McNaughton b460d55714 use SDL_HAPTIC_INFINITY 2026-01-25 13:35:59 +01:00
Logan McNaughton ceaf56c563 bump to 1.1.13 2026-01-22 21:00:26 +01:00
Logan McNaughton 5937922558 fix issue with emux_xdetect 2026-01-22 20:44:17 +01:00
Logan McNaughton e9e71a6e02 Update to rust 1.93.0 (#659) 2026-01-22 20:24:41 +01:00
Logan McNaughton 9775f103e0 flush saves to disk (#658)
* flush saves to disk

* more

* more

* more

* more

* more

* more

* more

* more
2026-01-22 20:09:13 +01:00
Logan McNaughton bf01898c6f remove extra function 2026-01-22 09:22:47 +01:00
Logan McNaughton ce3b12bba9 print message for audio volume 2026-01-21 19:01:50 +01:00
Logan McNaughton 56ff2b260c adjust audio ratios 2026-01-21 12:13:19 +01:00
Logan McNaughton 367c22877b add system for micro adjustments to audio pitch 2026-01-21 11:47:33 +01:00
Logan McNaughton befbacc5b3 remove un-needed var 2026-01-20 15:31:03 +01:00
Logan McNaughton e1a6663bb5 remove needless copy 2026-01-20 13:21:44 +01:00
Logan McNaughton c5185e60c6 tweak ai dma calculation 2026-01-20 13:19:14 +01:00
Logan McNaughton 1aa879d759 tweak audio queue formula 2026-01-20 13:05:32 +01:00
Logan McNaughton bfad71f09f Update parallel-rdp (#656)
* Update parallel-rdp

* update cargo
2026-01-19 13:32:06 +01:00
Logan McNaughton 431b787998 update rfd 2026-01-05 19:27:16 +01:00
Logan McNaughton d48e3dc106 update rfd 2026-01-05 09:54:42 +01:00
Logan McNaughton 8be1ac7740 update SDL crate (#648)
* update SDL crate

* more
2026-01-03 10:07:27 +01:00
Logan McNaughton 56d0b1b2e2 update sse2neon to v1.9.1 2026-01-02 14:41:00 +01:00
Logan McNaughton 7f63bf1fde Update sse2neon to v1.9.0 (#642) 2025-12-22 10:08:09 +01:00
Logan McNaughton 05be960358 cargo update 2025-12-21 16:23:23 +01:00
dependabot[bot] 38a5079acf Bump actions/upload-artifact from 5 to 6 (#641)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-15 06:36:17 +01:00
Logan McNaughton 144e31c7fc bump to 1.1.12 2025-12-11 22:08:08 +01:00
Logan McNaughton e7a21171f4 fix windows build (#636) 2025-12-11 21:48:28 +01:00
Logan McNaughton 413da0178e update parallel rdp 2025-12-11 17:57:59 +01:00
Logan McNaughton d8c6669da1 Update to Rust 1.92.0 (#634) 2025-12-11 17:46:50 +01:00
Logan McNaughton c6fcfddf8c some cleanup 2025-12-10 15:12:56 +01:00
Logan McNaughton 0aa5c3e63a cleanup variable 2025-12-10 12:35:22 +01:00
Logan McNaughton 6f8433138d clippy fixes (#632)
* clippy fixes

* fix netplay browser
2025-12-10 10:00:42 +01:00
Logan McNaughton ea5bbfb218 only update controller assignment after user input (#629) 2025-12-06 13:42:10 +01:00
Logan McNaughton 10af598223 cargo update 2025-11-26 16:48:39 +01:00
dependabot[bot] c08511adc5 Bump actions/checkout from 5 to 6 (#622)
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 04:24:48 +01:00
Logan McNaughton f116617ac3 remove redundant SDL_PumpEvents 2025-11-22 14:31:08 +01:00
Logan McNaughton 1141095b65 some code cleanup 2025-11-22 14:14:22 +01:00
Logan McNaughton 162a6df56d move if statement for better performance 2025-11-22 13:40:26 +01:00
Logan McNaughton 72f47e5aff addressing hack to fix compatibility with latest libdragon (#620) 2025-11-22 10:04:31 +01:00
Logan McNaughton 6d40f5a12d cargo update 2025-11-21 10:44:52 +01:00
Logan McNaughton 64e6d75db1 Update Granite (#618)
* Update Granite

* add file
2025-11-21 10:44:09 +01:00
Logan McNaughton 20761faf8c rust 1.91.1 2025-11-11 12:43:54 +01:00
Adam Steinberg 79eb34d83d unsolicited main.rs refactor (#614)
* main.rs refactor

* remove anyhow

* forgive me clippy, for I have sinned
2025-11-08 21:34:35 +01:00
Logan McNaughton c4057c2f21 bump to 1.1.11 2025-11-05 15:29:56 +01:00
Logan McNaughton 581cc0b9aa cargo update 2025-11-05 15:16:57 +01:00
Logan McNaughton 6f6e21c718 tweak build options 2025-11-05 15:12:12 +01:00
Logan McNaughton 181774a1de pass netplay_id to workflow 2025-11-04 15:38:30 +01:00
Logan McNaughton 002fbbe8a4 set netplay id from environment (#606) 2025-11-04 08:27:32 +01:00
Logan McNaughton ab630cc8cb Use skia backend for gui (#605)
* Use skia backend for gui

* more

* use clang-cl

* more

* more
2025-11-03 23:07:10 +01:00
Logan McNaughton 06f9c56a79 bump to 1.1.10 2025-10-30 22:52:34 +01:00
Logan McNaughton c3f4b11519 update sdl3 2025-10-30 22:47:45 +01:00
Logan McNaughton 921a0d5362 Rust 1.91 (#599) 2025-10-30 20:14:39 +01:00
Logan McNaughton 24fc5b9638 update parallel-rdp 2025-10-30 13:59:20 +01:00
dependabot[bot] 1559856483 Bump signpath/github-action-submit-signing-request from 1.3 to 2.0 (#597)
Bumps [signpath/github-action-submit-signing-request](https://github.com/signpath/github-action-submit-signing-request) from 1.3 to 2.0.
- [Release notes](https://github.com/signpath/github-action-submit-signing-request/releases)
- [Commits](https://github.com/signpath/github-action-submit-signing-request/compare/v1.3...v2.0)

---
updated-dependencies:
- dependency-name: signpath/github-action-submit-signing-request
  dependency-version: '2.0'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-27 08:36:02 +01:00
dependabot[bot] 1deb91fc1e Bump actions/upload-artifact from 4 to 5 (#596)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-27 06:01:31 +01:00
Logan McNaughton 726a58f854 cargo update 2025-10-26 13:45:56 +01:00
Logan McNaughton fe0297690f pump events during vi (#593)
* pump events during vi

* add var

* more

* more
2025-10-26 13:42:25 +01:00
Logan McNaughton 847df61526 Add pause between key bindings (#594) 2025-10-26 13:33:40 +01:00
Logan McNaughton 6de8128f5b cargo update 2025-10-12 12:30:57 +02:00
Logan McNaughton 6c09176d12 add .srm for GB saves 2025-10-11 19:32:35 +02:00
Logan McNaughton 2050098735 fix out of bounds access (#590) 2025-10-06 09:02:50 +02:00
Logan McNaughton d3ecc37da6 fix compare interrupt issue (#588) 2025-10-01 10:05:03 +02:00
Logan McNaughton a0237e9f7d bump to 1.1.9 2025-09-28 10:00:37 +02:00
Logan McNaughton d6d608b674 Revert "more audio cleanup"
This reverts commit f3271cba63.
2025-09-28 09:59:02 +02:00
Logan McNaughton f254bec968 bump to 1.1.8 2025-09-27 21:33:21 +02:00
Logan McNaughton bd4aff2b2c cargo update 2025-09-27 21:32:27 +02:00
Logan McNaughton 0bf70a77ea correct load block size 2025-09-26 18:52:27 +02:00
Logan McNaughton e23e7f33c1 Re-add wgpu
I didn't see any evidence of crashing
2025-09-26 07:23:48 +02:00
Logan McNaughton 9d0516545e reorder items 2025-09-25 16:14:48 +02:00
Logan McNaughton e3023a902f further depth buffer tracking tweaks (#583) 2025-09-25 15:59:58 +02:00
Logan McNaughton 431c7c2a8d cargo update 2025-09-25 13:32:23 +02:00
Logan McNaughton cf99539f85 remove wgpu (#576) 2025-09-25 07:36:23 +02:00
Logan McNaughton c2493b829e watch z-buffer reads as well (#581) 2025-09-24 23:00:39 +02:00
Logan McNaughton 2f25de55d7 change depth buffer tracking (#580) 2025-09-24 20:06:39 +02:00
Logan McNaughton 116ffe9845 fix clippy warning 2025-09-22 09:15:41 +02:00
Logan McNaughton f3271cba63 more audio cleanup 2025-09-21 18:36:03 +02:00
Logan McNaughton 9037680cda cleanup audio code (#579) 2025-09-21 16:30:11 +02:00
Logan McNaughton fc41e26a6d expose 8x resolution (#578) 2025-09-21 13:36:13 +02:00
Logan McNaughton d1f28bb7a8 optimize rdp_check_framebuffers (#577) 2025-09-21 10:43:49 +02:00
Logan McNaughton 9db831fdef disable repeat mode on MI_CLR_INIT 2025-09-20 17:21:06 +02:00
Logan McNaughton 004b603e96 support basic mi repeat mode (#575)
* support basic mi repeat mode

* more

* more
2025-09-20 17:09:30 +02:00
Logan McNaughton 8661e2c9b1 always enable lto 2025-09-20 08:37:55 +02:00
Logan McNaughton c712f2a288 bump to 1.1.7 2025-09-19 12:57:05 +02:00
Logan McNaughton 366162e6fe cargo update 2025-09-19 12:56:07 +02:00
Logan McNaughton 2b93fb8aa1 re-add framebuffer tracking (#573) 2025-09-19 11:32:48 +02:00
Logan McNaughton a191701610 update to rust 1.90 (#574)
* update to rust 1.90

* more
2025-09-18 22:46:22 +02:00
Logan McNaughton 0605967c28 modify rsp sync points 2025-09-16 11:39:23 +02:00
Logan McNaughton d6e6a16814 reset device.rdp.last_status_value 2025-09-16 10:02:07 +02:00
Logan McNaughton e374825d5e add release-with-debug profile 2025-09-15 19:23:21 +02:00
Logan McNaughton f6d6746207 use addr_masked 2025-09-15 18:32:25 +02:00
Logan McNaughton 100238f198 optimize some reads/writes (#571) 2025-09-15 18:26:45 +02:00
Logan McNaughton daee53a626 Optimize VU instructions (#570) 2025-09-15 15:50:28 +02:00
Logan McNaughton 018d8ca3e3 fix parallel-rdp build 2025-09-15 12:28:54 +02:00
Logan McNaughton 24d26d864e update parallel-rdp 2025-09-15 12:21:26 +02:00
Logan McNaughton 7b8c549e8e remove rdp sync speed hack (#567) 2025-09-15 09:50:23 +02:00
Logan McNaughton f6c7e3d3c0 use wgpu for gui 2025-09-12 14:16:46 +02:00
Logan McNaughton 374b01dccf cargo update 2025-09-12 13:58:21 +02:00
Logan McNaughton 569b26a067 panic on attempted use of mi repeat mode 2025-09-10 13:16:57 +02:00
Logan McNaughton 380d196ae7 cargo update 2025-09-05 10:54:03 +02:00
Logan McNaughton 4fa1a8ad39 remove redundant get_rooms netplay call (#563)
* remove redundant get_rooms netplay call

* unwrap
2025-09-05 09:32:17 +02:00
Logan McNaughton 8acf3b9de8 bump to 1.1.6 2025-08-24 10:58:58 +02:00
Logan McNaughton b3297f82b2 cargo update 2025-08-24 10:58:01 +02:00
Logan McNaughton 2127705e7b set deadzon max to 99 2025-08-24 07:29:07 +02:00
Logan McNaughton cccb079d63 cleanup deadzone code (#558) 2025-08-24 00:05:03 +02:00
Logan McNaughton c52b680753 use saturating abs for deadzone (#557) 2025-08-23 22:52:04 +02:00
Logan McNaughton 8799650245 add deadzone option (#554)
* add deadzone option

* add deadzone calc

* more
2025-08-23 15:36:03 +02:00
Logan McNaughton 90be2130c1 move cheats back 2025-08-23 09:36:47 +02:00
Logan McNaughton 96af33c434 Split render frame and update screen, move pause loop (#556)
* split render and update screen functions

* move pause loop
2025-08-23 08:54:47 +02:00
Logan McNaughton 0a42152bcb move cheats 2025-08-22 22:42:09 +02:00
Logan McNaughton db335e24d2 render frame before speed limiter (#555) 2025-08-22 07:59:28 +02:00
Logan McNaughton 4857b86897 bump to 1.1.5 (#553) 2025-08-21 15:22:19 +02:00
Logan McNaughton 26022fff72 cargo update 2025-08-21 15:03:50 +02:00
Logan McNaughton 658dede9e9 use dependabot to update rust (#552) 2025-08-20 10:26:26 +02:00
Logan McNaughton 6ad1a31e34 correct joystick hat diagonal input (#551) 2025-08-20 09:15:41 +02:00
Logan McNaughton 4476d476de add frame advance (#549) 2025-08-18 10:42:29 +02:00
Logan McNaughton 8037fb426e UNF loader support (#526) 2025-08-18 08:44:12 +02:00
Logan McNaughton f0381a2cd1 add uppercase file extensions (#548) 2025-08-17 21:01:23 +02:00
Logan McNaughton c8e70e6125 cargo update 2025-08-17 20:56:02 +02:00
dependabot[bot] e9664b1087 Bump actions/checkout from 4 to 5 (#545)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 13:02:31 +02:00
Logan McNaughton 3f72700da0 bump to 1.1.4 (#541) 2025-08-07 19:21:54 +02:00
Logan McNaughton 9fcd2835eb Update to rust 1.89.0 (#540) 2025-08-07 13:17:39 +02:00
Logan McNaughton c6767c94a6 move sse2neon to submodule (#539) 2025-08-07 12:17:50 +02:00
Logan McNaughton f1968e3a58 use NearestClamp for image 2025-08-06 23:02:08 +02:00
Logan McNaughton 23fdfff1ac some clippy fixes (#538)
* some clippy fixes

* more
2025-08-06 12:18:40 +02:00
Logan McNaughton fc512d9517 fix netplay for unknown ROMs 2025-08-06 09:12:35 +02:00
dependabot[bot] 3c317460fd Bump signpath/github-action-submit-signing-request from 1.2 to 1.3 (#537)
Bumps [signpath/github-action-submit-signing-request](https://github.com/signpath/github-action-submit-signing-request) from 1.2 to 1.3.
- [Commits](https://github.com/signpath/github-action-submit-signing-request/compare/v1.2...v1.3)

---
updated-dependencies:
- dependency-name: signpath/github-action-submit-signing-request
  dependency-version: '1.3'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-06 08:56:09 +02:00
Logan McNaughton b1fcaa5cf4 add minimum size to combobox 2025-08-05 21:55:41 +02:00
Logan McNaughton 98c9cf142d slight improvment to combobox sizes 2025-08-05 21:40:31 +02:00
Logan McNaughton 1eb1503981 Onscreen drawing (#536)
* onscreen messages

* more

* more

* more

* more

* use sdl_ttf

* more

* more

* more

* more

* test

* mroe

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2025-08-05 15:59:49 +02:00
Logan McNaughton 5aa9a65e7b add support for save state slots (#534)
* add support for save state slots

* add log
2025-08-04 14:59:50 +02:00
Logan McNaughton 71f1d98132 bump to 1.1.3 (#533) 2025-08-03 13:30:27 +02:00
Logan McNaughton 0037c0f344 Don't wait for signpath completion 2025-08-03 11:56:12 +02:00
Logan McNaughton 752e804101 refreshing session message 2025-08-03 09:38:23 +02:00
Logan McNaughton 73354246f3 netplay dispatcher (#532)
* netplay dispatcher

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2025-08-03 09:25:57 +02:00
Logan McNaughton a2d23c2f41 Fix crash in netplay windows (#530)
* Fix crash in netplay windows

* more
2025-07-29 23:02:07 +02:00
dependabot[bot] 6e652c7dbd Bump signpath/github-action-submit-signing-request from 1.1 to 1.2 (#529)
Bumps [signpath/github-action-submit-signing-request](https://github.com/signpath/github-action-submit-signing-request) from 1.1 to 1.2.
- [Commits](https://github.com/signpath/github-action-submit-signing-request/compare/v1.1...v1.2)

---
updated-dependencies:
- dependency-name: signpath/github-action-submit-signing-request
  dependency-version: '1.2'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 08:50:59 +02:00
Logan McNaughton 20749cf036 bump to 1.1.2 (#528) 2025-07-25 21:45:52 +02:00
Logan McNaughton d7f656cd6a update cargo packages 2025-07-25 21:26:54 +02:00
Logan McNaughton 8558334391 Add code signing policy 2025-07-25 16:23:46 +02:00
Logan McNaughton b6de872d78 Sign code using SignPath (#525)
* Sign code using SignPath

* more

* more

* more

* more

* more

* use release-signing
2025-07-25 11:45:11 +02:00
Logan McNaughton 712dc10c65 cleanup netplay error checking 2025-07-25 07:20:50 +02:00
Logan McNaughton cd2b5b4e92 error checking for netplay ui channels (#527)
* error checking for netplay ui channels

* more
2025-07-25 07:00:45 +02:00
Logan McNaughton 98b5d6506e add spacing in settings 2025-07-20 23:12:01 +02:00
Logan McNaughton f2e8bc6356 data access fixes 2025-07-20 21:33:07 +02:00
Logan McNaughton 328e1730a0 Update parallel-rdp (#523) 2025-07-20 09:55:36 +02:00
Logan McNaughton 8010a6211c Use default AR on windows (#522)
* Use default AR on windows

* use llvm-ar

* more
2025-07-20 08:16:04 +02:00
Logan McNaughton 41b1fd05be build without clang-cl on Windows (#521) 2025-07-20 07:51:00 +02:00
Logan McNaughton c5da2a795f use specific llvm version (#520)
* use specific llvm version

* more

* more

* more

* more
2025-07-19 18:30:17 +02:00
Logan McNaughton 7361a9bd5c remove unneeded flag (#519) 2025-07-19 16:45:27 +02:00
Logan McNaughton d4e8933352 Use rust-lld on Windows (#518) 2025-07-19 16:31:58 +02:00
Logan McNaughton fff376db5e cargo update 2025-07-19 15:51:57 +02:00
Logan McNaughton d7f1c8415a disable cargo dependabot 2025-07-19 15:51:23 +02:00
Logan McNaughton ac09be4202 Increase axis movement requirement when configuring controller (#514) 2025-07-17 15:22:21 +02:00
Logan McNaughton 022190384a Add support for custom netplay server url (#511)
* Add support for custom netplay server url

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2025-07-16 15:42:54 +02:00
Logan McNaughton e4dd5c2dee Fix crash in wrestlemania (#510) 2025-07-16 12:13:12 +02:00
Logan McNaughton 3e95059ec7 add pause hotkey (#509) 2025-07-15 20:43:31 +02:00
Logan McNaughton abc39e74ef Remember ROM dir (#508)
* Remember ROM dir

* more

* more

* more

* more

* more
2025-07-15 20:05:46 +02:00
Logan McNaughton 7109d28223 update c standard (#507)
* update c standard

* more

* more
2025-07-15 15:28:34 +02:00
Logan McNaughton 1d1e3829e4 Update icon 2025-07-14 15:47:11 +02:00
Logan McNaughton a46e4f505b re-enable mac build 2025-07-13 17:51:37 +02:00
Logan McNaughton 03fbe658f2 Update netplay server url (#491) 2025-07-12 15:01:59 +02:00
Logan McNaughton b96c9e4cdc bump to 1.1.1 (#490) 2025-07-11 21:28:53 +02:00
Logan McNaughton cea405ea30 bump to 1.1.0 (#489) 2025-07-11 21:14:18 +02:00
Logan McNaughton c13d354201 savestate speed improvements (#486)
* savestate speed improvements

* more
2025-07-10 18:13:16 +02:00
Logan McNaughton ff43f59f74 fix compile warning (#485)
* fix compile warning

* more
2025-07-10 14:38:28 +02:00
dependabot[bot] eb97b96daf Bump zip from 4.2.0 to 4.3.0 (#483)
Bumps [zip](https://github.com/zip-rs/zip2) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/zip-rs/zip2/releases)
- [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zip-rs/zip2/compare/v4.2.0...v4.3.0)

---
updated-dependencies:
- dependency-name: zip
  dependency-version: 4.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-10 12:48:44 +02:00
Logan McNaughton 9bf43a16b4 Move SDL_PumpEvents (#482)
* Move SDL_PumpEvents

* more
2025-07-09 22:07:38 +02:00
Logan McNaughton b67247f935 Sync sdl window to prevent fullscreen issues (#481) 2025-07-09 19:55:24 +02:00
Logan McNaughton f10c591047 init rdp device 2025-07-09 10:45:12 +02:00
Logan McNaughton 82f1965f26 avoid syncing RDP too much (#479) 2025-07-09 10:31:20 +02:00
Logan McNaughton a5ddea353a print sdl errors (#478) 2025-07-09 10:19:44 +02:00
Logan McNaughton 6c977dbe5e Update README.md 2025-07-07 14:38:36 +02:00
Logan McNaughton 5dcfd72b18 bump to 1.0.21 (#477) 2025-07-06 20:07:31 +02:00
Logan McNaughton e578d6083d Don't use wgpu 2025-07-06 15:57:15 +02:00
Logan McNaughton e99a236070 use thin lto (#475) 2025-07-06 14:36:52 +02:00
Logan McNaughton e37633ecbd LTO2 (#474)
* LTO2

* more
2025-07-06 13:18:56 +02:00
Logan McNaughton d42e145b1f rename rdp build 2025-07-06 11:04:19 +02:00
Logan McNaughton 8ab31b0c28 Use Clang (#473) 2025-07-06 10:44:05 +02:00
Logan McNaughton 6d43191c56 cleanup release args 2025-07-06 07:28:34 +02:00
Logan McNaughton 75457c5f7a codegen-units = 16 2025-07-05 22:06:47 +02:00
Logan McNaughton 6d85358f2b re-order destruction of UI elements (#471)
* re-order destruction of UI elements

* more
2025-07-05 21:25:41 +02:00
Logan McNaughton ef4f93d6f0 bump to 1.0.20 (#470) 2025-07-05 18:14:18 +02:00
Logan McNaughton e4b7e291dd update socket2 (#469) 2025-07-05 17:52:29 +02:00
Logan McNaughton 16732d3d3c use is_multiple_of (#468) 2025-07-05 09:31:03 +02:00
Logan McNaughton 5857da0404 add cheats enabled var 2025-07-05 09:25:31 +02:00
Logan McNaughton 6c6d0f32a7 fix cheats 2025-07-04 22:33:25 +02:00
Logan McNaughton 7b400a0edc Update cheats (#467) 2025-07-04 22:13:52 +02:00
Logan McNaughton 8f6c6f1b94 Cheat support (#459)
* Cheat support

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2025-07-04 16:46:03 +02:00
Logan McNaughton 7fd43886de add a few vru phrases 2025-07-03 13:27:33 +02:00
Logan McNaughton 572807def0 add missing disable_expansion_pak in netplay features 2025-07-02 22:26:01 +02:00
Logan McNaughton 10a1e3a556 rename netplaydialog 2025-07-02 22:22:42 +02:00
Logan McNaughton c12dc460a7 update tokio 2025-07-02 22:17:34 +02:00
Logan McNaughton 72456b48e5 some code cleanup 2025-07-02 22:15:15 +02:00
Logan McNaughton 6ecb81fda1 move netplay_window to netplay.rs 2025-07-02 22:08:46 +02:00
Logan McNaughton 31b4e7944b non-empty default value for ram (#465) 2025-07-02 14:33:19 +02:00
Logan McNaughton dc1535ea04 better RAM access checks (#464)
* better RAM access checks

* more
2025-07-02 14:25:03 +02:00
Logan McNaughton 7a59714417 Make expansion pak optional (#463)
* Make expansion pak optional

* more
2025-07-02 09:59:01 +02:00
Logan McNaughton ead561933b Don't adjust variable limit after toggle (#458)
* Don't adjust variable limit after toggle

* more
2025-06-30 10:55:34 +02:00
Logan McNaughton 1d331e73fb cleanup aarch64 flags (#455) 2025-06-28 18:51:12 +02:00
Logan McNaughton 25aaa985f1 netplay feedback button (#454) 2025-06-28 16:50:59 +02:00
Logan McNaughton 11830b0222 add button for netplay discord (#452) 2025-06-28 14:19:50 +02:00
Logan McNaughton 3183a5eb0b add some more about buttons (#451) 2025-06-28 10:43:09 +02:00
Logan McNaughton 5d8ac37a0f Add new version button to main screen (#450) 2025-06-27 13:09:22 +02:00
Logan McNaughton baa6a6c635 Update download links 2025-06-27 10:15:25 +02:00
Logan McNaughton f389be0773 Fix netplay server url (#449) 2025-06-26 21:04:54 +02:00
Logan McNaughton 30eee885e4 Update to 1.0.19 (#448) 2025-06-26 20:58:41 +02:00
Logan McNaughton 3da98c58c5 use rust 1.88 (#447)
* Use Rust 1.88

* add win aarch64 (commented out)

* Clippy fixes
2025-06-26 20:36:10 +02:00
Logan McNaughton 6e9b8ae126 Don't enable VRU during netplay (#445) 2025-06-26 11:44:56 +02:00
Logan McNaughton ada6936b9a print message when creating/loading savestate 2025-06-26 09:50:22 +02:00
Logan McNaughton 0bb3d2cd5d Slint fixes (#433)
* Slint fixes

* more

* more

* more

* more

* more

* more

* more

* more

* more
2025-06-26 09:00:23 +02:00
Logan McNaughton f213b0b9a9 Use Slint for GUI (#432)
* Use Slint for GUI

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more

* more
2025-06-25 12:38:33 +02:00
Logan McNaughton 69029f3a02 Don't panic on invalid transferpak access (#430) 2025-06-23 16:41:37 +02:00
dependabot[bot] 0c2b4b2aac Bump sevenz-rust2 from 0.14.1 to 0.15.1 (#428)
Bumps [sevenz-rust2](https://github.com/hasenbanck/sevenz-rust) from 0.14.1 to 0.15.1.
- [Changelog](https://github.com/hasenbanck/sevenz-rust2/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hasenbanck/sevenz-rust/compare/v0.14.1...v0.15.1)

---
updated-dependencies:
- dependency-name: sevenz-rust2
  dependency-version: 0.15.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 07:10:51 +02:00
Logan McNaughton c7680f10a0 fix compiler warning 2025-06-16 06:31:23 +02:00
dependabot[bot] a28ed6766b Bump tungstenite from 0.26.2 to 0.27.0 (#426)
Bumps [tungstenite](https://github.com/snapview/tungstenite-rs) from 0.26.2 to 0.27.0.
- [Changelog](https://github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/snapview/tungstenite-rs/compare/v0.26.2...v0.27.0)

---
updated-dependencies:
- dependency-name: tungstenite
  dependency-version: 0.27.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 05:51:54 +02:00
dependabot[bot] 6e6b1d463d Bump zip from 4.0.0 to 4.1.0 (#424)
Bumps [zip](https://github.com/zip-rs/zip2) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/zip-rs/zip2/releases)
- [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zip-rs/zip2/compare/v4.0.0...v4.1.0)

---
updated-dependencies:
- dependency-name: zip
  dependency-version: 4.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 05:44:13 +02:00
dependabot[bot] 662c0060a1 Bump cc from 1.2.25 to 1.2.27 (#425)
Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.25 to 1.2.27.
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.25...cc-v1.2.27)

---
updated-dependencies:
- dependency-name: cc
  dependency-version: 1.2.27
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 05:36:29 +02:00
Logan McNaughton 79e4cb1807 Update mac runner 2025-06-13 11:04:05 +02:00
Logan McNaughton f3e819158a fix formatting 2025-06-12 18:41:44 +02:00
Logan McNaughton e83bcbb4ce remove session reference for netplay 2025-06-12 18:39:31 +02:00
Logan McNaughton eb5d255fd7 move get_controller_names 2025-06-12 13:34:59 +02:00
dependabot[bot] 776d127a84 Bump bindgen from 0.71.1 to 0.72.0 (#420)
Bumps [bindgen](https://github.com/rust-lang/rust-bindgen) from 0.71.1 to 0.72.0.
- [Release notes](https://github.com/rust-lang/rust-bindgen/releases)
- [Changelog](https://github.com/rust-lang/rust-bindgen/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/rust-bindgen/compare/v0.71.1...v0.72.0)

---
updated-dependencies:
- dependency-name: bindgen
  dependency-version: 0.72.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 06:56:56 +02:00
Logan McNaughton af5f292459 Bump to 1.0.18 (#418) 2025-06-05 12:34:20 +02:00
Logan McNaughton c25a56df50 Fix netplay crash when server is down (#417)
* Fix netplay crash when server is down

* more
2025-06-05 12:16:11 +02:00
Logan McNaughton 9d9f965b41 fix sevenz-rust2 version 2025-06-04 09:21:59 +02:00
Logan McNaughton 68197d235b update cargo packages 2025-06-03 16:11:58 +02:00
Logan McNaughton 1c91abbf2d Potential fix for code scanning alert no. 2: Workflow does not contain permissions (#416)
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-06-03 16:06:38 +02:00
Logan McNaughton 9348594eb0 Potential fix for code scanning alert no. 4: Workflow does not contain permissions (#413)
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-06-03 15:45:47 +02:00
dependabot[bot] e97f4e7f16 Bump zip from 3.0.0 to 4.0.0 (#404)
Bumps [zip](https://github.com/zip-rs/zip2) from 3.0.0 to 4.0.0.
- [Release notes](https://github.com/zip-rs/zip2/releases)
- [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zip-rs/zip2/compare/v3.0.0...v4.0.0)

---
updated-dependencies:
- dependency-name: zip
  dependency-version: 4.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-22 06:28:35 +02:00
Logan McNaughton cea55914d9 update linux deps (#401) 2025-05-16 13:43:36 +02:00
Logan McNaughton 77a22f08b3 ignore settings.json 2025-05-16 13:32:54 +02:00
Logan McNaughton cf0f325ced Update rust to 1.87 (#400) 2025-05-15 20:57:22 +02:00
Logan McNaughton 21f1a274b4 update cargo packages 2025-05-06 13:02:59 +02:00
Logan McNaughton def8932922 bump to 1.0.17 (#384) 2025-04-15 23:31:22 +02:00
Logan McNaughton 5b6f9b76a6 fix interlaced image (#383) 2025-04-15 23:23:47 +02:00
Logan McNaughton 5a838464a4 update cargo packages 2025-04-15 22:44:24 +02:00
Logan McNaughton 383b568012 remove framebuffer tracking (#381)
* remove framebuffer tracking

* more
2025-04-15 11:08:40 +02:00
Logan McNaughton 27bb66df4c Cleanup some controller code (#378)
* controller hotplugging

* more

* more
2025-04-13 21:07:54 +02:00
Logan McNaughton 33f74e5062 update cargo packages 2025-04-08 07:52:02 +02:00
Logan McNaughton 68f90e1cd7 update 7z package (#370) 2025-04-05 09:30:12 +02:00
dependabot[bot] cc5f636912 Bump zip from 2.5.0 to 2.6.0 (#369)
Bumps [zip](https://github.com/zip-rs/zip2) from 2.5.0 to 2.6.0.
- [Release notes](https://github.com/zip-rs/zip2/releases)
- [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zip-rs/zip2/compare/v2.5.0...v2.6.0)

---
updated-dependencies:
- dependency-name: zip
  dependency-version: 2.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-04 06:51:11 +02:00
Logan McNaughton e3a9849ad7 bump to 1.0.16 (#368) 2025-04-03 12:13:20 +02:00
Logan McNaughton 7ed6867691 Update rust to 1.86.0 (#367) 2025-04-03 12:01:15 +02:00
Logan McNaughton 11a8e96564 better default for address tracking 2025-04-02 14:06:43 +02:00
Logan McNaughton 7111cc9761 update cargo packages 2025-04-02 12:26:48 +02:00
Logan McNaughton b4832b941f sync parallel rdp for texture images (#361)
* sync parallel rdp for texture images

* more

* more

* more

* more

* more
2025-04-02 12:24:30 +02:00
dependabot[bot] 82b1888f82 Bump governor from 0.9.0 to 0.10.0 (#362)
Bumps [governor](https://github.com/boinkor-net/governor) from 0.9.0 to 0.10.0.
- [Release notes](https://github.com/boinkor-net/governor/releases)
- [Changelog](https://github.com/boinkor-net/governor/blob/master/release.toml)
- [Commits](https://github.com/boinkor-net/governor/compare/v0.9.0...v0.10.0)

---
updated-dependencies:
- dependency-name: governor
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-28 07:47:22 +01:00
Logan McNaughton f35869190b gather controller input even without focus (#360) 2025-03-27 08:55:52 +01:00
Logan McNaughton 64eda1a1e3 bump to 1.0.15 (#358) 2025-03-26 11:27:02 +01:00
Logan McNaughton 8026bf13d6 update cargo packages 2025-03-26 11:18:05 +01:00
Logan McNaughton 83103130e7 cleanup 2025-03-25 12:59:32 +01:00
dependabot[bot] 87717c4c7e Bump governor from 0.8.1 to 0.9.0 (#357)
Bumps [governor](https://github.com/boinkor-net/governor) from 0.8.1 to 0.9.0.
- [Release notes](https://github.com/boinkor-net/governor/releases)
- [Changelog](https://github.com/boinkor-net/governor/blob/master/release.toml)
- [Commits](https://github.com/boinkor-net/governor/compare/v0.8.1...v0.9.0)

---
updated-dependencies:
- dependency-name: governor
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-25 06:00:08 +01:00
Logan McNaughton 6355885a56 let server determine netplay buffer target (#356) 2025-03-24 15:03:50 +01:00
dependabot[bot] 5d180dfb65 Bump zip from 2.4.2 to 2.5.0 (#354)
Bumps [zip](https://github.com/zip-rs/zip2) from 2.4.2 to 2.5.0.
- [Release notes](https://github.com/zip-rs/zip2/releases)
- [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zip-rs/zip2/compare/v2.4.2...v2.5.0)

---
updated-dependencies:
- dependency-name: zip
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:28:28 +01:00
Logan McNaughton fd6965ff3b remove rusttype (#355)
* remove rusttype

* more
2025-03-24 11:06:17 +01:00
Logan McNaughton 2fcf202a5c move variable into function 2025-03-23 22:07:32 +01:00
Logan McNaughton 93630c4156 fix audit workflow (#350) 2025-03-23 21:31:24 +01:00
Logan McNaughton a66e8184e4 add workflow dispatch option 2025-03-23 19:25:15 +01:00
Logan McNaughton e4f05af38d add audit action (#349) 2025-03-23 19:24:17 +01:00
Logan McNaughton 8a09cb711f Add RDP to savestate (#348)
* organize RDP device

* more

* more

* more

* more

* more

* more

* more

* more
2025-03-22 21:24:39 +01:00
Logan McNaughton a58eed7dc9 add a few more loops (#347)
* add a few more loops

* more
2025-03-22 08:23:48 +01:00
Logan McNaughton 09ba7e4d13 use loop for cache (#346) 2025-03-21 22:37:04 +01:00
Logan McNaughton 7316e41c7e pin rust version 2025-03-21 15:37:11 +01:00
Logan McNaughton 1aa00de1b2 fix crash when attempting to read zip without rom (#345)
* fix crash when attempting to read zip without rom

* more
2025-03-19 18:37:35 +01:00
Logan McNaughton f71ec9d54a add cic entry for libdragon ipl3 (#344) 2025-03-19 14:15:00 +01:00
Logan McNaughton bf2734e59c update cargo packages 2025-03-19 09:56:00 +01:00
dependabot[bot] 7ee26961f1 Bump zip from 2.2.3 to 2.4.1 (#341)
Bumps [zip](https://github.com/zip-rs/zip2) from 2.2.3 to 2.4.1.
- [Release notes](https://github.com/zip-rs/zip2/releases)
- [Changelog](https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zip-rs/zip2/compare/v2.2.3...v2.4.1)

---
updated-dependencies:
- dependency-name: zip
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-18 09:21:31 +01:00
Logan McNaughton 5d692318fe better region check 2025-03-17 10:06:26 +01:00
Logan McNaughton f2966230f9 Fix freeze in Bass Hunter 64 (#339) 2025-03-17 09:46:09 +01:00
Logan McNaughton 48575f9c52 fix windows cross compile (#336) 2025-03-16 20:31:57 +01:00
Logan McNaughton dbab58f4a7 catch possible error in loading save state (#335) 2025-03-16 17:10:16 +01:00
Logan McNaughton f6b0b59bbc fix savestate default memory 2025-03-16 10:32:32 +01:00
Logan McNaughton ca61695dd1 update cargo packages 2025-03-16 10:13:23 +01:00
Logan McNaughton a182fbb1f9 cleanup function 2025-03-16 10:11:50 +01:00
Logan McNaughton da9b2247f8 remove more mut (#334) 2025-03-16 10:10:16 +01:00
Logan McNaughton 1bcadb3a8b remove un-needed mut (#333)
* remove un-needed mut

* more

* more
2025-03-16 09:48:32 +01:00
Logan McNaughton 433f08c7e0 Update README.md 2025-03-16 07:55:10 +01:00
Logan McNaughton b07dde8768 disable mempak for Chameleon Twist (#332) 2025-03-16 07:35:37 +01:00
Logan McNaughton cba7bc7477 ensure gain setting persists 2025-03-16 07:18:05 +01:00
Logan McNaughton ea6f203e33 allow up to 200% audio volume (#331) 2025-03-15 20:21:46 +01:00
Logan McNaughton e48ad9bdff add way to change audio volume (#330)
* add way to change audio volume

* more
2025-03-15 11:11:18 +01:00
Logan McNaughton 11b1137412 update netplay server name 2025-03-13 21:03:50 +01:00
Logan McNaughton 5528f233c0 fix compile warning 2025-03-13 16:51:41 +01:00
Logan McNaughton 9d18673257 bump to 1.0.14 (#328) 2025-03-13 07:20:29 +01:00
Logan McNaughton 2a3fa03b35 update cargo packages 2025-03-13 07:09:52 +01:00
Logan McNaughton ec2f47e5d3 cleanup vector code 2025-03-11 15:08:35 +01:00
Logan McNaughton 139d66eb82 use vector for rdram_dirty (#322) 2025-03-11 14:52:57 +01:00
Logan McNaughton 6e10bee216 use glow for egui (#321)
* Revert "use GL backend for GUI to avoid conflicts with game window (#287)"

This reverts commit 00964f06f0.

* use glow
2025-03-11 09:43:09 +01:00
Logan McNaughton dff9fc5381 bump to 1.0.13 (#318) 2025-03-10 23:01:21 +01:00
Logan McNaughton 84dcc6c154 fix image scale when using upscaling (#317) 2025-03-10 22:53:16 +01:00
Logan McNaughton 8aa23e1665 bump to 1.0.12 (#316) 2025-03-10 17:22:51 +01:00
Logan McNaughton f2b75a2dcc update cargo packages 2025-03-10 17:14:04 +01:00
Logan McNaughton 5bac846bda update shaders (#315) 2025-03-10 17:13:45 +01:00
Logan McNaughton e93c275795 Add option for CRT shader (#314)
* add CRT shader

* more

* more

* update type

* more

* more

* more

* more
2025-03-10 16:52:25 +01:00
Logan McNaughton 67a8bb5e4c show VRU dialog in main window (#311) 2025-03-09 22:20:16 +01:00
Logan McNaughton 2828accee1 re-arrange UI struct (#310)
* re-arrange UI struct

* format
2025-03-09 10:30:43 +01:00
Logan McNaughton 16a9754bda GB MBC1 support (#309) 2025-03-08 21:48:51 +01:00
Logan McNaughton fbe95767f5 update zip 2025-03-07 18:40:11 +01:00
Logan McNaughton 0989be1e0f update cargo packages 2025-03-07 18:36:08 +01:00
Logan McNaughton e73816541e condense code (#308) 2025-03-07 18:35:48 +01:00
Logan McNaughton f6b2342e0e always make the window resizeable (#305) 2025-03-07 10:43:35 +01:00
Logan McNaughton 7ab57d592b bump to 1.0.11 (#301) 2025-03-05 15:20:42 +01:00
171 changed files with 25711 additions and 16487 deletions
+23 -1
View File
@@ -1,5 +1,27 @@
[target.'cfg(all(target_arch = "aarch64", target_os = "linux"))']
rustflags = ["-C", "link-arg=-fuse-ld=lld"]
[target.'cfg(any(target_os = "windows", target_os = "macos"))']
linker = "rust-lld"
[target.'cfg(target_os = "windows")']
rustflags = ["-C", "link-arg=/STACK:8388608"]
[target.'cfg(target_arch = "x86_64")']
rustflags = ["-C", "target-cpu=x86-64-v3"]
[target.'cfg(target_arch = "aarch64")']
[target.'cfg(all(target_arch = "aarch64", target_os = "macos"))']
rustflags = [
"-C", "target-cpu=apple-m1",
"-C", "link-arg=-headerpad_max_install_names"
]
[target.'cfg(all(target_arch = "aarch64", not(target_os = "macos")))']
rustflags = ["-C", "target-cpu=cortex-a76"]
[env]
CC = "clang"
CXX = "clang++"
AR = "llvm-ar"
SDKROOT = "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"
CMAKE_POLICY_VERSION_MINIMUM = "3.5" # for freetype
+33
View File
@@ -0,0 +1,33 @@
---
name: Bug report
about: Bugs only! No feature requests
title: ''
labels: ''
assignees: ''
type: Bug
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Device (please complete the following information):**
- OS: [e.g. Windows 11]
- CPU: [e.g. Intel i7-1365U]
- GPU: [e.g. Nvidia 5060 Ti]
**Additional context**
Add any other context about the problem here.
+1
View File
@@ -0,0 +1 @@
blank_issues_enabled: false
+8 -3
View File
@@ -3,8 +3,13 @@ updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
- package-ecosystem: "cargo"
interval: "weekly"
- package-ecosystem: "rust-toolchain"
directory: "/"
schedule:
interval: "daily"
interval: "weekly"
# - package-ecosystem: "cargo"
# directory: "/"
# schedule:
# interval: "daily"
+220 -29
View File
@@ -1,13 +1,22 @@
name: Rust
permissions:
contents: read
on:
push:
branches: ["main"]
tags:
- "v*"
pull_request:
branches: ["main"]
merge_group:
env:
CARGO_TERM_COLOR: always
RA_HARDCORE: ${{ github.ref_type == 'tag' && 'true' || 'false' }}
NETPLAY_ID: ${{ github.ref_type == 'tag' && secrets.NETPLAY_ID || 'dev' }}
BUILD_PROFILE: ${{ github.ref_type == 'tag' && 'release' || 'dev' }}
BUILD_DIR: ${{ github.ref_type == 'tag' && 'release' || 'debug' }}
jobs:
build-linux:
@@ -19,92 +28,274 @@ jobs:
- os: ubuntu-24.04
target: x86_64-unknown-linux-gnu
arch: linux-x86_64
llvm: X64
- os: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
arch: linux-aarch64
llvm: ARM64
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive
fetch-depth: 0
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
target: ${{ matrix.target }}
rustflags: ""
cache: ${{ github.ref_type != 'tag' }}
- name: Set LLVM_VERSION
run:
echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut
-d':' -f2 | xargs)" >> $GITHUB_ENV
- name: Install SDL Dependencies
# https://wiki.libsdl.org/SDL3/README/linux#build-dependencies
# https://wiki.libsdl.org/SDL3/README-linux#build-dependencies
uses: awalsh128/cache-apt-pkgs-action@v1
with:
packages: build-essential git make \
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \
libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \
libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev
packages: build-essential git make pkg-config cmake ninja-build
gnome-desktop-testing libasound2-dev libpulse-dev libaudio-dev
libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev
libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev
libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev
libudev-dev libthai-dev libpipewire-0.3-dev libwayland-dev
libdecor-0-dev liburing-dev libfontconfig-dev
version: ${{ matrix.target }}-1.0
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v2
with:
version: ${{ env.LLVM_VERSION }}
force-url:
https://github.com/llvm/llvm-project/releases/download/llvmorg-${{
env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-Linux-${{
matrix.llvm }}.tar.xz
- name: Build
run: |
cargo build --release -v --target=${{ matrix.target }}
cargo build --profile ${{ env.BUILD_PROFILE }} -v --target=${{ matrix.target }}
mkdir output
cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }}
cp target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64 output/gopher64-${{ matrix.arch }}
- name: Upload file
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: gopher64-${{ matrix.arch }}
path: output/gopher64-${{ matrix.arch }}
archive: false
build-windows:
runs-on: windows-2025
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-pc-windows-msvc
- os: windows-2025
target: x86_64-pc-windows-msvc
arch: windows-x86_64
llvm: win64
- os: windows-11-arm
target: aarch64-pc-windows-msvc
arch: windows-aarch64
llvm: woa64
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive
fetch-depth: 0
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
target: ${{ matrix.target }}
rustflags: ""
cache: ${{ github.ref_type != 'tag' }}
- name: Set LLVM_VERSION
run: |
$llvm_version = rustc --version --verbose | Select-String "LLVM version" | ForEach-Object { $_.Line.Split(":")[1].Trim() }
echo "LLVM_VERSION=$llvm_version" >> $env:GITHUB_ENV
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v2
with:
version: ${{ env.LLVM_VERSION }}
force-url:
https://github.com/llvm/llvm-project/releases/download/llvmorg-${{
env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-${{ matrix.llvm
}}.exe
- name: Build
run: |
cargo build --release -v --target=${{ matrix.target }}
cargo build --profile ${{ env.BUILD_PROFILE }} -v --target=${{ matrix.target }}
mkdir output
cp target/${{ matrix.target }}/release/gopher64.exe output/gopher64-${{ matrix.arch }}.exe
- name: Upload file
uses: actions/upload-artifact@v4
cp target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64.exe output/gopher64-${{ matrix.arch }}.exe
env:
CC: clang-cl
CXX: clang-cl
- name: Upload unsigned artifact
id: upload-unsigned-artifact
uses: actions/upload-artifact@v7
with:
name: gopher64-${{ matrix.arch }}
path: output/gopher64-${{ matrix.arch }}.exe
archive: ${{ github.ref_type == 'tag' && true || false }}
- name: SignPath
if: ${{ github.ref_type == 'tag' }}
uses: signpath/github-action-submit-signing-request@v2
with:
api-token: "${{ secrets.SIGNPATH_API_TOKEN }}"
organization-id: "${{ secrets.SIGNPATH_ORG_ID }}"
project-slug: "gopher64"
artifact-configuration-slug: "gopher64-${{ matrix.arch }}"
signing-policy-slug: "release-signing"
github-artifact-id: "${{ steps.upload-unsigned-artifact.outputs.artifact-id }}"
wait-for-completion: true
wait-for-completion-timeout-in-seconds: 3600
output-artifact-directory: output-signed
- name: Upload signed artifact
if: ${{ github.ref_type == 'tag' }}
uses: actions/upload-artifact@v7
with:
name: gopher64-${{ matrix.arch }}
path: output-signed/gopher64-${{ matrix.arch }}.exe
archive: false
overwrite: true
build-macos:
runs-on: macos-14
runs-on: macos-15
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-apple-darwin
arch: mac-x86_64
- target: aarch64-apple-darwin
arch: mac-aarch64
arch: macos-aarch64
llvm: ARM64
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive
fetch-depth: 0
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
target: ${{ matrix.target }}
rustflags: ""
cache: ${{ github.ref_type != 'tag' }}
- name: Set LLVM_VERSION
run:
echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut
-d':' -f2 | xargs)" >> $GITHUB_ENV
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v2
with:
version: ${{ env.LLVM_VERSION }}
force-url:
https://github.com/llvm/llvm-project/releases/download/llvmorg-${{
env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-macOS-${{
matrix.llvm }}.tar.xz
- name: Build
run: |
cargo build --release -v --target=${{ matrix.target }}
mkdir output
cp target/${{ matrix.target }}/release/gopher64 output/gopher64-${{ matrix.arch }}
cargo install cargo-bundle
brew install molten-vk
cargo build --profile ${{ env.BUILD_PROFILE }} --no-default-features -v --target=${{ matrix.target }}
mv target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64 target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64-cli
cargo bundle --profile ${{ env.BUILD_PROFILE }} --target=${{ matrix.target }} --format osx
cp target/${{ matrix.target }}/${{ env.BUILD_DIR }}/gopher64-cli target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli
env:
MACOSX_DEPLOYMENT_TARGET: "15.0"
- name: Sign Bundle Dev
if: ${{ github.ref_type != 'tag' }}
run: |
codesign -f --entitlements data/macos/entitlements_dev.plist --deep --timestamp --options runtime -s - target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app
- name: Import Codesign Certs
if: ${{ github.ref_type == 'tag' }}
uses: apple-actions/import-codesign-certs@v7
with:
p12-file-base64: ${{ secrets.APPLE_CERTIFICATES_FILE_BASE64 }}
p12-password: ${{ secrets.APPLE_CERTIFICATES_PASSWORD }}
- name: Sign Bundle Release
if: ${{ github.ref_type == 'tag' }}
run: |
codesign -f --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app/Contents/Frameworks/libMoltenVK.dylib
codesign -f --entitlements data/macos/entitlements_child.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app/Contents/MacOS/gopher64-cli
codesign -f --entitlements data/macos/entitlements_prod.plist --timestamp --options runtime -s "${{ secrets.APPLE_DEVELOPER_ID }}" target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app
zip -r gopher64-${{ matrix.arch }}.zip target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app
xcrun notarytool submit --wait --apple-id "${{ secrets.APPLE_ID }}" --team-id "${{ secrets.APPLE_DEVELOPER_ID }}" --password "${{ secrets.APPLE_APP_PASSWORD }}" gopher64-${{ matrix.arch }}.zip
xcrun stapler staple target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx/Gopher64.app
- name: Upload file
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: gopher64-${{ matrix.arch }}
path: output/gopher64-${{ matrix.arch }}
path: target/${{ matrix.target }}/${{ env.BUILD_DIR }}/bundle/osx
build-android:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
platform: 33
ndk: 29.0.14206865
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
fetch-depth: 0
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
target: x86_64-linux-android,aarch64-linux-android
rustflags: ""
cache: ${{ github.ref_type != 'tag' }}
- name: Setup Android SDK
uses: android-actions/setup-android@v4
with:
packages: "platforms;android-${{ matrix.platform }} ndk;${{ matrix.ndk }}"
- name: Decode keystore and create jks
if: ${{ github.ref_type == 'tag' }}
working-directory: android-project
run: |
echo "${{ secrets.ANDROID_KEYSTORE }}" | base64 --decode > app/keystore.jks
cat <<EOF > keystore.properties
storePassword=${{ secrets.ANDROID_STORE_PASSWORD }}
keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }}
keyAlias=gopher64
storeFile=keystore.jks
EOF
- name: Build
working-directory: android-project
run: |
cargo install cargo-ndk
./gradlew assemble${{ env.BUILD_PROFILE == 'release' && 'Release' || 'Debug' }}
mkdir output
cp app/build/outputs/apk/${{ env.BUILD_DIR }}/app-${{ env.BUILD_DIR }}.apk output/gopher64-android.apk
- name: Upload file
uses: actions/upload-artifact@v7
with:
name: gopher64-android
path: android-project/output/gopher64-android.apk
archive: false
collect-artifacts:
name: Collect release artifacts
needs: [build-linux, build-windows, build-macos, build-android]
if: github.ref_type == 'tag'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download all workflow artifacts
uses: actions/download-artifact@v8
with:
skip-decompress: true
merge-multiple: true
path: release-artifacts
- name: Add files to release
uses: softprops/action-gh-release@v3
with:
draft: true
files: release-artifacts/*
- name: Setup butler
uses: remarkablegames/setup-butler@v3
- name: Upload to itch.io
run: |
butler push release-artifacts/gopher64-linux-x86_64 loganmc10/gopher64:linux-x86_64 --userversion ${GITHUB_REF_NAME#v}
butler push release-artifacts/gopher64-linux-aarch64 loganmc10/gopher64:linux-aarch64 --userversion ${GITHUB_REF_NAME#v}
butler push release-artifacts/gopher64-windows-x86_64.exe loganmc10/gopher64:windows-x86_64 --userversion ${GITHUB_REF_NAME#v}
butler push release-artifacts/gopher64-windows-aarch64.exe loganmc10/gopher64:windows-aarch64 --userversion ${GITHUB_REF_NAME#v}
butler push release-artifacts/gopher64-macos-aarch64.zip loganmc10/gopher64:macos-aarch64 --userversion ${GITHUB_REF_NAME#v}
butler push release-artifacts/gopher64-android.apk loganmc10/gopher64:android --userversion ${GITHUB_REF_NAME#v}
env:
BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }}
+33 -9
View File
@@ -5,6 +5,10 @@ on:
branches: ["main"]
pull_request:
branches: ["main"]
merge_group:
permissions:
contents: read
env:
CARGO_TERM_COLOR: always
@@ -13,26 +17,46 @@ jobs:
lint-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive
fetch-depth: 0
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
rustflags: ""
components: clippy, rustfmt
- name: Set LLVM_VERSION
run:
echo "LLVM_VERSION=$(rustc --version --verbose | grep "LLVM version" | cut
-d':' -f2 | xargs)" >> $GITHUB_ENV
- name: Install SDL Dependencies
# https://wiki.libsdl.org/SDL3/README/linux#build-dependencies
# https://wiki.libsdl.org/SDL3/README-linux#build-dependencies
uses: awalsh128/cache-apt-pkgs-action@v1
with:
packages: build-essential git make \
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \
libaudio-dev libjack-dev libsndio-dev libx11-dev libxext-dev \
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev \
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \
libpipewire-0.3-dev libwayland-dev libdecor-0-dev liburing-dev
packages: build-essential git make pkg-config cmake ninja-build
gnome-desktop-testing libasound2-dev libpulse-dev libaudio-dev
libfribidi-dev libjack-dev libsndio-dev libx11-dev libxext-dev
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev
libxtst-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev
libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev
libudev-dev libthai-dev libpipewire-0.3-dev libwayland-dev
libdecor-0-dev liburing-dev libfontconfig-dev gettext
version: lint-1.0
- name: Install LLVM and Clang
uses: KyleMayes/install-llvm-action@v2
with:
version: ${{ env.LLVM_VERSION }}
force-url:
https://github.com/llvm/llvm-project/releases/download/llvmorg-${{
env.LLVM_VERSION }}/LLVM-${{ env.LLVM_VERSION }}-Linux-X64.tar.xz
- name: Rustfmt Check
uses: actions-rust-lang/rustfmt@v1
- name: Lint
run: |
cargo install slint-tr-extractor
cargo clippy -- -Dwarnings
cargo clippy --no-default-features -- -Dwarnings
find -name \*.slint | sort | xargs slint-tr-extractor -o /tmp/translations.pot
msgcmp --use-untranslated /tmp/translations.pot data/translations/gopher64.pot
msgcmp --use-untranslated data/translations/gopher64.pot /tmp/translations.pot
find data/translations -name "*.po" | xargs -I {} msgcmp {} data/translations/gopher64.pot
+18
View File
@@ -0,0 +1,18 @@
name: Security audit
on:
workflow_dispatch:
schedule:
- cron: "0 0 * * *"
jobs:
audit:
permissions:
issues: write
checks: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- uses: rustsec/audit-check@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
+1 -1
View File
@@ -9,7 +9,7 @@ target/
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
.vscode/settings.json
# Added by cargo
/target
+8
View File
@@ -1,3 +1,11 @@
[submodule "parallel-rdp/parallel-rdp-standalone"]
path = parallel-rdp/parallel-rdp-standalone
url = https://github.com/Themaister/parallel-rdp-standalone.git
branch = master
[submodule "src/compat/sse2neon"]
path = src/compat/sse2neon
url = https://github.com/DLTcollab/sse2neon.git
branch = master
[submodule "retroachievements/rcheevos"]
path = retroachievements/rcheevos
url = https://github.com/RetroAchievements/rcheevos.git
Generated
+6206 -1426
View File
File diff suppressed because it is too large Load Diff
+56 -21
View File
@@ -1,45 +1,80 @@
[package]
name = "gopher64"
version = "1.0.10"
version = "1.1.28"
edition = "2024"
rust-version = "1.85"
rust-version = "1.96.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
default = ["gui"]
gui = ["dep:rfd", "dep:slint", "dep:open", "dep:slint-build"]
[lib]
crate-type = ["cdylib", "rlib"]
[dependencies]
dirs = "6.0"
zip = "2.1"
governor = "0.8"
sevenz-rust = "0.6"
zip = "8.0"
sevenz-rust2 = "0.21"
chrono = "0.4"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde-big-array = "0.5"
eframe = { version = "0.31", default-features = false, features = ["wayland", "x11", "wgpu"] }
sha2 = "0.10"
rusttype = "0.9"
sdl3-sys = { version = "0.4", features = ["build-from-source-static"] }
rfd = { version = "0.15", default-features = false, features = ["xdg-portal", "tokio"] }
tokio = {version = "1.43", features = ["rt-multi-thread", "macros"] }
sha2 = "0.11"
tokio = {version = "1.46", features = ["rt-multi-thread", "fs", "process"] }
spin_sleep = "1.3"
encoding_rs = "0.8"
mimalloc = "0.1"
regex = "1.11"
tungstenite = "0.26"
socket2 = "0.5"
rand_chacha = "0.9"
tokio-tungstenite = { version = "0.29", features = ["native-tls-vendored"] }
matchbox_socket = "0.14"
ggrs = { git = "https://github.com/gschup/ggrs.git", features = ["sync-send"] }
rustc-hash = "2.1"
futures = "0.3"
rand = { version = "0.10", features = ["serde"] }
fatfs = "0.3"
semver = "1.0"
postcard = { version = "1.1", features = ["use-std"] }
clap = { version = "4.5", features = ["derive"] }
reqwest = { version = "0.12", default-features = false, features = ["http2","rustls-tls","charset","json"] }
reqwest = { version = "0.13", default-features = false, features = ["native-tls-vendored", "charset", "http2", "system-proxy", "json", "query"] }
discord-rich-presence = "1.1"
[target.'cfg(not(target_os = "android"))'.dependencies]
slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "unstable-winit-030", "backend-winit", "renderer-femtovg-wgpu", "accessibility"], optional = true }
rfd = {version = "0.17", optional = true }
dirs = "6.0"
open = { version = "5.3", optional = true }
sdl3-sys = { version = "0.6", features = ["build-from-source-static"] }
sdl3-ttf-sys = { version = "0.6", features = ["build-static-vendored", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] }
sdl3-image-sys = { version = "0.6", features = ["build-static-vendored"] }
[target.'cfg(target_os = "android")'.dependencies]
slint = { version = "1.16", default-features = false, features = ["compat-1-2", "std", "backend-android-activity-06", "accessibility"], optional = true }
jni = "0.22"
sdl3-sys = { version = "0.6", features = ["build-from-source"] }
sdl3-ttf-sys = { version = "0.6", features = ["build-from-source", "no-sdlttf-harfbuzz", "no-sdlttf-plutosvg"] }
sdl3-image-sys = { version = "0.6", features = ["build-from-source"] }
[build-dependencies]
winres = "0.1"
bindgen = "0.71"
winresource = "0.1"
bindgen = "0.72"
sdl3-src = "3.4"
slint-build = { version = "1.12", optional = true }
cc = { version = "1.2", features = ["parallel"] }
[profile.release]
codegen-units = 1
strip = true
panic = "abort"
lto = "thin"
strip = true
[profile.release-with-debug]
inherits = "release"
debug = true
strip = false
panic = "unwind"
[package.metadata.bundle]
name = "Gopher64"
identifier = "io.github.gopher64.gopher64"
category = "public.app-category.games"
icon = ["data/icon/gopher64_128x128.png","data/icon/gopher64_256x256.png","data/icon/gopher64_512x512.png"]
osx_frameworks = ["/opt/homebrew/opt/molten-vk/lib/libMoltenVK.dylib"]
osx_minimum_system_version = "15.0"
+40 -18
View File
@@ -1,7 +1,31 @@
# gopher64
Gopher64 is a cross-platform N64 emulator. Some notable features:
* Netplay
* Homebrew support
* Upscaling
* CRT shader
* Emulate CPU overclocking
* Cheats
* Savestates
* RetroAchievements
## download
https://github.com/gopher64/gopher64/releases
<a href="https://loganmc10.itch.io/gopher64"><img src="https://static.itch.io/images/badge.svg" width="200" ></a>
Windows:
* Standalone executable: [gopher64-windows-x86_64.exe](https://github.com/gopher64/gopher64/releases/latest/download/gopher64-windows-x86_64.exe)
MacOS:
* App Bundle: [gopher64-macos-aarch64.zip](https://github.com/gopher64/gopher64/releases/latest/download/gopher64-macos-aarch64.zip)
* Homebrew: `brew install --cask gopher64`
Linux:
* Standalone executable: [gopher64-linux-x86_64](https://github.com/gopher64/gopher64/releases/latest/download/gopher64-linux-x86_64)
* Flatpak: `flatpak install flathub io.github.gopher64.gopher64`
Android:
* APK: [gopher64-android.apk](https://github.com/gopher64/gopher64/releases/latest/download/gopher64-android.apk)
## wiki
@@ -9,23 +33,19 @@ https://github.com/gopher64/gopher64/wiki
## discord
https://discord.gg/9RGXq8W8JQ
[Discord invite link](https://discord.gg/9RGXq8W8JQ)
## controls
Keys are mapped according to [these defaults](https://github.com/gopher64/gopher64/wiki/Default-Keyboard-Setup). Xbox-style controllers also have a [default mapping applied](https://github.com/gopher64/gopher64/wiki/Default-Gamepad-Setup).
You can create you own mappings by running `./gopher64 --configure-input-profile my_profile`. You then bind that profile to a port: `./gopher64 --bind-input-profile my_profile --port 1`
In order to use a controller (for example, an Xbox controller), run `./gopher64 --list-controllers` to get a list of attached controllers, and then assign it by doing `./gopher64 --assign-controller <controller_number> --port 1`
## netplay
Gopher64 supports netplay (online play with others). It has a few public netplay servers. If you are interested in running a public netplay server, please let me know (open an issue or discussion, or contact me on Discord). You can also run the server (https://github.com/simple64/simple64-netplay-server) yourself on a LAN.
Gopher64 supports netplay (online play with others) via cloud hosted servers. You can also run the [server](https://github.com/gopher64/gopher64-netplay-server) yourself on a LAN.
## portable mode
If you would like to keep all the game data in the same folder as executable, you just need to create a file called "portable.txt" in the same directory as the executable.
If you would like to keep all the game data in the same folder as the executable, you just need to create a file called "portable.txt" in the same directory as the executable.
## flatpak
@@ -35,16 +55,10 @@ If you want to run the flatpak from the command line, you need to add the `--fil
flatpak run --filesystem=host:ro io.github.gopher64.gopher64 /path/to/rom.z64
```
## goals
1. Performance. I want to be able to use this emulator on my laptop.
2. Easy to use.
3. Easy to work on. Dynamic recompilers perform well, but they are very hard to read and understand. This emulator will only have interpreters for the CPU and RSP. Additionally, it is completely written in Rust (besides Parallel-RDP), a modern programming language with a growing user base. I've tried to avoid the use of macros, which can reduce some repetitiveness in the code, but also reduce readability.
## building and usage
1. Linux only: install the SDL3 dependencies: https://wiki.libsdl.org/SDL3/README/linux
2. Install rust: https://www.rust-lang.org/tools/install
1. Linux only: [install the SDL3 dependencies](https://wiki.libsdl.org/SDL3/README-linux#build-dependencies)
2. [Install rust](https://www.rust-lang.org/tools/install)
3. `git clone --recursive https://github.com/gopher64/gopher64.git`
4. `cd gopher64`
5. `cargo build --release`
@@ -52,8 +66,16 @@ flatpak run --filesystem=host:ro io.github.gopher64.gopher64 /path/to/rom.z64
## contributing
I am very open to contributions! Please reach out to me via a GitHub issue, or via discord (loganmc10) before doing substantial work on a PR.
I am very open to contributions! Please contact me via a GitHub issue or Discord (loganmc10) before doing substantial work on a PR.
## license
Gopher64 is licensed under the GPLv3 license. Many portions of gopher64 have been adapted from mupen64plus and/or ares. The license for mupen64plus can be found here: https://github.com/mupen64plus/mupen64plus-core/blob/master/LICENSES. The license for ares can be found here: https://github.com/ares-emulator/ares/blob/master/LICENSE.
Gopher64 is licensed under the GPLv3 license. Many portions of gopher64 have been adapted from mupen64plus and/or ares. The license for mupen64plus can be found [here](https://github.com/mupen64plus/mupen64plus-core/blob/master/LICENSES). The license for ares can be found [here](https://github.com/ares-emulator/ares/blob/master/LICENSE).
## privacy and code signing policy
Free code signing for the Windows release is provided by [SignPath.io](https://about.signpath.io), certificate by [SignPath Foundation](https://signpath.org).
During online netplay sessions, the server logs your IP address and basic session information (game title and session name) for operational purposes. No additional personal data is collected or stored.
If you enable the RetroAchievements feature, some data is sent to their systems. Please see their terms [here](https://retroachievements.org/terms).
+39
View File
@@ -0,0 +1,39 @@
# Gradle files
.gradle/
build/
jniLibs/
# Local configuration file (sdk path, etc)
local.properties
keystore.properties
# Log/OS Files
*.log
# Android Studio generated files and folders
captures/
.externalNativeBuild/
.cxx/
*.aab
*.apk
output-metadata.json
# IntelliJ
*.iml
.idea/
misc.xml
deploymentTargetDropDown.xml
render.experimental.xml
# Keystore files
*.jks
*.keystore
# Google Services (e.g. APIs or Firebase)
google-services.json
# Android Profiling
*.hprof
app/src/main/java/org/libsdl/app/
+4
View File
@@ -0,0 +1,4 @@
set(ANDROID_PLATFORM $ENV{ANDROID_PLATFORM})
set(ANDROID_ABI $ENV{ANDROID_ABI})
set(ANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES ON)
include("$ENV{ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake")
+161
View File
@@ -0,0 +1,161 @@
import groovy.json.JsonSlurper
import java.util.Properties
import java.io.FileInputStream
plugins {
alias(libs.plugins.android.application)
}
kotlin {
jvmToolchain(17)
}
val keystorePropertiesFile = rootProject.file("keystore.properties")
val keystoreProperties = Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
android {
namespace = "io.github.gopher64.gopher64"
compileSdk {
version = release(36) {
minorApiLevel = 1
}
}
ndkVersion = "29.0.14206865"
defaultConfig {
applicationId = "io.github.gopher64.gopher64"
minSdk = 33
targetSdk = 36
versionCode = semverToVersionCode(cargoPackageVersion())
versionName = cargoPackageVersion()
ndk {
abiFilters.addAll(listOf("arm64-v8a", "x86_64"))
}
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
signingConfigs {
if (keystorePropertiesFile.exists()) {
create("release") {
keyAlias = keystoreProperties["keyAlias"] as String
keyPassword = keystoreProperties["keyPassword"] as String
storeFile = file(keystoreProperties["storeFile"] as String)
storePassword = keystoreProperties["storePassword"] as String
}
}
}
buildTypes {
release {
if (keystorePropertiesFile.exists()) {
signingConfig = signingConfigs["release"]
}
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
packaging {
jniLibs {
excludes.add("lib/**/libsevenz_rust2*.so")
}
}
}
@Suppress("UNCHECKED_CAST")
fun cargoPackageVersion(packageName: String = "gopher64"): String {
val repoRoot = rootDir.parentFile
val jsonText = providers.exec {
workingDir(repoRoot)
commandLine("cargo", "metadata", "--format-version", "1", "--no-deps")
}.standardOutput.asText.get()
val parsedJson = JsonSlurper().parseText(jsonText) as Map<String, Any>
val packages = parsedJson["packages"] as List<Map<String, Any>>
return packages.first { it["name"] == packageName }["version"] as String
}
fun semverToVersionCode(version: String): Int {
val parts = version.substringBefore('-').split(".")
val (major, minor, patch) = Triple(parts[0].toInt(), parts[1].toInt(), parts[2].toInt())
return major * 1_000_000 + minor * 1_000 + patch
}
val ndkBuild = tasks.register<Exec>("ndkBuild") {
val isRelease = gradle.startParameter.taskNames.any { it.endsWith("Release", ignoreCase = true) }
workingDir = rootDir.parentFile
val toolchainPath = "$rootDir/android.toolchain.cmake"
environment("CMAKE_TOOLCHAIN_FILE", toolchainPath)
var minSdk = android.defaultConfig.minSdk
var ndkDir = androidComponents.sdkComponents.ndkDirectory.get().asFile.absolutePath
environment("ANDROID_NDK_HOME", "$ndkDir")
environment("ANDROID_NDK_ROOT", "$ndkDir")
environment("LIBCLANG_PATH", "$ndkDir/toolchains/llvm/prebuilt/linux-x86_64/musl/lib")
val jniType = if (isRelease) "release" else "debug"
val jniLibsFolder = "$rootDir/app/src/$jniType/jniLibs"
commandLine(
"cargo", "ndk",
"--link-libcxx-shared",
"-P", "$minSdk",
"-t", "arm64-v8a",
"-t", "x86_64",
"-o", jniLibsFolder,
"build", "--lib",
"--profile", if (isRelease) "release" else "dev",
)
}
val sdlLibsArm64 = tasks.register<Copy>("sdlLibsArm64") {
val isRelease = gradle.startParameter.taskNames.any { it.endsWith("Release", ignoreCase = true) }
val jniType = if (isRelease) "release" else "debug"
val jniLibsFolder = "$rootDir/app/src/$jniType/jniLibs/arm64-v8a"
from("$rootDir/../target/aarch64-linux-android/$jniType")
into(jniLibsFolder)
include("libSDL*")
}
val sdlLibsX64 = tasks.register<Copy>("sdlLibsX64") {
val isRelease = gradle.startParameter.taskNames.any { it.endsWith("Release", ignoreCase = true) }
val jniType = if (isRelease) "release" else "debug"
val jniLibsFolder = "$rootDir/app/src/$jniType/jniLibs/x86_64"
from("$rootDir/../target/x86_64-linux-android/$jniType")
into(jniLibsFolder)
include("libSDL*")
}
tasks.named("preBuild") {
dependsOn(sdlLibsArm64)
dependsOn(sdlLibsX64)
}
tasks.named("sdlLibsArm64") {
dependsOn(ndkBuild)
}
tasks.named("sdlLibsX64") {
dependsOn(ndkBuild)
}
dependencies {
implementation(libs.androidx.appcompat)
implementation(libs.androidx.core.ktx)
implementation(libs.material)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(libs.androidx.junit)
}
+82
View File
@@ -0,0 +1,82 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLActivity {
java.lang.String nativeGetHint(java.lang.String); # Java-side doesn't use this, so it gets minified, but C-side still tries to register it
java.lang.String clipboardGetText();
boolean clipboardHasText();
void clipboardSetText(java.lang.String);
int createCustomCursor(int[], int, int, int, int);
void destroyCustomCursor(int);
android.app.Activity getContext();
boolean getManifestEnvironmentVariables();
android.view.Surface getNativeSurface();
void initTouch();
boolean isAndroidTV();
boolean isChromebook();
boolean isDeXMode();
boolean isTablet();
void manualBackButton();
int messageboxShowMessageBox(int, java.lang.String, java.lang.String, int[], int[], java.lang.String[], int[]);
void minimizeWindow();
boolean openURL(java.lang.String);
void requestPermission(java.lang.String, int);
boolean showToast(java.lang.String, int, int, int, int);
boolean sendMessage(int, int);
boolean setActivityTitle(java.lang.String);
boolean setCustomCursor(int);
void setOrientation(int, int, boolean, java.lang.String);
boolean setRelativeMouseEnabled(boolean);
boolean setSystemCursor(int);
void setWindowStyle(boolean);
boolean shouldMinimizeOnFocusLoss();
boolean showTextInput(int, int, int, int, int);
boolean supportsRelativeMouse();
int openFileDescriptor(java.lang.String, java.lang.String);
boolean showFileDialog(java.lang.String[], boolean, boolean, int);
java.lang.String getPreferredLocales();
java.lang.String formatLocale(java.util.Locale);
}
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.HIDDeviceManager {
void closeDevice(int);
boolean initialize(boolean, boolean);
boolean openDevice(int);
boolean readReport(int, byte[], boolean);
int writeReport(int, byte[], boolean);
}
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLAudioManager {
void registerAudioDeviceCallback();
void unregisterAudioDeviceCallback();
void audioSetThreadPriority(boolean, int);
}
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLControllerManager {
void joystickSetSensorsEnabled(int, boolean);
void pollInputDevices();
void joystickSetLED(int, int, int, int);
void pollHapticDevices();
void hapticRun(int, float, int);
void hapticRumble(int, float, float, int);
void hapticStop(int);
}
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-feature android:name="android.hardware.vulkan.version" android:required="true"
android:version="0x00401000" />
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
<uses-feature
android:name="android.hardware.gamepad"
android:required="false" />
<uses-feature
android:name="android.hardware.usb.host"
android:required="false" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:icon="@mipmap/ic_launcher"
android:label="Gopher64"
android:appCategory="game"
android:hardwareAccelerated="true">
<activity android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
android:name=".SlintActivity" android:exported="true">
<meta-data android:name="android.app.lib_name" android:value="gopher64" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".N64Activity"
android:launchMode="singleTop"
android:configChanges="layoutDirection|locale|grammaticalGender|fontScale|fontWeightAdjustment|orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
android:preferMinimalPostProcessing="true"
android:exported="false">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
</activity>
</application>
</manifest>
@@ -0,0 +1,49 @@
package io.github.gopher64.gopher64
import android.content.Intent
import android.os.PowerManager
import android.content.Context
import android.os.Bundle
import android.util.Log
import org.libsdl.app.SDLActivity
class N64Activity : SDLActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val powerManager = getContext().getSystemService(Context.POWER_SERVICE) as PowerManager
if (powerManager.isSustainedPerformanceModeSupported) {
Log.v("SDL", "Enabling sustained performance mode")
window.setSustainedPerformanceMode(true)
} else {
Log.v("SDL", "Sustained performance mode not supported")
}
}
override fun getLibraries(): Array<String> = arrayOf(
"SDL3",
"SDL3_ttf",
"SDL3_image",
"gopher64"
)
override fun getMainFunction(): String = "gopher64_sdl_main"
override fun getArguments(): Array<String> {
val intent = intent ?: return super.getArguments()
val args = intent.getStringArrayExtra("args") ?: return super.getArguments()
val dataIntent = Intent()
val file_path = intent.getStringExtra("file_path")
if (file_path != null) {
dataIntent.putExtra("file_path", file_path)
}
val cheats_path = intent.getStringExtra("cheats_path")
if (cheats_path != null) {
dataIntent.putExtra("cheats_path", cheats_path)
}
setResult(RESULT_OK, dataIntent)
return args
}
}
@@ -0,0 +1,19 @@
package io.github.gopher64.gopher64
import android.app.NativeActivity
import android.content.Intent
class SlintActivity : NativeActivity() {
companion object {
init {
System.loadLibrary("gopher64")
}
}
private external fun nativeOnActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
nativeOnActivityResult(requestCode, resultCode, data)
}
}
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#419567</color>
</resources>
+4
View File
@@ -0,0 +1,4 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
alias(libs.plugins.android.application) apply false
}
+15
View File
@@ -0,0 +1,15 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. For more details, visit
# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
# org.gradle.parallel=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
@@ -0,0 +1,12 @@
#This file is generated by updateDaemonJvm
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73bcfb608d1fde9fb62e462f834a3299/redirect
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/846ee0d876d26a26f37aa1ce8de73224/redirect
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/9482ddec596298c84656d31d16652665/redirect
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/39701d92e1756bb2f141eb67cd4c660e/redirect
toolchainVersion=21
+20
View File
@@ -0,0 +1,20 @@
[versions]
agp = "9.2.1"
coreKtx = "1.18.0"
junit = "4.13.2"
junitVersion = "1.3.0"
espressoCore = "3.7.0"
appcompat = "1.7.1"
material = "1.14.0"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
Binary file not shown.
@@ -0,0 +1,9 @@
#Thu May 21 08:40:22 CEST 2026
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=2ab2958f2a1e51120c326cad6f385153bb11ee93b3c216c5fccebfdfbb7ec6cb
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Vendored Executable
+251
View File
@@ -0,0 +1,251 @@
#!/bin/sh
#
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"
+94
View File
@@ -0,0 +1,94 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:execute
@rem Setup the command line
set CLASSPATH=
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
+26
View File
@@ -0,0 +1,26 @@
pluginManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
gradlePluginPortal()
}
}
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "Gopher64"
include(":app")
+204 -45
View File
@@ -1,13 +1,29 @@
fn main() {
println!("cargo::rerun-if-changed=parallel-rdp");
println!("cargo::rerun-if-changed=retroachievements");
println!("cargo::rerun-if-changed=src/compat");
println!("cargo::rerun-if-changed=data/translations");
println!("cargo::rerun-if-changed=data/ui");
#[cfg(feature = "gui")]
{
let slint_config = slint_build::CompilerConfiguration::new()
.with_bundled_translations("data/translations");
slint_build::compile_with_config("src/ui/gui/appwindow.slint", slint_config).unwrap();
}
let mut simd_build = cc::Build::new();
let mut build = cc::Build::new();
build
let mut volk_build = cc::Build::new();
volk_build
.std("c17")
.include("parallel-rdp/parallel-rdp-standalone/vulkan-headers/include")
.file("parallel-rdp/parallel-rdp-standalone/volk/volk.c");
let mut rdp_build = cc::Build::new();
rdp_build
.cpp(true)
.warnings(false)
.std("c++17")
.std("c++20")
.flag("-Wno-unused-parameter")
.flag("-Wno-missing-field-initializers")
.file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/command_ring.cpp")
.file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_device.cpp")
.file("parallel-rdp/parallel-rdp-standalone/parallel-rdp/rdp_dump_write.cpp")
@@ -44,7 +60,6 @@ fn main() {
.file("parallel-rdp/parallel-rdp-standalone/util/timeline_trace_file.cpp")
.file("parallel-rdp/parallel-rdp-standalone/util/environment.cpp")
.file("parallel-rdp/parallel-rdp-standalone/util/thread_name.cpp")
.file("parallel-rdp/parallel-rdp-standalone/volk/volk.c")
.file("parallel-rdp/interface.cpp")
.file("parallel-rdp/wsi_platform.cpp")
.include("parallel-rdp/parallel-rdp-standalone/parallel-rdp")
@@ -53,56 +68,147 @@ fn main() {
.include("parallel-rdp/parallel-rdp-standalone/vulkan-headers/include")
.include("parallel-rdp/parallel-rdp-standalone/util")
.include(
std::path::PathBuf::from(std::env::var("DEP_SDL3_OUT_DIR").to_owned().unwrap())
std::path::PathBuf::from(std::env::var("DEP_SDL3_OUT_DIR").unwrap()).join("include"),
)
.include(
std::path::PathBuf::from(std::env::var("DEP_SDL3_TTF_OUT_DIR").unwrap())
.join("include"),
);
let mut retroachievements_build = cc::Build::new();
retroachievements_build
.flag("-Wno-unused-parameter")
.include("retroachievements/rcheevos/include")
.flag("-DRC_CLIENT_SUPPORTS_HASH")
.file("retroachievements/rcheevos/src/rc_client.c")
.file("retroachievements/rcheevos/src/rc_compat.c")
.file("retroachievements/rcheevos/src/rc_util.c")
.file("retroachievements/rcheevos/src/rcheevos/alloc.c")
.file("retroachievements/rcheevos/src/rcheevos/condition.c")
.file("retroachievements/rcheevos/src/rcheevos/condset.c")
.file("retroachievements/rcheevos/src/rcheevos/consoleinfo.c")
.file("retroachievements/rcheevos/src/rcheevos/format.c")
.file("retroachievements/rcheevos/src/rcheevos/lboard.c")
.file("retroachievements/rcheevos/src/rcheevos/memref.c")
.file("retroachievements/rcheevos/src/rcheevos/operand.c")
.file("retroachievements/rcheevos/src/rcheevos/richpresence.c")
.file("retroachievements/rcheevos/src/rcheevos/runtime.c")
.file("retroachievements/rcheevos/src/rcheevos/runtime_progress.c")
.file("retroachievements/rcheevos/src/rcheevos/trigger.c")
.file("retroachievements/rcheevos/src/rcheevos/value.c")
.file("retroachievements/rcheevos/src/rapi/rc_api_common.c")
.file("retroachievements/rcheevos/src/rapi/rc_api_info.c")
.file("retroachievements/rcheevos/src/rapi/rc_api_runtime.c")
.file("retroachievements/rcheevos/src/rapi/rc_api_user.c")
.file("retroachievements/rcheevos/src/rhash/aes.c")
.file("retroachievements/rcheevos/src/rhash/cdreader.c")
.file("retroachievements/rcheevos/src/rhash/md5.c")
.file("retroachievements/rcheevos/src/rhash/hash.c")
.file("retroachievements/rcheevos/src/rhash/hash_disc.c")
.file("retroachievements/rcheevos/src/rhash/hash_encrypted.c")
.file("retroachievements/rcheevos/src/rhash/hash_rom.c")
.file("retroachievements/rcheevos/src/rhash/hash_zip.c")
.file("retroachievements/retroachievements.c");
let os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
let arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap();
if os == "windows" {
if arch == "x86_64" {
build.flag("/arch:AVX2");
} else if arch == "aarch64" {
panic!("unsupported platform")
} else {
panic!("unknown arch")
}
build.flag("-DVK_USE_PLATFORM_WIN32_KHR");
let opt_flag = if arch == "x86_64" {
"-march=x86-64-v3"
} else if arch == "aarch64" && os == "macos" {
"-march=armv8.4-a"
} else if arch == "aarch64" && os != "macos" {
"-march=armv8.2-a"
} else {
panic!("unknown arch")
};
winres::WindowsResource::new()
.set_icon("data/icon.ico")
volk_build.flag(opt_flag);
rdp_build.flag(opt_flag);
simd_build.flag(opt_flag);
retroachievements_build.flag(opt_flag);
if os == "windows" {
volk_build.flag("-DVK_USE_PLATFORM_WIN32_KHR");
rdp_build.flag("-DVK_USE_PLATFORM_WIN32_KHR");
winresource::WindowsResource::new()
.set_icon("data/icon/icon.ico")
.compile()
.unwrap();
} else if os == "linux" || os == "macos" {
if arch == "x86_64" {
build.flag("-march=x86-64-v3");
} else if arch == "aarch64" {
build.flag("-march=armv8.2-a");
simd_build.flag("-march=armv8.2-a");
simd_build.flag("-DSSE2NEON_SUPPRESS_WARNINGS");
simd_build.file("src/compat/aarch64.c");
} else {
panic!("unknown arch")
}
} else {
panic!("unknown OS")
} else if os == "macos" {
let output = std::process::Command::new("clang")
.args(["--print-runtime-dir"])
.output()
.unwrap();
let runtime_dir = String::from_utf8_lossy(&output.stdout).trim().to_string();
println!("cargo:rustc-link-search=native={}", runtime_dir);
println!("cargo:rustc-link-lib=static=clang_rt.osx");
}
build.compile("parallel-rdp");
volk_build.flag("-flto=thin");
rdp_build.flag("-flto=thin");
simd_build.flag("-flto=thin");
retroachievements_build.flag("-flto=thin");
volk_build.compile("volk");
rdp_build.compile("parallel-rdp");
retroachievements_build.compile("retroachievements");
let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap());
let mut retroachievements_builder = bindgen::Builder::default()
.header("retroachievements/retroachievements.h")
.allowlist_function("ra_init_client")
.allowlist_function("ra_welcome")
.allowlist_function("ra_shutdown_client")
.allowlist_function("ra_get_hardcore")
.allowlist_function("ra_load_game")
.allowlist_function("ra_unload_game")
.allowlist_function("ra_set_rdram")
.allowlist_function("ra_do_frame")
.allowlist_function("ra_do_idle")
.allowlist_function("ra_http_callback")
.allowlist_function("ra_login_user")
.allowlist_function("ra_login_token_user")
.allowlist_function("ra_state_size")
.allowlist_function("ra_save_state")
.allowlist_function("ra_load_state")
.allowlist_function("ra_get_rich_presence");
if cfg!(feature = "gui") {
retroachievements_builder = retroachievements_builder
.allowlist_function("ra_logout_user")
.allowlist_function("ra_get_username");
}
let retroachievements_bindings = retroachievements_builder
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.generate()
.expect("Unable to generate bindings");
retroachievements_bindings
.write_to_file(out_path.join("retroachievements_bindings.rs"))
.expect("Couldn't write bindings!");
let parallel_bindings = bindgen::Builder::default()
.header("parallel-rdp/interface.hpp")
.allowlist_function("rdp_init")
.allowlist_function("rdp_close")
.allowlist_function("rdp_set_vi_register")
.allowlist_function("rdp_update_screen")
.allowlist_function("rdp_render_frame")
.allowlist_function("rdp_process_commands")
.allowlist_function("rdp_onscreen_message")
.allowlist_function("rdp_check_callback")
.allowlist_function("rdp_new_processor")
.allowlist_function("rdp_check_framebuffers")
.allowlist_function("rdp_full_sync")
.allowlist_function("rdp_state_size")
.allowlist_function("rdp_save_state")
.allowlist_function("rdp_load_state")
.allowlist_function("rdp_idle")
.allowlist_function("rdp_set_fps")
.allowlist_function("get_joystick_event")
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.generate()
.expect("Unable to generate bindings");
@@ -113,7 +219,7 @@ fn main() {
if arch == "aarch64" {
let simd_bindings = bindgen::Builder::default()
.header("src/compat/sse2neon/v1.8.0/sse2neon.h")
.header("src/compat/sse2neon/sse2neon.h")
.allowlist_function("_mm_setzero_si128")
.allowlist_function("_mm_set_epi8")
.allowlist_function("_mm_movemask_epi8")
@@ -147,6 +253,7 @@ fn main() {
.allowlist_function("_mm_cmplt_epi16")
.allowlist_function("_mm_subs_epu16")
.allowlist_function("_mm_set1_epi32")
.allowlist_function("_mm_set1_epi16")
.blocklist_type("__m128i")
.blocklist_type("int64x2_t")
.wrap_static_fns(true)
@@ -158,18 +265,70 @@ fn main() {
.write_to_file(out_path.join("simd_bindings.rs"))
.expect("Couldn't write bindings!");
simd_build.file(std::env::temp_dir().join("bindgen").join("extern.c"));
simd_build.include(".");
simd_build.compile("simd");
simd_build
.std("c17")
.flag("-D_POSIX_C_SOURCE=200112L")
.flag("-DSSE2NEON_SUPPRESS_WARNINGS")
.file("src/compat/aarch64.c")
.file(std::env::temp_dir().join("bindgen").join("extern.c"))
.include(".")
.compile("simd");
}
let git_output = std::process::Command::new("git")
.args(["rev-parse", "HEAD"])
.output()
let mut git_output = std::process::Command::new("git");
git_output.args(["describe", "--dirty"]);
let git_describe = if let Ok(git_output) = git_output.output()
&& git_output.status.success()
{
String::from_utf8(git_output.stdout).unwrap()
} else if let Ok(git_output) = git_output.args(["--always"]).output()
&& git_output.status.success()
{
format!(
"v{}-{}",
env!("CARGO_PKG_VERSION"),
String::from_utf8(git_output.stdout).unwrap()
)
} else {
panic!("Failed to get git describe");
};
println!("cargo:rustc-env=GIT_DESCRIBE={git_describe}");
println!("cargo:rerun-if-env-changed=NETPLAY_ID");
let netplay_id = std::env::var("NETPLAY_ID").unwrap_or("gopher64".to_string());
println!("cargo:rustc-env=NETPLAY_ID={netplay_id}");
println!("cargo:rerun-if-env-changed=RA_HARDCORE");
println!("cargo:rustc-check-cfg=cfg(ra_hardcore_enabled)");
if let Ok(ra_hardcore) = std::env::var("RA_HARDCORE")
&& ra_hardcore.to_lowercase() == "true"
{
println!("cargo:rustc-cfg=ra_hardcore_enabled");
}
if os == "android" {
copy_dir_all(
std::path::Path::new(sdl3_src::SOURCE_DIR)
.join("android-project/app/src/main/java/org/libsdl/app"),
"android-project/app/src/main/java/org/libsdl/app",
)
.unwrap();
let git_hash = String::from_utf8(git_output.stdout).unwrap();
println!("cargo:rustc-env=GIT_HASH={}", git_hash);
println!("cargo:rustc-env=N64_STACK_SIZE={}", 8 * 1024 * 1024);
}
}
fn copy_dir_all(
src: impl AsRef<std::path::Path>,
dst: impl AsRef<std::path::Path>,
) -> std::io::Result<()> {
std::fs::create_dir_all(&dst)?;
for entry in std::fs::read_dir(src)? {
let entry = entry?;
let ty = entry.file_type()?;
if ty.is_dir() {
copy_dir_all(entry.path(), dst.as_ref().join(entry.file_name()))?;
} else {
std::fs::copy(entry.path(), dst.as_ref().join(entry.file_name()))?;
}
}
Ok(())
}
Binary file not shown.
Binary file not shown.
+1
View File
File diff suppressed because one or more lines are too long
Binary file not shown.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 79 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

+6
View File
@@ -0,0 +1,6 @@
#!/bin/bash
magick gopher64.png -resize 512x512 gopher64_512x512.png
magick gopher64.png -resize 256x256 gopher64_256x256.png
magick gopher64.png -resize 128x128 gopher64_128x128.png
magick gopher64.png -resize 256x256 icon.ico
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
</dict>
</plist>
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
<key>com.apple.security.device.usb</key>
<true/>
<key>com.apple.security.device.bluetooth</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
</dict>
</plist>
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+135
View File
@@ -0,0 +1,135 @@
#version 450
/*
CRT Shader by EasyMode
License: GPL
*/
layout(push_constant) uniform Push
{
vec4 SourceSize;
vec4 OutputSize;
} params;
#define SHARPNESS_IMAGE 1.0
#define SHARPNESS_EDGES 3.0
#define GLOW_WIDTH 0.5
#define GLOW_HEIGHT 0.5
#define GLOW_HALATION 0.1
#define GLOW_DIFFUSION 0.05
#define MASK_COLORS 2.0
#define MASK_STRENGTH 0.3
#define MASK_SIZE 1.0
#define SCANLINE_SIZE_MIN 0.5
#define SCANLINE_SIZE_MAX 1.5
#define SCANLINE_SHAPE 2.5
#define SCANLINE_OFFSET 1.0
#define GAMMA_INPUT 2.4
#define GAMMA_OUTPUT 2.4
#define BRIGHTNESS 1.5
layout(std140, set = 0, binding = 0) uniform UBO
{
mat4 MVP;
} global;
#define FIX(c) max(abs(c), 1e-5)
#define PI 3.141592653589
#define TEX2D(c) pow(texture(tex, c).rgb, vec3(GAMMA_INPUT))
#define saturate(c) clamp(c, 0.0, 1.0)
mat3x3 get_color_matrix(sampler2D tex, vec2 co, vec2 dx)
{
return mat3x3(TEX2D(co - dx), TEX2D(co), TEX2D(co + dx));
}
vec3 blur(mat3 m, float dist, float rad)
{
vec3 x = vec3(dist - 1.0, dist, dist + 1.0) / rad;
vec3 w = exp2(x * x * -1.0);
return (m[0] * w.x + m[1] * w.y + m[2] * w.z) / (w.x + w.y + w.z);
}
vec3 filter_gaussian(sampler2D tex, vec2 co, vec2 tex_size)
{
vec2 dx = vec2(1.0 / tex_size.x, 0.0);
vec2 dy = vec2(0.0, 1.0 / tex_size.y);
vec2 pix_co = co * tex_size;
vec2 tex_co = (floor(pix_co) + 0.5) / tex_size;
vec2 dist = (fract(pix_co) - 0.5) * -1.0;
mat3x3 line0 = get_color_matrix(tex, tex_co - dy, dx);
mat3x3 line1 = get_color_matrix(tex, tex_co, dx);
mat3x3 line2 = get_color_matrix(tex, tex_co + dy, dx);
mat3x3 column = mat3x3(blur(line0, dist.x, GLOW_WIDTH),
blur(line1, dist.x, GLOW_WIDTH),
blur(line2, dist.x, GLOW_WIDTH));
return blur(column, dist.y, GLOW_HEIGHT);
}
vec3 filter_lanczos(sampler2D tex, vec2 co, vec2 tex_size, float sharp)
{
tex_size.x *= sharp;
vec2 dx = vec2(1.0 / tex_size.x, 0.0);
vec2 pix_co = co * tex_size - vec2(0.5, 0.0);
vec2 tex_co = (floor(pix_co) + vec2(0.5, 0.001)) / tex_size;
vec2 dist = fract(pix_co);
vec4 coef = PI * vec4(dist.x + 1.0, dist.x, dist.x - 1.0, dist.x - 2.0);
coef = FIX(coef);
coef = 2.0 * sin(coef) * sin(coef / 2.0) / (coef * coef);
coef /= dot(coef, vec4(1.0));
vec4 col1 = vec4(TEX2D(tex_co), 1.0);
vec4 col2 = vec4(TEX2D(tex_co + dx), 1.0);
return (mat4x4(col1, col1, col2, col2) * coef).rgb;
}
vec3 get_scanline_weight(float x, vec3 col)
{
vec3 beam = mix(vec3(SCANLINE_SIZE_MIN), vec3(SCANLINE_SIZE_MAX), pow(col, vec3(1.0 / SCANLINE_SHAPE)));
vec3 x_mul = 2.0 / beam;
vec3 x_offset = x_mul * 0.5;
return smoothstep(0.0, 1.0, 1.0 - abs(x * x_mul - x_offset)) * x_offset;
}
vec3 get_mask_weight(float x)
{
float i = mod(floor(x * params.OutputSize.x * params.SourceSize.x / (params.SourceSize.x * MASK_SIZE)), MASK_COLORS);
if (i == 0.0) return mix(vec3(1.0, 0.0, 1.0), vec3(1.0, 0.0, 0.0), MASK_COLORS - 2.0);
else if (i == 1.0) return vec3(0.0, 1.0, 0.0);
else return vec3(0.0, 0.0, 1.0);
}
#pragma stage fragment
layout(location = 0) in vec2 vTexCoord;
layout(location = 0) out vec4 FragColor;
layout(set = 0, binding = 0) uniform sampler2D Source;
void main()
{
float scale = floor(params.OutputSize.y * params.SourceSize.w);
float offset = 1.0 / scale * 0.5;
if (bool(mod(scale, 2.0))) offset = 0.0;
vec2 co = (vTexCoord * params.SourceSize.xy - vec2(0.0, offset * SCANLINE_OFFSET)) * params.SourceSize.zw;
vec3 col_glow = filter_gaussian(Source, co, params.SourceSize.xy);
vec3 col_soft = filter_lanczos(Source, co, params.SourceSize.xy, SHARPNESS_IMAGE);
vec3 col_sharp = filter_lanczos(Source, co, params.SourceSize.xy, SHARPNESS_EDGES);
vec3 col = sqrt(col_sharp * col_soft);
col *= get_scanline_weight(fract(co.y * params.SourceSize.y), col_soft);
col_glow = saturate(col_glow - col);
col += col_glow * col_glow * GLOW_HALATION;
col = mix(col, col * get_mask_weight(vTexCoord.x) * MASK_COLORS, MASK_STRENGTH);
col += col_glow * GLOW_DIFFUSION;
col = pow(col * BRIGHTNESS, vec3(1.0 / GAMMA_OUTPUT));
FragColor = vec4(col, 1.0);
}
+453
View File
@@ -0,0 +1,453 @@
{0x07230203,0x00010300,0x000d000b,0x000004fd,
0x00000000,0x00020011,0x00000001,0x0006000b,
0x00000001,0x4c534c47,0x6474732e,0x3035342e,
0x00000000,0x0003000e,0x00000000,0x00000001,
0x0007000f,0x00000004,0x00000004,0x6e69616d,
0x00000000,0x000001ba,0x0000021a,0x00030010,
0x00000004,0x00000007,0x00030047,0x00000185,
0x00000002,0x00050048,0x00000185,0x00000000,
0x00000023,0x00000000,0x00050048,0x00000185,
0x00000001,0x00000023,0x00000010,0x00040047,
0x000001ba,0x0000001e,0x00000000,0x00040047,
0x000001ca,0x00000021,0x00000000,0x00040047,
0x000001ca,0x00000022,0x00000000,0x00040047,
0x0000021a,0x0000001e,0x00000000,0x00020013,
0x00000002,0x00030021,0x00000003,0x00000002,
0x00030016,0x00000006,0x00000020,0x00090019,
0x00000007,0x00000006,0x00000001,0x00000000,
0x00000000,0x00000000,0x00000001,0x00000000,
0x0003001b,0x00000008,0x00000007,0x00040020,
0x00000009,0x00000000,0x00000008,0x00040017,
0x0000000a,0x00000006,0x00000002,0x00040017,
0x0000000c,0x00000006,0x00000003,0x00040017,
0x00000037,0x00000006,0x00000004,0x0004002b,
0x00000006,0x0000003a,0x4019999a,0x0006002c,
0x0000000c,0x0000003b,0x0000003a,0x0000003a,
0x0000003a,0x0004002b,0x00000006,0x00000049,
0x3f800000,0x0004002b,0x00000006,0x0000004a,
0x00000000,0x0004002b,0x00000006,0x00000068,
0xbf800000,0x00040015,0x0000006b,0x00000020,
0x00000001,0x0004002b,0x0000006b,0x0000006c,
0x00000000,0x00040015,0x0000006f,0x00000020,
0x00000000,0x0004002b,0x0000006f,0x00000070,
0x00000000,0x0004002b,0x0000006b,0x00000074,
0x00000001,0x0004002b,0x0000006f,0x00000077,
0x00000001,0x0004002b,0x00000006,0x000000a1,
0x3f000000,0x0005002c,0x0000000a,0x000000fc,
0x000000a1,0x0000004a,0x0004002b,0x00000006,
0x00000101,0x3a83126f,0x0005002c,0x0000000a,
0x00000102,0x000000a1,0x00000101,0x0004002b,
0x00000006,0x0000010b,0x40490fdb,0x0004002b,
0x00000006,0x00000116,0x40000000,0x0004002b,
0x00000006,0x0000011c,0x3727c5ac,0x0007002c,
0x00000037,0x0000012c,0x00000049,0x00000049,
0x00000049,0x00000049,0x00040018,0x00000149,
0x00000037,0x00000004,0x0006002c,0x0000000c,
0x00000165,0x000000a1,0x000000a1,0x000000a1,
0x0004002b,0x00000006,0x00000166,0x3fc00000,
0x0006002c,0x0000000c,0x00000167,0x00000166,
0x00000166,0x00000166,0x0004002b,0x00000006,
0x00000169,0x3ecccccd,0x0006002c,0x0000000c,
0x0000016a,0x00000169,0x00000169,0x00000169,
0x0004001e,0x00000185,0x00000037,0x00000037,
0x00040020,0x00000186,0x00000009,0x00000185,
0x0004003b,0x00000186,0x00000187,0x00000009,
0x00040020,0x00000188,0x00000009,0x00000006,
0x00020014,0x00000196,0x0006002c,0x0000000c,
0x0000019a,0x00000049,0x0000004a,0x00000049,
0x0006002c,0x0000000c,0x000001a1,0x0000004a,
0x00000049,0x0000004a,0x0006002c,0x0000000c,
0x000001a4,0x0000004a,0x0000004a,0x00000049,
0x0004002b,0x0000006f,0x000001aa,0x00000003,
0x00040020,0x000001b9,0x00000001,0x0000000a,
0x0004003b,0x000001b9,0x000001ba,0x00000001,
0x00040020,0x000001bc,0x00000009,0x00000037,
0x0004003b,0x00000009,0x000001ca,0x00000000,
0x0004002b,0x00000006,0x000001dc,0x40400000,
0x0004002b,0x00000006,0x000001ff,0x3dcccccd,
0x00040020,0x00000206,0x00000001,0x00000006,
0x0004002b,0x00000006,0x0000020c,0x3e99999a,
0x0004002b,0x00000006,0x00000210,0x3d4ccccd,
0x0004002b,0x00000006,0x00000216,0x3ed55555,
0x0006002c,0x0000000c,0x00000217,0x00000216,
0x00000216,0x00000216,0x00040020,0x00000219,
0x00000003,0x00000037,0x0004003b,0x00000219,
0x0000021a,0x00000003,0x0005002c,0x0000000a,
0x000004f3,0x000000a1,0x000000a1,0x0007002c,
0x00000037,0x000004f4,0x0000011c,0x0000011c,
0x0000011c,0x0000011c,0x0006002c,0x0000000c,
0x000004f6,0x00000116,0x00000116,0x00000116,
0x0006002c,0x0000000c,0x000004f7,0x00000049,
0x00000049,0x00000049,0x0006002c,0x0000000c,
0x000004f8,0x0000004a,0x0000004a,0x0000004a,
0x0006002c,0x0000000c,0x000004f9,0x0000020c,
0x0000020c,0x0000020c,0x0007002c,0x00000037,
0x000004fa,0x000000a1,0x000000a1,0x000000a1,
0x000000a1,0x0004002b,0x00000006,0x000004fb,
0x3eaaaaab,0x00050036,0x00000002,0x00000004,
0x00000000,0x00000003,0x000200f8,0x00000005,
0x00060041,0x00000188,0x000001a8,0x00000187,
0x00000074,0x00000077,0x0004003d,0x00000006,
0x000001a9,0x000001a8,0x00060041,0x00000188,
0x000001ab,0x00000187,0x0000006c,0x000001aa,
0x0004003d,0x00000006,0x000001ac,0x000001ab,
0x00050085,0x00000006,0x000001ad,0x000001a9,
0x000001ac,0x0006000c,0x00000006,0x000001ae,
0x00000001,0x00000008,0x000001ad,0x00050088,
0x00000006,0x000001b2,0x000000a1,0x000001ae,
0x0005008d,0x00000006,0x000001b4,0x000001ae,
0x00000116,0x000500b7,0x00000196,0x000001b5,
0x000001b4,0x0000004a,0x000600a9,0x00000006,
0x000004fc,0x000001b5,0x0000004a,0x000001b2,
0x0004003d,0x0000000a,0x000001bb,0x000001ba,
0x00050041,0x000001bc,0x000001bd,0x00000187,
0x0000006c,0x0004003d,0x00000037,0x000001be,
0x000001bd,0x0007004f,0x0000000a,0x000001bf,
0x000001be,0x000001be,0x00000000,0x00000001,
0x00050085,0x0000000a,0x000001c0,0x000001bb,
0x000001bf,0x00050050,0x0000000a,0x000001c3,
0x0000004a,0x000004fc,0x00050083,0x0000000a,
0x000001c4,0x000001c0,0x000001c3,0x0007004f,
0x0000000a,0x000001c7,0x000001be,0x000001be,
0x00000002,0x00000003,0x00050085,0x0000000a,
0x000001c8,0x000001c4,0x000001c7,0x00050051,
0x00000006,0x00000249,0x000001be,0x00000000,
0x00050088,0x00000006,0x0000024a,0x00000049,
0x00000249,0x00050050,0x0000000a,0x0000024b,
0x0000024a,0x0000004a,0x00050051,0x00000006,
0x0000024d,0x000001be,0x00000001,0x00050088,
0x00000006,0x0000024e,0x00000049,0x0000024d,
0x00050050,0x0000000a,0x0000024f,0x0000004a,
0x0000024e,0x00050085,0x0000000a,0x00000252,
0x000001c8,0x000001bf,0x0006000c,0x0000000a,
0x00000254,0x00000001,0x00000008,0x00000252,
0x00050081,0x0000000a,0x00000256,0x00000254,
0x000004f3,0x00050088,0x0000000a,0x00000258,
0x00000256,0x000001bf,0x0006000c,0x0000000a,
0x0000025a,0x00000001,0x0000000a,0x00000252,
0x00050083,0x0000000a,0x0000025c,0x0000025a,
0x000004f3,0x0005008e,0x0000000a,0x0000025d,
0x0000025c,0x00000068,0x00050083,0x0000000a,
0x00000260,0x00000258,0x0000024f,0x0004003d,
0x00000008,0x0000028a,0x000001ca,0x00050083,
0x0000000a,0x0000028d,0x00000260,0x0000024b,
0x00050057,0x00000037,0x0000028e,0x0000028a,
0x0000028d,0x0008004f,0x0000000c,0x0000028f,
0x0000028e,0x0000028e,0x00000000,0x00000001,
0x00000002,0x0007000c,0x0000000c,0x00000290,
0x00000001,0x0000001a,0x0000028f,0x0000003b,
0x00050057,0x00000037,0x00000293,0x0000028a,
0x00000260,0x0008004f,0x0000000c,0x00000294,
0x00000293,0x00000293,0x00000000,0x00000001,
0x00000002,0x0007000c,0x0000000c,0x00000295,
0x00000001,0x0000001a,0x00000294,0x0000003b,
0x00050081,0x0000000a,0x00000299,0x00000260,
0x0000024b,0x00050057,0x00000037,0x0000029a,
0x0000028a,0x00000299,0x0008004f,0x0000000c,
0x0000029b,0x0000029a,0x0000029a,0x00000000,
0x00000001,0x00000002,0x0007000c,0x0000000c,
0x0000029c,0x00000001,0x0000001a,0x0000029b,
0x0000003b,0x00050083,0x0000000a,0x000002af,
0x00000258,0x0000024b,0x00050057,0x00000037,
0x000002b0,0x0000028a,0x000002af,0x0008004f,
0x0000000c,0x000002b1,0x000002b0,0x000002b0,
0x00000000,0x00000001,0x00000002,0x0007000c,
0x0000000c,0x000002b2,0x00000001,0x0000001a,
0x000002b1,0x0000003b,0x00050057,0x00000037,
0x000002b5,0x0000028a,0x00000258,0x0008004f,
0x0000000c,0x000002b6,0x000002b5,0x000002b5,
0x00000000,0x00000001,0x00000002,0x0007000c,
0x0000000c,0x000002b7,0x00000001,0x0000001a,
0x000002b6,0x0000003b,0x00050081,0x0000000a,
0x000002bb,0x00000258,0x0000024b,0x00050057,
0x00000037,0x000002bc,0x0000028a,0x000002bb,
0x0008004f,0x0000000c,0x000002bd,0x000002bc,
0x000002bc,0x00000000,0x00000001,0x00000002,
0x0007000c,0x0000000c,0x000002be,0x00000001,
0x0000001a,0x000002bd,0x0000003b,0x00050081,
0x0000000a,0x00000268,0x00000258,0x0000024f,
0x00050083,0x0000000a,0x000002d1,0x00000268,
0x0000024b,0x00050057,0x00000037,0x000002d2,
0x0000028a,0x000002d1,0x0008004f,0x0000000c,
0x000002d3,0x000002d2,0x000002d2,0x00000000,
0x00000001,0x00000002,0x0007000c,0x0000000c,
0x000002d4,0x00000001,0x0000001a,0x000002d3,
0x0000003b,0x00050057,0x00000037,0x000002d7,
0x0000028a,0x00000268,0x0008004f,0x0000000c,
0x000002d8,0x000002d7,0x000002d7,0x00000000,
0x00000001,0x00000002,0x0007000c,0x0000000c,
0x000002d9,0x00000001,0x0000001a,0x000002d8,
0x0000003b,0x00050081,0x0000000a,0x000002dd,
0x00000268,0x0000024b,0x00050057,0x00000037,
0x000002de,0x0000028a,0x000002dd,0x0008004f,
0x0000000c,0x000002df,0x000002de,0x000002de,
0x00000000,0x00000001,0x00000002,0x0007000c,
0x0000000c,0x000002e0,0x00000001,0x0000001a,
0x000002df,0x0000003b,0x00050051,0x00000006,
0x0000026d,0x0000025d,0x00000000,0x00050083,
0x00000006,0x000002f3,0x0000026d,0x00000049,
0x00050081,0x00000006,0x000002f6,0x0000026d,
0x00000049,0x00060050,0x0000000c,0x000002f7,
0x000002f3,0x0000026d,0x000002f6,0x00050085,
0x0000000c,0x000002fa,0x000002f7,0x000004f6,
0x00050085,0x0000000c,0x000002fd,0x000002fa,
0x000002fa,0x0005008e,0x0000000c,0x000002fe,
0x000002fd,0x00000068,0x0006000c,0x0000000c,
0x000002ff,0x00000001,0x0000001d,0x000002fe,
0x00050051,0x00000006,0x00000303,0x000002ff,
0x00000000,0x0005008e,0x0000000c,0x00000304,
0x00000290,0x00000303,0x00050051,0x00000006,
0x00000308,0x000002ff,0x00000001,0x0005008e,
0x0000000c,0x00000309,0x00000295,0x00000308,
0x00050081,0x0000000c,0x0000030a,0x00000304,
0x00000309,0x00050051,0x00000006,0x0000030e,
0x000002ff,0x00000002,0x0005008e,0x0000000c,
0x0000030f,0x0000029c,0x0000030e,0x00050081,
0x0000000c,0x00000310,0x0000030a,0x0000030f,
0x00050081,0x00000006,0x00000315,0x00000303,
0x00000308,0x00050081,0x00000006,0x00000318,
0x00000315,0x0000030e,0x00060050,0x0000000c,
0x00000319,0x00000318,0x00000318,0x00000318,
0x00050088,0x0000000c,0x0000031a,0x00000310,
0x00000319,0x0005008e,0x0000000c,0x00000331,
0x000002b2,0x00000303,0x0005008e,0x0000000c,
0x00000336,0x000002b7,0x00000308,0x00050081,
0x0000000c,0x00000337,0x00000331,0x00000336,
0x0005008e,0x0000000c,0x0000033c,0x000002be,
0x0000030e,0x00050081,0x0000000c,0x0000033d,
0x00000337,0x0000033c,0x00050088,0x0000000c,
0x00000347,0x0000033d,0x00000319,0x0005008e,
0x0000000c,0x0000035e,0x000002d4,0x00000303,
0x0005008e,0x0000000c,0x00000363,0x000002d9,
0x00000308,0x00050081,0x0000000c,0x00000364,
0x0000035e,0x00000363,0x0005008e,0x0000000c,
0x00000369,0x000002e0,0x0000030e,0x00050081,
0x0000000c,0x0000036a,0x00000364,0x00000369,
0x00050088,0x0000000c,0x00000374,0x0000036a,
0x00000319,0x00050051,0x00000006,0x00000286,
0x0000025d,0x00000001,0x00050083,0x00000006,
0x0000037a,0x00000286,0x00000049,0x00050081,
0x00000006,0x0000037d,0x00000286,0x00000049,
0x00060050,0x0000000c,0x0000037e,0x0000037a,
0x00000286,0x0000037d,0x00050085,0x0000000c,
0x00000381,0x0000037e,0x000004f6,0x00050085,
0x0000000c,0x00000384,0x00000381,0x00000381,
0x0005008e,0x0000000c,0x00000385,0x00000384,
0x00000068,0x0006000c,0x0000000c,0x00000386,
0x00000001,0x0000001d,0x00000385,0x00050051,
0x00000006,0x0000038a,0x00000386,0x00000000,
0x0005008e,0x0000000c,0x0000038b,0x0000031a,
0x0000038a,0x00050051,0x00000006,0x0000038f,
0x00000386,0x00000001,0x0005008e,0x0000000c,
0x00000390,0x00000347,0x0000038f,0x00050081,
0x0000000c,0x00000391,0x0000038b,0x00000390,
0x00050051,0x00000006,0x00000395,0x00000386,
0x00000002,0x0005008e,0x0000000c,0x00000396,
0x00000374,0x00000395,0x00050081,0x0000000c,
0x00000397,0x00000391,0x00000396,0x00050081,
0x00000006,0x0000039c,0x0000038a,0x0000038f,
0x00050081,0x00000006,0x0000039f,0x0000039c,
0x00000395,0x00060050,0x0000000c,0x000003a0,
0x0000039f,0x0000039f,0x0000039f,0x00050088,
0x0000000c,0x000003a1,0x00000397,0x000003a0,
0x00060052,0x0000000a,0x000004e1,0x00000249,
0x000001bf,0x00000000,0x00050085,0x0000000a,
0x000003b6,0x000001c8,0x000004e1,0x00050083,
0x0000000a,0x000003b7,0x000003b6,0x000000fc,
0x0006000c,0x0000000a,0x000003b9,0x00000001,
0x00000008,0x000003b7,0x00050081,0x0000000a,
0x000003ba,0x000003b9,0x00000102,0x00050088,
0x0000000a,0x000003bc,0x000003ba,0x000004e1,
0x0006000c,0x0000000a,0x000003be,0x00000001,
0x0000000a,0x000003b7,0x00050051,0x00000006,
0x000003c0,0x000003be,0x00000000,0x00050081,
0x00000006,0x000003c1,0x000003c0,0x00000049,
0x00050083,0x00000006,0x000003c6,0x000003c0,
0x00000049,0x00050083,0x00000006,0x000003c9,
0x000003c0,0x00000116,0x00070050,0x00000037,
0x000003ca,0x000003c1,0x000003c0,0x000003c6,
0x000003c9,0x0005008e,0x00000037,0x000003cb,
0x000003ca,0x0000010b,0x0006000c,0x00000037,
0x000003cd,0x00000001,0x00000004,0x000003cb,
0x0007000c,0x00000037,0x000003cf,0x00000001,
0x00000028,0x000003cd,0x000004f4,0x0006000c,
0x00000037,0x000003d1,0x00000001,0x0000000d,
0x000003cf,0x0005008e,0x00000037,0x000003d2,
0x000003d1,0x00000116,0x00050085,0x00000037,
0x000003d5,0x000003cf,0x000004fa,0x0006000c,
0x00000037,0x000003d6,0x00000001,0x0000000d,
0x000003d5,0x00050085,0x00000037,0x000003d7,
0x000003d2,0x000003d6,0x00050085,0x00000037,
0x000003da,0x000003cf,0x000003cf,0x00050088,
0x00000037,0x000003db,0x000003d7,0x000003da,
0x00050094,0x00000006,0x000003dd,0x000003db,
0x0000012c,0x00070050,0x00000037,0x000003df,
0x000003dd,0x000003dd,0x000003dd,0x000003dd,
0x00050088,0x00000037,0x000003e0,0x000003db,
0x000003df,0x00050057,0x00000037,0x000003e3,
0x0000028a,0x000003bc,0x0008004f,0x0000000c,
0x000003e4,0x000003e3,0x000003e3,0x00000000,
0x00000001,0x00000002,0x0007000c,0x0000000c,
0x000003e5,0x00000001,0x0000001a,0x000003e4,
0x0000003b,0x00050051,0x00000006,0x000003e6,
0x000003e5,0x00000000,0x00050051,0x00000006,
0x000003e7,0x000003e5,0x00000001,0x00050051,
0x00000006,0x000003e8,0x000003e5,0x00000002,
0x00050081,0x0000000a,0x000003ed,0x000003bc,
0x0000024b,0x00050057,0x00000037,0x000003ee,
0x0000028a,0x000003ed,0x0008004f,0x0000000c,
0x000003ef,0x000003ee,0x000003ee,0x00000000,
0x00000001,0x00000002,0x0007000c,0x0000000c,
0x000003f0,0x00000001,0x0000001a,0x000003ef,
0x0000003b,0x00050051,0x00000006,0x000003f1,
0x000003f0,0x00000000,0x00050051,0x00000006,
0x000003f2,0x000003f0,0x00000001,0x00050051,
0x00000006,0x000003f3,0x000003f0,0x00000002,
0x00070050,0x00000037,0x00000407,0x000003e6,
0x000003e7,0x000003e8,0x00000049,0x00070050,
0x00000037,0x00000409,0x000003f1,0x000003f2,
0x000003f3,0x00000049,0x00070050,0x00000149,
0x0000040b,0x00000407,0x00000407,0x00000409,
0x00000409,0x00050091,0x00000037,0x0000040d,
0x0000040b,0x000003e0,0x0008004f,0x0000000c,
0x0000040e,0x0000040d,0x0000040d,0x00000000,
0x00000001,0x00000002,0x00050085,0x00000006,
0x0000041b,0x00000249,0x000001dc,0x00060052,
0x0000000a,0x000004e9,0x0000041b,0x000001bf,
0x00000000,0x00050088,0x00000006,0x0000041f,
0x000004fb,0x00000249,0x00050050,0x0000000a,
0x00000420,0x0000041f,0x0000004a,0x00050085,
0x0000000a,0x00000423,0x000001c8,0x000004e9,
0x00050083,0x0000000a,0x00000424,0x00000423,
0x000000fc,0x0006000c,0x0000000a,0x00000426,
0x00000001,0x00000008,0x00000424,0x00050081,
0x0000000a,0x00000427,0x00000426,0x00000102,
0x00050088,0x0000000a,0x00000429,0x00000427,
0x000004e9,0x0006000c,0x0000000a,0x0000042b,
0x00000001,0x0000000a,0x00000424,0x00050051,
0x00000006,0x0000042d,0x0000042b,0x00000000,
0x00050081,0x00000006,0x0000042e,0x0000042d,
0x00000049,0x00050083,0x00000006,0x00000433,
0x0000042d,0x00000049,0x00050083,0x00000006,
0x00000436,0x0000042d,0x00000116,0x00070050,
0x00000037,0x00000437,0x0000042e,0x0000042d,
0x00000433,0x00000436,0x0005008e,0x00000037,
0x00000438,0x00000437,0x0000010b,0x0006000c,
0x00000037,0x0000043a,0x00000001,0x00000004,
0x00000438,0x0007000c,0x00000037,0x0000043c,
0x00000001,0x00000028,0x0000043a,0x000004f4,
0x0006000c,0x00000037,0x0000043e,0x00000001,
0x0000000d,0x0000043c,0x0005008e,0x00000037,
0x0000043f,0x0000043e,0x00000116,0x00050085,
0x00000037,0x00000442,0x0000043c,0x000004fa,
0x0006000c,0x00000037,0x00000443,0x00000001,
0x0000000d,0x00000442,0x00050085,0x00000037,
0x00000444,0x0000043f,0x00000443,0x00050085,
0x00000037,0x00000447,0x0000043c,0x0000043c,
0x00050088,0x00000037,0x00000448,0x00000444,
0x00000447,0x00050094,0x00000006,0x0000044a,
0x00000448,0x0000012c,0x00070050,0x00000037,
0x0000044c,0x0000044a,0x0000044a,0x0000044a,
0x0000044a,0x00050088,0x00000037,0x0000044d,
0x00000448,0x0000044c,0x00050057,0x00000037,
0x00000450,0x0000028a,0x00000429,0x0008004f,
0x0000000c,0x00000451,0x00000450,0x00000450,
0x00000000,0x00000001,0x00000002,0x0007000c,
0x0000000c,0x00000452,0x00000001,0x0000001a,
0x00000451,0x0000003b,0x00050051,0x00000006,
0x00000453,0x00000452,0x00000000,0x00050051,
0x00000006,0x00000454,0x00000452,0x00000001,
0x00050051,0x00000006,0x00000455,0x00000452,
0x00000002,0x00050081,0x0000000a,0x0000045a,
0x00000429,0x00000420,0x00050057,0x00000037,
0x0000045b,0x0000028a,0x0000045a,0x0008004f,
0x0000000c,0x0000045c,0x0000045b,0x0000045b,
0x00000000,0x00000001,0x00000002,0x0007000c,
0x0000000c,0x0000045d,0x00000001,0x0000001a,
0x0000045c,0x0000003b,0x00050051,0x00000006,
0x0000045e,0x0000045d,0x00000000,0x00050051,
0x00000006,0x0000045f,0x0000045d,0x00000001,
0x00050051,0x00000006,0x00000460,0x0000045d,
0x00000002,0x00070050,0x00000037,0x00000474,
0x00000453,0x00000454,0x00000455,0x00000049,
0x00070050,0x00000037,0x00000476,0x0000045e,
0x0000045f,0x00000460,0x00000049,0x00070050,
0x00000149,0x00000478,0x00000474,0x00000474,
0x00000476,0x00000476,0x00050091,0x00000037,
0x0000047a,0x00000478,0x0000044d,0x0008004f,
0x0000000c,0x0000047b,0x0000047a,0x0000047a,
0x00000000,0x00000001,0x00000002,0x00050085,
0x0000000c,0x000001e8,0x0000047b,0x0000040e,
0x0006000c,0x0000000c,0x000001e9,0x00000001,
0x0000001f,0x000001e8,0x00050051,0x00000006,
0x000001eb,0x000001c8,0x00000001,0x00060041,
0x00000188,0x000001ec,0x00000187,0x0000006c,
0x00000077,0x0004003d,0x00000006,0x000001ed,
0x000001ec,0x00050085,0x00000006,0x000001ee,
0x000001eb,0x000001ed,0x0006000c,0x00000006,
0x000001ef,0x00000001,0x0000000a,0x000001ee,
0x0007000c,0x0000000c,0x00000482,0x00000001,
0x0000001a,0x0000040e,0x0000016a,0x0008000c,
0x0000000c,0x00000483,0x00000001,0x0000002e,
0x00000165,0x00000167,0x00000482,0x00050088,
0x0000000c,0x00000486,0x000004f6,0x00000483,
0x0005008e,0x0000000c,0x00000488,0x00000486,
0x000000a1,0x0005008e,0x0000000c,0x0000048b,
0x00000486,0x000001ef,0x00050083,0x0000000c,
0x0000048d,0x0000048b,0x00000488,0x0006000c,
0x0000000c,0x0000048e,0x00000001,0x00000004,
0x0000048d,0x00050083,0x0000000c,0x00000490,
0x000004f7,0x0000048e,0x0008000c,0x0000000c,
0x00000493,0x00000001,0x00000031,0x000004f8,
0x000004f7,0x00000490,0x00050085,0x0000000c,
0x00000495,0x00000493,0x00000488,0x00050085,
0x0000000c,0x000001f5,0x000001e9,0x00000495,
0x00050083,0x0000000c,0x000001f8,0x000003a1,
0x000001f5,0x0008000c,0x0000000c,0x000001fb,
0x00000001,0x0000002b,0x000001f8,0x000004f8,
0x000004f7,0x00050085,0x0000000c,0x000001fe,
0x000001fb,0x000001fb,0x0005008e,0x0000000c,
0x00000200,0x000001fe,0x000001ff,0x00050081,
0x0000000c,0x00000202,0x000001f5,0x00000200,
0x00050041,0x00000206,0x00000207,0x000001ba,
0x00000070,0x0004003d,0x00000006,0x00000208,
0x00000207,0x000300f7,0x000004b3,0x00000000,
0x000300fb,0x00000070,0x0000049b,0x000200f8,
0x0000049b,0x00060041,0x00000188,0x0000049d,
0x00000187,0x00000074,0x00000070,0x0004003d,
0x00000006,0x0000049e,0x0000049d,0x00050085,
0x00000006,0x0000049f,0x00000208,0x0000049e,
0x0006000c,0x00000006,0x000004a7,0x00000001,
0x00000008,0x0000049f,0x0005008d,0x00000006,
0x000004a8,0x000004a7,0x00000116,0x000500b4,
0x00000196,0x000004aa,0x000004a8,0x0000004a,
0x000300f7,0x000004b2,0x00000000,0x000400fa,
0x000004aa,0x000004ab,0x000004ac,0x000200f8,
0x000004ac,0x000500b4,0x00000196,0x000004ae,
0x000004a8,0x00000049,0x000300f7,0x000004b1,
0x00000000,0x000400fa,0x000004ae,0x000004af,
0x000004b0,0x000200f8,0x000004b0,0x000200f9,
0x000004b3,0x000200f8,0x000004af,0x000200f9,
0x000004b3,0x000200f8,0x000004b1,0x000100ff,
0x000200f8,0x000004ab,0x000200f9,0x000004b3,
0x000200f8,0x000004b2,0x000100ff,0x000200f8,
0x000004b3,0x000900f5,0x0000000c,0x000004f1,
0x0000019a,0x000004ab,0x000001a1,0x000004af,
0x000001a4,0x000004b0,0x00050085,0x0000000c,
0x0000020a,0x00000202,0x000004f1,0x0005008e,
0x0000000c,0x0000020b,0x0000020a,0x00000116,
0x0008000c,0x0000000c,0x0000020e,0x00000001,
0x0000002e,0x00000202,0x0000020b,0x000004f9,
0x0005008e,0x0000000c,0x00000211,0x000001fb,
0x00000210,0x00050081,0x0000000c,0x00000213,
0x0000020e,0x00000211,0x0005008e,0x0000000c,
0x00000215,0x00000213,0x00000166,0x0007000c,
0x0000000c,0x00000218,0x00000001,0x0000001a,
0x00000215,0x00000217,0x00050051,0x00000006,
0x0000021c,0x00000218,0x00000000,0x00050051,
0x00000006,0x0000021d,0x00000218,0x00000001,
0x00050051,0x00000006,0x0000021e,0x00000218,
0x00000002,0x00070050,0x00000037,0x0000021f,
0x0000021c,0x0000021d,0x0000021e,0x00000049,
0x0003003e,0x0000021a,0x0000021f,0x000100fd,
0x00010038}
+10
View File
@@ -0,0 +1,10 @@
#version 450
layout(location = 0) out vec4 FragColor;
layout(set = 0, binding = 0) uniform sampler2D uTexture;
layout(location = 0) in vec2 vUV;
void main()
{
FragColor = textureLod(uTexture, vUV, 0.0);
}
+21
View File
@@ -0,0 +1,21 @@
#version 450
layout(location = 0) out vec2 vUV;
void main()
{
if (gl_VertexIndex == 0)
{
gl_Position = vec4(-1.0, -1.0, 0.0, 1.0);
}
else if (gl_VertexIndex == 1)
{
gl_Position = vec4(-1.0, +3.0, 0.0, 1.0);
}
else
{
gl_Position = vec4(+3.0, -1.0, 0.0, 1.0);
}
vUV = gl_Position.xy * 0.5 + 0.5;
}
+32
View File
@@ -0,0 +1,32 @@
{0x07230203,0x00010300,0x000d000b,0x00000015,
0x00000000,0x00020011,0x00000001,0x0006000b,
0x00000001,0x4c534c47,0x6474732e,0x3035342e,
0x00000000,0x0003000e,0x00000000,0x00000001,
0x0007000f,0x00000004,0x00000004,0x6e69616d,
0x00000000,0x00000009,0x00000011,0x00030010,
0x00000004,0x00000007,0x00040047,0x00000009,
0x0000001e,0x00000000,0x00040047,0x0000000d,
0x00000021,0x00000000,0x00040047,0x0000000d,
0x00000022,0x00000000,0x00040047,0x00000011,
0x0000001e,0x00000000,0x00020013,0x00000002,
0x00030021,0x00000003,0x00000002,0x00030016,
0x00000006,0x00000020,0x00040017,0x00000007,
0x00000006,0x00000004,0x00040020,0x00000008,
0x00000003,0x00000007,0x0004003b,0x00000008,
0x00000009,0x00000003,0x00090019,0x0000000a,
0x00000006,0x00000001,0x00000000,0x00000000,
0x00000000,0x00000001,0x00000000,0x0003001b,
0x0000000b,0x0000000a,0x00040020,0x0000000c,
0x00000000,0x0000000b,0x0004003b,0x0000000c,
0x0000000d,0x00000000,0x00040017,0x0000000f,
0x00000006,0x00000002,0x00040020,0x00000010,
0x00000001,0x0000000f,0x0004003b,0x00000010,
0x00000011,0x00000001,0x0004002b,0x00000006,
0x00000013,0x00000000,0x00050036,0x00000002,
0x00000004,0x00000000,0x00000003,0x000200f8,
0x00000005,0x0004003d,0x0000000b,0x0000000e,
0x0000000d,0x0004003d,0x0000000f,0x00000012,
0x00000011,0x00070058,0x00000007,0x00000014,
0x0000000e,0x00000012,0x00000002,0x00000013,
0x0003003e,0x00000009,0x00000014,0x000100fd,
0x00010038}
+72
View File
@@ -0,0 +1,72 @@
{0x07230203,0x00010300,0x000d000b,0x00000034,
0x00000000,0x00020011,0x00000001,0x0006000b,
0x00000001,0x4c534c47,0x6474732e,0x3035342e,
0x00000000,0x0003000e,0x00000000,0x00000001,
0x0008000f,0x00000000,0x00000004,0x6e69616d,
0x00000000,0x00000008,0x00000016,0x0000002b,
0x00040047,0x00000008,0x0000000b,0x0000002a,
0x00030047,0x00000014,0x00000002,0x00050048,
0x00000014,0x00000000,0x0000000b,0x00000000,
0x00050048,0x00000014,0x00000001,0x0000000b,
0x00000001,0x00050048,0x00000014,0x00000002,
0x0000000b,0x00000003,0x00050048,0x00000014,
0x00000003,0x0000000b,0x00000004,0x00040047,
0x0000002b,0x0000001e,0x00000000,0x00020013,
0x00000002,0x00030021,0x00000003,0x00000002,
0x00040015,0x00000006,0x00000020,0x00000001,
0x00040020,0x00000007,0x00000001,0x00000006,
0x0004003b,0x00000007,0x00000008,0x00000001,
0x0004002b,0x00000006,0x0000000a,0x00000000,
0x00020014,0x0000000b,0x00030016,0x0000000f,
0x00000020,0x00040017,0x00000010,0x0000000f,
0x00000004,0x00040015,0x00000011,0x00000020,
0x00000000,0x0004002b,0x00000011,0x00000012,
0x00000001,0x0004001c,0x00000013,0x0000000f,
0x00000012,0x0006001e,0x00000014,0x00000010,
0x0000000f,0x00000013,0x00000013,0x00040020,
0x00000015,0x00000003,0x00000014,0x0004003b,
0x00000015,0x00000016,0x00000003,0x0004002b,
0x0000000f,0x00000017,0xbf800000,0x0004002b,
0x0000000f,0x00000018,0x00000000,0x0004002b,
0x0000000f,0x00000019,0x3f800000,0x0007002c,
0x00000010,0x0000001a,0x00000017,0x00000017,
0x00000018,0x00000019,0x00040020,0x0000001b,
0x00000003,0x00000010,0x0004002b,0x00000006,
0x0000001f,0x00000001,0x0004002b,0x0000000f,
0x00000023,0x40400000,0x0007002c,0x00000010,
0x00000024,0x00000017,0x00000023,0x00000018,
0x00000019,0x0007002c,0x00000010,0x00000027,
0x00000023,0x00000017,0x00000018,0x00000019,
0x00040017,0x00000029,0x0000000f,0x00000002,
0x00040020,0x0000002a,0x00000003,0x00000029,
0x0004003b,0x0000002a,0x0000002b,0x00000003,
0x0004002b,0x0000000f,0x0000002f,0x3f000000,
0x0005002c,0x00000029,0x00000033,0x0000002f,
0x0000002f,0x00050036,0x00000002,0x00000004,
0x00000000,0x00000003,0x000200f8,0x00000005,
0x0004003d,0x00000006,0x00000009,0x00000008,
0x000500aa,0x0000000b,0x0000000c,0x00000009,
0x0000000a,0x000300f7,0x0000000e,0x00000000,
0x000400fa,0x0000000c,0x0000000d,0x0000001d,
0x000200f8,0x0000000d,0x00050041,0x0000001b,
0x0000001c,0x00000016,0x0000000a,0x0003003e,
0x0000001c,0x0000001a,0x000200f9,0x0000000e,
0x000200f8,0x0000001d,0x000500aa,0x0000000b,
0x00000020,0x00000009,0x0000001f,0x000300f7,
0x00000022,0x00000000,0x000400fa,0x00000020,
0x00000021,0x00000026,0x000200f8,0x00000021,
0x00050041,0x0000001b,0x00000025,0x00000016,
0x0000000a,0x0003003e,0x00000025,0x00000024,
0x000200f9,0x00000022,0x000200f8,0x00000026,
0x00050041,0x0000001b,0x00000028,0x00000016,
0x0000000a,0x0003003e,0x00000028,0x00000027,
0x000200f9,0x00000022,0x000200f8,0x00000022,
0x000200f9,0x0000000e,0x000200f8,0x0000000e,
0x00050041,0x0000001b,0x0000002c,0x00000016,
0x0000000a,0x0004003d,0x00000010,0x0000002d,
0x0000002c,0x0007004f,0x00000029,0x0000002e,
0x0000002d,0x0000002d,0x00000000,0x00000001,
0x0005008e,0x00000029,0x00000030,0x0000002e,
0x0000002f,0x00050081,0x00000029,0x00000032,
0x00000030,0x00000033,0x0003003e,0x0000002b,
0x00000032,0x000100fd,0x00010038}
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
glslc -O crt-aperture.frag -o crt_frag.spv --target-env=vulkan1.1 -mfmt=c
glslc -O main.frag -o main_frag.spv --target-env=vulkan1.1 -mfmt=c
glslc -O main.vert -o main_vert.spv --target-env=vulkan1.1 -mfmt=c
Binary file not shown.
+26
View File
@@ -0,0 +1,26 @@
# Adding translations to Gopher64
1. Copy and modify the `gopher64.pot` file in this directory with your translations.
2. Rename it to `gopher64.po` and put it here:
`data/translations/<lang>/LC_MESSAGES/gopher64.po`
See [here](https://docs.slint.dev/latest/docs/slint/guide/development/translations/#translating-strings) for more details on creating a .po file. I recommend using a program like [poedit](https://poedit.com) to create the .po file from the template.
---
For example, in the .pot file you will see:
```
#: src/ui/gui/about_page.slint:17
msgctxt "NewVersionButton"
msgid "New version available! Click here to download"
msgstr ""
```
A translation will look something like this:
```
#: src/ui/gui/about_page.slint:17
msgctxt "NewVersionButton"
msgid "New version available! Click here to download"
msgstr "Nova versão disponível! Clique aqui para baixar"
```
The only line you modify is the `msgstr`. The `msgctxt` and `msgid` need to remain unchanged.
@@ -0,0 +1,590 @@
# gopher64 - German Translation
msgid ""
msgstr ""
"Project-Id-Version: gopher64\n"
"POT-Creation-Date: 2026-06-16 12:26+0000\n"
"PO-Revision-Date: 2026-05-11 12:00+0000\n"
"Last-Translator: \n"
"Language-Team: German\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/ui/gui/about_page.slint:17
msgctxt "NewVersionButton"
msgid "New version available! Click here to download"
msgstr "Neue Version verfügbar! Zum Herunterladen hier klicken"
#: src/ui/gui/about_page.slint:33
msgctxt "About"
msgid "About"
msgstr "Über"
#: src/ui/gui/about_page.slint:40
msgctxt "About"
msgid "Wiki"
msgstr "Wiki"
#: src/ui/gui/about_page.slint:50
msgctxt "About"
msgid "Discord Server"
msgstr "Discord-Server"
#: src/ui/gui/about_page.slint:60
msgctxt "About"
msgid "Source Code"
msgstr "Quellcode"
#: src/ui/gui/about_page.slint:70
msgctxt "About"
msgid "Donate (via Patreon)"
msgstr "Spenden (über Patreon)"
#: src/ui/gui/about_page.slint:77
msgctxt "About"
msgid "Donate (via GitHub)"
msgstr "Spenden (über GitHub)"
#: src/ui/gui/appwindow.slint:148
msgctxt "Menu"
msgid "Local Game"
msgstr "Lokales Spiel"
#: src/ui/gui/appwindow.slint:152
msgctxt "Menu"
msgid "Controller Config"
msgstr "Controller-Konfiguration"
#: src/ui/gui/appwindow.slint:156
msgctxt "Menu"
msgid "Netplay"
msgstr "Netplay"
#: src/ui/gui/appwindow.slint:160
msgctxt "Menu"
msgid "Cheats"
msgstr "Cheats"
#: src/ui/gui/appwindow.slint:164
msgctxt "Menu"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/appwindow.slint:168
msgctxt "Menu"
msgid "Settings"
msgstr "Einstellungen"
#: src/ui/gui/appwindow.slint:172
msgctxt "Menu"
msgid "About"
msgstr "Über"
#: src/ui/gui/cheat_page.slint:15
msgctxt "Cheats"
msgid "Cheats"
msgstr "Cheats"
#: src/ui/gui/cheat_page.slint:25
msgctxt "Cheats"
msgid "Select ROM"
msgstr "ROM auswählen"
#: src/ui/gui/cheat_page.slint:41
msgctxt "Cheats"
msgid "Clear Cheats For All ROMs"
msgstr "Cheats für alle ROMs löschen"
#: src/ui/gui/cheat_page.slint:83
msgctxt "Cheats"
msgid "No Cheats Available"
msgstr "Keine Cheats verfügbar"
#: src/ui/gui/controller_page.slint:80
msgctxt "ControllerSettingsGrid"
msgid "Enabled"
msgstr "Aktiviert"
#: src/ui/gui/controller_page.slint:93
msgctxt "ControllerSettingsGrid"
msgid "Transfer Pak"
msgstr "Transfer Pak"
#: src/ui/gui/controller_page.slint:107
msgctxt "ControllerSettingsGrid"
msgid "Profile"
msgstr "Profil"
#: src/ui/gui/controller_page.slint:157
msgctxt "ControllerConfig"
msgid "Controller Configuration"
msgstr "Controller-Konfiguration"
#: src/ui/gui/controller_page.slint:171
msgctxt "ControllerConfig"
msgid "Configure Input Profile"
msgstr "Eingabeprofil konfigurieren"
#: src/ui/gui/controller_page.slint:180
msgctxt "ControllerConfig"
msgid "Controller Settings"
msgstr "Controller-Einstellungen"
#: src/ui/gui/controller_page.slint:190
msgctxt "ControllerConfig"
msgid "Controller Assignment"
msgstr "Controller-Zuweisung"
#: src/ui/gui/input_profile.slint:12
msgctxt "InputProfileDialog"
msgid "Create/Modify Input Profile"
msgstr "Eingabeprofil erstellen/bearbeiten"
#: src/ui/gui/input_profile.slint:25
msgctxt "InputProfileDialog"
msgid "Enter profile name to create or modify"
msgstr "Profilname zum Erstellen oder Bearbeiten eingeben"
#: src/ui/gui/input_profile.slint:38
msgctxt "InputProfileDialog"
msgid "Deadzone Percentage"
msgstr "Deadzone Größe in Prozent"
#: src/ui/gui/input_profile.slint:61
msgctxt "InputProfileDialog"
msgid "Use DirectInput"
msgstr "DirectInput verwenden"
#: src/ui/gui/input_profile.slint:74
msgctxt "InputProfileDialog"
msgid "Start Profile Creation Wizard"
msgstr "Assistent zur Profilerstellung starten"
#: src/ui/gui/input_profile.slint:82
msgctxt "InputProfileDialog"
msgid "Cancel"
msgstr "Abbrechen"
#: src/ui/gui/localgame_page.slint:19
msgctxt "LocalGame"
msgid "Local Game"
msgstr "Lokales Spiel"
#: src/ui/gui/localgame_page.slint:26
msgctxt "LocalGame"
msgid "Open ROM"
msgstr "ROM öffnen"
#: src/ui/gui/localgame_page.slint:37
msgctxt "LocalGame"
msgid "Open Saves Folder"
msgstr "Speicherordner öffnen"
#: src/ui/gui/localgame_page.slint:54
msgctxt "LocalGame"
msgid "Recent ROMs"
msgstr "Zuletzt verwendete ROMs"
#: src/ui/gui/netplay_create.slint:7
msgctxt "NetplayCreate"
msgid "Netplay: Create Session"
msgstr "Netplay: Sitzung erstellen"
#: src/ui/gui/netplay_create.slint:22
msgctxt "NetplayCreate"
msgid "Session Name:"
msgstr "Sitzungsname:"
#: src/ui/gui/netplay_create.slint:26
msgctxt "NetplayCreate"
msgid "Enter session name"
msgstr "Sitzungsname eingeben"
#: src/ui/gui/netplay_create.slint:36
msgctxt "NetplayCreate"
msgid "Password (Optional):"
msgstr "Passwort (optional):"
#: src/ui/gui/netplay_create.slint:40
msgctxt "NetplayCreate"
msgid "Enter session password"
msgstr "Sitzungspasswort eingeben"
#: src/ui/gui/netplay_create.slint:51
msgctxt "NetplayCreate"
msgid "Player Name:"
msgstr "Spielername:"
#: src/ui/gui/netplay_create.slint:55
msgctxt "NetplayCreate"
msgid "Enter player name"
msgstr "Spielername eingeben"
#: src/ui/gui/netplay_create.slint:66
msgctxt "NetplayCreate"
msgid "Select ROM"
msgstr "ROM auswählen"
#: src/ui/gui/netplay_create.slint:82
msgctxt "NetplayCreate"
msgid ""
"This game has cheats enabled. Cheats will be synchronized with other players."
msgstr ""
"Für dieses Spiel sind Cheats aktiviert. Cheats werden mit anderen Spielern "
"synchronisiert."
#: src/ui/gui/netplay_create.slint:91
msgctxt "NetplayCreate"
msgid "Create Session"
msgstr "Sitzung erstellen"
#: src/ui/gui/netplay_create.slint:107
msgctxt "NetplayCreate"
msgid "Cancel"
msgstr "Abbrechen"
#: src/ui/gui/netplay_join.slint:7
msgctxt "NetplayJoin"
msgid "Netplay: Join Session"
msgstr "Netplay: Sitzung beitreten"
#: src/ui/gui/netplay_join.slint:18
msgctxt "NetplayJoin"
msgid "Player Name (required):"
msgstr "Spielername (erforderlich):"
#: src/ui/gui/netplay_join.slint:22
msgctxt "NetplayJoin"
msgid "Enter player name"
msgstr "Spielername eingeben"
#: src/ui/gui/netplay_join.slint:31
msgctxt "NetplayJoin"
msgid "Password (if required)"
msgstr "Passwort (falls erforderlich)"
#: src/ui/gui/netplay_join.slint:42
msgctxt "NetplayJoin"
msgid "Select ROM"
msgstr "ROM auswählen"
#: src/ui/gui/netplay_join.slint:57
msgctxt "NetplayJoin"
msgid "Refreshing session list, please wait..."
msgstr "Sitzungsliste wird aktualisiert, bitte warten …"
#: src/ui/gui/netplay_join.slint:62
msgctxt "NetplayJoin"
msgid "Click on a session below to select it"
msgstr "Auf eine Sitzung klicken um diese auszuwählen"
#: src/ui/gui/netplay_join.slint:67
msgctxt "NetplayJoin"
msgid "No sessions available. Please refresh to check again."
msgstr "Keine Sitzungen verfügbar. Bitte aktualisieren, um erneut zu prüfen."
#: src/ui/gui/netplay_join.slint:73
msgctxt "NetplayJoin"
msgid "Session Name"
msgstr "Sitzungsname"
#: src/ui/gui/netplay_join.slint:74
msgctxt "NetplayJoin"
msgid "Game Name"
msgstr "Spielname"
#: src/ui/gui/netplay_join.slint:75
msgctxt "NetplayJoin"
msgid "Password"
msgstr "Passwort"
#: src/ui/gui/netplay_join.slint:76
msgctxt "NetplayJoin"
msgid "Cheats"
msgstr "Cheats"
#: src/ui/gui/netplay_join.slint:90
msgctxt "NetplayJoin"
msgid "Refresh Session List"
msgstr "Sitzungsliste aktualisieren"
#: src/ui/gui/netplay_join.slint:105
msgctxt "NetplayJoin"
msgid "Join Session"
msgstr "Sitzung beitreten"
#: src/ui/gui/netplay_join.slint:117
msgctxt "NetplayJoin"
msgid "Cancel"
msgstr "Abbrechen"
#: src/ui/gui/netplay_page.slint:31
msgctxt "Netplay"
msgid "Netplay"
msgstr "Netplay"
#: src/ui/gui/netplay_page.slint:39
msgctxt "Netplay"
msgid "Create Session"
msgstr "Sitzung erstellen"
#: src/ui/gui/netplay_page.slint:50
msgctxt "Netplay"
msgid "Join Session"
msgstr "Sitzung beitreten"
#: src/ui/gui/netplay_page.slint:64
msgctxt "Netplay"
msgid "Netplay Discord Channel"
msgstr "Netplay-Discord-Kanal"
#: src/ui/gui/netplay_page.slint:71
msgctxt "Netplay"
msgid "Provide Feedback"
msgstr "Feedback geben"
#: src/ui/gui/netplay_wait.slint:17
msgctxt "NetplayWait"
msgid "Netplay: Waiting Room"
msgstr "Netplay: Warteraum"
#: src/ui/gui/netplay_wait.slint:29
msgctxt "NetplayWait"
msgid "Session Name:"
msgstr "Sitzungsname:"
#: src/ui/gui/netplay_wait.slint:35
msgctxt "NetplayWait"
msgid "Game Name:"
msgstr "Spielname:"
#: src/ui/gui/netplay_wait.slint:45
msgctxt "NetplayWait"
msgid "Player 1:"
msgstr "Spieler 1:"
#: src/ui/gui/netplay_wait.slint:49
msgctxt "NetplayWait"
msgid "Player 2:"
msgstr "Spieler 2:"
#: src/ui/gui/netplay_wait.slint:55
msgctxt "NetplayWait"
msgid "Player 3:"
msgstr "Spieler 3:"
#: src/ui/gui/netplay_wait.slint:59
msgctxt "NetplayWait"
msgid "Player 4:"
msgstr "Spieler 4:"
#: src/ui/gui/netplay_wait.slint:73
msgctxt "NetplayWait"
msgid "Enter chat message"
msgstr "Chatnachricht eingeben"
#: src/ui/gui/netplay_wait.slint:84
msgctxt "NetplayWait"
msgid "Send Message"
msgstr "Nachricht senden"
#: src/ui/gui/netplay_wait.slint:94
msgctxt "NetplayWait"
msgid ""
"Setting the input delay too low will cause the game to lag.\n"
"You can lower the input delay in-game by pressing Alt+[ and raise it with "
"Alt+]."
msgstr ""
"Eine zu niedrige Eingabeverzögerung führt zu Ruckeln im Spiel.\n"
"Sie können die Eingabeverzögerung im Spiel mit Alt+[ verringern und mit "
"Alt+] erhöhen."
#: src/ui/gui/netplay_wait.slint:101
msgctxt "NetplayWait"
msgid "Local Input Delay:"
msgstr "Lokale Eingabeverzögerung:"
#: src/ui/gui/netplay_wait.slint:118
msgctxt "NetplayWait"
msgid "Recommended: "
msgstr "Empfohlen: "
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Start Game"
msgstr "Spiel starten"
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Waiting for P2P mesh "
msgstr "Warten auf P2P-Mesh "
#: src/ui/gui/netplay_wait.slint:135
msgctxt "NetplayWait"
msgid "Cancel"
msgstr "Abbrechen"
#: src/ui/gui/retroachievements_page.slint:19
msgctxt "RAData"
msgid "Not currently logged in"
msgstr "Derzeit nicht angemeldet"
#: src/ui/gui/retroachievements_page.slint:27
msgctxt "RetroAchievements"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/retroachievements_page.slint:36
msgctxt "RetroAchievements"
msgid "Enabled"
msgstr "Aktiviert"
#: src/ui/gui/retroachievements_page.slint:51
msgctxt "RetroAchievements"
msgid "Hardcore mode"
msgstr "Hardcore-Modus"
#: src/ui/gui/retroachievements_page.slint:60
msgctxt "RetroAchievements"
msgid "Challenge Indicators"
msgstr "Challenge Tipps"
#: src/ui/gui/retroachievements_page.slint:69
msgctxt "RetroAchievements"
msgid "Leaderboard Trackers"
msgstr "Bestenlisten-Tracker"
#: src/ui/gui/retroachievements_page.slint:78
msgctxt "RetroAchievements"
msgid "Discord Rich Presence"
msgstr "Rich Presence für Discord"
#: src/ui/gui/retroachievements_page.slint:96
msgctxt "RetroAchievements"
msgid "View Profile"
msgstr "Profil anzeigen"
#: src/ui/gui/retroachievements_page.slint:106
msgctxt "RetroAchievements"
msgid "Username"
msgstr "Benutzername"
#: src/ui/gui/retroachievements_page.slint:116
msgctxt "RetroAchievements"
msgid "Password"
msgstr "Passwort"
#: src/ui/gui/retroachievements_page.slint:125
msgctxt "RetroAchievements"
msgid "Login"
msgstr "Anmelden"
#: src/ui/gui/retroachievements_page.slint:141
msgctxt "RetroAchievements"
msgid "View Supported Games"
msgstr "Unterstützte Spiele anzeigen"
#: src/ui/gui/settings_page.slint:24
msgctxt "Settings"
msgid "Settings"
msgstr "Einstellungen"
#: src/ui/gui/settings_page.slint:35
msgctxt "Settings"
msgid "Resolution:"
msgstr "Auflösung:"
#: src/ui/gui/settings_page.slint:49
msgctxt "Settings"
msgid "SSAA downscaling"
msgstr "SSAA-Herunterskalierung"
#: src/ui/gui/settings_page.slint:57
msgctxt "Settings"
msgid "Integer Scaling"
msgstr "Pixelgenaue Skalierung"
#: src/ui/gui/settings_page.slint:65
msgctxt "Settings"
msgid "Fullscreen"
msgstr "Vollbild"
#: src/ui/gui/settings_page.slint:73
msgctxt "Settings"
msgid "Widescreen (stretch)"
msgstr "16:9 (gestreckt)"
#: src/ui/gui/settings_page.slint:81
msgctxt "Settings"
msgid "VSync"
msgstr "VSync"
#: src/ui/gui/settings_page.slint:89
msgctxt "Settings"
msgid "Apply CRT shader"
msgstr "CRT-Shader anwenden"
#: src/ui/gui/settings_page.slint:101
msgctxt "Settings"
msgid "Overclock N64 CPU (may cause bugs)"
msgstr "N64-CPU übertakten (kann Fehler verursachen)"
#: src/ui/gui/settings_page.slint:109
msgctxt "Settings"
msgid "Disable Expansion Pak"
msgstr "Expansion Pak deaktivieren"
#: src/ui/gui/settings_page.slint:117
msgctxt "Settings"
msgid "Enable Rewind"
msgstr "Rewind aktivieren"
#: src/ui/gui/settings_page.slint:125
msgctxt "Settings"
msgid "Emulate UNFLoader"
msgstr "UNFLoader emulieren"
#: src/ui/gui/settings_page.slint:133
msgctxt "Settings"
msgid "Emulate VRU"
msgstr "VRU emulieren"
#: src/ui/gui/vru_dialog.slint:7
msgctxt "VruDialog"
msgid "What Would You Like To Say?"
msgstr "Was möchten Sie sagen?"
#~ msgctxt "NetplayCreate"
#~ msgid "Server:"
#~ msgstr "Server:"
#~ msgctxt "CustomServerDialog"
#~ msgid "Enter a custom server URL"
#~ msgstr "Eigene Server-URL eingeben"
#~ msgctxt "NetplayJoin"
#~ msgid "Custom Server URL (optional):"
#~ msgstr "Eigene Server-URL (optional):"
#~ msgctxt "NetplayJoin"
#~ msgid "Server"
#~ msgstr "Server"
#~ msgctxt "NetplayWait"
#~ msgid "Ping:"
#~ msgstr "Ping:"
#~ msgctxt "NetplayCreate"
#~ msgid "Creating server, please wait...This may take about 30 seconds."
#~ msgstr ""
#~ "Server wird erstellt, bitte warten … Dies kann etwa 30 Sekunden dauern."
#~ msgctxt "ControllerConfig"
#~ msgid "Port"
#~ msgstr "Port"
#~ msgctxt "ControllerConfig"
#~ msgid "Controller"
#~ msgstr "Controller"
@@ -0,0 +1,590 @@
# gopher64 - Spanish Translation
msgid ""
msgstr ""
"Project-Id-Version: gopher64\n"
"POT-Creation-Date: 2026-06-16 12:26+0000\n"
"PO-Revision-Date: 2026-05-11 12:00+0000\n"
"Last-Translator: Gemini\n"
"Language-Team: Spanish (Spain)\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/ui/gui/about_page.slint:17
msgctxt "NewVersionButton"
msgid "New version available! Click here to download"
msgstr "¡Nueva versión disponible! Pulsa aquí para descargar"
#: src/ui/gui/about_page.slint:33
msgctxt "About"
msgid "About"
msgstr "Acerca de"
#: src/ui/gui/about_page.slint:40
msgctxt "About"
msgid "Wiki"
msgstr "Wiki"
#: src/ui/gui/about_page.slint:50
msgctxt "About"
msgid "Discord Server"
msgstr "Servidor de Discord"
#: src/ui/gui/about_page.slint:60
msgctxt "About"
msgid "Source Code"
msgstr "Código fuente"
#: src/ui/gui/about_page.slint:70
msgctxt "About"
msgid "Donate (via Patreon)"
msgstr "Donar (a través de Patreon)"
#: src/ui/gui/about_page.slint:77
msgctxt "About"
msgid "Donate (via GitHub)"
msgstr "Donar (a través de GitHub)"
#: src/ui/gui/appwindow.slint:148
msgctxt "Menu"
msgid "Local Game"
msgstr "Juego local"
#: src/ui/gui/appwindow.slint:152
msgctxt "Menu"
msgid "Controller Config"
msgstr "Config. del mando"
#: src/ui/gui/appwindow.slint:156
msgctxt "Menu"
msgid "Netplay"
msgstr "Netplay"
#: src/ui/gui/appwindow.slint:160
msgctxt "Menu"
msgid "Cheats"
msgstr "Trucos"
#: src/ui/gui/appwindow.slint:164
msgctxt "Menu"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/appwindow.slint:168
msgctxt "Menu"
msgid "Settings"
msgstr "Ajustes"
#: src/ui/gui/appwindow.slint:172
msgctxt "Menu"
msgid "About"
msgstr "Acerca de"
#: src/ui/gui/cheat_page.slint:15
msgctxt "Cheats"
msgid "Cheats"
msgstr "Trucos"
#: src/ui/gui/cheat_page.slint:25
msgctxt "Cheats"
msgid "Select ROM"
msgstr "Seleccionar ROM"
#: src/ui/gui/cheat_page.slint:41
msgctxt "Cheats"
msgid "Clear Cheats For All ROMs"
msgstr "Borrar trucos de todas las ROMs"
#: src/ui/gui/cheat_page.slint:83
msgctxt "Cheats"
msgid "No Cheats Available"
msgstr "No hay trucos disponibles"
#: src/ui/gui/controller_page.slint:80
msgctxt "ControllerSettingsGrid"
msgid "Enabled"
msgstr "Activado"
#: src/ui/gui/controller_page.slint:93
msgctxt "ControllerSettingsGrid"
msgid "Transfer Pak"
msgstr "Transfer Pak"
#: src/ui/gui/controller_page.slint:107
msgctxt "ControllerSettingsGrid"
msgid "Profile"
msgstr "Perfil"
#: src/ui/gui/controller_page.slint:157
msgctxt "ControllerConfig"
msgid "Controller Configuration"
msgstr "Configuración del mando"
#: src/ui/gui/controller_page.slint:171
msgctxt "ControllerConfig"
msgid "Configure Input Profile"
msgstr "Configurar perfil de entrada"
#: src/ui/gui/controller_page.slint:180
msgctxt "ControllerConfig"
msgid "Controller Settings"
msgstr "Ajustes del mando"
#: src/ui/gui/controller_page.slint:190
msgctxt "ControllerConfig"
msgid "Controller Assignment"
msgstr "Asignación del mando"
#: src/ui/gui/input_profile.slint:12
msgctxt "InputProfileDialog"
msgid "Create/Modify Input Profile"
msgstr "Crear/Modificar perfil de entrada"
#: src/ui/gui/input_profile.slint:25
msgctxt "InputProfileDialog"
msgid "Enter profile name to create or modify"
msgstr "Introduce el nombre del perfil para crear o modificar"
#: src/ui/gui/input_profile.slint:38
msgctxt "InputProfileDialog"
msgid "Deadzone Percentage"
msgstr "Porcentaje de zona muerta"
#: src/ui/gui/input_profile.slint:61
msgctxt "InputProfileDialog"
msgid "Use DirectInput"
msgstr "Usar DirectInput"
#: src/ui/gui/input_profile.slint:74
msgctxt "InputProfileDialog"
msgid "Start Profile Creation Wizard"
msgstr "Iniciar asistente de creación de perfil"
#: src/ui/gui/input_profile.slint:82
msgctxt "InputProfileDialog"
msgid "Cancel"
msgstr "Cancelar"
#: src/ui/gui/localgame_page.slint:19
msgctxt "LocalGame"
msgid "Local Game"
msgstr "Juego local"
#: src/ui/gui/localgame_page.slint:26
msgctxt "LocalGame"
msgid "Open ROM"
msgstr "Abrir ROM"
#: src/ui/gui/localgame_page.slint:37
msgctxt "LocalGame"
msgid "Open Saves Folder"
msgstr "Abrir carpeta de guardados"
#: src/ui/gui/localgame_page.slint:54
msgctxt "LocalGame"
msgid "Recent ROMs"
msgstr "ROMs recientes"
#: src/ui/gui/netplay_create.slint:7
msgctxt "NetplayCreate"
msgid "Netplay: Create Session"
msgstr "Netplay: Crear sesión"
#: src/ui/gui/netplay_create.slint:22
msgctxt "NetplayCreate"
msgid "Session Name:"
msgstr "Nombre de la sesión:"
#: src/ui/gui/netplay_create.slint:26
msgctxt "NetplayCreate"
msgid "Enter session name"
msgstr "Introduce el nombre de la sesión"
#: src/ui/gui/netplay_create.slint:36
msgctxt "NetplayCreate"
msgid "Password (Optional):"
msgstr "Contraseña (Opcional):"
#: src/ui/gui/netplay_create.slint:40
msgctxt "NetplayCreate"
msgid "Enter session password"
msgstr "Introduce la contraseña"
#: src/ui/gui/netplay_create.slint:51
msgctxt "NetplayCreate"
msgid "Player Name:"
msgstr "Nombre del jugador:"
#: src/ui/gui/netplay_create.slint:55
msgctxt "NetplayCreate"
msgid "Enter player name"
msgstr "Introduce tu nombre"
#: src/ui/gui/netplay_create.slint:66
msgctxt "NetplayCreate"
msgid "Select ROM"
msgstr "Seleccionar ROM"
#: src/ui/gui/netplay_create.slint:82
msgctxt "NetplayCreate"
msgid ""
"This game has cheats enabled. Cheats will be synchronized with other players."
msgstr ""
"Este juego tiene trucos activados. Los trucos se sincronizarán con los otros "
"jugadores."
#: src/ui/gui/netplay_create.slint:91
msgctxt "NetplayCreate"
msgid "Create Session"
msgstr "Crear sesión"
#: src/ui/gui/netplay_create.slint:107
msgctxt "NetplayCreate"
msgid "Cancel"
msgstr "Cancelar"
#: src/ui/gui/netplay_join.slint:7
msgctxt "NetplayJoin"
msgid "Netplay: Join Session"
msgstr "Netplay: Unirse a la sesión"
#: src/ui/gui/netplay_join.slint:18
msgctxt "NetplayJoin"
msgid "Player Name (required):"
msgstr "Nombre de jugador (requerido):"
#: src/ui/gui/netplay_join.slint:22
msgctxt "NetplayJoin"
msgid "Enter player name"
msgstr "Introduce tu nombre"
#: src/ui/gui/netplay_join.slint:31
msgctxt "NetplayJoin"
msgid "Password (if required)"
msgstr "Contraseña (si es necesaria)"
#: src/ui/gui/netplay_join.slint:42
msgctxt "NetplayJoin"
msgid "Select ROM"
msgstr "Seleccionar ROM"
#: src/ui/gui/netplay_join.slint:57
msgctxt "NetplayJoin"
msgid "Refreshing session list, please wait..."
msgstr "Actualizando lista de sesiones, espera..."
#: src/ui/gui/netplay_join.slint:62
msgctxt "NetplayJoin"
msgid "Click on a session below to select it"
msgstr "Pulsa una sesión para seleccionarla"
#: src/ui/gui/netplay_join.slint:67
msgctxt "NetplayJoin"
msgid "No sessions available. Please refresh to check again."
msgstr "No hay sesiones disponibles. Actualiza para comprobar de nuevo."
#: src/ui/gui/netplay_join.slint:73
msgctxt "NetplayJoin"
msgid "Session Name"
msgstr "Nombre de la sesión"
#: src/ui/gui/netplay_join.slint:74
msgctxt "NetplayJoin"
msgid "Game Name"
msgstr "Nombre del juego"
#: src/ui/gui/netplay_join.slint:75
msgctxt "NetplayJoin"
msgid "Password"
msgstr "Contraseña"
#: src/ui/gui/netplay_join.slint:76
msgctxt "NetplayJoin"
msgid "Cheats"
msgstr "Trucos"
#: src/ui/gui/netplay_join.slint:90
msgctxt "NetplayJoin"
msgid "Refresh Session List"
msgstr "Actualizar lista"
#: src/ui/gui/netplay_join.slint:105
msgctxt "NetplayJoin"
msgid "Join Session"
msgstr "Unirse a la sesión"
#: src/ui/gui/netplay_join.slint:117
msgctxt "NetplayJoin"
msgid "Cancel"
msgstr "Cancelar"
#: src/ui/gui/netplay_page.slint:31
msgctxt "Netplay"
msgid "Netplay"
msgstr "Netplay"
#: src/ui/gui/netplay_page.slint:39
msgctxt "Netplay"
msgid "Create Session"
msgstr "Crear sesión"
#: src/ui/gui/netplay_page.slint:50
msgctxt "Netplay"
msgid "Join Session"
msgstr "Unirse a la sesión"
#: src/ui/gui/netplay_page.slint:64
msgctxt "Netplay"
msgid "Netplay Discord Channel"
msgstr "Canal de Discord de Netplay"
#: src/ui/gui/netplay_page.slint:71
msgctxt "Netplay"
msgid "Provide Feedback"
msgstr "Enviar comentarios"
#: src/ui/gui/netplay_wait.slint:17
msgctxt "NetplayWait"
msgid "Netplay: Waiting Room"
msgstr "Netplay: Sala de espera"
#: src/ui/gui/netplay_wait.slint:29
msgctxt "NetplayWait"
msgid "Session Name:"
msgstr "Nombre de la sesión:"
#: src/ui/gui/netplay_wait.slint:35
msgctxt "NetplayWait"
msgid "Game Name:"
msgstr "Nombre del juego:"
#: src/ui/gui/netplay_wait.slint:45
msgctxt "NetplayWait"
msgid "Player 1:"
msgstr "Jugador 1:"
#: src/ui/gui/netplay_wait.slint:49
msgctxt "NetplayWait"
msgid "Player 2:"
msgstr "Jugador 2:"
#: src/ui/gui/netplay_wait.slint:55
msgctxt "NetplayWait"
msgid "Player 3:"
msgstr "Jugador 3:"
#: src/ui/gui/netplay_wait.slint:59
msgctxt "NetplayWait"
msgid "Player 4:"
msgstr "Jugador 4:"
#: src/ui/gui/netplay_wait.slint:73
msgctxt "NetplayWait"
msgid "Enter chat message"
msgstr "Escribe un mensaje en el chat"
#: src/ui/gui/netplay_wait.slint:84
msgctxt "NetplayWait"
msgid "Send Message"
msgstr "Enviar mensaje"
#: src/ui/gui/netplay_wait.slint:94
msgctxt "NetplayWait"
msgid ""
"Setting the input delay too low will cause the game to lag.\n"
"You can lower the input delay in-game by pressing Alt+[ and raise it with "
"Alt+]."
msgstr ""
"Configurar un retardo de entrada demasiado bajo hará que el juego se "
"ralentice.\n"
"Puedes reducir el retardo de entrada en el juego pulsando Alt+[ y "
"aumentarlo con Alt+]."
#: src/ui/gui/netplay_wait.slint:101
msgctxt "NetplayWait"
msgid "Local Input Delay:"
msgstr "Retardo de entrada local:"
#: src/ui/gui/netplay_wait.slint:118
msgctxt "NetplayWait"
msgid "Recommended: "
msgstr "Recomendado: "
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Start Game"
msgstr "Iniciar juego"
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Waiting for P2P mesh "
msgstr "Esperando malla P2P "
#: src/ui/gui/netplay_wait.slint:135
msgctxt "NetplayWait"
msgid "Cancel"
msgstr "Cancelar"
#: src/ui/gui/retroachievements_page.slint:19
msgctxt "RAData"
msgid "Not currently logged in"
msgstr "Sesión no iniciada"
#: src/ui/gui/retroachievements_page.slint:27
msgctxt "RetroAchievements"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/retroachievements_page.slint:36
msgctxt "RetroAchievements"
msgid "Enabled"
msgstr "Activado"
#: src/ui/gui/retroachievements_page.slint:51
msgctxt "RetroAchievements"
msgid "Hardcore mode"
msgstr "Modo Hardcore"
#: src/ui/gui/retroachievements_page.slint:60
msgctxt "RetroAchievements"
msgid "Challenge Indicators"
msgstr "Indicadores de desafío"
#: src/ui/gui/retroachievements_page.slint:69
msgctxt "RetroAchievements"
msgid "Leaderboard Trackers"
msgstr "Indicadores de tabla de clasificación"
#: src/ui/gui/retroachievements_page.slint:78
msgctxt "RetroAchievements"
msgid "Discord Rich Presence"
msgstr "Rich Presence en Discord"
#: src/ui/gui/retroachievements_page.slint:96
msgctxt "RetroAchievements"
msgid "View Profile"
msgstr "Ver perfil"
#: src/ui/gui/retroachievements_page.slint:106
msgctxt "RetroAchievements"
msgid "Username"
msgstr "Usuario"
#: src/ui/gui/retroachievements_page.slint:116
msgctxt "RetroAchievements"
msgid "Password"
msgstr "Contraseña"
#: src/ui/gui/retroachievements_page.slint:125
msgctxt "RetroAchievements"
msgid "Login"
msgstr "Entrar"
#: src/ui/gui/retroachievements_page.slint:141
msgctxt "RetroAchievements"
msgid "View Supported Games"
msgstr "Ver juegos compatibles"
#: src/ui/gui/settings_page.slint:24
msgctxt "Settings"
msgid "Settings"
msgstr "Ajustes"
#: src/ui/gui/settings_page.slint:35
msgctxt "Settings"
msgid "Resolution:"
msgstr "Resolución:"
#: src/ui/gui/settings_page.slint:49
msgctxt "Settings"
msgid "SSAA downscaling"
msgstr "Reducción de escala SSAA"
#: src/ui/gui/settings_page.slint:57
msgctxt "Settings"
msgid "Integer Scaling"
msgstr "Escalado por enteros"
#: src/ui/gui/settings_page.slint:65
msgctxt "Settings"
msgid "Fullscreen"
msgstr "Pantalla completa"
#: src/ui/gui/settings_page.slint:73
msgctxt "Settings"
msgid "Widescreen (stretch)"
msgstr "Pantalla ancha (estirado)"
#: src/ui/gui/settings_page.slint:81
msgctxt "Settings"
msgid "VSync"
msgstr "Sincronización vertical (VSync)"
#: src/ui/gui/settings_page.slint:89
msgctxt "Settings"
msgid "Apply CRT shader"
msgstr "Aplicar sombreador CRT"
#: src/ui/gui/settings_page.slint:101
msgctxt "Settings"
msgid "Overclock N64 CPU (may cause bugs)"
msgstr "Overclock CPU N64 (puede causar errores)"
#: src/ui/gui/settings_page.slint:109
msgctxt "Settings"
msgid "Disable Expansion Pak"
msgstr "Desactivar Expansion Pak"
#: src/ui/gui/settings_page.slint:117
msgctxt "Settings"
msgid "Enable Rewind"
msgstr "Activar rebobinado"
#: src/ui/gui/settings_page.slint:125
msgctxt "Settings"
msgid "Emulate UNFLoader"
msgstr "Emular UNFLoader"
#: src/ui/gui/settings_page.slint:133
msgctxt "Settings"
msgid "Emulate VRU"
msgstr "Emular VRU"
#: src/ui/gui/vru_dialog.slint:7
msgctxt "VruDialog"
msgid "What Would You Like To Say?"
msgstr "¿Qué te gustaría decir?"
#~ msgctxt "NetplayCreate"
#~ msgid "Server:"
#~ msgstr "Servidor:"
#~ msgctxt "CustomServerDialog"
#~ msgid "Enter a custom server URL"
#~ msgstr "Introduce la URL de servidor personalizado"
#~ msgctxt "NetplayJoin"
#~ msgid "Custom Server URL (optional):"
#~ msgstr "URL de servidor personalizado (opcional):"
#~ msgctxt "NetplayJoin"
#~ msgid "Server"
#~ msgstr "Servidor"
#~ msgctxt "NetplayWait"
#~ msgid "Ping:"
#~ msgstr "Latencia (Ping):"
#~ msgctxt "NetplayCreate"
#~ msgid "Creating server, please wait...This may take about 30 seconds."
#~ msgstr "Creando servidor, espera... Puede tardar unos 30 segundos."
#~ msgctxt "ControllerConfig"
#~ msgid "Port"
#~ msgstr "Puerto"
#~ msgctxt "ControllerConfig"
#~ msgid "Controller"
#~ msgstr "Mando"
@@ -0,0 +1,592 @@
# gopher64 - French (France) Translation
msgid ""
msgstr ""
"Project-Id-Version: gopher64\n"
"POT-Creation-Date: 2026-06-16 12:26+0000\n"
"PO-Revision-Date: 2026-05-11 12:00+0000\n"
"Last-Translator: \n"
"Language-Team: French (France)\n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/ui/gui/about_page.slint:17
msgctxt "NewVersionButton"
msgid "New version available! Click here to download"
msgstr "Nouvelle version disponible ! Cliquez ici pour télécharger"
#: src/ui/gui/about_page.slint:33
msgctxt "About"
msgid "About"
msgstr "À propos"
#: src/ui/gui/about_page.slint:40
msgctxt "About"
msgid "Wiki"
msgstr "Wiki"
#: src/ui/gui/about_page.slint:50
msgctxt "About"
msgid "Discord Server"
msgstr "Serveur Discord"
#: src/ui/gui/about_page.slint:60
msgctxt "About"
msgid "Source Code"
msgstr "Code source"
#: src/ui/gui/about_page.slint:70
msgctxt "About"
msgid "Donate (via Patreon)"
msgstr "Faire un don (via Patreon)"
#: src/ui/gui/about_page.slint:77
msgctxt "About"
msgid "Donate (via GitHub)"
msgstr "Faire un don (via GitHub)"
#: src/ui/gui/appwindow.slint:148
msgctxt "Menu"
msgid "Local Game"
msgstr "Jeu local"
#: src/ui/gui/appwindow.slint:152
msgctxt "Menu"
msgid "Controller Config"
msgstr "Configuration manette"
#: src/ui/gui/appwindow.slint:156
msgctxt "Menu"
msgid "Netplay"
msgstr "Netplay"
#: src/ui/gui/appwindow.slint:160
msgctxt "Menu"
msgid "Cheats"
msgstr "Triche"
#: src/ui/gui/appwindow.slint:164
msgctxt "Menu"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/appwindow.slint:168
msgctxt "Menu"
msgid "Settings"
msgstr "Paramètres"
#: src/ui/gui/appwindow.slint:172
msgctxt "Menu"
msgid "About"
msgstr "À propos"
#: src/ui/gui/cheat_page.slint:15
msgctxt "Cheats"
msgid "Cheats"
msgstr "Triche"
#: src/ui/gui/cheat_page.slint:25
msgctxt "Cheats"
msgid "Select ROM"
msgstr "Sélectionner une ROM"
#: src/ui/gui/cheat_page.slint:41
msgctxt "Cheats"
msgid "Clear Cheats For All ROMs"
msgstr "Effacer la triche pour toutes les ROMs"
#: src/ui/gui/cheat_page.slint:83
msgctxt "Cheats"
msgid "No Cheats Available"
msgstr "Aucune triche disponible"
#: src/ui/gui/controller_page.slint:80
msgctxt "ControllerSettingsGrid"
msgid "Enabled"
msgstr "Activé"
#: src/ui/gui/controller_page.slint:93
msgctxt "ControllerSettingsGrid"
msgid "Transfer Pak"
msgstr "Transfer Pak"
#: src/ui/gui/controller_page.slint:107
msgctxt "ControllerSettingsGrid"
msgid "Profile"
msgstr "Profil"
#: src/ui/gui/controller_page.slint:157
msgctxt "ControllerConfig"
msgid "Controller Configuration"
msgstr "Configuration de la manette"
#: src/ui/gui/controller_page.slint:171
msgctxt "ControllerConfig"
msgid "Configure Input Profile"
msgstr "Configurer le profil d'entrée"
#: src/ui/gui/controller_page.slint:180
msgctxt "ControllerConfig"
msgid "Controller Settings"
msgstr "Paramètres de la manette"
#: src/ui/gui/controller_page.slint:190
msgctxt "ControllerConfig"
msgid "Controller Assignment"
msgstr "Attribution de la manette"
#: src/ui/gui/input_profile.slint:12
msgctxt "InputProfileDialog"
msgid "Create/Modify Input Profile"
msgstr "Créer / modifier le profil d'entrée"
#: src/ui/gui/input_profile.slint:25
msgctxt "InputProfileDialog"
msgid "Enter profile name to create or modify"
msgstr "Saisir le nom du profil à créer ou à modifier"
#: src/ui/gui/input_profile.slint:38
msgctxt "InputProfileDialog"
msgid "Deadzone Percentage"
msgstr "Pourcentage de zone morte"
#: src/ui/gui/input_profile.slint:61
msgctxt "InputProfileDialog"
msgid "Use DirectInput"
msgstr "Utiliser DirectInput"
#: src/ui/gui/input_profile.slint:74
msgctxt "InputProfileDialog"
msgid "Start Profile Creation Wizard"
msgstr "Lancer l'assistant de création de profil"
#: src/ui/gui/input_profile.slint:82
msgctxt "InputProfileDialog"
msgid "Cancel"
msgstr "Annuler"
#: src/ui/gui/localgame_page.slint:19
msgctxt "LocalGame"
msgid "Local Game"
msgstr "Jeu local"
#: src/ui/gui/localgame_page.slint:26
msgctxt "LocalGame"
msgid "Open ROM"
msgstr "Ouvrir une ROM"
#: src/ui/gui/localgame_page.slint:37
msgctxt "LocalGame"
msgid "Open Saves Folder"
msgstr "Ouvrir le dossier des sauvegardes"
#: src/ui/gui/localgame_page.slint:54
msgctxt "LocalGame"
msgid "Recent ROMs"
msgstr "ROMs récentes"
#: src/ui/gui/netplay_create.slint:7
msgctxt "NetplayCreate"
msgid "Netplay: Create Session"
msgstr "Netplay : créer une session"
#: src/ui/gui/netplay_create.slint:22
msgctxt "NetplayCreate"
msgid "Session Name:"
msgstr "Nom de la session :"
#: src/ui/gui/netplay_create.slint:26
msgctxt "NetplayCreate"
msgid "Enter session name"
msgstr "Saisir le nom de la session"
#: src/ui/gui/netplay_create.slint:36
msgctxt "NetplayCreate"
msgid "Password (Optional):"
msgstr "Mot de passe (facultatif) :"
#: src/ui/gui/netplay_create.slint:40
msgctxt "NetplayCreate"
msgid "Enter session password"
msgstr "Saisir le mot de passe de la session"
#: src/ui/gui/netplay_create.slint:51
msgctxt "NetplayCreate"
msgid "Player Name:"
msgstr "Nom du joueur :"
#: src/ui/gui/netplay_create.slint:55
msgctxt "NetplayCreate"
msgid "Enter player name"
msgstr "Saisir le nom du joueur"
#: src/ui/gui/netplay_create.slint:66
msgctxt "NetplayCreate"
msgid "Select ROM"
msgstr "Sélectionner une ROM"
#: src/ui/gui/netplay_create.slint:82
msgctxt "NetplayCreate"
msgid ""
"This game has cheats enabled. Cheats will be synchronized with other players."
msgstr ""
"La triche est activée pour ce jeu. Elle sera synchronisée avec les autres "
"joueurs."
#: src/ui/gui/netplay_create.slint:91
msgctxt "NetplayCreate"
msgid "Create Session"
msgstr "Créer la session"
#: src/ui/gui/netplay_create.slint:107
msgctxt "NetplayCreate"
msgid "Cancel"
msgstr "Annuler"
#: src/ui/gui/netplay_join.slint:7
msgctxt "NetplayJoin"
msgid "Netplay: Join Session"
msgstr "Netplay : rejoindre une session"
#: src/ui/gui/netplay_join.slint:18
msgctxt "NetplayJoin"
msgid "Player Name (required):"
msgstr "Nom du joueur (obligatoire) :"
#: src/ui/gui/netplay_join.slint:22
msgctxt "NetplayJoin"
msgid "Enter player name"
msgstr "Saisir le nom du joueur"
#: src/ui/gui/netplay_join.slint:31
msgctxt "NetplayJoin"
msgid "Password (if required)"
msgstr "Mot de passe (si requis)"
#: src/ui/gui/netplay_join.slint:42
msgctxt "NetplayJoin"
msgid "Select ROM"
msgstr "Sélectionner une ROM"
#: src/ui/gui/netplay_join.slint:57
msgctxt "NetplayJoin"
msgid "Refreshing session list, please wait..."
msgstr "Actualisation de la liste des sessions, veuillez patienter…"
#: src/ui/gui/netplay_join.slint:62
msgctxt "NetplayJoin"
msgid "Click on a session below to select it"
msgstr "Cliquez sur une session ci-dessous pour la sélectionner"
#: src/ui/gui/netplay_join.slint:67
msgctxt "NetplayJoin"
msgid "No sessions available. Please refresh to check again."
msgstr ""
"Aucune session disponible. Veuillez actualiser pour vérifier à nouveau."
#: src/ui/gui/netplay_join.slint:73
msgctxt "NetplayJoin"
msgid "Session Name"
msgstr "Nom de la session"
#: src/ui/gui/netplay_join.slint:74
msgctxt "NetplayJoin"
msgid "Game Name"
msgstr "Nom du jeu"
#: src/ui/gui/netplay_join.slint:75
msgctxt "NetplayJoin"
msgid "Password"
msgstr "Mot de passe"
#: src/ui/gui/netplay_join.slint:76
msgctxt "NetplayJoin"
msgid "Cheats"
msgstr "Triche"
#: src/ui/gui/netplay_join.slint:90
msgctxt "NetplayJoin"
msgid "Refresh Session List"
msgstr "Actualiser la liste"
#: src/ui/gui/netplay_join.slint:105
msgctxt "NetplayJoin"
msgid "Join Session"
msgstr "Rejoindre la session"
#: src/ui/gui/netplay_join.slint:117
msgctxt "NetplayJoin"
msgid "Cancel"
msgstr "Annuler"
#: src/ui/gui/netplay_page.slint:31
msgctxt "Netplay"
msgid "Netplay"
msgstr "Netplay"
#: src/ui/gui/netplay_page.slint:39
msgctxt "Netplay"
msgid "Create Session"
msgstr "Créer une session"
#: src/ui/gui/netplay_page.slint:50
msgctxt "Netplay"
msgid "Join Session"
msgstr "Rejoindre une session"
#: src/ui/gui/netplay_page.slint:64
msgctxt "Netplay"
msgid "Netplay Discord Channel"
msgstr "Salon Discord Netplay"
#: src/ui/gui/netplay_page.slint:71
msgctxt "Netplay"
msgid "Provide Feedback"
msgstr "Donner votre avis"
#: src/ui/gui/netplay_wait.slint:17
msgctxt "NetplayWait"
msgid "Netplay: Waiting Room"
msgstr "Netplay : salle d'attente"
#: src/ui/gui/netplay_wait.slint:29
msgctxt "NetplayWait"
msgid "Session Name:"
msgstr "Nom de la session :"
#: src/ui/gui/netplay_wait.slint:35
msgctxt "NetplayWait"
msgid "Game Name:"
msgstr "Nom du jeu :"
#: src/ui/gui/netplay_wait.slint:45
msgctxt "NetplayWait"
msgid "Player 1:"
msgstr "Joueur 1 :"
#: src/ui/gui/netplay_wait.slint:49
msgctxt "NetplayWait"
msgid "Player 2:"
msgstr "Joueur 2 :"
#: src/ui/gui/netplay_wait.slint:55
msgctxt "NetplayWait"
msgid "Player 3:"
msgstr "Joueur 3 :"
#: src/ui/gui/netplay_wait.slint:59
msgctxt "NetplayWait"
msgid "Player 4:"
msgstr "Joueur 4 :"
#: src/ui/gui/netplay_wait.slint:73
msgctxt "NetplayWait"
msgid "Enter chat message"
msgstr "Saisir un message"
#: src/ui/gui/netplay_wait.slint:84
msgctxt "NetplayWait"
msgid "Send Message"
msgstr "Envoyer"
#: src/ui/gui/netplay_wait.slint:94
msgctxt "NetplayWait"
msgid ""
"Setting the input delay too low will cause the game to lag.\n"
"You can lower the input delay in-game by pressing Alt+[ and raise it with "
"Alt+]."
msgstr ""
"Régler le délai d'entrée trop bas provoquera des ralentissements.\n"
"Vous pouvez diminuer le délai d'entrée en jeu avec Alt+[ et l'augmenter "
"avec Alt+]."
#: src/ui/gui/netplay_wait.slint:101
msgctxt "NetplayWait"
msgid "Local Input Delay:"
msgstr "Délai d'entrée local :"
#: src/ui/gui/netplay_wait.slint:118
msgctxt "NetplayWait"
msgid "Recommended: "
msgstr "Recommandé : "
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Start Game"
msgstr "Lancer la partie"
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Waiting for P2P mesh "
msgstr "En attente du maillage P2P "
#: src/ui/gui/netplay_wait.slint:135
msgctxt "NetplayWait"
msgid "Cancel"
msgstr "Annuler"
#: src/ui/gui/retroachievements_page.slint:19
msgctxt "RAData"
msgid "Not currently logged in"
msgstr "Non connecté"
#: src/ui/gui/retroachievements_page.slint:27
msgctxt "RetroAchievements"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/retroachievements_page.slint:36
msgctxt "RetroAchievements"
msgid "Enabled"
msgstr "Activé"
#: src/ui/gui/retroachievements_page.slint:51
msgctxt "RetroAchievements"
msgid "Hardcore mode"
msgstr "Mode hardcore"
#: src/ui/gui/retroachievements_page.slint:60
msgctxt "RetroAchievements"
msgid "Challenge Indicators"
msgstr "Indicateurs de défi"
#: src/ui/gui/retroachievements_page.slint:69
msgctxt "RetroAchievements"
msgid "Leaderboard Trackers"
msgstr "Suivi des classements"
#: src/ui/gui/retroachievements_page.slint:78
msgctxt "RetroAchievements"
msgid "Discord Rich Presence"
msgstr "Rich Presence Discord"
#: src/ui/gui/retroachievements_page.slint:96
msgctxt "RetroAchievements"
msgid "View Profile"
msgstr "Voir le profil"
#: src/ui/gui/retroachievements_page.slint:106
msgctxt "RetroAchievements"
msgid "Username"
msgstr "Nom d'utilisateur"
#: src/ui/gui/retroachievements_page.slint:116
msgctxt "RetroAchievements"
msgid "Password"
msgstr "Mot de passe"
#: src/ui/gui/retroachievements_page.slint:125
msgctxt "RetroAchievements"
msgid "Login"
msgstr "Connexion"
#: src/ui/gui/retroachievements_page.slint:141
msgctxt "RetroAchievements"
msgid "View Supported Games"
msgstr "Voir les jeux pris en charge"
#: src/ui/gui/settings_page.slint:24
msgctxt "Settings"
msgid "Settings"
msgstr "Paramètres"
#: src/ui/gui/settings_page.slint:35
msgctxt "Settings"
msgid "Resolution:"
msgstr "Résolution :"
#: src/ui/gui/settings_page.slint:49
msgctxt "Settings"
msgid "SSAA downscaling"
msgstr "Réduction SSAA"
#: src/ui/gui/settings_page.slint:57
msgctxt "Settings"
msgid "Integer Scaling"
msgstr "Mise à l'échelle par entiers"
#: src/ui/gui/settings_page.slint:65
msgctxt "Settings"
msgid "Fullscreen"
msgstr "Plein écran"
#: src/ui/gui/settings_page.slint:73
msgctxt "Settings"
msgid "Widescreen (stretch)"
msgstr "Écran large (étiré)"
#: src/ui/gui/settings_page.slint:81
msgctxt "Settings"
msgid "VSync"
msgstr "Synchro verticale"
#: src/ui/gui/settings_page.slint:89
msgctxt "Settings"
msgid "Apply CRT shader"
msgstr "Appliquer le filtre CRT"
#: src/ui/gui/settings_page.slint:101
msgctxt "Settings"
msgid "Overclock N64 CPU (may cause bugs)"
msgstr "Surcharger le CPU N64 (risque de bugs)"
#: src/ui/gui/settings_page.slint:109
msgctxt "Settings"
msgid "Disable Expansion Pak"
msgstr "Désactiver l'Expansion Pak"
#: src/ui/gui/settings_page.slint:117
msgctxt "Settings"
msgid "Enable Rewind"
msgstr "Activer le rembobinage"
#: src/ui/gui/settings_page.slint:125
msgctxt "Settings"
msgid "Emulate UNFLoader"
msgstr "Émuler UNFLoader"
#: src/ui/gui/settings_page.slint:133
msgctxt "Settings"
msgid "Emulate VRU"
msgstr "Émuler le VRU"
#: src/ui/gui/vru_dialog.slint:7
msgctxt "VruDialog"
msgid "What Would You Like To Say?"
msgstr "Que souhaitez-vous dire ?"
#~ msgctxt "NetplayCreate"
#~ msgid "Server:"
#~ msgstr "Serveur :"
#~ msgctxt "CustomServerDialog"
#~ msgid "Enter a custom server URL"
#~ msgstr "Saisir l'URL personnalisée du serveur"
#~ msgctxt "NetplayJoin"
#~ msgid "Custom Server URL (optional):"
#~ msgstr "URL personnalisée du serveur (facultatif) :"
#~ msgctxt "NetplayJoin"
#~ msgid "Server"
#~ msgstr "Serveur"
#~ msgctxt "NetplayWait"
#~ msgid "Ping:"
#~ msgstr "Ping :"
#~ msgctxt "NetplayCreate"
#~ msgid "Creating server, please wait...This may take about 30 seconds."
#~ msgstr ""
#~ "Création du serveur, veuillez patienter… Cela peut prendre environ 30 "
#~ "secondes."
#~ msgctxt "ControllerConfig"
#~ msgid "Port"
#~ msgstr "Port"
#~ msgctxt "ControllerConfig"
#~ msgid "Controller"
#~ msgstr "Manette"
+551
View File
@@ -0,0 +1,551 @@
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2026-06-16 12:26+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/ui/gui/about_page.slint:17
msgctxt "NewVersionButton"
msgid "New version available! Click here to download"
msgstr ""
#: src/ui/gui/about_page.slint:33
msgctxt "About"
msgid "About"
msgstr ""
#: src/ui/gui/about_page.slint:40
msgctxt "About"
msgid "Wiki"
msgstr ""
#: src/ui/gui/about_page.slint:50
msgctxt "About"
msgid "Discord Server"
msgstr ""
#: src/ui/gui/about_page.slint:60
msgctxt "About"
msgid "Source Code"
msgstr ""
#: src/ui/gui/about_page.slint:70
msgctxt "About"
msgid "Donate (via Patreon)"
msgstr ""
#: src/ui/gui/about_page.slint:77
msgctxt "About"
msgid "Donate (via GitHub)"
msgstr ""
#: src/ui/gui/appwindow.slint:148
msgctxt "Menu"
msgid "Local Game"
msgstr ""
#: src/ui/gui/appwindow.slint:152
msgctxt "Menu"
msgid "Controller Config"
msgstr ""
#: src/ui/gui/appwindow.slint:156
msgctxt "Menu"
msgid "Netplay"
msgstr ""
#: src/ui/gui/appwindow.slint:160
msgctxt "Menu"
msgid "Cheats"
msgstr ""
#: src/ui/gui/appwindow.slint:164
msgctxt "Menu"
msgid "RetroAchievements"
msgstr ""
#: src/ui/gui/appwindow.slint:168
msgctxt "Menu"
msgid "Settings"
msgstr ""
#: src/ui/gui/appwindow.slint:172
msgctxt "Menu"
msgid "About"
msgstr ""
#: src/ui/gui/cheat_page.slint:15
msgctxt "Cheats"
msgid "Cheats"
msgstr ""
#: src/ui/gui/cheat_page.slint:25
msgctxt "Cheats"
msgid "Select ROM"
msgstr ""
#: src/ui/gui/cheat_page.slint:41
msgctxt "Cheats"
msgid "Clear Cheats For All ROMs"
msgstr ""
#: src/ui/gui/cheat_page.slint:83
msgctxt "Cheats"
msgid "No Cheats Available"
msgstr ""
#: src/ui/gui/controller_page.slint:80
msgctxt "ControllerSettingsGrid"
msgid "Enabled"
msgstr ""
#: src/ui/gui/controller_page.slint:93
msgctxt "ControllerSettingsGrid"
msgid "Transfer Pak"
msgstr ""
#: src/ui/gui/controller_page.slint:107
msgctxt "ControllerSettingsGrid"
msgid "Profile"
msgstr ""
#: src/ui/gui/controller_page.slint:157
msgctxt "ControllerConfig"
msgid "Controller Configuration"
msgstr ""
#: src/ui/gui/controller_page.slint:171
msgctxt "ControllerConfig"
msgid "Configure Input Profile"
msgstr ""
#: src/ui/gui/controller_page.slint:180
msgctxt "ControllerConfig"
msgid "Controller Settings"
msgstr ""
#: src/ui/gui/controller_page.slint:190
msgctxt "ControllerConfig"
msgid "Controller Assignment"
msgstr ""
#: src/ui/gui/input_profile.slint:12
msgctxt "InputProfileDialog"
msgid "Create/Modify Input Profile"
msgstr ""
#: src/ui/gui/input_profile.slint:25
msgctxt "InputProfileDialog"
msgid "Enter profile name to create or modify"
msgstr ""
#: src/ui/gui/input_profile.slint:38
msgctxt "InputProfileDialog"
msgid "Deadzone Percentage"
msgstr ""
#: src/ui/gui/input_profile.slint:61
msgctxt "InputProfileDialog"
msgid "Use DirectInput"
msgstr ""
#: src/ui/gui/input_profile.slint:74
msgctxt "InputProfileDialog"
msgid "Start Profile Creation Wizard"
msgstr ""
#: src/ui/gui/input_profile.slint:82
msgctxt "InputProfileDialog"
msgid "Cancel"
msgstr ""
#: src/ui/gui/localgame_page.slint:19
msgctxt "LocalGame"
msgid "Local Game"
msgstr ""
#: src/ui/gui/localgame_page.slint:26
msgctxt "LocalGame"
msgid "Open ROM"
msgstr ""
#: src/ui/gui/localgame_page.slint:37
msgctxt "LocalGame"
msgid "Open Saves Folder"
msgstr ""
#: src/ui/gui/localgame_page.slint:54
msgctxt "LocalGame"
msgid "Recent ROMs"
msgstr ""
#: src/ui/gui/netplay_create.slint:7
msgctxt "NetplayCreate"
msgid "Netplay: Create Session"
msgstr ""
#: src/ui/gui/netplay_create.slint:22
msgctxt "NetplayCreate"
msgid "Session Name:"
msgstr ""
#: src/ui/gui/netplay_create.slint:26
msgctxt "NetplayCreate"
msgid "Enter session name"
msgstr ""
#: src/ui/gui/netplay_create.slint:36
msgctxt "NetplayCreate"
msgid "Password (Optional):"
msgstr ""
#: src/ui/gui/netplay_create.slint:40
msgctxt "NetplayCreate"
msgid "Enter session password"
msgstr ""
#: src/ui/gui/netplay_create.slint:51
msgctxt "NetplayCreate"
msgid "Player Name:"
msgstr ""
#: src/ui/gui/netplay_create.slint:55
msgctxt "NetplayCreate"
msgid "Enter player name"
msgstr ""
#: src/ui/gui/netplay_create.slint:66
msgctxt "NetplayCreate"
msgid "Select ROM"
msgstr ""
#: src/ui/gui/netplay_create.slint:82
msgctxt "NetplayCreate"
msgid ""
"This game has cheats enabled. Cheats will be synchronized with other players."
msgstr ""
#: src/ui/gui/netplay_create.slint:91
msgctxt "NetplayCreate"
msgid "Create Session"
msgstr ""
#: src/ui/gui/netplay_create.slint:107
msgctxt "NetplayCreate"
msgid "Cancel"
msgstr ""
#: src/ui/gui/netplay_join.slint:7
msgctxt "NetplayJoin"
msgid "Netplay: Join Session"
msgstr ""
#: src/ui/gui/netplay_join.slint:18
msgctxt "NetplayJoin"
msgid "Player Name (required):"
msgstr ""
#: src/ui/gui/netplay_join.slint:22
msgctxt "NetplayJoin"
msgid "Enter player name"
msgstr ""
#: src/ui/gui/netplay_join.slint:31
msgctxt "NetplayJoin"
msgid "Password (if required)"
msgstr ""
#: src/ui/gui/netplay_join.slint:42
msgctxt "NetplayJoin"
msgid "Select ROM"
msgstr ""
#: src/ui/gui/netplay_join.slint:57
msgctxt "NetplayJoin"
msgid "Refreshing session list, please wait..."
msgstr ""
#: src/ui/gui/netplay_join.slint:62
msgctxt "NetplayJoin"
msgid "Click on a session below to select it"
msgstr ""
#: src/ui/gui/netplay_join.slint:67
msgctxt "NetplayJoin"
msgid "No sessions available. Please refresh to check again."
msgstr ""
#: src/ui/gui/netplay_join.slint:73
msgctxt "NetplayJoin"
msgid "Session Name"
msgstr ""
#: src/ui/gui/netplay_join.slint:74
msgctxt "NetplayJoin"
msgid "Game Name"
msgstr ""
#: src/ui/gui/netplay_join.slint:75
msgctxt "NetplayJoin"
msgid "Password"
msgstr ""
#: src/ui/gui/netplay_join.slint:76
msgctxt "NetplayJoin"
msgid "Cheats"
msgstr ""
#: src/ui/gui/netplay_join.slint:90
msgctxt "NetplayJoin"
msgid "Refresh Session List"
msgstr ""
#: src/ui/gui/netplay_join.slint:105
msgctxt "NetplayJoin"
msgid "Join Session"
msgstr ""
#: src/ui/gui/netplay_join.slint:117
msgctxt "NetplayJoin"
msgid "Cancel"
msgstr ""
#: src/ui/gui/netplay_page.slint:31
msgctxt "Netplay"
msgid "Netplay"
msgstr ""
#: src/ui/gui/netplay_page.slint:39
msgctxt "Netplay"
msgid "Create Session"
msgstr ""
#: src/ui/gui/netplay_page.slint:50
msgctxt "Netplay"
msgid "Join Session"
msgstr ""
#: src/ui/gui/netplay_page.slint:64
msgctxt "Netplay"
msgid "Netplay Discord Channel"
msgstr ""
#: src/ui/gui/netplay_page.slint:71
msgctxt "Netplay"
msgid "Provide Feedback"
msgstr ""
#: src/ui/gui/netplay_wait.slint:17
msgctxt "NetplayWait"
msgid "Netplay: Waiting Room"
msgstr ""
#: src/ui/gui/netplay_wait.slint:29
msgctxt "NetplayWait"
msgid "Session Name:"
msgstr ""
#: src/ui/gui/netplay_wait.slint:35
msgctxt "NetplayWait"
msgid "Game Name:"
msgstr ""
#: src/ui/gui/netplay_wait.slint:45
msgctxt "NetplayWait"
msgid "Player 1:"
msgstr ""
#: src/ui/gui/netplay_wait.slint:49
msgctxt "NetplayWait"
msgid "Player 2:"
msgstr ""
#: src/ui/gui/netplay_wait.slint:55
msgctxt "NetplayWait"
msgid "Player 3:"
msgstr ""
#: src/ui/gui/netplay_wait.slint:59
msgctxt "NetplayWait"
msgid "Player 4:"
msgstr ""
#: src/ui/gui/netplay_wait.slint:73
msgctxt "NetplayWait"
msgid "Enter chat message"
msgstr ""
#: src/ui/gui/netplay_wait.slint:84
msgctxt "NetplayWait"
msgid "Send Message"
msgstr ""
#: src/ui/gui/netplay_wait.slint:94
msgctxt "NetplayWait"
msgid ""
"Setting the input delay too low will cause the game to lag.\nYou can lower "
"the input delay in-game by pressing Alt+[ and raise it with Alt+]."
msgstr ""
#: src/ui/gui/netplay_wait.slint:101
msgctxt "NetplayWait"
msgid "Local Input Delay:"
msgstr ""
#: src/ui/gui/netplay_wait.slint:118
msgctxt "NetplayWait"
msgid "Recommended: "
msgstr ""
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Start Game"
msgstr ""
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Waiting for P2P mesh "
msgstr ""
#: src/ui/gui/netplay_wait.slint:135
msgctxt "NetplayWait"
msgid "Cancel"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:19
msgctxt "RAData"
msgid "Not currently logged in"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:27
msgctxt "RetroAchievements"
msgid "RetroAchievements"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:36
msgctxt "RetroAchievements"
msgid "Enabled"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:51
msgctxt "RetroAchievements"
msgid "Hardcore mode"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:60
msgctxt "RetroAchievements"
msgid "Challenge Indicators"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:69
msgctxt "RetroAchievements"
msgid "Leaderboard Trackers"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:78
msgctxt "RetroAchievements"
msgid "Discord Rich Presence"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:96
msgctxt "RetroAchievements"
msgid "View Profile"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:106
msgctxt "RetroAchievements"
msgid "Username"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:116
msgctxt "RetroAchievements"
msgid "Password"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:125
msgctxt "RetroAchievements"
msgid "Login"
msgstr ""
#: src/ui/gui/retroachievements_page.slint:141
msgctxt "RetroAchievements"
msgid "View Supported Games"
msgstr ""
#: src/ui/gui/settings_page.slint:24
msgctxt "Settings"
msgid "Settings"
msgstr ""
#: src/ui/gui/settings_page.slint:35
msgctxt "Settings"
msgid "Resolution:"
msgstr ""
#: src/ui/gui/settings_page.slint:49
msgctxt "Settings"
msgid "SSAA downscaling"
msgstr ""
#: src/ui/gui/settings_page.slint:57
msgctxt "Settings"
msgid "Integer Scaling"
msgstr ""
#: src/ui/gui/settings_page.slint:65
msgctxt "Settings"
msgid "Fullscreen"
msgstr ""
#: src/ui/gui/settings_page.slint:73
msgctxt "Settings"
msgid "Widescreen (stretch)"
msgstr ""
#: src/ui/gui/settings_page.slint:81
msgctxt "Settings"
msgid "VSync"
msgstr ""
#: src/ui/gui/settings_page.slint:89
msgctxt "Settings"
msgid "Apply CRT shader"
msgstr ""
#: src/ui/gui/settings_page.slint:101
msgctxt "Settings"
msgid "Overclock N64 CPU (may cause bugs)"
msgstr ""
#: src/ui/gui/settings_page.slint:109
msgctxt "Settings"
msgid "Disable Expansion Pak"
msgstr ""
#: src/ui/gui/settings_page.slint:117
msgctxt "Settings"
msgid "Enable Rewind"
msgstr ""
#: src/ui/gui/settings_page.slint:125
msgctxt "Settings"
msgid "Emulate UNFLoader"
msgstr ""
#: src/ui/gui/settings_page.slint:133
msgctxt "Settings"
msgid "Emulate VRU"
msgstr ""
#: src/ui/gui/vru_dialog.slint:7
msgctxt "VruDialog"
msgid "What Would You Like To Say?"
msgstr ""
@@ -0,0 +1,588 @@
# gopher64 - Japanese Translation
msgid ""
msgstr ""
"Project-Id-Version: gopher64\n"
"POT-Creation-Date: 2026-06-16 12:26+0000\n"
"PO-Revision-Date: 2026-05-11 12:00+0000\n"
"Last-Translator: \n"
"Language-Team: Japanese\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/ui/gui/about_page.slint:17
msgctxt "NewVersionButton"
msgid "New version available! Click here to download"
msgstr "新しいバージョンがあります。クリックしてダウンロード"
#: src/ui/gui/about_page.slint:33
msgctxt "About"
msgid "About"
msgstr "バージョン情報"
#: src/ui/gui/about_page.slint:40
msgctxt "About"
msgid "Wiki"
msgstr "Wiki"
#: src/ui/gui/about_page.slint:50
msgctxt "About"
msgid "Discord Server"
msgstr "Discordサーバー"
#: src/ui/gui/about_page.slint:60
msgctxt "About"
msgid "Source Code"
msgstr "ソースコード"
#: src/ui/gui/about_page.slint:70
msgctxt "About"
msgid "Donate (via Patreon)"
msgstr "Patreonで寄付"
#: src/ui/gui/about_page.slint:77
msgctxt "About"
msgid "Donate (via GitHub)"
msgstr "GitHubで寄付"
#: src/ui/gui/appwindow.slint:148
msgctxt "Menu"
msgid "Local Game"
msgstr "ローカルゲーム"
#: src/ui/gui/appwindow.slint:152
msgctxt "Menu"
msgid "Controller Config"
msgstr "コントローラー設定"
#: src/ui/gui/appwindow.slint:156
msgctxt "Menu"
msgid "Netplay"
msgstr "ネットプレイ"
#: src/ui/gui/appwindow.slint:160
msgctxt "Menu"
msgid "Cheats"
msgstr "チート"
#: src/ui/gui/appwindow.slint:164
msgctxt "Menu"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/appwindow.slint:168
msgctxt "Menu"
msgid "Settings"
msgstr "設定"
#: src/ui/gui/appwindow.slint:172
msgctxt "Menu"
msgid "About"
msgstr "バージョン情報"
#: src/ui/gui/cheat_page.slint:15
msgctxt "Cheats"
msgid "Cheats"
msgstr "チート"
#: src/ui/gui/cheat_page.slint:25
msgctxt "Cheats"
msgid "Select ROM"
msgstr "ROMを選択"
#: src/ui/gui/cheat_page.slint:41
msgctxt "Cheats"
msgid "Clear Cheats For All ROMs"
msgstr "すべてのROMのチートをクリア"
#: src/ui/gui/cheat_page.slint:83
msgctxt "Cheats"
msgid "No Cheats Available"
msgstr "利用できるチートはありません"
#: src/ui/gui/controller_page.slint:80
msgctxt "ControllerSettingsGrid"
msgid "Enabled"
msgstr "有効"
#: src/ui/gui/controller_page.slint:93
msgctxt "ControllerSettingsGrid"
msgid "Transfer Pak"
msgstr "Transfer Pak"
#: src/ui/gui/controller_page.slint:107
msgctxt "ControllerSettingsGrid"
msgid "Profile"
msgstr "プロファイル"
#: src/ui/gui/controller_page.slint:157
msgctxt "ControllerConfig"
msgid "Controller Configuration"
msgstr "コントローラー設定"
#: src/ui/gui/controller_page.slint:171
msgctxt "ControllerConfig"
msgid "Configure Input Profile"
msgstr "入力プロファイルを設定"
#: src/ui/gui/controller_page.slint:180
msgctxt "ControllerConfig"
msgid "Controller Settings"
msgstr "コントローラー詳細設定"
#: src/ui/gui/controller_page.slint:190
msgctxt "ControllerConfig"
msgid "Controller Assignment"
msgstr "コントローラー割り当て"
#: src/ui/gui/input_profile.slint:12
msgctxt "InputProfileDialog"
msgid "Create/Modify Input Profile"
msgstr "入力プロファイルの作成/変更"
#: src/ui/gui/input_profile.slint:25
msgctxt "InputProfileDialog"
msgid "Enter profile name to create or modify"
msgstr "作成または変更するプロファイル名を入力"
#: src/ui/gui/input_profile.slint:38
msgctxt "InputProfileDialog"
msgid "Deadzone Percentage"
msgstr "デッドゾーン(%)"
#: src/ui/gui/input_profile.slint:61
msgctxt "InputProfileDialog"
msgid "Use DirectInput"
msgstr "DirectInputを使用"
#: src/ui/gui/input_profile.slint:74
msgctxt "InputProfileDialog"
msgid "Start Profile Creation Wizard"
msgstr "プロファイル作成ウィザードを開始"
#: src/ui/gui/input_profile.slint:82
msgctxt "InputProfileDialog"
msgid "Cancel"
msgstr "キャンセル"
#: src/ui/gui/localgame_page.slint:19
msgctxt "LocalGame"
msgid "Local Game"
msgstr "ローカルゲーム"
#: src/ui/gui/localgame_page.slint:26
msgctxt "LocalGame"
msgid "Open ROM"
msgstr "ROMを開く"
#: src/ui/gui/localgame_page.slint:37
msgctxt "LocalGame"
msgid "Open Saves Folder"
msgstr "セーブフォルダーを開く"
#: src/ui/gui/localgame_page.slint:54
msgctxt "LocalGame"
msgid "Recent ROMs"
msgstr "最近使ったROM"
#: src/ui/gui/netplay_create.slint:7
msgctxt "NetplayCreate"
msgid "Netplay: Create Session"
msgstr "ネットプレイ:セッション作成"
#: src/ui/gui/netplay_create.slint:22
msgctxt "NetplayCreate"
msgid "Session Name:"
msgstr "セッション名:"
#: src/ui/gui/netplay_create.slint:26
msgctxt "NetplayCreate"
msgid "Enter session name"
msgstr "セッション名を入力"
#: src/ui/gui/netplay_create.slint:36
msgctxt "NetplayCreate"
msgid "Password (Optional):"
msgstr "パスワード(任意):"
#: src/ui/gui/netplay_create.slint:40
msgctxt "NetplayCreate"
msgid "Enter session password"
msgstr "セッションのパスワードを入力"
#: src/ui/gui/netplay_create.slint:51
msgctxt "NetplayCreate"
msgid "Player Name:"
msgstr "プレイヤー名:"
#: src/ui/gui/netplay_create.slint:55
msgctxt "NetplayCreate"
msgid "Enter player name"
msgstr "プレイヤー名を入力"
#: src/ui/gui/netplay_create.slint:66
msgctxt "NetplayCreate"
msgid "Select ROM"
msgstr "ROMを選択"
#: src/ui/gui/netplay_create.slint:82
msgctxt "NetplayCreate"
msgid ""
"This game has cheats enabled. Cheats will be synchronized with other players."
msgstr "このゲームではチートが有効です。チートは他のプレイヤーと同期されます。"
#: src/ui/gui/netplay_create.slint:91
msgctxt "NetplayCreate"
msgid "Create Session"
msgstr "セッションを作成"
#: src/ui/gui/netplay_create.slint:107
msgctxt "NetplayCreate"
msgid "Cancel"
msgstr "キャンセル"
#: src/ui/gui/netplay_join.slint:7
msgctxt "NetplayJoin"
msgid "Netplay: Join Session"
msgstr "ネットプレイ:セッションに参加"
#: src/ui/gui/netplay_join.slint:18
msgctxt "NetplayJoin"
msgid "Player Name (required):"
msgstr "プレイヤー名(必須):"
#: src/ui/gui/netplay_join.slint:22
msgctxt "NetplayJoin"
msgid "Enter player name"
msgstr "プレイヤー名を入力"
#: src/ui/gui/netplay_join.slint:31
msgctxt "NetplayJoin"
msgid "Password (if required)"
msgstr "パスワード(必要な場合)"
#: src/ui/gui/netplay_join.slint:42
msgctxt "NetplayJoin"
msgid "Select ROM"
msgstr "ROMを選択"
#: src/ui/gui/netplay_join.slint:57
msgctxt "NetplayJoin"
msgid "Refreshing session list, please wait..."
msgstr "セッション一覧を更新しています。しばらくお待ちください…"
#: src/ui/gui/netplay_join.slint:62
msgctxt "NetplayJoin"
msgid "Click on a session below to select it"
msgstr "下の一覧からセッションをクリックして選択"
#: src/ui/gui/netplay_join.slint:67
msgctxt "NetplayJoin"
msgid "No sessions available. Please refresh to check again."
msgstr "利用できるセッションがありません。更新して再度確認してください。"
#: src/ui/gui/netplay_join.slint:73
msgctxt "NetplayJoin"
msgid "Session Name"
msgstr "セッション名"
#: src/ui/gui/netplay_join.slint:74
msgctxt "NetplayJoin"
msgid "Game Name"
msgstr "ゲーム名"
#: src/ui/gui/netplay_join.slint:75
msgctxt "NetplayJoin"
msgid "Password"
msgstr "パスワード"
#: src/ui/gui/netplay_join.slint:76
msgctxt "NetplayJoin"
msgid "Cheats"
msgstr "チート"
#: src/ui/gui/netplay_join.slint:90
msgctxt "NetplayJoin"
msgid "Refresh Session List"
msgstr "セッション一覧を更新"
#: src/ui/gui/netplay_join.slint:105
msgctxt "NetplayJoin"
msgid "Join Session"
msgstr "セッションに参加"
#: src/ui/gui/netplay_join.slint:117
msgctxt "NetplayJoin"
msgid "Cancel"
msgstr "キャンセル"
#: src/ui/gui/netplay_page.slint:31
msgctxt "Netplay"
msgid "Netplay"
msgstr "ネットプレイ"
#: src/ui/gui/netplay_page.slint:39
msgctxt "Netplay"
msgid "Create Session"
msgstr "セッションを作成"
#: src/ui/gui/netplay_page.slint:50
msgctxt "Netplay"
msgid "Join Session"
msgstr "セッションに参加"
#: src/ui/gui/netplay_page.slint:64
msgctxt "Netplay"
msgid "Netplay Discord Channel"
msgstr "ネットプレイ用Discordチャンネル"
#: src/ui/gui/netplay_page.slint:71
msgctxt "Netplay"
msgid "Provide Feedback"
msgstr "フィードバックを送る"
#: src/ui/gui/netplay_wait.slint:17
msgctxt "NetplayWait"
msgid "Netplay: Waiting Room"
msgstr "ネットプレイ:待機室"
#: src/ui/gui/netplay_wait.slint:29
msgctxt "NetplayWait"
msgid "Session Name:"
msgstr "セッション名:"
#: src/ui/gui/netplay_wait.slint:35
msgctxt "NetplayWait"
msgid "Game Name:"
msgstr "ゲーム名:"
#: src/ui/gui/netplay_wait.slint:45
msgctxt "NetplayWait"
msgid "Player 1:"
msgstr "プレイヤー1"
#: src/ui/gui/netplay_wait.slint:49
msgctxt "NetplayWait"
msgid "Player 2:"
msgstr "プレイヤー2"
#: src/ui/gui/netplay_wait.slint:55
msgctxt "NetplayWait"
msgid "Player 3:"
msgstr "プレイヤー3"
#: src/ui/gui/netplay_wait.slint:59
msgctxt "NetplayWait"
msgid "Player 4:"
msgstr "プレイヤー4"
#: src/ui/gui/netplay_wait.slint:73
msgctxt "NetplayWait"
msgid "Enter chat message"
msgstr "チャットメッセージを入力"
#: src/ui/gui/netplay_wait.slint:84
msgctxt "NetplayWait"
msgid "Send Message"
msgstr "送信"
#: src/ui/gui/netplay_wait.slint:94
msgctxt "NetplayWait"
msgid ""
"Setting the input delay too low will cause the game to lag.\n"
"You can lower the input delay in-game by pressing Alt+[ and raise it with "
"Alt+]."
msgstr ""
"入力遅延を低く設定しすぎるとゲームが遅延します。\n"
"Alt+[ でゲーム内の入力遅延を下げ、Alt+] で上げることができます。"
#: src/ui/gui/netplay_wait.slint:101
msgctxt "NetplayWait"
msgid "Local Input Delay:"
msgstr "ローカル入力遅延:"
#: src/ui/gui/netplay_wait.slint:118
msgctxt "NetplayWait"
msgid "Recommended: "
msgstr "推奨: "
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Start Game"
msgstr "ゲーム開始"
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Waiting for P2P mesh "
msgstr "P2Pメッシュ接続待機中 "
#: src/ui/gui/netplay_wait.slint:135
msgctxt "NetplayWait"
msgid "Cancel"
msgstr "キャンセル"
#: src/ui/gui/retroachievements_page.slint:19
msgctxt "RAData"
msgid "Not currently logged in"
msgstr "ログインしていません"
#: src/ui/gui/retroachievements_page.slint:27
msgctxt "RetroAchievements"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/retroachievements_page.slint:36
msgctxt "RetroAchievements"
msgid "Enabled"
msgstr "有効"
#: src/ui/gui/retroachievements_page.slint:51
msgctxt "RetroAchievements"
msgid "Hardcore mode"
msgstr "ハードコアモード"
#: src/ui/gui/retroachievements_page.slint:60
msgctxt "RetroAchievements"
msgid "Challenge Indicators"
msgstr "チャレンジ表示"
#: src/ui/gui/retroachievements_page.slint:69
msgctxt "RetroAchievements"
msgid "Leaderboard Trackers"
msgstr "リーダーボード追跡"
#: src/ui/gui/retroachievements_page.slint:78
msgctxt "RetroAchievements"
msgid "Discord Rich Presence"
msgstr "Discord のリッチプレゼンス"
#: src/ui/gui/retroachievements_page.slint:96
msgctxt "RetroAchievements"
msgid "View Profile"
msgstr "プロフィールを表示"
#: src/ui/gui/retroachievements_page.slint:106
msgctxt "RetroAchievements"
msgid "Username"
msgstr "ユーザー名"
#: src/ui/gui/retroachievements_page.slint:116
msgctxt "RetroAchievements"
msgid "Password"
msgstr "パスワード"
#: src/ui/gui/retroachievements_page.slint:125
msgctxt "RetroAchievements"
msgid "Login"
msgstr "ログイン"
#: src/ui/gui/retroachievements_page.slint:141
msgctxt "RetroAchievements"
msgid "View Supported Games"
msgstr "対応ゲームを表示"
#: src/ui/gui/settings_page.slint:24
msgctxt "Settings"
msgid "Settings"
msgstr "設定"
#: src/ui/gui/settings_page.slint:35
msgctxt "Settings"
msgid "Resolution:"
msgstr "解像度:"
#: src/ui/gui/settings_page.slint:49
msgctxt "Settings"
msgid "SSAA downscaling"
msgstr "SSAAダウンスケール"
#: src/ui/gui/settings_page.slint:57
msgctxt "Settings"
msgid "Integer Scaling"
msgstr "整数倍スケーリング"
#: src/ui/gui/settings_page.slint:65
msgctxt "Settings"
msgid "Fullscreen"
msgstr "全画面表示"
#: src/ui/gui/settings_page.slint:73
msgctxt "Settings"
msgid "Widescreen (stretch)"
msgstr "ワイド画面(伸ばす)"
#: src/ui/gui/settings_page.slint:81
msgctxt "Settings"
msgid "VSync"
msgstr "垂直同期(VSync"
#: src/ui/gui/settings_page.slint:89
msgctxt "Settings"
msgid "Apply CRT shader"
msgstr "CRTシェーダーを適用"
#: src/ui/gui/settings_page.slint:101
msgctxt "Settings"
msgid "Overclock N64 CPU (may cause bugs)"
msgstr "N64のCPUをオーバークロック(不具合の原因になることがあります)"
#: src/ui/gui/settings_page.slint:109
msgctxt "Settings"
msgid "Disable Expansion Pak"
msgstr "拡張パックを無効にする"
#: src/ui/gui/settings_page.slint:117
msgctxt "Settings"
msgid "Enable Rewind"
msgstr "巻き戻しを有効にする"
#: src/ui/gui/settings_page.slint:125
msgctxt "Settings"
msgid "Emulate UNFLoader"
msgstr "UNFLoaderをエミュレート"
#: src/ui/gui/settings_page.slint:133
msgctxt "Settings"
msgid "Emulate VRU"
msgstr "VRUをエミュレート"
#: src/ui/gui/vru_dialog.slint:7
msgctxt "VruDialog"
msgid "What Would You Like To Say?"
msgstr "何と言いますか?"
#~ msgctxt "NetplayCreate"
#~ msgid "Server:"
#~ msgstr "サーバー:"
#~ msgctxt "CustomServerDialog"
#~ msgid "Enter a custom server URL"
#~ msgstr "カスタムサーバーURLを入力"
#~ msgctxt "NetplayJoin"
#~ msgid "Custom Server URL (optional):"
#~ msgstr "カスタムサーバーURL(任意):"
#~ msgctxt "NetplayJoin"
#~ msgid "Server"
#~ msgstr "サーバー"
#~ msgctxt "NetplayWait"
#~ msgid "Ping:"
#~ msgstr "Ping"
#~ msgctxt "NetplayCreate"
#~ msgid "Creating server, please wait...This may take about 30 seconds."
#~ msgstr ""
#~ "サーバーを作成しています。しばらくお待ちください… 最大約30秒かかることがあ"
#~ "ります。"
#~ msgctxt "ControllerConfig"
#~ msgid "Port"
#~ msgstr "ポート"
#~ msgctxt "ControllerConfig"
#~ msgid "Controller"
#~ msgstr "コントローラー"
@@ -0,0 +1,590 @@
# gopher64 - Dutch (Netherlands) Translation
msgid ""
msgstr ""
"Project-Id-Version: gopher64\n"
"POT-Creation-Date: 2026-06-16 12:26+0000\n"
"PO-Revision-Date: 2026-05-11 12:00+0000\n"
"Last-Translator: \n"
"Language-Team: Dutch (Netherlands)\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/ui/gui/about_page.slint:17
msgctxt "NewVersionButton"
msgid "New version available! Click here to download"
msgstr "Nieuwe versie beschikbaar! Klik hier om te downloaden"
#: src/ui/gui/about_page.slint:33
msgctxt "About"
msgid "About"
msgstr "Over"
#: src/ui/gui/about_page.slint:40
msgctxt "About"
msgid "Wiki"
msgstr "Wiki"
#: src/ui/gui/about_page.slint:50
msgctxt "About"
msgid "Discord Server"
msgstr "Discord-server"
#: src/ui/gui/about_page.slint:60
msgctxt "About"
msgid "Source Code"
msgstr "Broncode"
#: src/ui/gui/about_page.slint:70
msgctxt "About"
msgid "Donate (via Patreon)"
msgstr "Doneren (via Patreon)"
#: src/ui/gui/about_page.slint:77
msgctxt "About"
msgid "Donate (via GitHub)"
msgstr "Doneren (via GitHub)"
#: src/ui/gui/appwindow.slint:148
msgctxt "Menu"
msgid "Local Game"
msgstr "Lokaal spel"
#: src/ui/gui/appwindow.slint:152
msgctxt "Menu"
msgid "Controller Config"
msgstr "Controllerconfiguratie"
#: src/ui/gui/appwindow.slint:156
msgctxt "Menu"
msgid "Netplay"
msgstr "Netplay"
#: src/ui/gui/appwindow.slint:160
msgctxt "Menu"
msgid "Cheats"
msgstr "Cheats"
#: src/ui/gui/appwindow.slint:164
msgctxt "Menu"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/appwindow.slint:168
msgctxt "Menu"
msgid "Settings"
msgstr "Instellingen"
#: src/ui/gui/appwindow.slint:172
msgctxt "Menu"
msgid "About"
msgstr "Over"
#: src/ui/gui/cheat_page.slint:15
msgctxt "Cheats"
msgid "Cheats"
msgstr "Cheats"
#: src/ui/gui/cheat_page.slint:25
msgctxt "Cheats"
msgid "Select ROM"
msgstr "ROM selecteren"
#: src/ui/gui/cheat_page.slint:41
msgctxt "Cheats"
msgid "Clear Cheats For All ROMs"
msgstr "Cheats wissen voor alle ROM's"
#: src/ui/gui/cheat_page.slint:83
msgctxt "Cheats"
msgid "No Cheats Available"
msgstr "Geen cheats beschikbaar"
#: src/ui/gui/controller_page.slint:80
msgctxt "ControllerSettingsGrid"
msgid "Enabled"
msgstr "Ingeschakeld"
#: src/ui/gui/controller_page.slint:93
msgctxt "ControllerSettingsGrid"
msgid "Transfer Pak"
msgstr "Transfer Pak"
#: src/ui/gui/controller_page.slint:107
msgctxt "ControllerSettingsGrid"
msgid "Profile"
msgstr "Profiel"
#: src/ui/gui/controller_page.slint:157
msgctxt "ControllerConfig"
msgid "Controller Configuration"
msgstr "Controllerconfiguratie"
#: src/ui/gui/controller_page.slint:171
msgctxt "ControllerConfig"
msgid "Configure Input Profile"
msgstr "Invoerprofiel configureren"
#: src/ui/gui/controller_page.slint:180
msgctxt "ControllerConfig"
msgid "Controller Settings"
msgstr "Controllerinstellingen"
#: src/ui/gui/controller_page.slint:190
msgctxt "ControllerConfig"
msgid "Controller Assignment"
msgstr "Controllertoewijzing"
#: src/ui/gui/input_profile.slint:12
msgctxt "InputProfileDialog"
msgid "Create/Modify Input Profile"
msgstr "Invoerprofiel maken/wijzigen"
#: src/ui/gui/input_profile.slint:25
msgctxt "InputProfileDialog"
msgid "Enter profile name to create or modify"
msgstr "Profielnaam invoeren om aan te maken of te wijzigen"
#: src/ui/gui/input_profile.slint:38
msgctxt "InputProfileDialog"
msgid "Deadzone Percentage"
msgstr "Dode-zonepercentage"
#: src/ui/gui/input_profile.slint:61
msgctxt "InputProfileDialog"
msgid "Use DirectInput"
msgstr "DirectInput gebruiken"
#: src/ui/gui/input_profile.slint:74
msgctxt "InputProfileDialog"
msgid "Start Profile Creation Wizard"
msgstr "Wizard voor profiel maken starten"
#: src/ui/gui/input_profile.slint:82
msgctxt "InputProfileDialog"
msgid "Cancel"
msgstr "Annuleren"
#: src/ui/gui/localgame_page.slint:19
msgctxt "LocalGame"
msgid "Local Game"
msgstr "Lokaal spel"
#: src/ui/gui/localgame_page.slint:26
msgctxt "LocalGame"
msgid "Open ROM"
msgstr "ROM openen"
#: src/ui/gui/localgame_page.slint:37
msgctxt "LocalGame"
msgid "Open Saves Folder"
msgstr "Map met opslagen openen"
#: src/ui/gui/localgame_page.slint:54
msgctxt "LocalGame"
msgid "Recent ROMs"
msgstr "Recent gebruikte ROM's"
#: src/ui/gui/netplay_create.slint:7
msgctxt "NetplayCreate"
msgid "Netplay: Create Session"
msgstr "Netplay: sessie aanmaken"
#: src/ui/gui/netplay_create.slint:22
msgctxt "NetplayCreate"
msgid "Session Name:"
msgstr "Sessienaam:"
#: src/ui/gui/netplay_create.slint:26
msgctxt "NetplayCreate"
msgid "Enter session name"
msgstr "Sessienaam invoeren"
#: src/ui/gui/netplay_create.slint:36
msgctxt "NetplayCreate"
msgid "Password (Optional):"
msgstr "Wachtwoord (optioneel):"
#: src/ui/gui/netplay_create.slint:40
msgctxt "NetplayCreate"
msgid "Enter session password"
msgstr "Sessiewachtwoord invoeren"
#: src/ui/gui/netplay_create.slint:51
msgctxt "NetplayCreate"
msgid "Player Name:"
msgstr "Spelernaam:"
#: src/ui/gui/netplay_create.slint:55
msgctxt "NetplayCreate"
msgid "Enter player name"
msgstr "Spelernaam invoeren"
#: src/ui/gui/netplay_create.slint:66
msgctxt "NetplayCreate"
msgid "Select ROM"
msgstr "ROM selecteren"
#: src/ui/gui/netplay_create.slint:82
msgctxt "NetplayCreate"
msgid ""
"This game has cheats enabled. Cheats will be synchronized with other players."
msgstr ""
"Voor dit spel zijn cheats ingeschakeld. Cheats worden gesynchroniseerd met "
"andere spelers."
#: src/ui/gui/netplay_create.slint:91
msgctxt "NetplayCreate"
msgid "Create Session"
msgstr "Sessie aanmaken"
#: src/ui/gui/netplay_create.slint:107
msgctxt "NetplayCreate"
msgid "Cancel"
msgstr "Annuleren"
#: src/ui/gui/netplay_join.slint:7
msgctxt "NetplayJoin"
msgid "Netplay: Join Session"
msgstr "Netplay: deelnemen aan sessie"
#: src/ui/gui/netplay_join.slint:18
msgctxt "NetplayJoin"
msgid "Player Name (required):"
msgstr "Spelernaam (verplicht):"
#: src/ui/gui/netplay_join.slint:22
msgctxt "NetplayJoin"
msgid "Enter player name"
msgstr "Spelernaam invoeren"
#: src/ui/gui/netplay_join.slint:31
msgctxt "NetplayJoin"
msgid "Password (if required)"
msgstr "Wachtwoord (indien vereist)"
#: src/ui/gui/netplay_join.slint:42
msgctxt "NetplayJoin"
msgid "Select ROM"
msgstr "ROM selecteren"
#: src/ui/gui/netplay_join.slint:57
msgctxt "NetplayJoin"
msgid "Refreshing session list, please wait..."
msgstr "Sessielijst wordt vernieuwd, even geduld…"
#: src/ui/gui/netplay_join.slint:62
msgctxt "NetplayJoin"
msgid "Click on a session below to select it"
msgstr "Klik hieronder op een sessie om die te selecteren"
#: src/ui/gui/netplay_join.slint:67
msgctxt "NetplayJoin"
msgid "No sessions available. Please refresh to check again."
msgstr "Geen sessies beschikbaar. Vernieuw om opnieuw te controleren."
#: src/ui/gui/netplay_join.slint:73
msgctxt "NetplayJoin"
msgid "Session Name"
msgstr "Sessienaam"
#: src/ui/gui/netplay_join.slint:74
msgctxt "NetplayJoin"
msgid "Game Name"
msgstr "Spelnaam"
#: src/ui/gui/netplay_join.slint:75
msgctxt "NetplayJoin"
msgid "Password"
msgstr "Wachtwoord"
#: src/ui/gui/netplay_join.slint:76
msgctxt "NetplayJoin"
msgid "Cheats"
msgstr "Cheats"
#: src/ui/gui/netplay_join.slint:90
msgctxt "NetplayJoin"
msgid "Refresh Session List"
msgstr "Sessielijst vernieuwen"
#: src/ui/gui/netplay_join.slint:105
msgctxt "NetplayJoin"
msgid "Join Session"
msgstr "Deelnemen aan sessie"
#: src/ui/gui/netplay_join.slint:117
msgctxt "NetplayJoin"
msgid "Cancel"
msgstr "Annuleren"
#: src/ui/gui/netplay_page.slint:31
msgctxt "Netplay"
msgid "Netplay"
msgstr "Netplay"
#: src/ui/gui/netplay_page.slint:39
msgctxt "Netplay"
msgid "Create Session"
msgstr "Sessie aanmaken"
#: src/ui/gui/netplay_page.slint:50
msgctxt "Netplay"
msgid "Join Session"
msgstr "Deelnemen aan sessie"
#: src/ui/gui/netplay_page.slint:64
msgctxt "Netplay"
msgid "Netplay Discord Channel"
msgstr "Netplay-Discordkanaal"
#: src/ui/gui/netplay_page.slint:71
msgctxt "Netplay"
msgid "Provide Feedback"
msgstr "Feedback geven"
#: src/ui/gui/netplay_wait.slint:17
msgctxt "NetplayWait"
msgid "Netplay: Waiting Room"
msgstr "Netplay: wachtruimte"
#: src/ui/gui/netplay_wait.slint:29
msgctxt "NetplayWait"
msgid "Session Name:"
msgstr "Sessienaam:"
#: src/ui/gui/netplay_wait.slint:35
msgctxt "NetplayWait"
msgid "Game Name:"
msgstr "Spelnaam:"
#: src/ui/gui/netplay_wait.slint:45
msgctxt "NetplayWait"
msgid "Player 1:"
msgstr "Speler 1:"
#: src/ui/gui/netplay_wait.slint:49
msgctxt "NetplayWait"
msgid "Player 2:"
msgstr "Speler 2:"
#: src/ui/gui/netplay_wait.slint:55
msgctxt "NetplayWait"
msgid "Player 3:"
msgstr "Speler 3:"
#: src/ui/gui/netplay_wait.slint:59
msgctxt "NetplayWait"
msgid "Player 4:"
msgstr "Speler 4:"
#: src/ui/gui/netplay_wait.slint:73
msgctxt "NetplayWait"
msgid "Enter chat message"
msgstr "Chatbericht invoeren"
#: src/ui/gui/netplay_wait.slint:84
msgctxt "NetplayWait"
msgid "Send Message"
msgstr "Bericht verzenden"
#: src/ui/gui/netplay_wait.slint:94
msgctxt "NetplayWait"
msgid ""
"Setting the input delay too low will cause the game to lag.\n"
"You can lower the input delay in-game by pressing Alt+[ and raise it with "
"Alt+]."
msgstr ""
"Een te lage invoervertraging zorgt ervoor dat het spel gaat haperen.\n"
"Je kunt de invoervertraging in het spel verlagen met Alt+[ en verhogen met "
"Alt+]."
#: src/ui/gui/netplay_wait.slint:101
msgctxt "NetplayWait"
msgid "Local Input Delay:"
msgstr "Lokale invoervertraging:"
#: src/ui/gui/netplay_wait.slint:118
msgctxt "NetplayWait"
msgid "Recommended: "
msgstr "Aanbevolen: "
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Start Game"
msgstr "Spel starten"
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Waiting for P2P mesh "
msgstr "Wachten op P2P-mesh "
#: src/ui/gui/netplay_wait.slint:135
msgctxt "NetplayWait"
msgid "Cancel"
msgstr "Annuleren"
#: src/ui/gui/retroachievements_page.slint:19
msgctxt "RAData"
msgid "Not currently logged in"
msgstr "Momenteel niet ingelogd"
#: src/ui/gui/retroachievements_page.slint:27
msgctxt "RetroAchievements"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/retroachievements_page.slint:36
msgctxt "RetroAchievements"
msgid "Enabled"
msgstr "Ingeschakeld"
#: src/ui/gui/retroachievements_page.slint:51
msgctxt "RetroAchievements"
msgid "Hardcore mode"
msgstr "Hardcore-modus"
#: src/ui/gui/retroachievements_page.slint:60
msgctxt "RetroAchievements"
msgid "Challenge Indicators"
msgstr "Challenge-indicatoren"
#: src/ui/gui/retroachievements_page.slint:69
msgctxt "RetroAchievements"
msgid "Leaderboard Trackers"
msgstr "Leaderboard-trackers"
#: src/ui/gui/retroachievements_page.slint:78
msgctxt "RetroAchievements"
msgid "Discord Rich Presence"
msgstr "Discord Rich Presence"
#: src/ui/gui/retroachievements_page.slint:96
msgctxt "RetroAchievements"
msgid "View Profile"
msgstr "Profiel bekijken"
#: src/ui/gui/retroachievements_page.slint:106
msgctxt "RetroAchievements"
msgid "Username"
msgstr "Gebruikersnaam"
#: src/ui/gui/retroachievements_page.slint:116
msgctxt "RetroAchievements"
msgid "Password"
msgstr "Wachtwoord"
#: src/ui/gui/retroachievements_page.slint:125
msgctxt "RetroAchievements"
msgid "Login"
msgstr "Inloggen"
#: src/ui/gui/retroachievements_page.slint:141
msgctxt "RetroAchievements"
msgid "View Supported Games"
msgstr "Ondersteunde spellen bekijken"
#: src/ui/gui/settings_page.slint:24
msgctxt "Settings"
msgid "Settings"
msgstr "Instellingen"
#: src/ui/gui/settings_page.slint:35
msgctxt "Settings"
msgid "Resolution:"
msgstr "Resolutie:"
#: src/ui/gui/settings_page.slint:49
msgctxt "Settings"
msgid "SSAA downscaling"
msgstr "SSAA-downscaling"
#: src/ui/gui/settings_page.slint:57
msgctxt "Settings"
msgid "Integer Scaling"
msgstr "Schalen in hele getallen"
#: src/ui/gui/settings_page.slint:65
msgctxt "Settings"
msgid "Fullscreen"
msgstr "Volledig scherm"
#: src/ui/gui/settings_page.slint:73
msgctxt "Settings"
msgid "Widescreen (stretch)"
msgstr "Breedbeeld (uitgerekt)"
#: src/ui/gui/settings_page.slint:81
msgctxt "Settings"
msgid "VSync"
msgstr "VSync"
#: src/ui/gui/settings_page.slint:89
msgctxt "Settings"
msgid "Apply CRT shader"
msgstr "CRT-shader toepassen"
#: src/ui/gui/settings_page.slint:101
msgctxt "Settings"
msgid "Overclock N64 CPU (may cause bugs)"
msgstr "N64-CPU overklokken (kan bugs veroorzaken)"
#: src/ui/gui/settings_page.slint:109
msgctxt "Settings"
msgid "Disable Expansion Pak"
msgstr "Expansion Pak uitschakelen"
#: src/ui/gui/settings_page.slint:117
msgctxt "Settings"
msgid "Enable Rewind"
msgstr "Terugspoelen inschakelen"
#: src/ui/gui/settings_page.slint:125
msgctxt "Settings"
msgid "Emulate UNFLoader"
msgstr "UNFLoader emuleren"
#: src/ui/gui/settings_page.slint:133
msgctxt "Settings"
msgid "Emulate VRU"
msgstr "VRU emuleren"
#: src/ui/gui/vru_dialog.slint:7
msgctxt "VruDialog"
msgid "What Would You Like To Say?"
msgstr "Wat wil je zeggen?"
#~ msgctxt "NetplayCreate"
#~ msgid "Server:"
#~ msgstr "Server:"
#~ msgctxt "CustomServerDialog"
#~ msgid "Enter a custom server URL"
#~ msgstr "Aangepaste server-URL invoeren"
#~ msgctxt "NetplayJoin"
#~ msgid "Custom Server URL (optional):"
#~ msgstr "Aangepaste server-URL (optioneel):"
#~ msgctxt "NetplayJoin"
#~ msgid "Server"
#~ msgstr "Server"
#~ msgctxt "NetplayWait"
#~ msgid "Ping:"
#~ msgstr "Ping:"
#~ msgctxt "NetplayCreate"
#~ msgid "Creating server, please wait...This may take about 30 seconds."
#~ msgstr ""
#~ "Server wordt aangemaakt, even geduld… Dit kan ongeveer 30 seconden duren."
#~ msgctxt "ControllerConfig"
#~ msgid "Port"
#~ msgstr "Poort"
#~ msgctxt "ControllerConfig"
#~ msgid "Controller"
#~ msgstr "Controller"
@@ -0,0 +1,591 @@
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2026-06-16 12:26+0000\n"
"PO-Revision-Date: 2026-05-11 18:11-3000\n"
"Last-Translator: EDUARDO CARVALHO <eduardotcarvalho@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: Brazilian Portuguese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: src/ui/gui/about_page.slint:17
msgctxt "NewVersionButton"
msgid "New version available! Click here to download"
msgstr "Nova versão disponível! Clique aqui para baixar"
#: src/ui/gui/about_page.slint:33
msgctxt "About"
msgid "About"
msgstr "Sobre"
#: src/ui/gui/about_page.slint:40
msgctxt "About"
msgid "Wiki"
msgstr "Wiki"
#: src/ui/gui/about_page.slint:50
msgctxt "About"
msgid "Discord Server"
msgstr "Servidor do Discord"
#: src/ui/gui/about_page.slint:60
msgctxt "About"
msgid "Source Code"
msgstr "Código Fonte"
#: src/ui/gui/about_page.slint:70
msgctxt "About"
msgid "Donate (via Patreon)"
msgstr "Doações (via Patreon)"
#: src/ui/gui/about_page.slint:77
msgctxt "About"
msgid "Donate (via GitHub)"
msgstr "Doações (via GitHub)"
#: src/ui/gui/appwindow.slint:148
msgctxt "Menu"
msgid "Local Game"
msgstr "Jogo Local"
#: src/ui/gui/appwindow.slint:152
msgctxt "Menu"
msgid "Controller Config"
msgstr "Configurar Controle"
#: src/ui/gui/appwindow.slint:156
msgctxt "Menu"
msgid "Netplay"
msgstr "Netplay"
#: src/ui/gui/appwindow.slint:160
msgctxt "Menu"
msgid "Cheats"
msgstr "Trapaças"
#: src/ui/gui/appwindow.slint:164
msgctxt "Menu"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/appwindow.slint:168
msgctxt "Menu"
msgid "Settings"
msgstr "Configurações"
#: src/ui/gui/appwindow.slint:172
msgctxt "Menu"
msgid "About"
msgstr "Sobre"
#: src/ui/gui/cheat_page.slint:15
msgctxt "Cheats"
msgid "Cheats"
msgstr "Trapaças"
#: src/ui/gui/cheat_page.slint:25
msgctxt "Cheats"
msgid "Select ROM"
msgstr "Selecionar ROM"
#: src/ui/gui/cheat_page.slint:41
msgctxt "Cheats"
msgid "Clear Cheats For All ROMs"
msgstr "Limpar Trapaças para todas as ROMs"
#: src/ui/gui/cheat_page.slint:83
msgctxt "Cheats"
msgid "No Cheats Available"
msgstr "Sem trapaças disponíveis"
#: src/ui/gui/controller_page.slint:80
msgctxt "ControllerSettingsGrid"
msgid "Enabled"
msgstr "Habilitado"
#: src/ui/gui/controller_page.slint:93
msgctxt "ControllerSettingsGrid"
msgid "Transfer Pak"
msgstr "Transfer Pak"
#: src/ui/gui/controller_page.slint:107
msgctxt "ControllerSettingsGrid"
msgid "Profile"
msgstr "Perfil"
#: src/ui/gui/controller_page.slint:157
msgctxt "ControllerConfig"
msgid "Controller Configuration"
msgstr "Configurar Controles"
#: src/ui/gui/controller_page.slint:171
msgctxt "ControllerConfig"
msgid "Configure Input Profile"
msgstr "Configurar Perfil de Controle"
#: src/ui/gui/controller_page.slint:180
msgctxt "ControllerConfig"
msgid "Controller Settings"
msgstr "Configurações do controle"
#: src/ui/gui/controller_page.slint:190
msgctxt "ControllerConfig"
msgid "Controller Assignment"
msgstr "Atribuição do controle"
#: src/ui/gui/input_profile.slint:12
msgctxt "InputProfileDialog"
msgid "Create/Modify Input Profile"
msgstr "Criar/Modificar Perfil de Comandos"
#: src/ui/gui/input_profile.slint:25
msgctxt "InputProfileDialog"
msgid "Enter profile name to create or modify"
msgstr "Insira o nome de perfil para criar ou modificar"
#: src/ui/gui/input_profile.slint:38
msgctxt "InputProfileDialog"
msgid "Deadzone Percentage"
msgstr "Porcentagem de Zona-morta"
#: src/ui/gui/input_profile.slint:61
msgctxt "InputProfileDialog"
msgid "Use DirectInput"
msgstr "Usar DirectInput"
#: src/ui/gui/input_profile.slint:74
msgctxt "InputProfileDialog"
msgid "Start Profile Creation Wizard"
msgstr "Iniciar Assistente de Criação de Perfil"
#: src/ui/gui/input_profile.slint:82
msgctxt "InputProfileDialog"
msgid "Cancel"
msgstr "Cancelar"
#: src/ui/gui/localgame_page.slint:19
msgctxt "LocalGame"
msgid "Local Game"
msgstr "Jogo Local"
#: src/ui/gui/localgame_page.slint:26
msgctxt "LocalGame"
msgid "Open ROM"
msgstr "Abrir ROM"
#: src/ui/gui/localgame_page.slint:37
msgctxt "LocalGame"
msgid "Open Saves Folder"
msgstr "Abrir Partes de Saves"
#: src/ui/gui/localgame_page.slint:54
msgctxt "LocalGame"
msgid "Recent ROMs"
msgstr "ROMs Recentes"
#: src/ui/gui/netplay_create.slint:7
msgctxt "NetplayCreate"
msgid "Netplay: Create Session"
msgstr "Netplay: Criar Sessão"
#: src/ui/gui/netplay_create.slint:22
msgctxt "NetplayCreate"
msgid "Session Name:"
msgstr "Nome da Sessão:"
#: src/ui/gui/netplay_create.slint:26
msgctxt "NetplayCreate"
msgid "Enter session name"
msgstr "Insira nome da sessão:"
#: src/ui/gui/netplay_create.slint:36
msgctxt "NetplayCreate"
msgid "Password (Optional):"
msgstr "Senha: (Opcional):"
#: src/ui/gui/netplay_create.slint:40
msgctxt "NetplayCreate"
msgid "Enter session password"
msgstr "Insira a senha da sessão"
#: src/ui/gui/netplay_create.slint:51
msgctxt "NetplayCreate"
msgid "Player Name:"
msgstr "Nome de Jogador:"
#: src/ui/gui/netplay_create.slint:55
msgctxt "NetplayCreate"
msgid "Enter player name"
msgstr "Insira nome de jogador"
#: src/ui/gui/netplay_create.slint:66
msgctxt "NetplayCreate"
msgid "Select ROM"
msgstr "Selecionar ROM"
#: src/ui/gui/netplay_create.slint:82
msgctxt "NetplayCreate"
msgid ""
"This game has cheats enabled. Cheats will be synchronized with other players."
msgstr ""
"Este jogo tem trapaças habilitadas. As trapaças serão sincronizadas com "
"outros jogadores."
#: src/ui/gui/netplay_create.slint:91
msgctxt "NetplayCreate"
msgid "Create Session"
msgstr "Criar Sessão"
#: src/ui/gui/netplay_create.slint:107
msgctxt "NetplayCreate"
msgid "Cancel"
msgstr "Cancelar"
#: src/ui/gui/netplay_join.slint:7
msgctxt "NetplayJoin"
msgid "Netplay: Join Session"
msgstr "Netplay: Entrar na sessão"
#: src/ui/gui/netplay_join.slint:18
msgctxt "NetplayJoin"
msgid "Player Name (required):"
msgstr "Nome de Jogador (obrigatório):"
#: src/ui/gui/netplay_join.slint:22
msgctxt "NetplayJoin"
msgid "Enter player name"
msgstr "Insira o nome de jogador"
#: src/ui/gui/netplay_join.slint:31
msgctxt "NetplayJoin"
msgid "Password (if required)"
msgstr "Senha (caso obrigatória)"
#: src/ui/gui/netplay_join.slint:42
msgctxt "NetplayJoin"
msgid "Select ROM"
msgstr "Selecionar ROM"
#: src/ui/gui/netplay_join.slint:57
msgctxt "NetplayJoin"
msgid "Refreshing session list, please wait..."
msgstr "Recarregando lista de sessões, por favor aguarde..."
#: src/ui/gui/netplay_join.slint:62
msgctxt "NetplayJoin"
msgid "Click on a session below to select it"
msgstr "Clique em uma sessão abaixo para selecionar"
#: src/ui/gui/netplay_join.slint:67
msgctxt "NetplayJoin"
msgid "No sessions available. Please refresh to check again."
msgstr ""
"Sem sessões disponíveis. Por favor recarregue para verificar novamente."
#: src/ui/gui/netplay_join.slint:73
msgctxt "NetplayJoin"
msgid "Session Name"
msgstr "Nome da Sessão"
#: src/ui/gui/netplay_join.slint:74
msgctxt "NetplayJoin"
msgid "Game Name"
msgstr "Nome do Jogo"
#: src/ui/gui/netplay_join.slint:75
msgctxt "NetplayJoin"
msgid "Password"
msgstr "Senha"
#: src/ui/gui/netplay_join.slint:76
msgctxt "NetplayJoin"
msgid "Cheats"
msgstr "Trapaças"
#: src/ui/gui/netplay_join.slint:90
msgctxt "NetplayJoin"
msgid "Refresh Session List"
msgstr "Recarregar Lista de Sessões"
#: src/ui/gui/netplay_join.slint:105
msgctxt "NetplayJoin"
msgid "Join Session"
msgstr "Entrar na Sessão"
#: src/ui/gui/netplay_join.slint:117
msgctxt "NetplayJoin"
msgid "Cancel"
msgstr "Cancelar"
#: src/ui/gui/netplay_page.slint:31
msgctxt "Netplay"
msgid "Netplay"
msgstr "Netplay"
#: src/ui/gui/netplay_page.slint:39
msgctxt "Netplay"
msgid "Create Session"
msgstr "Criar Sessão"
#: src/ui/gui/netplay_page.slint:50
msgctxt "Netplay"
msgid "Join Session"
msgstr "Entrar na Sessão"
#: src/ui/gui/netplay_page.slint:64
msgctxt "Netplay"
msgid "Netplay Discord Channel"
msgstr "Canal de Netplay do Discord"
#: src/ui/gui/netplay_page.slint:71
msgctxt "Netplay"
msgid "Provide Feedback"
msgstr "Fornecer Feedback"
#: src/ui/gui/netplay_wait.slint:17
msgctxt "NetplayWait"
msgid "Netplay: Waiting Room"
msgstr "Netplay: Aguardando Sala"
#: src/ui/gui/netplay_wait.slint:29
msgctxt "NetplayWait"
msgid "Session Name:"
msgstr "Nome da Sessão:"
#: src/ui/gui/netplay_wait.slint:35
msgctxt "NetplayWait"
msgid "Game Name:"
msgstr "Nome do Jogo:"
#: src/ui/gui/netplay_wait.slint:45
msgctxt "NetplayWait"
msgid "Player 1:"
msgstr "Jogador 1"
#: src/ui/gui/netplay_wait.slint:49
msgctxt "NetplayWait"
msgid "Player 2:"
msgstr "Jogador 2:"
#: src/ui/gui/netplay_wait.slint:55
msgctxt "NetplayWait"
msgid "Player 3:"
msgstr "Jogador 3:"
#: src/ui/gui/netplay_wait.slint:59
msgctxt "NetplayWait"
msgid "Player 4:"
msgstr "Jogador 4:"
#: src/ui/gui/netplay_wait.slint:73
msgctxt "NetplayWait"
msgid "Enter chat message"
msgstr "Escrever mensagem no chat"
#: src/ui/gui/netplay_wait.slint:84
msgctxt "NetplayWait"
msgid "Send Message"
msgstr "Enviar Mensagem"
#: src/ui/gui/netplay_wait.slint:94
msgctxt "NetplayWait"
msgid ""
"Setting the input delay too low will cause the game to lag.\n"
"You can lower the input delay in-game by pressing Alt+[ and raise it with "
"Alt+]."
msgstr ""
"Definir o atraso de entrada muito baixo causará lag no jogo.\n"
"Você pode diminuir o atraso de entrada no jogo pressionando Alt+[ e "
"aumentá-lo com Alt+]."
#: src/ui/gui/netplay_wait.slint:101
msgctxt "NetplayWait"
msgid "Local Input Delay:"
msgstr "Atraso de entrada local:"
#: src/ui/gui/netplay_wait.slint:118
msgctxt "NetplayWait"
msgid "Recommended: "
msgstr "Recomendado: "
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Start Game"
msgstr "Iniciar jogo"
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Waiting for P2P mesh "
msgstr "Aguardando malha P2P "
#: src/ui/gui/netplay_wait.slint:135
msgctxt "NetplayWait"
msgid "Cancel"
msgstr "Cancelar"
#: src/ui/gui/retroachievements_page.slint:19
msgctxt "RAData"
msgid "Not currently logged in"
msgstr "Não está logado."
#: src/ui/gui/retroachievements_page.slint:27
msgctxt "RetroAchievements"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/retroachievements_page.slint:36
msgctxt "RetroAchievements"
msgid "Enabled"
msgstr "Habilitado"
#: src/ui/gui/retroachievements_page.slint:51
msgctxt "RetroAchievements"
msgid "Hardcore mode"
msgstr "Modo Hardcore"
#: src/ui/gui/retroachievements_page.slint:60
msgctxt "RetroAchievements"
msgid "Challenge Indicators"
msgstr "Indicadores de Desafio"
#: src/ui/gui/retroachievements_page.slint:69
msgctxt "RetroAchievements"
msgid "Leaderboard Trackers"
msgstr "Rastreadores de Tabela"
#: src/ui/gui/retroachievements_page.slint:78
msgctxt "RetroAchievements"
msgid "Discord Rich Presence"
msgstr "Rich Presence no Discord"
#: src/ui/gui/retroachievements_page.slint:96
msgctxt "RetroAchievements"
msgid "View Profile"
msgstr "Ver Perfil"
#: src/ui/gui/retroachievements_page.slint:106
msgctxt "RetroAchievements"
msgid "Username"
msgstr "Usuário"
#: src/ui/gui/retroachievements_page.slint:116
msgctxt "RetroAchievements"
msgid "Password"
msgstr "Senha"
#: src/ui/gui/retroachievements_page.slint:125
msgctxt "RetroAchievements"
msgid "Login"
msgstr "Login"
#: src/ui/gui/retroachievements_page.slint:141
msgctxt "RetroAchievements"
msgid "View Supported Games"
msgstr "Ver Jogos com Suporte"
#: src/ui/gui/settings_page.slint:24
msgctxt "Settings"
msgid "Settings"
msgstr "Configurações"
#: src/ui/gui/settings_page.slint:35
msgctxt "Settings"
msgid "Resolution:"
msgstr "Resolução:"
#: src/ui/gui/settings_page.slint:49
msgctxt "Settings"
msgid "SSAA downscaling"
msgstr "Redução de SSAA"
#: src/ui/gui/settings_page.slint:57
msgctxt "Settings"
msgid "Integer Scaling"
msgstr "Proporção Íntegra"
#: src/ui/gui/settings_page.slint:65
msgctxt "Settings"
msgid "Fullscreen"
msgstr "Tela Cheia"
#: src/ui/gui/settings_page.slint:73
msgctxt "Settings"
msgid "Widescreen (stretch)"
msgstr "Widescreen (esticar)"
#: src/ui/gui/settings_page.slint:81
msgctxt "Settings"
msgid "VSync"
msgstr "VSync"
#: src/ui/gui/settings_page.slint:89
msgctxt "Settings"
msgid "Apply CRT shader"
msgstr "Aplicar filtro de CRT"
#: src/ui/gui/settings_page.slint:101
msgctxt "Settings"
msgid "Overclock N64 CPU (may cause bugs)"
msgstr "Overclock da CPU do N64 (pode causar bugs)"
#: src/ui/gui/settings_page.slint:109
msgctxt "Settings"
msgid "Disable Expansion Pak"
msgstr "Desabilitar Expansion Pak"
#: src/ui/gui/settings_page.slint:117
msgctxt "Settings"
msgid "Enable Rewind"
msgstr "Habilitar rebobinamento"
#: src/ui/gui/settings_page.slint:125
msgctxt "Settings"
msgid "Emulate UNFLoader"
msgstr "Emular UNFLoader"
#: src/ui/gui/settings_page.slint:133
msgctxt "Settings"
msgid "Emulate VRU"
msgstr "Emular VRU"
#: src/ui/gui/vru_dialog.slint:7
msgctxt "VruDialog"
msgid "What Would You Like To Say?"
msgstr "O que você quer falar?"
#~ msgctxt "NetplayCreate"
#~ msgid "Server:"
#~ msgstr "Servidor:"
#~ msgctxt "CustomServerDialog"
#~ msgid "Enter a custom server URL"
#~ msgstr "Insira a URL personalizada do servidor"
#~ msgctxt "NetplayJoin"
#~ msgid "Custom Server URL (optional):"
#~ msgstr "URL Personalizada de Servidor (opcional):"
#~ msgctxt "NetplayJoin"
#~ msgid "Server"
#~ msgstr "Servidor"
#~ msgctxt "NetplayWait"
#~ msgid "Ping:"
#~ msgstr "Ping:"
#~ msgctxt "NetplayCreate"
#~ msgid "Creating server, please wait...This may take about 30 seconds."
#~ msgstr ""
#~ "Criando servidor, por favor aguarde...Isto poderá levar até 30 segundos."
#~ msgctxt "ControllerConfig"
#~ msgid "Port"
#~ msgstr "Entrada"
#~ msgctxt "ControllerConfig"
#~ msgid "Controller"
#~ msgstr "Controle"
@@ -0,0 +1,590 @@
# gopher64 - Russian Translation
msgid ""
msgstr ""
"Project-Id-Version: gopher64\n"
"POT-Creation-Date: 2026-06-16 12:26+0000\n"
"PO-Revision-Date: 2026-05-11 12:00+0000\n"
"Last-Translator: \n"
"Language-Team: Russian\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/ui/gui/about_page.slint:17
msgctxt "NewVersionButton"
msgid "New version available! Click here to download"
msgstr "Доступна новая версия! Нажмите здесь для загрузки"
#: src/ui/gui/about_page.slint:33
msgctxt "About"
msgid "About"
msgstr "О программе"
#: src/ui/gui/about_page.slint:40
msgctxt "About"
msgid "Wiki"
msgstr "Вики"
#: src/ui/gui/about_page.slint:50
msgctxt "About"
msgid "Discord Server"
msgstr "Сервер Discord"
#: src/ui/gui/about_page.slint:60
msgctxt "About"
msgid "Source Code"
msgstr "Исходный код"
#: src/ui/gui/about_page.slint:70
msgctxt "About"
msgid "Donate (via Patreon)"
msgstr "Пожертвовать (через Patreon)"
#: src/ui/gui/about_page.slint:77
msgctxt "About"
msgid "Donate (via GitHub)"
msgstr "Пожертвовать (через GitHub)"
#: src/ui/gui/appwindow.slint:148
msgctxt "Menu"
msgid "Local Game"
msgstr "Локальная игра"
#: src/ui/gui/appwindow.slint:152
msgctxt "Menu"
msgid "Controller Config"
msgstr "Настройка контроллера"
#: src/ui/gui/appwindow.slint:156
msgctxt "Menu"
msgid "Netplay"
msgstr "Сетевая игра"
#: src/ui/gui/appwindow.slint:160
msgctxt "Menu"
msgid "Cheats"
msgstr "Читы"
#: src/ui/gui/appwindow.slint:164
msgctxt "Menu"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/appwindow.slint:168
msgctxt "Menu"
msgid "Settings"
msgstr "Настройки"
#: src/ui/gui/appwindow.slint:172
msgctxt "Menu"
msgid "About"
msgstr "О программе"
#: src/ui/gui/cheat_page.slint:15
msgctxt "Cheats"
msgid "Cheats"
msgstr "Читы"
#: src/ui/gui/cheat_page.slint:25
msgctxt "Cheats"
msgid "Select ROM"
msgstr "Выбрать ROM"
#: src/ui/gui/cheat_page.slint:41
msgctxt "Cheats"
msgid "Clear Cheats For All ROMs"
msgstr "Очистить читы для всех ROMов"
#: src/ui/gui/cheat_page.slint:83
msgctxt "Cheats"
msgid "No Cheats Available"
msgstr "Читы недоступны"
#: src/ui/gui/controller_page.slint:80
msgctxt "ControllerSettingsGrid"
msgid "Enabled"
msgstr "Включено"
#: src/ui/gui/controller_page.slint:93
msgctxt "ControllerSettingsGrid"
msgid "Transfer Pak"
msgstr "Transfer Pak"
#: src/ui/gui/controller_page.slint:107
msgctxt "ControllerSettingsGrid"
msgid "Profile"
msgstr "Профиль"
#: src/ui/gui/controller_page.slint:157
msgctxt "ControllerConfig"
msgid "Controller Configuration"
msgstr "Настройка контроллера"
#: src/ui/gui/controller_page.slint:171
msgctxt "ControllerConfig"
msgid "Configure Input Profile"
msgstr "Настроить профиль ввода"
#: src/ui/gui/controller_page.slint:180
msgctxt "ControllerConfig"
msgid "Controller Settings"
msgstr "Настройки контроллера"
#: src/ui/gui/controller_page.slint:190
msgctxt "ControllerConfig"
msgid "Controller Assignment"
msgstr "Назначение контроллера"
#: src/ui/gui/input_profile.slint:12
msgctxt "InputProfileDialog"
msgid "Create/Modify Input Profile"
msgstr "Создать/изменить профиль ввода"
#: src/ui/gui/input_profile.slint:25
msgctxt "InputProfileDialog"
msgid "Enter profile name to create or modify"
msgstr "Введите имя профиля для создания или изменения"
#: src/ui/gui/input_profile.slint:38
msgctxt "InputProfileDialog"
msgid "Deadzone Percentage"
msgstr "Процент мёртвой зоны"
#: src/ui/gui/input_profile.slint:61
msgctxt "InputProfileDialog"
msgid "Use DirectInput"
msgstr "Использовать DirectInput"
#: src/ui/gui/input_profile.slint:74
msgctxt "InputProfileDialog"
msgid "Start Profile Creation Wizard"
msgstr "Запустить мастер создания профиля"
#: src/ui/gui/input_profile.slint:82
msgctxt "InputProfileDialog"
msgid "Cancel"
msgstr "Отмена"
#: src/ui/gui/localgame_page.slint:19
msgctxt "LocalGame"
msgid "Local Game"
msgstr "Локальная игра"
#: src/ui/gui/localgame_page.slint:26
msgctxt "LocalGame"
msgid "Open ROM"
msgstr "Открыть ROM"
#: src/ui/gui/localgame_page.slint:37
msgctxt "LocalGame"
msgid "Open Saves Folder"
msgstr "Открыть папку сохранений"
#: src/ui/gui/localgame_page.slint:54
msgctxt "LocalGame"
msgid "Recent ROMs"
msgstr "Недавние ROMы"
#: src/ui/gui/netplay_create.slint:7
msgctxt "NetplayCreate"
msgid "Netplay: Create Session"
msgstr "Сетевая игра: Создать сессию"
#: src/ui/gui/netplay_create.slint:22
msgctxt "NetplayCreate"
msgid "Session Name:"
msgstr "Имя сессии:"
#: src/ui/gui/netplay_create.slint:26
msgctxt "NetplayCreate"
msgid "Enter session name"
msgstr "Введите имя сессии"
#: src/ui/gui/netplay_create.slint:36
msgctxt "NetplayCreate"
msgid "Password (Optional):"
msgstr "Пароль (необязательно):"
#: src/ui/gui/netplay_create.slint:40
msgctxt "NetplayCreate"
msgid "Enter session password"
msgstr "Введите пароль сессии"
#: src/ui/gui/netplay_create.slint:51
msgctxt "NetplayCreate"
msgid "Player Name:"
msgstr "Имя игрока:"
#: src/ui/gui/netplay_create.slint:55
msgctxt "NetplayCreate"
msgid "Enter player name"
msgstr "Введите имя игрока"
#: src/ui/gui/netplay_create.slint:66
msgctxt "NetplayCreate"
msgid "Select ROM"
msgstr "Выбрать ROM"
#: src/ui/gui/netplay_create.slint:82
msgctxt "NetplayCreate"
msgid ""
"This game has cheats enabled. Cheats will be synchronized with other players."
msgstr ""
"Для этой игры включены читы. Читы будут синхронизированы с другими игроками."
#: src/ui/gui/netplay_create.slint:91
msgctxt "NetplayCreate"
msgid "Create Session"
msgstr "Создать сессию"
#: src/ui/gui/netplay_create.slint:107
msgctxt "NetplayCreate"
msgid "Cancel"
msgstr "Отмена"
#: src/ui/gui/netplay_join.slint:7
msgctxt "NetplayJoin"
msgid "Netplay: Join Session"
msgstr "Сетевая игра: Присоединиться к сессии"
#: src/ui/gui/netplay_join.slint:18
msgctxt "NetplayJoin"
msgid "Player Name (required):"
msgstr "Имя игрока (обязательно):"
#: src/ui/gui/netplay_join.slint:22
msgctxt "NetplayJoin"
msgid "Enter player name"
msgstr "Введите имя игрока"
#: src/ui/gui/netplay_join.slint:31
msgctxt "NetplayJoin"
msgid "Password (if required)"
msgstr "Пароль (если требуется)"
#: src/ui/gui/netplay_join.slint:42
msgctxt "NetplayJoin"
msgid "Select ROM"
msgstr "Выбрать ROM"
#: src/ui/gui/netplay_join.slint:57
msgctxt "NetplayJoin"
msgid "Refreshing session list, please wait..."
msgstr "Обновление списка сессий, пожалуйста, подождите..."
#: src/ui/gui/netplay_join.slint:62
msgctxt "NetplayJoin"
msgid "Click on a session below to select it"
msgstr "Нажмите на сессию ниже, чтобы выбрать её"
#: src/ui/gui/netplay_join.slint:67
msgctxt "NetplayJoin"
msgid "No sessions available. Please refresh to check again."
msgstr "Нет доступных сессий. Пожалуйста, обновите, чтобы проверить снова."
#: src/ui/gui/netplay_join.slint:73
msgctxt "NetplayJoin"
msgid "Session Name"
msgstr "Имя сессии"
#: src/ui/gui/netplay_join.slint:74
msgctxt "NetplayJoin"
msgid "Game Name"
msgstr "Название игры"
#: src/ui/gui/netplay_join.slint:75
msgctxt "NetplayJoin"
msgid "Password"
msgstr "Пароль"
#: src/ui/gui/netplay_join.slint:76
msgctxt "NetplayJoin"
msgid "Cheats"
msgstr "Читы"
#: src/ui/gui/netplay_join.slint:90
msgctxt "NetplayJoin"
msgid "Refresh Session List"
msgstr "Обновить список сессий"
#: src/ui/gui/netplay_join.slint:105
msgctxt "NetplayJoin"
msgid "Join Session"
msgstr "Присоединиться к сессии"
#: src/ui/gui/netplay_join.slint:117
msgctxt "NetplayJoin"
msgid "Cancel"
msgstr "Отмена"
#: src/ui/gui/netplay_page.slint:31
msgctxt "Netplay"
msgid "Netplay"
msgstr "Сетевая игра"
#: src/ui/gui/netplay_page.slint:39
msgctxt "Netplay"
msgid "Create Session"
msgstr "Создать сессию"
#: src/ui/gui/netplay_page.slint:50
msgctxt "Netplay"
msgid "Join Session"
msgstr "Присоединиться к сессии"
#: src/ui/gui/netplay_page.slint:64
msgctxt "Netplay"
msgid "Netplay Discord Channel"
msgstr "Канал Discord для сетевой игры"
#: src/ui/gui/netplay_page.slint:71
msgctxt "Netplay"
msgid "Provide Feedback"
msgstr "Оставить отзыв"
#: src/ui/gui/netplay_wait.slint:17
msgctxt "NetplayWait"
msgid "Netplay: Waiting Room"
msgstr "Сетевая игра: Комната ожидания"
#: src/ui/gui/netplay_wait.slint:29
msgctxt "NetplayWait"
msgid "Session Name:"
msgstr "Имя сессии:"
#: src/ui/gui/netplay_wait.slint:35
msgctxt "NetplayWait"
msgid "Game Name:"
msgstr "Название игры:"
#: src/ui/gui/netplay_wait.slint:45
msgctxt "NetplayWait"
msgid "Player 1:"
msgstr "Игрок 1:"
#: src/ui/gui/netplay_wait.slint:49
msgctxt "NetplayWait"
msgid "Player 2:"
msgstr "Игрок 2:"
#: src/ui/gui/netplay_wait.slint:55
msgctxt "NetplayWait"
msgid "Player 3:"
msgstr "Игрок 3:"
#: src/ui/gui/netplay_wait.slint:59
msgctxt "NetplayWait"
msgid "Player 4:"
msgstr "Игрок 4:"
#: src/ui/gui/netplay_wait.slint:73
msgctxt "NetplayWait"
msgid "Enter chat message"
msgstr "Введите сообщение чата"
#: src/ui/gui/netplay_wait.slint:84
msgctxt "NetplayWait"
msgid "Send Message"
msgstr "Отправить сообщение"
#: src/ui/gui/netplay_wait.slint:94
msgctxt "NetplayWait"
msgid ""
"Setting the input delay too low will cause the game to lag.\n"
"You can lower the input delay in-game by pressing Alt+[ and raise it with "
"Alt+]."
msgstr ""
"Слишком низкая задержка ввода вызовет лаги в игре.\n"
"Вы можете уменьшить задержку ввода в игре, нажав Alt+[, и увеличить её с "
"помощью Alt+]."
#: src/ui/gui/netplay_wait.slint:101
msgctxt "NetplayWait"
msgid "Local Input Delay:"
msgstr "Локальная задержка ввода:"
#: src/ui/gui/netplay_wait.slint:118
msgctxt "NetplayWait"
msgid "Recommended: "
msgstr "Рекомендуется: "
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Start Game"
msgstr "Начать игру"
#: src/ui/gui/netplay_wait.slint:127
msgctxt "NetplayWait"
msgid "Waiting for P2P mesh "
msgstr "Ожидание P2P-сети "
#: src/ui/gui/netplay_wait.slint:135
msgctxt "NetplayWait"
msgid "Cancel"
msgstr "Отмена"
#: src/ui/gui/retroachievements_page.slint:19
msgctxt "RAData"
msgid "Not currently logged in"
msgstr "В данный момент не выполнен вход"
#: src/ui/gui/retroachievements_page.slint:27
msgctxt "RetroAchievements"
msgid "RetroAchievements"
msgstr "RetroAchievements"
#: src/ui/gui/retroachievements_page.slint:36
msgctxt "RetroAchievements"
msgid "Enabled"
msgstr "Включено"
#: src/ui/gui/retroachievements_page.slint:51
msgctxt "RetroAchievements"
msgid "Hardcore mode"
msgstr "Хардкорный режим"
#: src/ui/gui/retroachievements_page.slint:60
msgctxt "RetroAchievements"
msgid "Challenge Indicators"
msgstr "Индикаторы испытаний"
#: src/ui/gui/retroachievements_page.slint:69
msgctxt "RetroAchievements"
msgid "Leaderboard Trackers"
msgstr "Трекеры таблицы лидеров"
#: src/ui/gui/retroachievements_page.slint:78
msgctxt "RetroAchievements"
msgid "Discord Rich Presence"
msgstr "Расширенный статус Discord"
#: src/ui/gui/retroachievements_page.slint:96
msgctxt "RetroAchievements"
msgid "View Profile"
msgstr "Просмотреть профиль"
#: src/ui/gui/retroachievements_page.slint:106
msgctxt "RetroAchievements"
msgid "Username"
msgstr "Имя пользователя"
#: src/ui/gui/retroachievements_page.slint:116
msgctxt "RetroAchievements"
msgid "Password"
msgstr "Пароль"
#: src/ui/gui/retroachievements_page.slint:125
msgctxt "RetroAchievements"
msgid "Login"
msgstr "Войти"
#: src/ui/gui/retroachievements_page.slint:141
msgctxt "RetroAchievements"
msgid "View Supported Games"
msgstr "Просмотреть поддерживаемые игры"
#: src/ui/gui/settings_page.slint:24
msgctxt "Settings"
msgid "Settings"
msgstr "Настройки"
#: src/ui/gui/settings_page.slint:35
msgctxt "Settings"
msgid "Resolution:"
msgstr "Разрешение:"
#: src/ui/gui/settings_page.slint:49
msgctxt "Settings"
msgid "SSAA downscaling"
msgstr "SSAA даунскейлинг"
#: src/ui/gui/settings_page.slint:57
msgctxt "Settings"
msgid "Integer Scaling"
msgstr "Целочисленное масштабирование"
#: src/ui/gui/settings_page.slint:65
msgctxt "Settings"
msgid "Fullscreen"
msgstr "Полноэкранный режим"
#: src/ui/gui/settings_page.slint:73
msgctxt "Settings"
msgid "Widescreen (stretch)"
msgstr "Широкоэкранный режим (растянуто)"
#: src/ui/gui/settings_page.slint:81
msgctxt "Settings"
msgid "VSync"
msgstr "Вертикальная синхронизация"
#: src/ui/gui/settings_page.slint:89
msgctxt "Settings"
msgid "Apply CRT shader"
msgstr "Применить шейдер ЭЛТ"
#: src/ui/gui/settings_page.slint:101
msgctxt "Settings"
msgid "Overclock N64 CPU (may cause bugs)"
msgstr "Разгон процессора N64 (может вызвать ошибки)"
#: src/ui/gui/settings_page.slint:109
msgctxt "Settings"
msgid "Disable Expansion Pak"
msgstr "Отключить Expansion Pak"
#: src/ui/gui/settings_page.slint:117
msgctxt "Settings"
msgid "Enable Rewind"
msgstr "Включить перемотку назад"
#: src/ui/gui/settings_page.slint:125
msgctxt "Settings"
msgid "Emulate UNFLoader"
msgstr "Эмулировать UNFLoader"
#: src/ui/gui/settings_page.slint:133
msgctxt "Settings"
msgid "Emulate VRU"
msgstr "Эмулировать VRU"
#: src/ui/gui/vru_dialog.slint:7
msgctxt "VruDialog"
msgid "What Would You Like To Say?"
msgstr "Что вы хотите сказать?"
#~ msgctxt "NetplayCreate"
#~ msgid "Server:"
#~ msgstr "Сервер:"
#~ msgctxt "CustomServerDialog"
#~ msgid "Enter a custom server URL"
#~ msgstr "Введите URL пользовательского сервера"
#~ msgctxt "NetplayJoin"
#~ msgid "Custom Server URL (optional):"
#~ msgstr "URL пользовательского сервера (необязательно):"
#~ msgctxt "NetplayJoin"
#~ msgid "Server"
#~ msgstr "Сервер"
#~ msgctxt "NetplayWait"
#~ msgid "Ping:"
#~ msgstr "Пинг:"
#~ msgctxt "NetplayCreate"
#~ msgid "Creating server, please wait...This may take about 30 seconds."
#~ msgstr ""
#~ "Создание сервера, пожалуйста, подождите... Это может занять около 30 "
#~ "секунд."
#~ msgctxt "ControllerConfig"
#~ msgid "Port"
#~ msgstr "Порт"
#~ msgctxt "ControllerConfig"
#~ msgid "Controller"
#~ msgstr "Контроллер"
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M440-280h80v-240h-80v240Zm68.5-331.5Q520-623 520-640t-11.5-28.5Q497-680 480-680t-28.5 11.5Q440-657 440-640t11.5 28.5Q463-600 480-600t28.5-11.5ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z"/></svg>

After

Width:  |  Height:  |  Size: 553 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M280-120v-80h160v-124q-49-11-87.5-41.5T296-442q-75-9-125.5-65.5T120-640v-40q0-33 23.5-56.5T200-760h80v-80h400v80h80q33 0 56.5 23.5T840-680v40q0 76-50.5 132.5T664-442q-18 46-56.5 76.5T520-324v124h160v80H280Zm0-408v-152h-80v40q0 38 22 68.5t58 43.5Zm285 93q35-35 35-85v-240H360v240q0 50 35 85t85 35q50 0 85-35Zm115-93q36-13 58-43.5t22-68.5v-40h-80v152Zm-200-52Z"/></svg>

After

Width:  |  Height:  |  Size: 483 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M480-160v-80h320v80H480ZM220-320l-56-56 183-184-183-184 56-56 240 240-240 240Z"/></svg>

After

Width:  |  Height:  |  Size: 203 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M189-160q-60 0-102.5-43T42-307q0-9 1-18t3-18l84-336q14-54 57-87.5t98-33.5h390q55 0 98 33.5t57 87.5l84 336q2 9 3.5 18.5T919-306q0 61-43.5 103.5T771-160q-42 0-78-22t-54-60l-28-58q-5-10-15-15t-21-5H385q-11 0-21 5t-15 15l-28 58q-18 38-54 60t-78 22Zm3-80q19 0 34.5-10t23.5-27l28-57q15-31 44-48.5t63-17.5h190q34 0 63 18t45 48l28 57q8 17 23.5 27t34.5 10q28 0 48-18.5t21-46.5q0 1-2-19l-84-335q-7-27-28-44t-49-17H285q-28 0-49.5 17T208-659l-84 335q-2 6-2 18 0 28 20.5 47t49.5 19Zm376.5-291.5Q580-543 580-560t-11.5-28.5Q557-600 540-600t-28.5 11.5Q500-577 500-560t11.5 28.5Q523-520 540-520t28.5-11.5Zm80-80Q660-623 660-640t-11.5-28.5Q637-680 620-680t-28.5 11.5Q580-657 580-640t11.5 28.5Q603-600 620-600t28.5-11.5Zm0 160Q660-463 660-480t-11.5-28.5Q637-520 620-520t-28.5 11.5Q580-497 580-480t11.5 28.5Q603-440 620-440t28.5-11.5Zm80-80Q740-543 740-560t-11.5-28.5Q717-600 700-600t-28.5 11.5Q660-577 660-560t11.5 28.5Q683-520 700-520t28.5-11.5Zm-367 63Q370-477 370-490v-40h40q13 0 21.5-8.5T440-560q0-13-8.5-21.5T410-590h-40v-40q0-13-8.5-21.5T340-660q-13 0-21.5 8.5T310-630v40h-40q-13 0-21.5 8.5T240-560q0 13 8.5 21.5T270-530h40v40q0 13 8.5 21.5T340-460q13 0 21.5-8.5ZM480-480Z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M240-200h120v-240h240v240h120v-360L480-740 240-560v360Zm-80 80v-480l320-240 320 240v480H520v-240h-80v240H160Zm320-350Z"/></svg>

After

Width:  |  Height:  |  Size: 243 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M260-160q-91 0-155.5-63T40-377q0-78 47-139t123-78q25-92 100-149t170-57q117 0 198.5 81.5T760-520q69 8 114.5 59.5T920-340q0 75-52.5 127.5T740-160H260Zm0-80h480q42 0 71-29t29-71q0-42-29-71t-71-29h-60v-80q0-83-58.5-141.5T480-720q-83 0-141.5 58.5T280-520h-20q-58 0-99 41t-41 99q0 58 41 99t99 41Zm220-240Z"/></svg>

After

Width:  |  Height:  |  Size: 424 B

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="m370-80-16-128q-13-5-24.5-12T307-235l-119 50L78-375l103-78q-1-7-1-13.5v-27q0-6.5 1-13.5L78-585l110-190 119 50q11-8 23-15t24-12l16-128h220l16 128q13 5 24.5 12t22.5 15l119-50 110 190-103 78q1 7 1 13.5v27q0 6.5-2 13.5l103 78-110 190-118-50q-11 8-23 15t-24 12L590-80H370Zm70-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z"/></svg>

After

Width:  |  Height:  |  Size: 771 B

+1012 -510
View File
File diff suppressed because it is too large Load Diff
+71 -30
View File
@@ -2,41 +2,82 @@
#ifdef __cplusplus
#include <cstdint>
#include <stddef.h>
extern "C"
{
extern "C" {
#endif
typedef struct
{
uint8_t *RDRAM;
uint8_t *DMEM;
uint32_t RDRAM_SIZE;
uint32_t *DPC_CURRENT_REG;
uint32_t *DPC_START_REG;
uint32_t *DPC_END_REG;
uint32_t *DPC_STATUS_REG;
bool PAL;
bool widescreen;
} GFX_INFO;
typedef struct {
uint8_t *RDRAM;
uint8_t *DMEM;
uint32_t RDRAM_SIZE;
uint32_t *DPC_CURRENT_REG;
uint32_t *DPC_START_REG;
uint32_t *DPC_END_REG;
uint32_t *DPC_STATUS_REG;
bool PAL;
bool widescreen;
bool fullscreen;
bool vsync;
bool integer_scaling;
uint32_t upscale;
bool ssaa;
bool crt;
} GFX_INFO;
typedef struct
{
bool emu_running;
bool save_state;
bool load_state;
bool enable_speedlimiter;
} CALL_BACK;
typedef struct {
bool emu_running;
bool save_state;
bool load_state;
bool load_rewind;
bool reset_game;
bool enable_speedlimiter;
bool lower_volume;
bool raise_volume;
bool decrease_input_delay;
bool increase_input_delay;
bool paused;
bool frame_advance;
uint32_t save_state_slot;
} CALL_BACK;
void rdp_init(void *_window, GFX_INFO _gfx_info, uint32_t _upscale, bool _integer_scaling, bool _fullscreen);
void rdp_close();
void rdp_set_vi_register(uint32_t reg, uint32_t value);
void rdp_update_screen();
CALL_BACK rdp_check_callback();
uint64_t rdp_process_commands();
void rdp_new_processor(GFX_INFO _gfx_info, uint32_t _upscale);
void rdp_check_framebuffers(uint32_t address);
void rdp_full_sync();
typedef struct {
uint32_t joystick_id;
bool connected;
} JoystickEvent;
typedef enum {
MESSAGE_VERY_SHORT = 500,
MESSAGE_SHORT = 3000,
MESSAGE_LONG = 6000,
} MESSAGE_LENGTH;
void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font,
size_t font_size, uint32_t save_state_slot);
void rdp_close();
void rdp_set_vi_register(uint32_t reg, uint32_t value);
void rdp_update_screen();
void rdp_render_frame();
CALL_BACK rdp_check_callback();
uint64_t rdp_process_commands();
void rdp_idle();
void rdp_onscreen_message(const char *message, MESSAGE_LENGTH milliseconds);
void rdp_check_framebuffers(uint32_t address, uint32_t length);
size_t rdp_state_size();
void rdp_save_state(uint8_t *state);
void rdp_load_state(GFX_INFO _gfx_info, const uint8_t *state);
void rdp_set_fps(uint32_t fps, uint32_t vis);
JoystickEvent get_joystick_event();
void achievement_challenge_indicator_add(const char *achievement_title);
void achievement_challenge_indicator_remove(const char *achievement_title);
void achievement_progress_add(const char *achievement_title,
const char *progress);
void achievement_progress_remove();
void leaderboard_tracker_add(uint32_t id, const char *title,
const char *display);
void leaderboard_tracker_remove(uint32_t id);
#ifdef __cplusplus
}
+11 -11
View File
@@ -1,19 +1,19 @@
#pragma once
static const uint32_t vertex_spirv[] =
{0x07230203, 0x00010000, 0x000d000a, 0x00000034,
{0x07230203, 0x00010300, 0x000d000b, 0x00000034,
0x00000000, 0x00020011, 0x00000001, 0x0006000b,
0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e,
0x00000000, 0x0003000e, 0x00000000, 0x00000001,
0x0008000f, 0x00000000, 0x00000004, 0x6e69616d,
0x00000000, 0x00000008, 0x00000016, 0x0000002b,
0x00040047, 0x00000008, 0x0000000b, 0x0000002a,
0x00050048, 0x00000014, 0x00000000, 0x0000000b,
0x00000000, 0x00050048, 0x00000014, 0x00000001,
0x0000000b, 0x00000001, 0x00050048, 0x00000014,
0x00000002, 0x0000000b, 0x00000003, 0x00050048,
0x00000014, 0x00000003, 0x0000000b, 0x00000004,
0x00030047, 0x00000014, 0x00000002, 0x00040047,
0x00030047, 0x00000014, 0x00000002, 0x00050048,
0x00000014, 0x00000000, 0x0000000b, 0x00000000,
0x00050048, 0x00000014, 0x00000001, 0x0000000b,
0x00000001, 0x00050048, 0x00000014, 0x00000002,
0x0000000b, 0x00000003, 0x00050048, 0x00000014,
0x00000003, 0x0000000b, 0x00000004, 0x00040047,
0x0000002b, 0x0000001e, 0x00000000, 0x00020013,
0x00000002, 0x00030021, 0x00000003, 0x00000002,
0x00040015, 0x00000006, 0x00000020, 0x00000001,
@@ -74,8 +74,8 @@ static const uint32_t vertex_spirv[] =
0x00000030, 0x00000033, 0x0003003e, 0x0000002b,
0x00000032, 0x000100fd, 0x00010038};
static const uint32_t fragment_spirv[] =
{0x07230203, 0x00010000, 0x000d000a, 0x00000015,
static const uint32_t plain_fragment_spirv[] =
{0x07230203, 0x00010300, 0x000d000b, 0x00000015,
0x00000000, 0x00020011, 0x00000001, 0x0006000b,
0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e,
0x00000000, 0x0003000e, 0x00000000, 0x00000001,
@@ -83,8 +83,8 @@ static const uint32_t fragment_spirv[] =
0x00000000, 0x00000009, 0x00000011, 0x00030010,
0x00000004, 0x00000007, 0x00040047, 0x00000009,
0x0000001e, 0x00000000, 0x00040047, 0x0000000d,
0x00000022, 0x00000000, 0x00040047, 0x0000000d,
0x00000021, 0x00000000, 0x00040047, 0x00000011,
0x00000021, 0x00000000, 0x00040047, 0x0000000d,
0x00000022, 0x00000000, 0x00040047, 0x00000011,
0x0000001e, 0x00000000, 0x00020013, 0x00000002,
0x00030021, 0x00000003, 0x00000002, 0x00030016,
0x00000006, 0x00000020, 0x00040017, 0x00000007,
+456
View File
@@ -0,0 +1,456 @@
#pragma once
static const uint32_t crt_fragment_spirv[] =
{0x07230203, 0x00010300, 0x000d000b, 0x000004fd,
0x00000000, 0x00020011, 0x00000001, 0x0006000b,
0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e,
0x00000000, 0x0003000e, 0x00000000, 0x00000001,
0x0007000f, 0x00000004, 0x00000004, 0x6e69616d,
0x00000000, 0x000001ba, 0x0000021a, 0x00030010,
0x00000004, 0x00000007, 0x00030047, 0x00000185,
0x00000002, 0x00050048, 0x00000185, 0x00000000,
0x00000023, 0x00000000, 0x00050048, 0x00000185,
0x00000001, 0x00000023, 0x00000010, 0x00040047,
0x000001ba, 0x0000001e, 0x00000000, 0x00040047,
0x000001ca, 0x00000021, 0x00000000, 0x00040047,
0x000001ca, 0x00000022, 0x00000000, 0x00040047,
0x0000021a, 0x0000001e, 0x00000000, 0x00020013,
0x00000002, 0x00030021, 0x00000003, 0x00000002,
0x00030016, 0x00000006, 0x00000020, 0x00090019,
0x00000007, 0x00000006, 0x00000001, 0x00000000,
0x00000000, 0x00000000, 0x00000001, 0x00000000,
0x0003001b, 0x00000008, 0x00000007, 0x00040020,
0x00000009, 0x00000000, 0x00000008, 0x00040017,
0x0000000a, 0x00000006, 0x00000002, 0x00040017,
0x0000000c, 0x00000006, 0x00000003, 0x00040017,
0x00000037, 0x00000006, 0x00000004, 0x0004002b,
0x00000006, 0x0000003a, 0x4019999a, 0x0006002c,
0x0000000c, 0x0000003b, 0x0000003a, 0x0000003a,
0x0000003a, 0x0004002b, 0x00000006, 0x00000049,
0x3f800000, 0x0004002b, 0x00000006, 0x0000004a,
0x00000000, 0x0004002b, 0x00000006, 0x00000068,
0xbf800000, 0x00040015, 0x0000006b, 0x00000020,
0x00000001, 0x0004002b, 0x0000006b, 0x0000006c,
0x00000000, 0x00040015, 0x0000006f, 0x00000020,
0x00000000, 0x0004002b, 0x0000006f, 0x00000070,
0x00000000, 0x0004002b, 0x0000006b, 0x00000074,
0x00000001, 0x0004002b, 0x0000006f, 0x00000077,
0x00000001, 0x0004002b, 0x00000006, 0x000000a1,
0x3f000000, 0x0005002c, 0x0000000a, 0x000000fc,
0x000000a1, 0x0000004a, 0x0004002b, 0x00000006,
0x00000101, 0x3a83126f, 0x0005002c, 0x0000000a,
0x00000102, 0x000000a1, 0x00000101, 0x0004002b,
0x00000006, 0x0000010b, 0x40490fdb, 0x0004002b,
0x00000006, 0x00000116, 0x40000000, 0x0004002b,
0x00000006, 0x0000011c, 0x3727c5ac, 0x0007002c,
0x00000037, 0x0000012c, 0x00000049, 0x00000049,
0x00000049, 0x00000049, 0x00040018, 0x00000149,
0x00000037, 0x00000004, 0x0006002c, 0x0000000c,
0x00000165, 0x000000a1, 0x000000a1, 0x000000a1,
0x0004002b, 0x00000006, 0x00000166, 0x3fc00000,
0x0006002c, 0x0000000c, 0x00000167, 0x00000166,
0x00000166, 0x00000166, 0x0004002b, 0x00000006,
0x00000169, 0x3ecccccd, 0x0006002c, 0x0000000c,
0x0000016a, 0x00000169, 0x00000169, 0x00000169,
0x0004001e, 0x00000185, 0x00000037, 0x00000037,
0x00040020, 0x00000186, 0x00000009, 0x00000185,
0x0004003b, 0x00000186, 0x00000187, 0x00000009,
0x00040020, 0x00000188, 0x00000009, 0x00000006,
0x00020014, 0x00000196, 0x0006002c, 0x0000000c,
0x0000019a, 0x00000049, 0x0000004a, 0x00000049,
0x0006002c, 0x0000000c, 0x000001a1, 0x0000004a,
0x00000049, 0x0000004a, 0x0006002c, 0x0000000c,
0x000001a4, 0x0000004a, 0x0000004a, 0x00000049,
0x0004002b, 0x0000006f, 0x000001aa, 0x00000003,
0x00040020, 0x000001b9, 0x00000001, 0x0000000a,
0x0004003b, 0x000001b9, 0x000001ba, 0x00000001,
0x00040020, 0x000001bc, 0x00000009, 0x00000037,
0x0004003b, 0x00000009, 0x000001ca, 0x00000000,
0x0004002b, 0x00000006, 0x000001dc, 0x40400000,
0x0004002b, 0x00000006, 0x000001ff, 0x3dcccccd,
0x00040020, 0x00000206, 0x00000001, 0x00000006,
0x0004002b, 0x00000006, 0x0000020c, 0x3e99999a,
0x0004002b, 0x00000006, 0x00000210, 0x3d4ccccd,
0x0004002b, 0x00000006, 0x00000216, 0x3ed55555,
0x0006002c, 0x0000000c, 0x00000217, 0x00000216,
0x00000216, 0x00000216, 0x00040020, 0x00000219,
0x00000003, 0x00000037, 0x0004003b, 0x00000219,
0x0000021a, 0x00000003, 0x0005002c, 0x0000000a,
0x000004f3, 0x000000a1, 0x000000a1, 0x0007002c,
0x00000037, 0x000004f4, 0x0000011c, 0x0000011c,
0x0000011c, 0x0000011c, 0x0006002c, 0x0000000c,
0x000004f6, 0x00000116, 0x00000116, 0x00000116,
0x0006002c, 0x0000000c, 0x000004f7, 0x00000049,
0x00000049, 0x00000049, 0x0006002c, 0x0000000c,
0x000004f8, 0x0000004a, 0x0000004a, 0x0000004a,
0x0006002c, 0x0000000c, 0x000004f9, 0x0000020c,
0x0000020c, 0x0000020c, 0x0007002c, 0x00000037,
0x000004fa, 0x000000a1, 0x000000a1, 0x000000a1,
0x000000a1, 0x0004002b, 0x00000006, 0x000004fb,
0x3eaaaaab, 0x00050036, 0x00000002, 0x00000004,
0x00000000, 0x00000003, 0x000200f8, 0x00000005,
0x00060041, 0x00000188, 0x000001a8, 0x00000187,
0x00000074, 0x00000077, 0x0004003d, 0x00000006,
0x000001a9, 0x000001a8, 0x00060041, 0x00000188,
0x000001ab, 0x00000187, 0x0000006c, 0x000001aa,
0x0004003d, 0x00000006, 0x000001ac, 0x000001ab,
0x00050085, 0x00000006, 0x000001ad, 0x000001a9,
0x000001ac, 0x0006000c, 0x00000006, 0x000001ae,
0x00000001, 0x00000008, 0x000001ad, 0x00050088,
0x00000006, 0x000001b2, 0x000000a1, 0x000001ae,
0x0005008d, 0x00000006, 0x000001b4, 0x000001ae,
0x00000116, 0x000500b7, 0x00000196, 0x000001b5,
0x000001b4, 0x0000004a, 0x000600a9, 0x00000006,
0x000004fc, 0x000001b5, 0x0000004a, 0x000001b2,
0x0004003d, 0x0000000a, 0x000001bb, 0x000001ba,
0x00050041, 0x000001bc, 0x000001bd, 0x00000187,
0x0000006c, 0x0004003d, 0x00000037, 0x000001be,
0x000001bd, 0x0007004f, 0x0000000a, 0x000001bf,
0x000001be, 0x000001be, 0x00000000, 0x00000001,
0x00050085, 0x0000000a, 0x000001c0, 0x000001bb,
0x000001bf, 0x00050050, 0x0000000a, 0x000001c3,
0x0000004a, 0x000004fc, 0x00050083, 0x0000000a,
0x000001c4, 0x000001c0, 0x000001c3, 0x0007004f,
0x0000000a, 0x000001c7, 0x000001be, 0x000001be,
0x00000002, 0x00000003, 0x00050085, 0x0000000a,
0x000001c8, 0x000001c4, 0x000001c7, 0x00050051,
0x00000006, 0x00000249, 0x000001be, 0x00000000,
0x00050088, 0x00000006, 0x0000024a, 0x00000049,
0x00000249, 0x00050050, 0x0000000a, 0x0000024b,
0x0000024a, 0x0000004a, 0x00050051, 0x00000006,
0x0000024d, 0x000001be, 0x00000001, 0x00050088,
0x00000006, 0x0000024e, 0x00000049, 0x0000024d,
0x00050050, 0x0000000a, 0x0000024f, 0x0000004a,
0x0000024e, 0x00050085, 0x0000000a, 0x00000252,
0x000001c8, 0x000001bf, 0x0006000c, 0x0000000a,
0x00000254, 0x00000001, 0x00000008, 0x00000252,
0x00050081, 0x0000000a, 0x00000256, 0x00000254,
0x000004f3, 0x00050088, 0x0000000a, 0x00000258,
0x00000256, 0x000001bf, 0x0006000c, 0x0000000a,
0x0000025a, 0x00000001, 0x0000000a, 0x00000252,
0x00050083, 0x0000000a, 0x0000025c, 0x0000025a,
0x000004f3, 0x0005008e, 0x0000000a, 0x0000025d,
0x0000025c, 0x00000068, 0x00050083, 0x0000000a,
0x00000260, 0x00000258, 0x0000024f, 0x0004003d,
0x00000008, 0x0000028a, 0x000001ca, 0x00050083,
0x0000000a, 0x0000028d, 0x00000260, 0x0000024b,
0x00050057, 0x00000037, 0x0000028e, 0x0000028a,
0x0000028d, 0x0008004f, 0x0000000c, 0x0000028f,
0x0000028e, 0x0000028e, 0x00000000, 0x00000001,
0x00000002, 0x0007000c, 0x0000000c, 0x00000290,
0x00000001, 0x0000001a, 0x0000028f, 0x0000003b,
0x00050057, 0x00000037, 0x00000293, 0x0000028a,
0x00000260, 0x0008004f, 0x0000000c, 0x00000294,
0x00000293, 0x00000293, 0x00000000, 0x00000001,
0x00000002, 0x0007000c, 0x0000000c, 0x00000295,
0x00000001, 0x0000001a, 0x00000294, 0x0000003b,
0x00050081, 0x0000000a, 0x00000299, 0x00000260,
0x0000024b, 0x00050057, 0x00000037, 0x0000029a,
0x0000028a, 0x00000299, 0x0008004f, 0x0000000c,
0x0000029b, 0x0000029a, 0x0000029a, 0x00000000,
0x00000001, 0x00000002, 0x0007000c, 0x0000000c,
0x0000029c, 0x00000001, 0x0000001a, 0x0000029b,
0x0000003b, 0x00050083, 0x0000000a, 0x000002af,
0x00000258, 0x0000024b, 0x00050057, 0x00000037,
0x000002b0, 0x0000028a, 0x000002af, 0x0008004f,
0x0000000c, 0x000002b1, 0x000002b0, 0x000002b0,
0x00000000, 0x00000001, 0x00000002, 0x0007000c,
0x0000000c, 0x000002b2, 0x00000001, 0x0000001a,
0x000002b1, 0x0000003b, 0x00050057, 0x00000037,
0x000002b5, 0x0000028a, 0x00000258, 0x0008004f,
0x0000000c, 0x000002b6, 0x000002b5, 0x000002b5,
0x00000000, 0x00000001, 0x00000002, 0x0007000c,
0x0000000c, 0x000002b7, 0x00000001, 0x0000001a,
0x000002b6, 0x0000003b, 0x00050081, 0x0000000a,
0x000002bb, 0x00000258, 0x0000024b, 0x00050057,
0x00000037, 0x000002bc, 0x0000028a, 0x000002bb,
0x0008004f, 0x0000000c, 0x000002bd, 0x000002bc,
0x000002bc, 0x00000000, 0x00000001, 0x00000002,
0x0007000c, 0x0000000c, 0x000002be, 0x00000001,
0x0000001a, 0x000002bd, 0x0000003b, 0x00050081,
0x0000000a, 0x00000268, 0x00000258, 0x0000024f,
0x00050083, 0x0000000a, 0x000002d1, 0x00000268,
0x0000024b, 0x00050057, 0x00000037, 0x000002d2,
0x0000028a, 0x000002d1, 0x0008004f, 0x0000000c,
0x000002d3, 0x000002d2, 0x000002d2, 0x00000000,
0x00000001, 0x00000002, 0x0007000c, 0x0000000c,
0x000002d4, 0x00000001, 0x0000001a, 0x000002d3,
0x0000003b, 0x00050057, 0x00000037, 0x000002d7,
0x0000028a, 0x00000268, 0x0008004f, 0x0000000c,
0x000002d8, 0x000002d7, 0x000002d7, 0x00000000,
0x00000001, 0x00000002, 0x0007000c, 0x0000000c,
0x000002d9, 0x00000001, 0x0000001a, 0x000002d8,
0x0000003b, 0x00050081, 0x0000000a, 0x000002dd,
0x00000268, 0x0000024b, 0x00050057, 0x00000037,
0x000002de, 0x0000028a, 0x000002dd, 0x0008004f,
0x0000000c, 0x000002df, 0x000002de, 0x000002de,
0x00000000, 0x00000001, 0x00000002, 0x0007000c,
0x0000000c, 0x000002e0, 0x00000001, 0x0000001a,
0x000002df, 0x0000003b, 0x00050051, 0x00000006,
0x0000026d, 0x0000025d, 0x00000000, 0x00050083,
0x00000006, 0x000002f3, 0x0000026d, 0x00000049,
0x00050081, 0x00000006, 0x000002f6, 0x0000026d,
0x00000049, 0x00060050, 0x0000000c, 0x000002f7,
0x000002f3, 0x0000026d, 0x000002f6, 0x00050085,
0x0000000c, 0x000002fa, 0x000002f7, 0x000004f6,
0x00050085, 0x0000000c, 0x000002fd, 0x000002fa,
0x000002fa, 0x0005008e, 0x0000000c, 0x000002fe,
0x000002fd, 0x00000068, 0x0006000c, 0x0000000c,
0x000002ff, 0x00000001, 0x0000001d, 0x000002fe,
0x00050051, 0x00000006, 0x00000303, 0x000002ff,
0x00000000, 0x0005008e, 0x0000000c, 0x00000304,
0x00000290, 0x00000303, 0x00050051, 0x00000006,
0x00000308, 0x000002ff, 0x00000001, 0x0005008e,
0x0000000c, 0x00000309, 0x00000295, 0x00000308,
0x00050081, 0x0000000c, 0x0000030a, 0x00000304,
0x00000309, 0x00050051, 0x00000006, 0x0000030e,
0x000002ff, 0x00000002, 0x0005008e, 0x0000000c,
0x0000030f, 0x0000029c, 0x0000030e, 0x00050081,
0x0000000c, 0x00000310, 0x0000030a, 0x0000030f,
0x00050081, 0x00000006, 0x00000315, 0x00000303,
0x00000308, 0x00050081, 0x00000006, 0x00000318,
0x00000315, 0x0000030e, 0x00060050, 0x0000000c,
0x00000319, 0x00000318, 0x00000318, 0x00000318,
0x00050088, 0x0000000c, 0x0000031a, 0x00000310,
0x00000319, 0x0005008e, 0x0000000c, 0x00000331,
0x000002b2, 0x00000303, 0x0005008e, 0x0000000c,
0x00000336, 0x000002b7, 0x00000308, 0x00050081,
0x0000000c, 0x00000337, 0x00000331, 0x00000336,
0x0005008e, 0x0000000c, 0x0000033c, 0x000002be,
0x0000030e, 0x00050081, 0x0000000c, 0x0000033d,
0x00000337, 0x0000033c, 0x00050088, 0x0000000c,
0x00000347, 0x0000033d, 0x00000319, 0x0005008e,
0x0000000c, 0x0000035e, 0x000002d4, 0x00000303,
0x0005008e, 0x0000000c, 0x00000363, 0x000002d9,
0x00000308, 0x00050081, 0x0000000c, 0x00000364,
0x0000035e, 0x00000363, 0x0005008e, 0x0000000c,
0x00000369, 0x000002e0, 0x0000030e, 0x00050081,
0x0000000c, 0x0000036a, 0x00000364, 0x00000369,
0x00050088, 0x0000000c, 0x00000374, 0x0000036a,
0x00000319, 0x00050051, 0x00000006, 0x00000286,
0x0000025d, 0x00000001, 0x00050083, 0x00000006,
0x0000037a, 0x00000286, 0x00000049, 0x00050081,
0x00000006, 0x0000037d, 0x00000286, 0x00000049,
0x00060050, 0x0000000c, 0x0000037e, 0x0000037a,
0x00000286, 0x0000037d, 0x00050085, 0x0000000c,
0x00000381, 0x0000037e, 0x000004f6, 0x00050085,
0x0000000c, 0x00000384, 0x00000381, 0x00000381,
0x0005008e, 0x0000000c, 0x00000385, 0x00000384,
0x00000068, 0x0006000c, 0x0000000c, 0x00000386,
0x00000001, 0x0000001d, 0x00000385, 0x00050051,
0x00000006, 0x0000038a, 0x00000386, 0x00000000,
0x0005008e, 0x0000000c, 0x0000038b, 0x0000031a,
0x0000038a, 0x00050051, 0x00000006, 0x0000038f,
0x00000386, 0x00000001, 0x0005008e, 0x0000000c,
0x00000390, 0x00000347, 0x0000038f, 0x00050081,
0x0000000c, 0x00000391, 0x0000038b, 0x00000390,
0x00050051, 0x00000006, 0x00000395, 0x00000386,
0x00000002, 0x0005008e, 0x0000000c, 0x00000396,
0x00000374, 0x00000395, 0x00050081, 0x0000000c,
0x00000397, 0x00000391, 0x00000396, 0x00050081,
0x00000006, 0x0000039c, 0x0000038a, 0x0000038f,
0x00050081, 0x00000006, 0x0000039f, 0x0000039c,
0x00000395, 0x00060050, 0x0000000c, 0x000003a0,
0x0000039f, 0x0000039f, 0x0000039f, 0x00050088,
0x0000000c, 0x000003a1, 0x00000397, 0x000003a0,
0x00060052, 0x0000000a, 0x000004e1, 0x00000249,
0x000001bf, 0x00000000, 0x00050085, 0x0000000a,
0x000003b6, 0x000001c8, 0x000004e1, 0x00050083,
0x0000000a, 0x000003b7, 0x000003b6, 0x000000fc,
0x0006000c, 0x0000000a, 0x000003b9, 0x00000001,
0x00000008, 0x000003b7, 0x00050081, 0x0000000a,
0x000003ba, 0x000003b9, 0x00000102, 0x00050088,
0x0000000a, 0x000003bc, 0x000003ba, 0x000004e1,
0x0006000c, 0x0000000a, 0x000003be, 0x00000001,
0x0000000a, 0x000003b7, 0x00050051, 0x00000006,
0x000003c0, 0x000003be, 0x00000000, 0x00050081,
0x00000006, 0x000003c1, 0x000003c0, 0x00000049,
0x00050083, 0x00000006, 0x000003c6, 0x000003c0,
0x00000049, 0x00050083, 0x00000006, 0x000003c9,
0x000003c0, 0x00000116, 0x00070050, 0x00000037,
0x000003ca, 0x000003c1, 0x000003c0, 0x000003c6,
0x000003c9, 0x0005008e, 0x00000037, 0x000003cb,
0x000003ca, 0x0000010b, 0x0006000c, 0x00000037,
0x000003cd, 0x00000001, 0x00000004, 0x000003cb,
0x0007000c, 0x00000037, 0x000003cf, 0x00000001,
0x00000028, 0x000003cd, 0x000004f4, 0x0006000c,
0x00000037, 0x000003d1, 0x00000001, 0x0000000d,
0x000003cf, 0x0005008e, 0x00000037, 0x000003d2,
0x000003d1, 0x00000116, 0x00050085, 0x00000037,
0x000003d5, 0x000003cf, 0x000004fa, 0x0006000c,
0x00000037, 0x000003d6, 0x00000001, 0x0000000d,
0x000003d5, 0x00050085, 0x00000037, 0x000003d7,
0x000003d2, 0x000003d6, 0x00050085, 0x00000037,
0x000003da, 0x000003cf, 0x000003cf, 0x00050088,
0x00000037, 0x000003db, 0x000003d7, 0x000003da,
0x00050094, 0x00000006, 0x000003dd, 0x000003db,
0x0000012c, 0x00070050, 0x00000037, 0x000003df,
0x000003dd, 0x000003dd, 0x000003dd, 0x000003dd,
0x00050088, 0x00000037, 0x000003e0, 0x000003db,
0x000003df, 0x00050057, 0x00000037, 0x000003e3,
0x0000028a, 0x000003bc, 0x0008004f, 0x0000000c,
0x000003e4, 0x000003e3, 0x000003e3, 0x00000000,
0x00000001, 0x00000002, 0x0007000c, 0x0000000c,
0x000003e5, 0x00000001, 0x0000001a, 0x000003e4,
0x0000003b, 0x00050051, 0x00000006, 0x000003e6,
0x000003e5, 0x00000000, 0x00050051, 0x00000006,
0x000003e7, 0x000003e5, 0x00000001, 0x00050051,
0x00000006, 0x000003e8, 0x000003e5, 0x00000002,
0x00050081, 0x0000000a, 0x000003ed, 0x000003bc,
0x0000024b, 0x00050057, 0x00000037, 0x000003ee,
0x0000028a, 0x000003ed, 0x0008004f, 0x0000000c,
0x000003ef, 0x000003ee, 0x000003ee, 0x00000000,
0x00000001, 0x00000002, 0x0007000c, 0x0000000c,
0x000003f0, 0x00000001, 0x0000001a, 0x000003ef,
0x0000003b, 0x00050051, 0x00000006, 0x000003f1,
0x000003f0, 0x00000000, 0x00050051, 0x00000006,
0x000003f2, 0x000003f0, 0x00000001, 0x00050051,
0x00000006, 0x000003f3, 0x000003f0, 0x00000002,
0x00070050, 0x00000037, 0x00000407, 0x000003e6,
0x000003e7, 0x000003e8, 0x00000049, 0x00070050,
0x00000037, 0x00000409, 0x000003f1, 0x000003f2,
0x000003f3, 0x00000049, 0x00070050, 0x00000149,
0x0000040b, 0x00000407, 0x00000407, 0x00000409,
0x00000409, 0x00050091, 0x00000037, 0x0000040d,
0x0000040b, 0x000003e0, 0x0008004f, 0x0000000c,
0x0000040e, 0x0000040d, 0x0000040d, 0x00000000,
0x00000001, 0x00000002, 0x00050085, 0x00000006,
0x0000041b, 0x00000249, 0x000001dc, 0x00060052,
0x0000000a, 0x000004e9, 0x0000041b, 0x000001bf,
0x00000000, 0x00050088, 0x00000006, 0x0000041f,
0x000004fb, 0x00000249, 0x00050050, 0x0000000a,
0x00000420, 0x0000041f, 0x0000004a, 0x00050085,
0x0000000a, 0x00000423, 0x000001c8, 0x000004e9,
0x00050083, 0x0000000a, 0x00000424, 0x00000423,
0x000000fc, 0x0006000c, 0x0000000a, 0x00000426,
0x00000001, 0x00000008, 0x00000424, 0x00050081,
0x0000000a, 0x00000427, 0x00000426, 0x00000102,
0x00050088, 0x0000000a, 0x00000429, 0x00000427,
0x000004e9, 0x0006000c, 0x0000000a, 0x0000042b,
0x00000001, 0x0000000a, 0x00000424, 0x00050051,
0x00000006, 0x0000042d, 0x0000042b, 0x00000000,
0x00050081, 0x00000006, 0x0000042e, 0x0000042d,
0x00000049, 0x00050083, 0x00000006, 0x00000433,
0x0000042d, 0x00000049, 0x00050083, 0x00000006,
0x00000436, 0x0000042d, 0x00000116, 0x00070050,
0x00000037, 0x00000437, 0x0000042e, 0x0000042d,
0x00000433, 0x00000436, 0x0005008e, 0x00000037,
0x00000438, 0x00000437, 0x0000010b, 0x0006000c,
0x00000037, 0x0000043a, 0x00000001, 0x00000004,
0x00000438, 0x0007000c, 0x00000037, 0x0000043c,
0x00000001, 0x00000028, 0x0000043a, 0x000004f4,
0x0006000c, 0x00000037, 0x0000043e, 0x00000001,
0x0000000d, 0x0000043c, 0x0005008e, 0x00000037,
0x0000043f, 0x0000043e, 0x00000116, 0x00050085,
0x00000037, 0x00000442, 0x0000043c, 0x000004fa,
0x0006000c, 0x00000037, 0x00000443, 0x00000001,
0x0000000d, 0x00000442, 0x00050085, 0x00000037,
0x00000444, 0x0000043f, 0x00000443, 0x00050085,
0x00000037, 0x00000447, 0x0000043c, 0x0000043c,
0x00050088, 0x00000037, 0x00000448, 0x00000444,
0x00000447, 0x00050094, 0x00000006, 0x0000044a,
0x00000448, 0x0000012c, 0x00070050, 0x00000037,
0x0000044c, 0x0000044a, 0x0000044a, 0x0000044a,
0x0000044a, 0x00050088, 0x00000037, 0x0000044d,
0x00000448, 0x0000044c, 0x00050057, 0x00000037,
0x00000450, 0x0000028a, 0x00000429, 0x0008004f,
0x0000000c, 0x00000451, 0x00000450, 0x00000450,
0x00000000, 0x00000001, 0x00000002, 0x0007000c,
0x0000000c, 0x00000452, 0x00000001, 0x0000001a,
0x00000451, 0x0000003b, 0x00050051, 0x00000006,
0x00000453, 0x00000452, 0x00000000, 0x00050051,
0x00000006, 0x00000454, 0x00000452, 0x00000001,
0x00050051, 0x00000006, 0x00000455, 0x00000452,
0x00000002, 0x00050081, 0x0000000a, 0x0000045a,
0x00000429, 0x00000420, 0x00050057, 0x00000037,
0x0000045b, 0x0000028a, 0x0000045a, 0x0008004f,
0x0000000c, 0x0000045c, 0x0000045b, 0x0000045b,
0x00000000, 0x00000001, 0x00000002, 0x0007000c,
0x0000000c, 0x0000045d, 0x00000001, 0x0000001a,
0x0000045c, 0x0000003b, 0x00050051, 0x00000006,
0x0000045e, 0x0000045d, 0x00000000, 0x00050051,
0x00000006, 0x0000045f, 0x0000045d, 0x00000001,
0x00050051, 0x00000006, 0x00000460, 0x0000045d,
0x00000002, 0x00070050, 0x00000037, 0x00000474,
0x00000453, 0x00000454, 0x00000455, 0x00000049,
0x00070050, 0x00000037, 0x00000476, 0x0000045e,
0x0000045f, 0x00000460, 0x00000049, 0x00070050,
0x00000149, 0x00000478, 0x00000474, 0x00000474,
0x00000476, 0x00000476, 0x00050091, 0x00000037,
0x0000047a, 0x00000478, 0x0000044d, 0x0008004f,
0x0000000c, 0x0000047b, 0x0000047a, 0x0000047a,
0x00000000, 0x00000001, 0x00000002, 0x00050085,
0x0000000c, 0x000001e8, 0x0000047b, 0x0000040e,
0x0006000c, 0x0000000c, 0x000001e9, 0x00000001,
0x0000001f, 0x000001e8, 0x00050051, 0x00000006,
0x000001eb, 0x000001c8, 0x00000001, 0x00060041,
0x00000188, 0x000001ec, 0x00000187, 0x0000006c,
0x00000077, 0x0004003d, 0x00000006, 0x000001ed,
0x000001ec, 0x00050085, 0x00000006, 0x000001ee,
0x000001eb, 0x000001ed, 0x0006000c, 0x00000006,
0x000001ef, 0x00000001, 0x0000000a, 0x000001ee,
0x0007000c, 0x0000000c, 0x00000482, 0x00000001,
0x0000001a, 0x0000040e, 0x0000016a, 0x0008000c,
0x0000000c, 0x00000483, 0x00000001, 0x0000002e,
0x00000165, 0x00000167, 0x00000482, 0x00050088,
0x0000000c, 0x00000486, 0x000004f6, 0x00000483,
0x0005008e, 0x0000000c, 0x00000488, 0x00000486,
0x000000a1, 0x0005008e, 0x0000000c, 0x0000048b,
0x00000486, 0x000001ef, 0x00050083, 0x0000000c,
0x0000048d, 0x0000048b, 0x00000488, 0x0006000c,
0x0000000c, 0x0000048e, 0x00000001, 0x00000004,
0x0000048d, 0x00050083, 0x0000000c, 0x00000490,
0x000004f7, 0x0000048e, 0x0008000c, 0x0000000c,
0x00000493, 0x00000001, 0x00000031, 0x000004f8,
0x000004f7, 0x00000490, 0x00050085, 0x0000000c,
0x00000495, 0x00000493, 0x00000488, 0x00050085,
0x0000000c, 0x000001f5, 0x000001e9, 0x00000495,
0x00050083, 0x0000000c, 0x000001f8, 0x000003a1,
0x000001f5, 0x0008000c, 0x0000000c, 0x000001fb,
0x00000001, 0x0000002b, 0x000001f8, 0x000004f8,
0x000004f7, 0x00050085, 0x0000000c, 0x000001fe,
0x000001fb, 0x000001fb, 0x0005008e, 0x0000000c,
0x00000200, 0x000001fe, 0x000001ff, 0x00050081,
0x0000000c, 0x00000202, 0x000001f5, 0x00000200,
0x00050041, 0x00000206, 0x00000207, 0x000001ba,
0x00000070, 0x0004003d, 0x00000006, 0x00000208,
0x00000207, 0x000300f7, 0x000004b3, 0x00000000,
0x000300fb, 0x00000070, 0x0000049b, 0x000200f8,
0x0000049b, 0x00060041, 0x00000188, 0x0000049d,
0x00000187, 0x00000074, 0x00000070, 0x0004003d,
0x00000006, 0x0000049e, 0x0000049d, 0x00050085,
0x00000006, 0x0000049f, 0x00000208, 0x0000049e,
0x0006000c, 0x00000006, 0x000004a7, 0x00000001,
0x00000008, 0x0000049f, 0x0005008d, 0x00000006,
0x000004a8, 0x000004a7, 0x00000116, 0x000500b4,
0x00000196, 0x000004aa, 0x000004a8, 0x0000004a,
0x000300f7, 0x000004b2, 0x00000000, 0x000400fa,
0x000004aa, 0x000004ab, 0x000004ac, 0x000200f8,
0x000004ac, 0x000500b4, 0x00000196, 0x000004ae,
0x000004a8, 0x00000049, 0x000300f7, 0x000004b1,
0x00000000, 0x000400fa, 0x000004ae, 0x000004af,
0x000004b0, 0x000200f8, 0x000004b0, 0x000200f9,
0x000004b3, 0x000200f8, 0x000004af, 0x000200f9,
0x000004b3, 0x000200f8, 0x000004b1, 0x000100ff,
0x000200f8, 0x000004ab, 0x000200f9, 0x000004b3,
0x000200f8, 0x000004b2, 0x000100ff, 0x000200f8,
0x000004b3, 0x000900f5, 0x0000000c, 0x000004f1,
0x0000019a, 0x000004ab, 0x000001a1, 0x000004af,
0x000001a4, 0x000004b0, 0x00050085, 0x0000000c,
0x0000020a, 0x00000202, 0x000004f1, 0x0005008e,
0x0000000c, 0x0000020b, 0x0000020a, 0x00000116,
0x0008000c, 0x0000000c, 0x0000020e, 0x00000001,
0x0000002e, 0x00000202, 0x0000020b, 0x000004f9,
0x0005008e, 0x0000000c, 0x00000211, 0x000001fb,
0x00000210, 0x00050081, 0x0000000c, 0x00000213,
0x0000020e, 0x00000211, 0x0005008e, 0x0000000c,
0x00000215, 0x00000213, 0x00000166, 0x0007000c,
0x0000000c, 0x00000218, 0x00000001, 0x0000001a,
0x00000215, 0x00000217, 0x00050051, 0x00000006,
0x0000021c, 0x00000218, 0x00000000, 0x00050051,
0x00000006, 0x0000021d, 0x00000218, 0x00000001,
0x00050051, 0x00000006, 0x0000021e, 0x00000218,
0x00000002, 0x00070050, 0x00000037, 0x0000021f,
0x0000021c, 0x0000021d, 0x0000021e, 0x00000049,
0x0003003e, 0x0000021a, 0x0000021f, 0x000100fd,
0x00010038};
+36 -55
View File
@@ -1,74 +1,55 @@
#include "wsi_platform.hpp"
#include <SDL3/SDL_vulkan.h>
VkSurfaceKHR SDL_WSIPlatform::create_surface(VkInstance instance, VkPhysicalDevice gpu)
{
VkSurfaceKHR surface = nullptr;
bool result = SDL_Vulkan_CreateSurface(window, instance, NULL, &surface);
if (result != true)
{
printf("Error creating surface\n");
}
return surface;
VkSurfaceKHR SDL_WSIPlatform::create_surface(VkInstance instance,
VkPhysicalDevice gpu) {
VkSurfaceKHR surface = nullptr;
bool result = SDL_Vulkan_CreateSurface(window, instance, NULL, &surface);
if (result != true) {
printf("Error creating surface\n");
}
return surface;
}
void SDL_WSIPlatform::destroy_surface(VkInstance instance, VkSurfaceKHR surface)
{
SDL_Vulkan_DestroySurface(instance, surface, NULL);
void SDL_WSIPlatform::destroy_surface(VkInstance instance,
VkSurfaceKHR surface) {
SDL_Vulkan_DestroySurface(instance, surface, NULL);
}
std::vector<const char *> SDL_WSIPlatform::get_instance_extensions()
{
std::vector<const char *> SDL_WSIPlatform::get_instance_extensions() {
unsigned int extensionCount = 0;
char const *const *extensions = SDL_Vulkan_GetInstanceExtensions(&extensionCount);
if (extensions == NULL)
{
printf("Error getting instance extensions\n");
}
unsigned int extensionCount = 0;
char const *const *extensions =
SDL_Vulkan_GetInstanceExtensions(&extensionCount);
if (extensions == NULL) {
printf("Error getting instance extensions\n");
}
std::vector<const char *> extensionNames;
for (int i = 0; i < extensionCount; ++i)
{
extensionNames.push_back(extensions[i]);
}
return extensionNames;
std::vector<const char *> extensionNames;
for (unsigned int i = 0; i < extensionCount; ++i) {
extensionNames.push_back(extensions[i]);
}
return extensionNames;
}
uint32_t SDL_WSIPlatform::get_surface_width()
{
int w, h;
SDL_GetWindowSize(window, &w, &h);
return w;
uint32_t SDL_WSIPlatform::get_surface_width() {
int w, h;
SDL_GetWindowSize(window, &w, &h);
return w;
}
uint32_t SDL_WSIPlatform::get_surface_height()
{
int w, h;
SDL_GetWindowSize(window, &w, &h);
return h;
uint32_t SDL_WSIPlatform::get_surface_height() {
int w, h;
SDL_GetWindowSize(window, &w, &h);
return h;
}
bool SDL_WSIPlatform::alive(Vulkan::WSI &wsi)
{
return true;
}
bool SDL_WSIPlatform::alive(Vulkan::WSI &wsi) { return true; }
void SDL_WSIPlatform::poll_input()
{
SDL_PumpEvents();
}
void SDL_WSIPlatform::poll_input() {}
void SDL_WSIPlatform::poll_input_async(Granite::InputTrackerHandler *handler)
{
}
void SDL_WSIPlatform::poll_input_async(Granite::InputTrackerHandler *handler) {}
void SDL_WSIPlatform::set_window(SDL_Window *_window)
{
window = _window;
}
void SDL_WSIPlatform::set_window(SDL_Window *_window) { window = _window; }
void SDL_WSIPlatform::do_resize()
{
resize = true;
}
void SDL_WSIPlatform::do_resize() { resize = true; }
+13 -13
View File
@@ -3,20 +3,20 @@
#include "wsi.hpp"
#include <SDL3/SDL.h>
class SDL_WSIPlatform : public Vulkan::WSIPlatform
{
class SDL_WSIPlatform : public Vulkan::WSIPlatform {
public:
VkSurfaceKHR create_surface(VkInstance instance, VkPhysicalDevice gpu) override;
void destroy_surface(VkInstance instance, VkSurfaceKHR surface) override;
std::vector<const char *> get_instance_extensions() override;
uint32_t get_surface_width() override;
uint32_t get_surface_height() override;
bool alive(Vulkan::WSI &wsi) override;
void poll_input() override;
void poll_input_async(Granite::InputTrackerHandler *handler) override;
void set_window(SDL_Window *_window);
void do_resize();
VkSurfaceKHR create_surface(VkInstance instance,
VkPhysicalDevice gpu) override;
void destroy_surface(VkInstance instance, VkSurfaceKHR surface) override;
std::vector<const char *> get_instance_extensions() override;
uint32_t get_surface_width() override;
uint32_t get_surface_height() override;
bool alive(Vulkan::WSI &wsi) override;
void poll_input() override;
void poll_input_async(Granite::InputTrackerHandler *handler) override;
void set_window(SDL_Window *_window);
void do_resize();
private:
SDL_Window *window;
SDL_Window *window;
};
+421
View File
@@ -0,0 +1,421 @@
#include "retroachievements.h"
#include "../parallel-rdp/interface.hpp"
#include <rc_client.h>
#include <rc_consoles.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void rust_server_call(const char *url, const char *post_data,
const char *content_type,
rc_client_server_callback_t callback,
void *callback_data);
void store_retroachievements_credentials(const char *username,
const char *token, void *userdata);
void notify_load_game(void *userdata);
static rc_client_t *g_client = NULL;
static const uint8_t *g_rdram = NULL;
static size_t g_rdram_size = 0;
static bool g_challenge = false;
static bool g_leaderboard = false;
static rc_client_leaderboard_list_t *g_leaderboard_list = NULL;
static char g_rich_presence_buffer[512];
static uint32_t read_memory(uint32_t address, uint8_t *buffer,
uint32_t num_bytes, rc_client_t *client) {
if (address + num_bytes > g_rdram_size)
memset(buffer, 0, num_bytes);
else
memcpy(buffer, &g_rdram[address], num_bytes);
return num_bytes;
}
static void server_call(const rc_api_request_t *request,
rc_client_server_callback_t callback,
void *callback_data, rc_client_t *client) {
rust_server_call(request->url, request->post_data, request->content_type,
callback, callback_data);
}
void ra_http_callback(const char *content, size_t content_size, int status_code,
void *callback, void *callback_data) {
// Prepare a data object to pass the HTTP response to the callback
rc_api_server_response_t server_response;
memset(&server_response, 0, sizeof(server_response));
server_response.body = content;
server_response.body_length = content_size;
server_response.http_status_code = status_code;
// handle non-http errors (socket timeout, no internet available, etc)
if (status_code == 0) {
// Let rc_client know the error was not catastrophic and could be retried.
// It may decide to retry or just immediately pass the error to the
// callback. To prevent possible retries, use
// RC_API_SERVER_RESPONSE_CLIENT_ERROR.
server_response.http_status_code =
RC_API_SERVER_RESPONSE_RETRYABLE_CLIENT_ERROR;
}
((rc_client_server_callback_t)callback)(&server_response, callback_data);
}
static void log_message(const char *message, const rc_client_t *client) {
printf("RetroAchievements: %s\n", message);
}
static void login_callback(int result, const char *error_message,
rc_client_t *client, void *userdata) {
// If not successful, just report the error and bail.
if (result != RC_OK) {
if (client && !rc_client_get_userdata(client))
rc_client_set_userdata(client, strdup(error_message));
store_retroachievements_credentials(NULL, NULL, userdata);
return;
}
// Login was successful. Capture the token for future logins so we don't have
// to store the password anywhere.
const rc_client_user_t *user = rc_client_get_user_info(client);
store_retroachievements_credentials(user->username, user->token, userdata);
}
const char *ra_get_username() {
const rc_client_user_t *user = rc_client_get_user_info(g_client);
return user ? user->username : NULL;
}
void ra_logout_user() { rc_client_logout(g_client); }
void ra_login_user(const char *username, const char *password, void *userdata) {
// This will generate an HTTP payload and call the server_call chain above.
// Eventually, login_callback will be called to let us know if the login was
// successful.
rc_client_begin_login_with_password(g_client, username, password,
login_callback, userdata);
}
void ra_login_token_user(const char *username, const char *token,
void *userdata) {
// This is exactly the same functionality as
// rc_client_begin_login_with_password, but uses the token captured from the
// first login instead of a password. Note that it uses the same callback.
rc_client_begin_login_with_token(g_client, username, token, login_callback,
userdata);
}
static void load_game_callback(int result, const char *error_message,
rc_client_t *client, void *userdata) {
if (result != RC_OK) {
if (client && !rc_client_get_userdata(client))
rc_client_set_userdata(client, strdup(error_message));
rc_client_set_hardcore_enabled(client, false);
notify_load_game(userdata);
return;
}
if (!rc_client_is_processing_required(client)) {
rc_client_set_hardcore_enabled(client, false);
}
g_leaderboard_list = rc_client_create_leaderboard_list(
client, RC_CLIENT_LEADERBOARD_LIST_GROUPING_NONE);
notify_load_game(userdata);
}
void ra_welcome(const char **game_title, const char **game_image_url) {
if (!g_client) {
*game_title = NULL;
*game_image_url = NULL;
return;
}
char buffer[512];
char *error_message = rc_client_get_userdata(g_client);
if (error_message) {
snprintf(buffer, sizeof(buffer), "RA Error: %s", error_message);
rdp_onscreen_message(buffer, MESSAGE_LONG);
free(error_message);
rc_client_set_userdata(g_client, NULL);
*game_title = NULL;
*game_image_url = NULL;
return;
}
const rc_client_game_t *game = rc_client_get_game_info(g_client);
if (!game) {
*game_title = NULL;
*game_image_url = NULL;
return;
}
rc_client_user_game_summary_t summary;
rc_client_get_user_game_summary(g_client, &summary);
int message_length = snprintf(
buffer, sizeof(buffer), "%s\nMode: %s\n", game->title,
rc_client_get_hardcore_enabled(g_client) ? "Hardcore" : "Softcore");
if (summary.num_core_achievements != 0) {
snprintf(buffer + message_length, sizeof(buffer) - message_length,
"%u/%u achievements unlocked", summary.num_unlocked_achievements,
summary.num_core_achievements);
} else {
snprintf(buffer + message_length, sizeof(buffer) - message_length,
"Game has no achievements");
}
rdp_onscreen_message(buffer, MESSAGE_LONG);
*game_title = game->title;
*game_image_url = game->badge_url;
}
void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata) {
rc_client_begin_identify_and_load_game(g_client, RC_CONSOLE_NINTENDO_64, NULL,
rom, rom_size, load_game_callback,
userdata);
}
void ra_unload_game() {
if (g_leaderboard_list) {
rc_client_destroy_leaderboard_list(g_leaderboard_list);
g_leaderboard_list = NULL;
}
rc_client_unload_game(g_client);
}
void ra_set_rdram(const uint8_t *rdram, size_t rdram_size) {
g_rdram = rdram;
g_rdram_size = rdram_size;
}
static void leaderboard_submitted(const rc_client_leaderboard_t *leaderboard) {
char buffer[512];
snprintf(buffer, sizeof(buffer), "Leaderboard submitted: %s - %s",
leaderboard->title, leaderboard->tracker_value);
rdp_onscreen_message(buffer, MESSAGE_SHORT);
}
static void achievement_triggered(const rc_client_achievement_t *achievement) {
char buffer[512];
snprintf(buffer, sizeof(buffer), "Unlocked: %s", achievement->title);
rdp_onscreen_message(buffer, MESSAGE_SHORT);
}
static void game_completed(rc_client_t *client) {
char buffer[512];
const rc_client_game_t *game = rc_client_get_game_info(client);
snprintf(buffer, sizeof(buffer), "%s: %s",
rc_client_get_hardcore_enabled(client) ? "Mastered" : "Completed",
game->title);
rdp_onscreen_message(buffer, MESSAGE_SHORT);
}
static void subset_completed(const rc_client_subset_t *subset,
rc_client_t *client) {
char buffer[512];
snprintf(buffer, sizeof(buffer), "Subset %s: %s",
rc_client_get_hardcore_enabled(client) ? "mastered" : "completed",
subset->title);
rdp_onscreen_message(buffer, MESSAGE_SHORT);
}
static void server_error(const rc_client_server_error_t *server_error) {
char buffer[512];
snprintf(buffer, sizeof(buffer), "RA server error: %s",
server_error->error_message);
rdp_onscreen_message(buffer, MESSAGE_SHORT);
}
static const char *get_leaderboard_title(const char *display) {
if (g_leaderboard_list == NULL)
return NULL;
for (uint32_t i = 0; i < g_leaderboard_list->num_buckets; i++) {
for (uint32_t j = 0; j < g_leaderboard_list->buckets[i].num_leaderboards;
j++) {
// this looks like a mistake, but it is intentional.
// Leaderboard trackers don't contain the title,
// but we take advantage of the fact that tracker_value and display point
// to the same char* to find a matching leaderboard.
if (g_leaderboard_list->buckets[i].leaderboards[j]->tracker_value ==
display) {
return g_leaderboard_list->buckets[i].leaderboards[j]->title;
}
}
}
return NULL;
}
static void event_handler(const rc_client_event_t *event, rc_client_t *client) {
switch (event->type) {
case RC_CLIENT_EVENT_ACHIEVEMENT_TRIGGERED:
achievement_triggered(event->achievement);
break;
case RC_CLIENT_EVENT_LEADERBOARD_STARTED:
break;
case RC_CLIENT_EVENT_LEADERBOARD_FAILED:
break;
case RC_CLIENT_EVENT_LEADERBOARD_SUBMITTED:
if (g_leaderboard)
leaderboard_submitted(event->leaderboard);
break;
case RC_CLIENT_EVENT_ACHIEVEMENT_CHALLENGE_INDICATOR_SHOW:
if (g_challenge)
achievement_challenge_indicator_add(event->achievement->title);
break;
case RC_CLIENT_EVENT_ACHIEVEMENT_CHALLENGE_INDICATOR_HIDE:
if (g_challenge)
achievement_challenge_indicator_remove(event->achievement->title);
break;
case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_SHOW:
achievement_progress_add(event->achievement->title,
event->achievement->measured_progress);
break;
case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_HIDE:
achievement_progress_remove();
break;
case RC_CLIENT_EVENT_ACHIEVEMENT_PROGRESS_INDICATOR_UPDATE:
achievement_progress_add(event->achievement->title,
event->achievement->measured_progress);
break;
case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_SHOW:
if (g_leaderboard)
leaderboard_tracker_add(
event->leaderboard_tracker->id,
get_leaderboard_title(event->leaderboard_tracker->display),
event->leaderboard_tracker->display);
break;
case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_HIDE:
if (g_leaderboard)
leaderboard_tracker_remove(event->leaderboard_tracker->id);
break;
case RC_CLIENT_EVENT_LEADERBOARD_TRACKER_UPDATE:
if (g_leaderboard)
leaderboard_tracker_add(
event->leaderboard_tracker->id,
get_leaderboard_title(event->leaderboard_tracker->display),
event->leaderboard_tracker->display);
break;
case RC_CLIENT_EVENT_LEADERBOARD_SCOREBOARD:
break;
case RC_CLIENT_EVENT_GAME_COMPLETED:
game_completed(client);
break;
case RC_CLIENT_EVENT_SUBSET_COMPLETED:
subset_completed(event->subset, client);
break;
case RC_CLIENT_EVENT_SERVER_ERROR:
server_error(event->server_error);
break;
default:
printf("RetroAchievements: Unhandled event %d\n", event->type);
break;
}
}
void ra_init_client(bool hardcore, bool challenge, bool leaderboard) {
// Create the client instance (using a global variable simplifies this
// example)
if (!g_client)
g_client = rc_client_create(read_memory, server_call);
g_rdram = NULL;
g_rdram_size = 0;
// Provide a logging function to simplify debugging
rc_client_enable_logging(g_client, RC_CLIENT_LOG_LEVEL_WARN, log_message);
rc_client_set_event_handler(g_client, event_handler);
rc_client_set_hardcore_enabled(g_client, hardcore);
g_challenge = challenge;
g_leaderboard = leaderboard;
}
bool ra_get_hardcore() { return rc_client_get_hardcore_enabled(g_client); }
void ra_shutdown_client() {
if (g_client) {
// Release resources associated to the client instance
rc_client_destroy(g_client);
g_client = NULL;
}
}
void ra_do_frame() { rc_client_do_frame(g_client); }
void ra_do_idle() { rc_client_idle(g_client); }
const char *ra_get_rich_presence() {
size_t size = rc_client_get_rich_presence_message(
g_client, g_rich_presence_buffer, sizeof(g_rich_presence_buffer));
if (size == 0) {
return NULL;
}
return g_rich_presence_buffer;
}
size_t ra_state_size() { return rc_client_progress_size(g_client); }
void ra_save_state(uint8_t *state, size_t state_size) {
if (!rc_client_is_game_loaded(g_client))
return;
if (rc_client_serialize_progress_sized(g_client, state, state_size) !=
RC_OK) {
printf("RetroAchievements: Failed to serialize progress\n");
}
}
void ra_load_state(const uint8_t *state, size_t state_size) {
if (!rc_client_is_game_loaded(g_client))
return;
if (rc_client_deserialize_progress_sized(g_client, state, state_size) !=
RC_OK) {
printf("RetroAchievements: Failed to deserialize progress\n");
}
}
void ra_display_inprogress_achievements(void *userdata) {
if (!rc_client_is_game_loaded(g_client))
return;
rc_client_achievement_list_t *list = rc_client_create_achievement_list(
g_client, RC_CLIENT_ACHIEVEMENT_CATEGORY_CORE,
RC_CLIENT_ACHIEVEMENT_LIST_GROUPING_LOCK_STATE);
char buffer[1024] = {0};
size_t buffer_length = 0;
for (uint32_t i = 0; i < list->num_buckets; i++) {
if (list->buckets[i].bucket_type == RC_CLIENT_ACHIEVEMENT_BUCKET_LOCKED) {
for (uint32_t j = 0; j < list->buckets[i].num_achievements; j++) {
const rc_client_achievement_t *achievement =
list->buckets[i].achievements[j];
if (achievement->measured_percent > 0.0f) {
if (buffer_length < sizeof(buffer) - 1) {
buffer_length += snprintf(
buffer + buffer_length, sizeof(buffer) - buffer_length,
"%s: %s\n", achievement->title, achievement->measured_progress);
}
}
}
}
}
if (buffer_length > 0) {
rdp_onscreen_message(buffer, MESSAGE_SHORT);
}
rc_client_destroy_achievement_list(list);
}
+33
View File
@@ -0,0 +1,33 @@
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
void ra_init_client(bool hardcore, bool challenge, bool leaderboard);
void ra_shutdown_client();
void ra_welcome(const char **game_title, const char **game_image_url);
bool ra_get_hardcore();
void ra_load_game(const uint8_t *rom, size_t rom_size, void *userdata);
void ra_unload_game();
void ra_set_rdram(const uint8_t *rdram, size_t rdram_size);
void ra_do_frame();
void ra_do_idle();
void ra_http_callback(const char *content, size_t content_size, int status_code,
void *callback, void *callback_data);
void ra_logout_user();
void ra_login_user(const char *username, const char *password, void *userdata);
void ra_login_token_user(const char *username, const char *token,
void *userdata);
const char *ra_get_username();
size_t ra_state_size();
void ra_save_state(uint8_t *state, size_t state_size);
void ra_load_state(const uint8_t *state, size_t state_size);
const char *ra_get_rich_presence();
#ifdef __cplusplus
extern "C" {
#endif
void ra_display_inprogress_achievements(void *userdata);
#ifdef __cplusplus
}
#endif
+2
View File
@@ -0,0 +1,2 @@
[toolchain]
channel = "1.96.0"
+204
View File
@@ -0,0 +1,204 @@
use crate::device;
use crate::ui;
#[derive(serde::Serialize, serde::Deserialize, Copy, Clone)]
pub struct DecodedCheat {
code_type: u8,
address: u32,
data: u16,
}
#[derive(Clone, serde::Serialize, serde::Deserialize)]
pub struct Cheats {
pub cheats: Vec<Vec<DecodedCheat>>,
pub boot: bool,
pub enabled: bool,
}
#[derive(serde::Serialize, serde::Deserialize, Clone)]
pub struct CheatData {
pub note: String,
pub data: Vec<String>,
pub options: Option<std::collections::BTreeMap<String, String>>,
}
pub type Cheat = std::collections::BTreeMap<String, std::collections::BTreeMap<String, CheatData>>;
pub fn init(
device: &mut device::Device,
cheat_settings: rustc_hash::FxHashMap<String, Option<String>>,
) {
let cheats = serde_json::from_slice::<Cheat>(include_bytes!("../data/cheats.json"))
.unwrap()
.get(&ui::storage::get_game_crc(&device.cart.rom))
.cloned()
.unwrap_or_default();
let re = regex::Regex::new(r"\?+").unwrap();
for cheat_setting in cheat_settings.iter() {
if let Some(cheat_data) = cheats.get(cheat_setting.0) {
let mut option_value = None;
if let Some(option) = cheat_setting.1 {
if let Some(found_option_value) = cheat_data
.options
.as_ref()
.cloned()
.unwrap_or_default()
.get(option)
{
option_value = Some(found_option_value.to_string());
} else {
eprintln!("Cheat option: {option} not found");
continue;
}
}
println!(
"Cheat: {} Option: {}",
cheat_setting.0,
cheat_setting.1.clone().unwrap_or("none".to_string())
);
let mut decoded_cheat: Vec<DecodedCheat> = vec![];
for code in cheat_data.data.iter() {
let mut result = code.clone();
if let Some(option_value) = option_value.as_ref() {
result = re.replace_all(code, option_value).into_owned();
}
let mut split = result.split_whitespace();
let first_part = u32::from_str_radix(split.next().unwrap(), 16).unwrap();
if let Ok(data) = u16::from_str_radix(split.next().unwrap(), 16) {
decoded_cheat.push(DecodedCheat {
code_type: (first_part >> 24) as u8,
address: first_part & 0x00FFFFFF,
data,
})
} else {
eprintln!("Could not parse data for: {}", cheat_setting.0);
};
}
if !decoded_cheat.is_empty() {
device.cheats.cheats.push(decoded_cheat);
}
} else {
eprintln!("Could not find cheat: {}", cheat_setting.0);
}
}
if !device.cheats.cheats.is_empty() {
device.cheats.enabled = true;
ui::video::onscreen_message("Cheats enabled", ui::video::MESSAGE_LENGTH_MESSAGE_SHORT);
}
}
fn write_byte(device: &mut device::Device, cheat_line: &DecodedCheat) {
*device
.rdram
.mem
.get_mut(cheat_line.address as usize ^ device.byte_swap)
.unwrap_or(&mut 0) = cheat_line.data as u8;
}
fn write_half(device: &mut device::Device, cheat_line: &DecodedCheat) {
*device
.rdram
.mem
.get_mut(cheat_line.address as usize ^ device.byte_swap)
.unwrap_or(&mut 0) = (cheat_line.data >> 8) as u8;
*device
.rdram
.mem
.get_mut((cheat_line.address + 1) as usize ^ device.byte_swap)
.unwrap_or(&mut 0) = cheat_line.data as u8;
}
fn equal_byte(device: &mut device::Device, cheat_line: &DecodedCheat) -> bool {
let current_value = *device
.rdram
.mem
.get(cheat_line.address as usize ^ device.byte_swap)
.unwrap_or(&0);
current_value == (cheat_line.data as u8)
}
fn equal_half(device: &mut device::Device, cheat_line: &DecodedCheat) -> bool {
let current_value1 = *device
.rdram
.mem
.get(cheat_line.address as usize ^ device.byte_swap)
.unwrap_or(&0);
let current_value2 = *device
.rdram
.mem
.get((cheat_line.address + 1) as usize ^ device.byte_swap)
.unwrap_or(&0);
current_value1 == (cheat_line.data >> 8) as u8 && current_value2 == cheat_line.data as u8
}
pub fn execute_cheats(device: &mut device::Device, cheats: Vec<Vec<DecodedCheat>>) {
for cheat in cheats.iter() {
let mut valid = true;
let mut cheat_iter = cheat.iter().peekable();
while let Some(cheat_line) = cheat_iter.next() {
match cheat_line.code_type {
0x50 => {
if valid {
let mut expanded_cheat: Vec<DecodedCheat> = vec![];
let compressed_cheat = *cheat_iter.peek().unwrap();
let count = (cheat_line.address & 0xFF00) >> 8;
let offset = cheat_line.address & 0xFF;
for i in 0..count {
let line = DecodedCheat {
code_type: compressed_cheat.code_type,
address: compressed_cheat.address + (i * offset),
data: compressed_cheat.data
+ (i as i16 * cheat_line.data as i16) as u16,
};
expanded_cheat.push(line);
}
execute_cheats(device, [expanded_cheat].to_vec());
}
valid = false; // skip the next line
}
0x80 | 0xA0 => {
if valid {
write_byte(device, cheat_line);
}
valid = true;
}
0x81 | 0xA1 => {
if valid {
write_half(device, cheat_line);
}
valid = true;
}
0xF0 => {
if device.cheats.boot && valid {
write_byte(device, cheat_line);
valid = true;
}
}
0xF1 => {
if device.cheats.boot && valid {
write_half(device, cheat_line);
valid = true;
}
}
0xD0 => {
valid = equal_byte(device, cheat_line);
}
0xD1 => {
valid = equal_half(device, cheat_line);
}
0xD2 => {
valid = !equal_byte(device, cheat_line);
}
0xD3 => {
valid = !equal_half(device, cheat_line);
}
0x88 | 0x89 | 0xD8 | 0xD9 | 0xDA | 0xDB => { /* GS button not emulated */ }
_ => panic!("Unknown cheat code type: {:X}", cheat_line.code_type),
}
}
}
device.cheats.boot = false;
}
+1 -1
View File
@@ -1,4 +1,4 @@
#include "src/compat/sse2neon/v1.8.0/sse2neon.h"
#include "src/compat/sse2neon/sse2neon.h"
// Static wrappers
Submodule src/compat/sse2neon added at b26afbb44d
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More