Kodi Community Forum
RetroPlayer Test Builds (updated for Nexus) - Printable Version

+- Kodi Community Forum (https://forum.kodi.tv)
+-- Forum: Support (https://forum.kodi.tv/forumdisplay.php?fid=33)
+--- Forum: Game support (https://forum.kodi.tv/forumdisplay.php?fid=292)
+--- Thread: RetroPlayer Test Builds (updated for Nexus) (/showthread.php?tid=173361)



RE: RetroPlayer Test Builds (updated for Krypton) - MrTarantula - 2016-05-05

Like garbear said, creating API's are free, implementation can come later, or never if there's no interest. Better to have it and not need it than to need it and have to "hack it in" later.


RE: RetroPlayer Test Builds (updated for Krypton) - Scourge - 2016-05-05

(2016-05-04, 10:25)zag Wrote: Shouldn't we try to get retro player merged before starting on things like save game managers?

Just a thought Wink

Save states are core functionality, AFAIC. Many retro gamers I know play games like secret of Mana, Metroid and Zelda. Those games are severely crippled by the lack of saves. Realization of save states will help adaptation.


RE: RetroPlayer Test Builds (updated for Krypton) - Montellese - 2016-05-05

(2016-05-05, 10:34)Scourge Wrote:
(2016-05-04, 10:25)zag Wrote: Shouldn't we try to get retro player merged before starting on things like save game managers?

Just a thought Wink

Save states are core functionality, AFAIC. Many retro gamers I know play games like secret of Mana, Metroid and Zelda. Those games are severely crippled by the lack of saves. Realization of save states will help adaptation.

Yes but people are already asking to be able to sync them between instances and all kinds of other fancy stuff that is not really needed for the basic gaming experience. IMO in a first step the save games should just be stored in kodi's userdata like everything else in Kodi. Then when all kinds of other bugs in RetroPlayer have been fixed and it is ready to be merged we can start looking into more fancy stuff again.


RE: RetroPlayer Test Builds (updated for Krypton) - Scourge - 2016-05-05

Agreed. Basics first. Fancy stuff comes later.


RE: RetroPlayer Test Builds (updated for Krypton) - Montellese - 2016-05-05

Some feedback from testing with your retroplayer-17alpha1 branch:

Starting a SNES game with Beetle bSNES fails with the following log message:
Code:
Debug Print: RetroPlayer: Opening: E:\Media\Games\ROMs\snes\Super Mario World.smc
Debug Print: AddOnLog: SNES (Beetle bSNES): [Mednafen bSNES]: Samples / Frame: -nan(ind)
Debug Print: AddOnLog: SNES (Beetle bSNES): [Mednafen bSNES]: Estimated FPS: -nan(ind)
'Kodi.exe' (Win32): Unloaded 'E:\Coding\Cpp\xbmc.montellese\addons\game.libretro.beetle-bsnes\game.libretro.beetle-bsnes.dll'
Debug Print: ADDON: Dll Destroyed - SNES (Beetle bSNES)
Debug Print: ADDON: Dll Initializing - SNES (Beetle bSNES)
'Kodi.exe' (Win32): Loaded 'E:\Coding\Cpp\xbmc.montellese\addons\game.libretro.beetle-bsnes\game.libretro.beetle-bsnes.dll'. Module was built without symbols.
Debug Print: GAME: ------------------------------------
Debug Print: GAME: Loaded DLL for game.libretro.beetle-bsnes
Debug Print: GAME: Client: SNES (Beetle bSNES) at version 0.9.26
Debug Print: GAME: Valid extensions: .bs .fig .sfc .smc .st
Debug Print: GAME: Supports VFS:                  no
Debug Print: GAME: Supports game loop:            yes
Debug Print: GAME: Supports standalone execution: no
Debug Print: GAME: Supports keyboard:             no
Debug Print: GAME: ------------------------------------
Debug Print: DXVA::CProcessorHD::IsFormatSupported - Unsupported format 104 for 1.
Debug Print: DXVA::CProcessorHD::IsFormatSupported - Unsupported format 105 for 1.
Debug Print: GameClient: Loading E:\Media\Games\ROMs\snes\Super Mario World.smc
Debug Print: AddOnLog: SNES (Beetle bSNES): Loading E:\Media\Games\ROMs\snes\Super Mario World.smc...
Debug Print: AddOnLog: SNES (Beetle bSNES):  Using module: snes(Super Nintendo Entertainment System/Super Famicom)
Debug Print: AddOnLog: SNES (Beetle bSNES): MDFN_MakeFName: E:\Coding\Cpp\xbmc.montellese\portable_data\userdata\addon_data\game.libretro.beetle-bsnes\save\Super Mario World.srm
Debug Print: AddOnLog: SNES (Beetle bSNES): MDFN_MakeFName: E:\Coding\Cpp\xbmc.montellese\portable_data\userdata\addon_data\game.libretro.beetle-bsnes\save\Super Mario World.rtc
Debug Print: AddOnLog: SNES (Beetle bSNES): MDFN_MakeFName:
Debug Print: AddOnLog: SNES (Beetle bSNES):   Loading custom palette from ""...
Debug Print: AddOnLog: SNES (Beetle bSNES):    Error opening file: Invalid argument
Debug Print: GAME - LoadGame() - addon 'game.libretro.beetle-bsnes' returned an error: the command failed
IIRC I've looked into this problem before and the implementation of MDFN_MakeFName in libretro is missing the functionality to handle creating a filename for palettes (and other stuff).

NES games work but sometimes the Mario sprite vanished for a few seconds and then re-appeared. Never had this before.

Next problem is that after having played a game for platform A input only ever works for that platform (but independent of the actual emulator). So when first playing a NES game and then switching to an SNES game input isn't handled and the following error appears:
Code:
Debug Print: Button [ 0 ] on Xbox 360-compatible controller released
Debug Print: Feature [ b ] on game.controller.snes released
Debug Print: AddOnLog: NES (FCEUmm): Can't find <controller> tag for controller "game.controller.snes"
Debug Print: Feature [ a ] on game.controller.default released
I first played Super Mario Bros. in FCEUmm, then in Nestopia and then I wanted to play Super Mario World on SNES but it looks like FCEUmm (the first emulator used) still tries to handle input. The same problem exists if I do it the other way around see the log from trying to play something in FCEUmm after having played in Snes9x:
Code:
Debug Print: Button [ 7 ] on Xbox 360-compatible controller released
Debug Print: Feature [ start ] on game.controller.nes released
Debug Print: AddOnLog: SNES (Snes9x): Can't find <controller> tag for controller "game.controller.nes"
Debug Print: Feature [ start ] on game.controller.default released
Debug Print: Button [ 7 ] on Xbox 360-compatible controller pressed

In general it feels like there's a noticeable delay between me pressing the button on the controller and the action actually happening in the game emulator which often leads to jumping over blocks instead of onto them in Super Mario games.


RE: RetroPlayer Test Builds (updated for Krypton) - OmniBlade - 2016-05-05

Input latency can be a major issue with emulators, over on the libretro forums a few people have obsessed over testing which settings give the lowest input latency. Getting a low latency experience I would say would be an important aspect of RetroPlayer to get the experience as close as possible to the original consoles.


RE: RetroPlayer Test Builds (updated for Krypton) - Montellese - 2016-05-05

I created an issue in the beetle-bsnes-libretro repository at https://github.com/libretro/beetle-bsnes-libretro/issues/3 concerning the failure of MDFN_MakeFName(). It also seems to apply to beetle-gba-libretro but there seems to be a better implementation available in the general mednafen repository (see https://github.com/libretro/mednafen-git/blob/master/src/general.cpp#L285).


RE: RetroPlayer Test Builds (updated for Krypton) - OmniBlade - 2016-05-05

Most of the beetle cores seem a bit unloved when there are alternate emulator cores that are as good or better in the libretro repos, I guess most people would just use bsnes-mercury instead or even the snes9x core, so issues like this would tend to go unreported even if they affected retroarch.


RE: RetroPlayer Test Builds (updated for Krypton) - flipside101 - 2016-05-05

Ignore me

Sent from my D5803


RE: RetroPlayer Test Builds (updated for Krypton) - garbear - 2016-05-09

The new Savestate manager is done. Builds are uploading now


RE: RetroPlayer Test Builds (updated for Krypton) - Serg86 - 2016-05-10

I have a few issues not listed in the first post:

- Current build (May 9th) doesn't bring the game to front when you start it.

- (Only tested NES & SNES games) Aspect ratio is wrong. On a 1920x1080 display, the width is approximately 200 pixels less than it should be for 4:3. Not sure if these measurements are accurate as I don't know if the game displays black pixels on either side, but first coloured pixel to last, measuring a screenshot with Gimp resulted in 1234x1080. 1440x1080 is the correct resolution for 4:3 content. Playing around with the video settings of 4:3 content changes the game display as well. ~17% blackbar reduction acts as a workaround, it puts it very close to the correct aspect ratio.

- I use an iBuffalo Classic USB SNES Gamepad. The DPad is recognized as 2 axis rather than individual buttons, which is fine, except currently, axis on NES cores are used for rewind and fast forward. I can play without issue if I disable rewind. It also has no Guide button.

Which brings me to a suggestion. If it's not on your todo list yet, please consider mapable hotkey combinations. Recalbox has a, in my opinion, fairly elegant solution out of the box. They use the guide or PS button on controllers which have it. Using the DualShock3 as an example, PS Button + Start exits the game. PS Button + Cross opens the Retroarch menu and a few others. The SNES controller doesn't have a guide button, so the select button is used instead.

This would solve another issue with controllers such as these. If you play an SNES game with an SNES controller, because all buttons are used for gameplay, you can't get out of the game unless you have a different input device hooked up. I know this issue is not really that big, since most people have something else to control Kodi with, but it's nice to move from game to game without putting down the pad. Hotkey combinations would solve that.

In the settings, you could set one hotkey, then a separate button for every function you desire.


RE: RetroPlayer Test Builds (updated for Krypton) - garbear - 2016-05-10

(2016-05-10, 02:36)Serg86 Wrote: - Current build (May 9th) doesn't bring the game to front when you start it.
What game? What core? can you post a debug log?

(2016-05-10, 02:36)Serg86 Wrote: - (Only tested NES & SNES games) Aspect ratio is wrong. On a 1920x1080 display, the width is approximately 200 pixels less than it should be for 4:3. Not sure if these measurements are accurate as I don't know if the game displays black pixels on either side, but first coloured pixel to last, measuring a screenshot with Gimp resulted in 1234x1080. 1440x1080 is the correct resolution for 4:3 content. Playing around with the video settings of 4:3 content changes the game display as well. ~17% blackbar reduction acts as a workaround, it puts it very close to the correct aspect ratio.

Can you post a debug log? In it, you will see:

Code:
2016-05-09 18:19:09.158 Kodi[9079:303] Debug Print: GAME: ---------------------------------------
2016-05-09 18:19:09.159 Kodi[9079:303] Debug Print: GAME: Opened file /Users/garrett/Desktop/Desktop_ROMs/Chrono Trigger (U) [!].smc
2016-05-09 18:19:09.159 Kodi[9079:303] Debug Print: GAME: Base Width:   256
2016-05-09 18:19:09.159 Kodi[9079:303] Debug Print: GAME: Base Height:  239
2016-05-09 18:19:09.159 Kodi[9079:303] Debug Print: GAME: Max Width:    512
2016-05-09 18:19:09.159 Kodi[9079:303] Debug Print: GAME: Max Height:   512
2016-05-09 18:19:09.159 Kodi[9079:303] Debug Print: GAME: Aspect Ratio: 1.333333
2016-05-09 18:19:09.160 Kodi[9079:303] Debug Print: GAME: FPS:          60.098812
2016-05-09 18:19:09.160 Kodi[9079:303] Debug Print: GAME: Sample Rate:  32040.500000
2016-05-09 18:19:09.160 Kodi[9079:303] Debug Print: GAME: Region:       NTSC
2016-05-09 18:19:09.160 Kodi[9079:303] Debug Print: GAME: ---------------------------------------

The core has a resolution of 256x239, which is an aspect ratio of 1.071129707112971. Does that solve the mystery of your missing pixels? Can you use the "zoom" action to resize the game to fullscreen?

(2016-05-10, 02:36)Serg86 Wrote: - I use an iBuffalo Classic USB SNES Gamepad. The DPad is recognized as 2 axis rather than individual buttons, which is fine, except currently, axis on NES cores are used for rewind and fast forward. I can play without issue if I disable rewind. It also has no Guide button.

How did you map the dpad to the main controller? The debug log contains all input, so this might show us what's wrong.

(2016-05-10, 02:36)Serg86 Wrote: Which brings me to a suggestion. If it's not on your todo list yet, please consider mapable hotkey combinations. Recalbox has a, in my opinion, fairly elegant solution out of the box. They use the guide or PS button on controllers which have it. Using the DualShock3 as an example, PS Button + Start exits the game. PS Button + Cross opens the Retroarch menu and a few others. The SNES controller doesn't have a guide button, so the select button is used instead.

This would solve another issue with controllers such as these. If you play an SNES game with an SNES controller, because all buttons are used for gameplay, you can't get out of the game unless you have a different input device hooked up. I know this issue is not really that big, since most people have something else to control Kodi with, but it's nice to move from game to game without putting down the pad. Hotkey combinations would solve that.

In the settings, you could set one hotkey, then a separate button for every function you desire.

The button mapping process is split into two parts: everything is mapped to a 360 controller, then the 360 controller is mapped to Kodi actions. Only the 360-controller mapping can be changed in the GUI (by configuring the "Kodi" controller). The 360-to-Kodi-action translation is controlled by joystick.xml.

What this means is that we can have a "meta" button that allows input to escape the game and be passed to joystick.xml. We can use both the Select and Guide/PS buttons to cover all controllers. A setting in Game Settings can also allow combos to be mapped to "meta", so the user could escape actions by pushing both triggers. That way, the user can only configure which buttons are "meta", but they'll have to modify joystick.xml to change the Kodi action.


RE: RetroPlayer Test Builds (updated for Krypton) - Serg86 - 2016-05-10

(2016-05-10, 03:37)garbear Wrote: The core has a resolution of 256x239, which is an aspect ratio of 1.071129707112971. Does that solve the mystery of your missing pixels? Can you use the "zoom" action to resize the game to fullscreen?

Yes, the width is too low, it should be 320x240 for 4:3. None of the modes help, because they either zoom in way too much without changing the aspect ratio or stretch it to 16:9, which is horrible for 4:3 games - or anything for that matter, in my opinion.

(2016-05-10, 03:37)garbear Wrote: How did you map the dpad to the main controller? The debug log contains all input, so this might show us what's wrong.

I mapped the available buttons, didn't press anything during the ones my controller doesn't have and let it count down to abort.

(2016-05-10, 03:37)garbear Wrote: The button mapping process is split into two parts: everything is mapped to a 360 controller, then the 360 controller is mapped to Kodi actions. Only the 360-controller mapping can be changed in the GUI (by configuring the "Kodi" controller). The 360-to-Kodi-action translation is controlled by joystick.xml.

What this means is that we can have a "meta" button that allows input to escape the game and be passed to joystick.xml. We can use both the Select and Guide/PS buttons to cover all controllers. A setting in Game Settings can also allow combos to be mapped to "meta", so the user could escape actions by pushing both triggers. That way, the user can only configure which buttons are "meta", but they'll have to modify joystick.xml to change the Kodi action.

Is it possible to only activate a Kodi action via combination? What I mean is, pressing Select on it's own will be used for the game, pressing and holding Select + another button performs a Kodi action. During gameplay that is, obviously having to hold Select to navigate Kodi would be a bad user experience, to say the least.

Defaults are great, but a GUI to configure them on top of good defaults would be ideal.

What I would like is something like this:
Image

It would just list all the different controller types you connected and make them configurable. Behind the scenes, the "Use hotkey + key" toggle above would either create a hotkey+button combo for all the actions, or map the buttons directly.

I still have an N64 controller lying around, I'll buy one of those USB converters at some point. It doesn't have a select button. The next logical choice would probably be L or Start, Z is often used in combination with other buttons, so it's a bad choice.

PS: I watched Icculuses SDL talk as well, so I get what you mean by everything is an Xbox 360 controller Tongue.


RE: RetroPlayer Test Builds (updated for Krypton) - garbear - 2016-05-10

(2016-05-10, 05:35)Serg86 Wrote: Yes, the width is too low, it should be 320x240 for 4:3. None of the modes help, because they either zoom in way too much without changing the aspect ratio or stretch it to 16:9, which is horrible for 4:3 games - or anything for that matter, in my opinion.

So the emulator is wrong? Not surprising. If emulators lie about their aspect ratio, we'll need to correct it somehow. And we'll need to avoid asking the user.

Can you start collecting data about which cores need aspect ratio adjustments?

(2016-05-10, 05:35)Serg86 Wrote: Is it possible to only activate a Kodi action via combination? What I mean is, pressing Select on it's own will be used for the game, pressing and holding Select + another button performs a Kodi action.

Yes, this is what I aim to do.

(2016-05-10, 05:35)Serg86 Wrote: And I have a few ideas. If we make both Select and Guide/PS

Defaults are great, but a GUI to configure them on top of good defaults would be ideal.

Image

A configuration GUI would be nice. The key is to keep it simple. Do we need a page of possible actions for every controller?

I am picturing a single GUI setting called "Hotkey".

Image

Then, in the controller window, we could add a new controller profile called "Remote" with mediacenter commands: play, pause, etc. When the hotkey is pressed, Kodi translates the button to a remote instead of a SNES controller and sends the command to Kodi instead of the game.

(2016-05-10, 05:35)Serg86 Wrote: The next logical choice would probably be L or Start, Z is often used in combination with other buttons, so it's a bad choice.

I used Left Trigger + Right Trigger in my screen shot, but this is just an example. If the user doesn't want to sacrifice a single button, they can use a combo (like both triggers) so that each trigger could still be used individually.


RE: RetroPlayer Test Builds (updated for Krypton) - Serg86 - 2016-05-10

The reason I suggested individual hotkey configurations for each controller type, is because I alone have 3 different controllers with different buttons available. My DualShock 3 and 4 have "Guide" buttons, my SNES controllers don't, so they need another button, Select. My N64 controller doesn't have a Select button. It's difficult finding one or 2 buttons every controller shares to serve as the hotkey(combo).

If it's too difficult or time consuming to implement, I can certainly live without, as long as I can still do it in the config file, it's a set and forget kind of thing anyway.

As for the cores, I'll start compiling a list as soon as I have a little more time. Do you want me to open a new thread or just post here?