Homebrew Official Retroarch WiiU (wip.)

  • Thread starter Thread starter aliaspider
  • Start date Start date
  • Views Views 2,697,101
  • Replies Replies 15,203
  • Likes Likes 93
I got this error after the intro in "I have no mouth and i must scream" game
IMG-20171106-WA0000.jpg
 
  • Like
Reactions: ShadowOne333
I gotta say once overlays and touch code for cores is out of the way, it should really smooth out the waiting time for PSX.

Glad to see both things are still being worked on. Great effort guys. You all rock!
 
I gotta say once overlays and touch code for cores is out of the way, it should really smooth out the waiting time for PSX.

Glad to see both things are still being worked on. Great effort guys. You all rock!
Tbh I even prefer playing DOTT and Monkey Island with the touch pen over playing PSX games.
N64 is still a very relevant thing to me and I hope that is being worked on as soon as PSX is kind of stable.
 
  • Like
Reactions: ShadowOne333
How do I change the settings in retroarch so that I can play games with the gamepad?
It's default that gamepad is P1.
If not, delete your config again or head to Settings -> Input -> Input Player 1 -> Device -> Wii U Gamepad
 
I got this error after the intro in "I have no mouth and i must scream" game
View attachment 104927
It can be an endian issue ,i've read somewhere some compressed voices on a LE host can cause such issue on BE host .
did you have the voice files compressed (.cmp extension) or original (in .res extension)?
I can't access a wiiu until next monday so can't test,
but if you have cmp extension and own the game can you give it a try on wiiu and replace the voices files in cmp with the res one.
and see if the cause the problem.
 
I've look in at the ihnm found around , it seem the voiceX.cmp are compressed FLAC.
so I've look at the dep src again and realise that the libretro FLAC src are slighty different that the one found in mame. they use MSB_FIRST instead of WORDS_BIGENDIAN
So i added the -DMSB_FIRST flag.
It may fix your issue , please test again with this build.

https://filebin.net/6bojv91h0v5iuxzy
 
I've look in at the ihnm found around , it seem the voiceX.cmp are compressed FLAC.
so I've look at the dep src again and realise that the libretro FLAC src are slighty different that the one found in mame. they use MSB_FIRST instead of WORDS_BIGENDIAN
So i added the -DMSB_FIRST flag.
It may fix your issue , please test again with this build.

https://filebin.net/6bojv91h0v5iuxzy
Great, although I replaced the voices files for .res ones as you suggested and that made the trick.

Still interested in trying this new build as Broken Sword also support compressed audio (cmp) I want to test if smaller audio files help to improve audio emulation speed.
 
Last edited by cucholix,
  • Like
Reactions: lordelan
I've look in at the ihnm found around , it seem the voiceX.cmp are compressed FLAC.
so I've look at the dep src again and realise that the libretro FLAC src are slighty different that the one found in mame. they use MSB_FIRST instead of WORDS_BIGENDIAN
So i added the -DMSB_FIRST flag.
It may fix your issue , please test again with this build.

https://filebin.net/6bojv91h0v5iuxzy
It can load compressed audio files now, fixed Broken Sword compressed audio files not loading in your previous build too :)

Too bad the audio quality didn't improve :c, I guess it's the most you can get out Wii U CPU ¯\_(ツ)_/ ¯
 
Last edited by cucholix,
  • Like
Reactions: lordelan
IDK, I was just curious about it >.>
Strange enough Wii U CPU seems to handle MT32 emulation pretty well, so games that don't stutter the sound with standart audio emulation, will run MT32 smoothly (Sam&Max, Indiana Atlantis, Beneath a Steel Sky, The Dig, etc...)
 
Last edited by cucholix,
  • Like
Reactions: the_randomizer
Strange enough Wii U CPU seems to handle MT32 emulation pretty well, so games that don't stutter the sound with standart audio emulation, will run MT32 smoothly (Sam&Max Indiana Atlantis, Beneath s Steel Sky, The Dig, etc...)

How good is the MT-32 emulation though? People say it's good, and others say it's not so good. I can imagine The Dig sounding really amazing with it.
 
How good is the MT-32 emulation though? People say it's good, and others say it's not so good. I can imagine The Dig sounding really amazing with it.
In fact The Dig is oustanding with MT32, I guess it's matter of preferences and games, The Dig benefits from having eerie ambient music, others like Sam & Max sound a little too soft due the cartooney nature of the game people could prefer a more vivid sound and not a subtle one.
 
  • Like
Reactions: the_randomizer
In fact The Dig is oustanding with MT32, I guess it's matter of preferences and games, The Dig benefits from having eerie ambient music, others like Sam & Max sound a little too soft due the cartooney nature of the game people could prefer a more vivid sound and not a subtle one.

Can't seem to find any videos on The Dig running on the MT-32 using RetroArch, unfortunately, I'll have to take your word for it and try it later :P
 
