Author Topic: Brainstorming Version 3.0  (Read 123589 times)

Offline littleguy

  • Moderator
  • double
  • *****
  • Posts: 1945
    • View Profile
Re: Brainstorming Version 3.0
« Reply #60 on: November 21, 2013, 02:42:31 PM »
I tested alternative audio drivers in SDL2.  Other than the 'disk' driver (which just dumps sound to disk), none of the others were buildable out of the box.  Missing headers in every case.  For future reference, the way to swap out drivers is to make the following substitutions

SDL2/include/SDL_config_android.h:
Code: [Select]
// #define SDL_AUDIO_DRIVER_ANDROID    1
#define SDL_AUDIO_DRIVER_FOO    1
where the list of drivers can be found in SDL2/include/SDL_config.h.in

SDL2/Android.mk
Code: [Select]
// $(wildcard $(LOCAL_PATH)/src/audio/android/*.c) \
$(wildcard $(LOCAL_PATH)/src/audio/foo/*.c) \

What it made me realize however is that there are two paths to implementing SLES.
 - Implement an alternative Mupen plugin, as you've described
 - Implement an alternative SDL2 audio driver, and continue using mupen64plus-audio-sdl
In case you hadn't already thought of this...
2012 Nexus 7, rooted stock Lollipop
Samsung Galaxy Victory, rooted stock Jelly Bean
Xperia PLAY, stock Gingerbread
OUYA, retail version

Offline littleguy

  • Moderator
  • double
  • *****
  • Posts: 1945
    • View Profile
Re: Brainstorming Version 3.0
« Reply #61 on: November 21, 2013, 07:41:50 PM »
There are some things that don't necessarily need to wait for Version 3 and would be easy enough to implement in the next week for the 2.5 release.  Just wanted to get a yay or nay before I go ahead with the following:

  • Remove input plugin setting (always input-android, occasionally people ask where they can download others, which just creates confusion)
  • Remove audio plugin (always mupen64plus-audio-sdl)
  • Remove the RSP plugin setting (always mupen64plus-rsp-hle)
  • Remove the core setting (always whatever the latest we're using)
  • Remove audio resampling setting (always trivial - it might be hard-coded at that anyhow given our compiler flags, need to check)
  • Remove octagon constraint setting (always enabled)

I understand that audio and perhaps input might be useful to disable, but it seems more intuitive just to ise a checkbox to disable those.

If you're ok with that, I would probably then restructure the main settings menu a bit for version 2.5.  Remove the Audio and Plugins settings.  Move video plugins to the Video section, move R4300 to the Advanced menu, move Audio checkbox to advanced menu.  With the extra real estate it might even be nice to split the display stuff (e.g. resolution, orientation, etc. into a separate menu, sibling with video and input.  Maybe call it Display.

What do you think?
2012 Nexus 7, rooted stock Lollipop
Samsung Galaxy Victory, rooted stock Jelly Bean
Xperia PLAY, stock Gingerbread
OUYA, retail version

Offline Paul

  • Administrator
  • double
  • *****
  • Posts: 3499
  • Developer
    • View Profile
    • PaulsCode.Com
Re: Brainstorming Version 3.0
« Reply #62 on: November 22, 2013, 06:01:22 AM »
Sound like good ideas to me :)
Device: Samsung Galaxy Nexus i515
CPU: TI OMAP4460, 1.2 GHz (dual core, ARM Cortex-A9)
GPU: PowerVR SGX540, 307 MHz
RAM: 1 GB
Resolution: 720 x 1280
Rom: omni-4.4.4-20141014-toro-FML KitKat 4.4.4, rooted

Device: Eee PC 1015PEM
CPU: Intel Atom N550, 1.5 GHz (dual core, x86)
GPU: Intel GMA 3150, 200 MHz (dual core)
RAM: 2GB
Resolution: 1024 x 600
Rom: android-x86-4.3-20130725 Jelly Bean 4.3, rooted

Offline Paul

  • Administrator
  • double
  • *****
  • Posts: 3499
  • Developer
    • View Profile
    • PaulsCode.Com
Re: Brainstorming Version 3.0
« Reply #63 on: November 30, 2013, 08:55:57 AM »
With 2.5.0 almost ready, I thought it would be a good time to start talking about what direction we want to be heading for version 3, and break down some of the important components that need to be written and can be tackled separately.  Here is a rough outline to get the conversation started:

1) Boxart loading system (Littleguy started this one)
 - I want to host the image files myself, so we have control over their naming convention.
 - We should also lock down what the naming convention should be.  Easiest might be by CRC, but we might want to look at using the header name or good name to make it easier for users to compile their own boxart themes or fill in missing games.
 - An option to enter a custom URL to boxart should be part of this feature.

2) Carousel UI (I'm starting this)
- Panel size and carousel count needs to adapt to the screen dimensions.  Must handle from tiny screens all the way up to big-screen TVs, and in any orientation.
- Need to support touchless navigation.
- OUYA-specific touchless navigation button mapping when running on OUYA.
- Intuitive way to bring up the per-game settings menu in the UI.  Was thinking of using a two-step system, where choosing a game goes into a second menu with options to play, change settings, show recommended settings, enable cheats, etc.  Will need to experiment (may require separate solutions for touchscreen and touchless environments).  I'm happy to take suggestions.
- Intuitive way to bring up global app settings (such as crash reporting, change boxart URL, etc) from the main menu/ UI.

3) Per-game preferences
- Maybe use the CRCs in the preference IDs.

4) Screenshots on auto-save
- Determine lowest supported Android version.
- Research support for rooted earlier Android versions.
- Placeholder image to use when screenshots not possible.
- Handle black/ dark screenshots, so they are still visible in the UI (easiest would be to add a frame.. might also research way of programmatically detecting black/ dark screenshots).

5) Touchscreen virtual gamepad editor
- Look at other emulators that have this ability (mimic the best features, improve on any negative aspects).
- Ability to import custom button images.
- System for sharing layouts.
Device: Samsung Galaxy Nexus i515
CPU: TI OMAP4460, 1.2 GHz (dual core, ARM Cortex-A9)
GPU: PowerVR SGX540, 307 MHz
RAM: 1 GB
Resolution: 720 x 1280
Rom: omni-4.4.4-20141014-toro-FML KitKat 4.4.4, rooted

Device: Eee PC 1015PEM
CPU: Intel Atom N550, 1.5 GHz (dual core, x86)
GPU: Intel GMA 3150, 200 MHz (dual core)
RAM: 2GB
Resolution: 1024 x 600
Rom: android-x86-4.3-20130725 Jelly Bean 4.3, rooted

Offline littleguy

  • Moderator
  • double
  • *****
  • Posts: 1945
    • View Profile
Re: Brainstorming Version 3.0
« Reply #64 on: November 30, 2013, 09:49:10 AM »
1) Boxart loading system (Littleguy started this one)
 - I want to host the image files myself, so we have control over their naming convention.
 - We should also lock down what the naming convention should be.  Easiest might be by CRC, but we might want to look at using the header name or good name to make it easier for users to compile their own boxart themes or fill in missing games.
 - An option to enter a custom URL to boxart should be part of this feature.

That's great if you're comfortable hosting the images.  A while back I grabbed the cover art from daedalus and spent some time thinking about the filenames.  I believe I used the "good name" embedded in the rom as the basis, and daedalus generally stuck with that IIRC, but there were some exceptions that I manually tweaked.  I'll have to go back and look at what I did.

One of the first things I should do is push some of my Java-side crc/header utilities up to master so that it's easy to do various manipulations.  Useful for lots of stuff besides cover art.

2) Carousel UI (I'm starting this)
- Panel size and carousel count needs to adapt to the screen dimensions.  Must handle from tiny screens all the way up to big-screen TVs, and in any orientation.
- Need to support touchless navigation.
- OUYA-specific touchless navigation button mapping when running on OUYA.
- Intuitive way to bring up the per-game settings menu in the UI.  Was thinking of using a two-step system, where choosing a game goes into a second menu with options to play, change settings, show recommended settings, enable cheats, etc.  Will need to experiment (may require separate solutions for touchscreen and touchless environments).  I'm happy to take suggestions.
- Intuitive way to bring up global app settings (such as crash reporting, change boxart URL, etc) from the main menu/ UI.

3) Per-game preferences
- Maybe use the CRCs in the preference IDs.

Yes, will require some experimentation.  May be useful to break up the settings according to where/how they are set.  E.g. video settings are only shown per game, where the defaults are different for each game (which we define somehow), and the user overrides video per game.  Hopefully few users actually ever need to override anything.  Video settings saved by appending CRC to the names of Android's built-in persistence files sounds good to me, was thinking the same.

Controller mappings - I mentioned this before, but I think it would best to restructure this a bit.  From a global menu, user defines various profiles.  Then the per-game setting is which profile to use.  But don't show the mapping screen itself from the per-game settings.

Display settings - Probably global settings only for now to keep it simple.  I suppose someone might want to change resolution for particularly heavy games, but I'm concerned that showing the same settings in both places could create confusion about what overrides what.

Crash logging, data paths, diagnostics, navigation mode (if we still need it) make global.  Audio I could go either way (global or game-specific or even both).

Dynarec definitely game-specific, again we always provide sane defaults.

Touchscreen - will need to think more on this.  Was thinking maybe have skins (profiles) that can be defined globally, like the mappings.  Then maybe have three global list preferences.  Select profile for d-pad games; select profile for analog games; select profile for d-pad+analog games.  Then the right "class" of skin can be selected automatically per-game (no more Pokemon d-pad complaints).  Allowing per-game overrides would still be nice though.

4) Screenshots on auto-save
- Determine lowest supported Android version.
- Research support for rooted earlier Android versions.
- Placeholder image to use when screenshots not possible.
- Handle black/ dark screenshots, so they are still visible in the UI (easiest would be to add a frame.. might also research way of programmatically detecting black/ dark screenshots).

Upstream screenshot function is hooked up now (see NativeExports.java) but doesn't seem to work at the moment (just produces black images).  Might not be too hard to get working, and may be easier than dealing with Android APIs.

5) Touchscreen virtual gamepad editor
- Look at other emulators that have this ability (mimic the best features, improve on any negative aspects).
- Ability to import custom button images.
- System for sharing layouts.

Yes.  Lots of ways to go here.  Not sure if we can just adapt the existing stuff or start fresh.  If we start fresh I suppose we could just use Android's built-in button widgets.  If we go that route, for early prototypes we could just recycle the drawable resources used by the input mapping activity.


For now I suppose the first thing I can do is get the coverart stuff back on track.  Pretty low hanging fruit I think since it's mostly done.  Then maybe I'll make a branch to test some of the per-game settings stuff, both the menus and the backing code.
2012 Nexus 7, rooted stock Lollipop
Samsung Galaxy Victory, rooted stock Jelly Bean
Xperia PLAY, stock Gingerbread
OUYA, retail version

Offline xperia64

  • Moderator
  • double
  • *****
  • Posts: 591
    • View Profile
    • My Apps
Re: Brainstorming Version 3.0
« Reply #65 on: November 30, 2013, 10:44:45 AM »
5) Touchscreen virtual gamepad editor
- Look at other emulators that have this ability (mimic the best features, improve on any negative aspects).
- Ability to import custom button images.
- System for sharing layouts.
I like the ones in MyBoy and DraStic. Maybe look at those as examples.

Offline littleguy

  • Moderator
  • double
  • *****
  • Posts: 1945
    • View Profile
Re: Brainstorming Version 3.0
« Reply #66 on: November 30, 2013, 10:15:36 PM »
Just committed some initial demo stuff for cover art.  Basically the stuff I was working on several months ago, many posts back.  I'll copy the comment I made on github:

Quote
Here's a crude initial demo of automatic cover art loading. There's a new item in the main menu for v3 concepts. Go to the gallery activity, tap (click) the menu, and tap refresh. It will appear to hang for a very long time (a few seconds per rom), but there's actually a background thread that's scanning for roms and then downloading coverart. Just let it go for a while and when it's done you'll see a gallery with all the detected roms and some cover art. It doesn't cache the files right now, so every time you re-enter this screen you'll have to refresh. It's just a proof of concept for now.

2012 Nexus 7, rooted stock Lollipop
Samsung Galaxy Victory, rooted stock Jelly Bean
Xperia PLAY, stock Gingerbread
OUYA, retail version

Offline xperia64

  • Moderator
  • double
  • *****
  • Posts: 591
    • View Profile
    • My Apps
Re: Brainstorming Version 3.0
« Reply #67 on: November 30, 2013, 11:31:41 PM »
I believe this was mentioned before but a cheat code editor is still needed. Maybe I'll look into that eventually.

Offline littleguy

  • Moderator
  • double
  • *****
  • Posts: 1945
    • View Profile
Re: Brainstorming Version 3.0
« Reply #68 on: December 01, 2013, 09:10:31 AM »
That would be great.  :)
2012 Nexus 7, rooted stock Lollipop
Samsung Galaxy Victory, rooted stock Jelly Bean
Xperia PLAY, stock Gingerbread
OUYA, retail version

Offline Mikhail

  • long
  • ***
  • Posts: 127
    • View Profile
Re: Brainstorming Version 3.0
« Reply #69 on: December 01, 2013, 11:58:57 AM »
DraStic is pretty but there's too much on screen for my liking, it's cluttered and requires scrolling to view other options, I'd prefer a button to jump to the next set of options on a new page.
For the drop down selectable radio options, how about changing them for switchable boxes like this, I forget their name

Offline xperia64

  • Moderator
  • double
  • *****
  • Posts: 591
    • View Profile
    • My Apps
Re: Brainstorming Version 3.0
« Reply #70 on: December 01, 2013, 12:12:31 PM »


Offline littleguy

  • Moderator
  • double
  • *****
  • Posts: 1945
    • View Profile
Re: Brainstorming Version 3.0
« Reply #71 on: December 01, 2013, 12:26:54 PM »
For the drop down selectable radio options, how about changing them for switchable boxes like this, I forget their name

Those are nice looking.  Though that would require a lot of extra code since those aren't a native type of widget.  The reason we've been using list preferences is that they are easy to use and just work on all android versions without any effort.
2012 Nexus 7, rooted stock Lollipop
Samsung Galaxy Victory, rooted stock Jelly Bean
Xperia PLAY, stock Gingerbread
OUYA, retail version

Offline littleguy

  • Moderator
  • double
  • *****
  • Posts: 1945
    • View Profile
Re: Brainstorming Version 3.0
« Reply #72 on: December 01, 2013, 12:30:01 PM »
I'm doing some major restructuring of the preference menus, separating the global and game-specific settings into separate PreferenceActivities.  Will make it much easier to tie the settings screens into the front-screen carousel or wherever we deem appropriate.  I should have something to show soon, depending on how much Christmas decorating I get dragged into  :P
2012 Nexus 7, rooted stock Lollipop
Samsung Galaxy Victory, rooted stock Jelly Bean
Xperia PLAY, stock Gingerbread
OUYA, retail version

Offline xperia64

  • Moderator
  • double
  • *****
  • Posts: 591
    • View Profile
    • My Apps
Re: Brainstorming Version 3.0
« Reply #73 on: December 01, 2013, 06:38:24 PM »

Offline littleguy

  • Moderator
  • double
  • *****
  • Posts: 1945
    • View Profile
Re: Brainstorming Version 3.0
« Reply #74 on: December 01, 2013, 08:52:35 PM »
Cool!  I know nothing about cheats but the interface looks nice :)

Not sure where you're saving the user's custom stuff, but be careful not to save it to <sdcard>/Android/data/paulscode..../ because that stuff gets overwritten sometimes after an update.
2012 Nexus 7, rooted stock Lollipop
Samsung Galaxy Victory, rooted stock Jelly Bean
Xperia PLAY, stock Gingerbread
OUYA, retail version