@ploggy
Yes overlay partially working now on my own ( have problem with scaling with multiple overlay but single scale fine, and also with input overlay that not input for now)


Okay, that's weird. It worked fine with your testcore on my console; so I'll have to do some more investigation there. Is this also with the test core; or something else?

@QuarkTheAwesome , can you take a look at how pointer is deal for android .

it seem they store 2 values ptr one for normal x,y coord and other for fullscreen coord.
also they use an available function from video_driver.c to scale the ptr.

Code:
         struct video_viewport vp;
         float x = AMotionEvent_getX(event, motion_ptr);
         float y = AMotionEvent_getY(event, motion_ptr);

         vp.x                        = 0;
         vp.y                        = 0;
         vp.width                    = 0;
         vp.height                   = 0;
         vp.full_width               = 0;
         vp.full_height              = 0;

         video_driver_translate_coord_viewport_wrap(
               &vp,
               x, y,
               &android->pointer[motion_ptr].x,
               &android->pointer[motion_ptr].y,
               &android->pointer[motion_ptr].full_x,
               &android->pointer[motion_ptr].full_y);

from video_driver.h
#define video_driver_translate_coord_viewport_wrap(vp, mouse_x, mouse_y, res_x, res_y, res_screen_x, res_screen_y) \
   (video_driver_get_viewport_info(vp) ? video_driver_translate_coord_viewport(vp, mouse_x, mouse_y, res_x, res_y, res_screen_x, res_screen_y) : false)
from video_driver.c
/**
 * video_driver_translate_coord_viewport:
 * @mouse_x                        : Pointer X coordinate.
 * @mouse_y                        : Pointer Y coordinate.
 * @res_x                          : Scaled  X coordinate.
 * @res_y                          : Scaled  Y coordinate.
 * @res_screen_x                   : Scaled screen X coordinate.
 * @res_screen_y                   : Scaled screen Y coordinate.
 *
 * Translates pointer [X,Y] coordinates into scaled screen
 * coordinates based on viewport info.
 *
 * Returns: true (1) if successful, false if video driver doesn't support
 * viewport info.
 **/
bool video_driver_translate_coord_viewport(
      void *data,
      int mouse_x,           int mouse_y,
      int16_t *res_x,        int16_t *res_y,
      int16_t *res_screen_x, int16_t *res_screen_y)
{
   int scaled_screen_x, scaled_screen_y, scaled_x, scaled_y;
   struct video_viewport *vp = (struct video_viewport*)data;
   int norm_vp_width         = (int)vp->width;
   int norm_vp_height        = (int)vp->height;
   int norm_full_vp_width    = (int)vp->full_width;
   int norm_full_vp_height   = (int)vp->full_height;

   if (norm_full_vp_width <= 0 || norm_full_vp_height <= 0)
      return false;

   if (mouse_x >= 0 && mouse_x <= norm_full_vp_width)
      scaled_screen_x = ((2 * mouse_x * 0x7fff) / norm_full_vp_width)  - 0x7fff;
   else
      scaled_screen_x = -0x8000; /* OOB */

   if (mouse_y >= 0 && mouse_y <= norm_full_vp_height)
      scaled_screen_y = ((2 * mouse_y * 0x7fff) / norm_full_vp_height) - 0x7fff;
   else
      scaled_screen_y = -0x8000; /* OOB */

   mouse_x           -= vp->x;
   mouse_y           -= vp->y;

   if (mouse_x >= 0 && mouse_x <= norm_vp_width)
      scaled_x        = ((2 * mouse_x * 0x7fff) / norm_vp_width) - 0x7fff;
   else
      scaled_x        = -0x8000; /* OOB */

   if (mouse_y >= 0 && mouse_y <= norm_vp_height)
      scaled_y        = ((2 * mouse_y * 0x7fff) / norm_vp_height) - 0x7fff;
   else
      scaled_y        = -0x8000; /* OOB */

   *res_x             = scaled_x;
   *res_y             = scaled_y;
   *res_screen_x      = scaled_screen_x;
   *res_screen_y      = scaled_screen_y;

   return true;
}

is there any sense to use something like this for wiiu ?
(also adding 2 more axis for fullscreen value)

Code:
  struct video_viewport vp;
         float x = cal.x;
         float y = cal.y;

         vp.x                        = 0;
         vp.y                        = 0;
         vp.width                    = 0;
         vp.height                   = 0;
         vp.full_width               = 0;
         vp.full_height              = 0;

         video_driver_translate_coord_viewport_wrap(
               &vp,
               x, y,
               &analog_state[0][2][0],
               &analog_state[0][2][1],
               &analog_state[0][3][0], //for fullX
               &analog_state[0][3][1]); //for fullY

and then handle different cases for

Code:
      case RETRO_DEVICE_POINTER:
       ...
         break;
      case RARCH_DEVICE_POINTER_SCREEN:
      ....
 

Site & Scene News

Popular threads in this forum