Re: Games::Frozenbubble is on CPAN

[email protected] (Kartik Thakore)
Newsgroups perl.sdl.devel
Message-ID <[email protected]>
On Fri, May 07, 2010 at 04:07:17PM +0200, Guillaume Cottenceau wrote:
> >> I did a git rebase between your master and our redesign branch to make
> >> the new integration branch. And it has your commits
> >>
> >> http://github.com/kthakore/frozen-bubble/commits/integration?page=4
> >
> > I'll try to look at that soon!
> 
> My approach to reviewing: instead of reviewing each commit separately,
> which would make little sense because of the previous works in
> progress and because I don't know well the new API yet, I am trying to
> review a diff of the latest state of my git repository compared to
> yours. I can tell my observations when they make sense. Then I propose
> in a second step, I can try to run the game and check the features.
> Thanks!

Thanks
 
> Overally, it seems pretty good. Here are a few observations:
> 
> 
>     bin/frozen-bubble 0f86ce221a71d95474648e2442cf3187989b390b
> 
> 
> -$sdl_flags = SDL_ANYFORMAT | SDL_HWSURFACE | SDL_DOUBLEBUF |
> SDL_HWACCEL | SDL_ASYNCBLIT;
> +$sdl_flags = SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_HWACCEL | SDL_ASYNCBLIT;
> +$sdl_flags = SDL_SWSURFACE;

Good Catch! I have changed this.
 
> redefining looks suspicious
> 
> 
> -    $mixer = eval { SDL::Mixer->new(-frequency => 44100, -channels =>
> 2, -size => 1024); };
> +    eval {
> +            SDL::Mixer::open_audio( 22050, AUDIO_S16SYS, 2,1024);
> +                };
> 
> (indentation and spaces suck) I used to use 44100 as frequency; I know
> that was something already used by debian but I am not sure what it
> really brings. normally, 22khz music is audibly less nice than 44khz.
> do you have some sort of reproduceable problems fixed by that change? 
> 
> -           $sound{$_}->volume(80);
> +           $sound{$_}->volume(100);
> 
> I think it was 80 to properly balance music and sound effects volumes.
> Is that change really needed? Apparently initial previous change and
> this one is:
> 
> commit b251d7479f36064496bd889c4b35c6af2e5e5eeb
> Author: Kartik Thakore <[email protected]>
> Date:   Fri Oct 2 19:10:32 2009 -0400
> 
>     Applied sound distort diff from here
> http://fb-win32.sourceforge.net/sound.diff
> 
> diff --git a/frozen-bubble b/frozen-bubble
> index 8aa7c04..fae9d5b 100755
> --- a/frozen-bubble
> +++ b/frozen-bubble
> @@ -299,7 +299,7 @@ sub play_music($) {
>  }
> 
>  sub init_sound() {
> -    $mixer = eval { SDL::Mixer->new(-frequency => 44100, -channels =>
> 2, -size => 1024); };
> +    $mixer = eval { SDL::Mixer->new(-frequency => 22050, -channels =>
> 2, -size => 1024); };
>      if ($@) {
>         $@ =~ s| at \S+ line.*\n||;
>         print STDERR "\nWarning: can't initialize sound (reason: $@).\n";
> @@ -311,7 +311,7 @@ sub init_sound() {
>         my $sound_path = "$FPATH/snd/$_.ogg";
>         $sound{$_} = SDL::Sound->new($sound_path);
>         if (UNIVERSAL::isa($sound{$_}, 'HASH') ? $sound{$_}{-data} :
> ${$sound{$_}}) {
> -           $sound{$_}->volume(80);
> +           $sound{$_}->volume(100);
>         } else {
>             print STDERR "Warning, could not create new sound from
> '$sound_path'.\n";
>         }
> 
> But I'm still wondering if it's really needed. Anyone witnessed sound
> distortion? Or is it happening only on Windows? Would that be a bug
> specific to the Windows platform in SDL or mikmod?
>
I will work on this with FROGGS. Btw we converted the one mikmod file to OGG.
The *.xm one. The header for that file was giving us a lot of trouble. 
> 
> -       $save = SDL::Surface->new(-width => $image->width, -height =>
> $image->height, -depth => 32, -Amask => "0 but true");  #- grrr...
> this piece of shit of Amask made the surfaces slightly modify along
> the print/erase of "Hurry" and "Pause".... took me so much time to
> debug and find that the problem came from a bug when Amask is set to
> 0xFF000000 (while it's -supposed- to be set to 0xFF000000 with 32-bit
> graphics!!)
> -       $background->blit($drect, $save, $rects{$image});
> +       $save = SDL::Surface->new( SDL_ANYFORMAT, $image->w,
> $image->h, 32, 0 , 0, 0, 0);  #- grrr... this piece of shit of Amask
> made the surfaces slightly modify along the print/erase of "Hurry" and
> "Pause".... took me so much time to debug and find that the problem
> came from a bug when Amask is set to 0xFF000000 (while it's -supposed-
> to be set to 0xFF000000 with 32-bit graphics!!)
> +       SDL::Video::blit_surface($background, $drect, $save, $rects{$image});
> 
> my comment is probably outdated since "0 but true" for Amask
> disappeared? (did you test long-running Hurry/Pause overlay graphics
> and didn't notice any slight visual modification over time?)
Yes. But I think we should have indiviual tests for this stuff. Maybe
when we refactor. 
> 
> -    if ($app->ticks - $$ticks > 1000) {
> -        fb_net::gsend('p');
> -        $$ticks = $app->ticks;
> +    if (SDL::get_ticks() - $ticks > 1000) {
> +        Games::FrozenBubble::Net::gsend('p');
> +        $ticks = SDL::get_ticks();
> 
> changing $$ticks by $ticks modifies behaviour, was that really intended?
Yes. I don't know why you had the '$$' but it doesn't work like that.
The $ticks is now just an integer.
> 
> 
> +       printf("print_: " . join(' ', (caller(1))) . " $text\n");
>
> a debug statement I guess
You guessed it. 
> 
> +       SDL::Video::wm_set_icon(SDL::Video::load_BMP("$FPATH/gfx/pinguins/window_icon_penguin.png"));
> 
> load_"BMP" for a PNG looks strange
Icons can only be set with BMP on windows. We need to change that. I
will make a note of it to use a .bmp file for windows. 
http://sdlperl.ath.cx/projects/SDLPerl/ticket/135

> 
>          #- now crop (and use native RGBA ordering)
> -        my $replace = SDL::Surface->new(-width =>
> $canon{data}{$number}[2], -height => $canon{data}{$number}[3], -depth
> => 32);
> -        $canon{img}{$number}->set_alpha(0, 0);
> -        $canon{img}{$number}->blit(SDL::Rect->new('-x' =>
> $canon{data}{$number}[0], '-y' => $canon{data}{$number}[1],
> -                                                  -width =>
> $canon{data}{$number}[2], -height => $canon{data}{$number}[3]),
> $replace, undef);
> +        my $replace = SDL::Surface->new( SDL_SWSURFACE,
> $canon{data}{$number}[2],  $canon{data}{$number}[3], 32, 0xFF000000,
> 0xFF0000, 0xFF00, 0xFF);
> 
> does this still use native RGBA ordering (I see 0xFF00000 etc
> specifications)? that may be slower on some architectures (ppc) if
> it's not native
It should. Again tests might help here.
> 
>      foreach my $cursortype (keys %{$imgbin{menu_cursor}}) {
>          foreach my $img (@{$imgbin{menu_cursor}{$cursortype}}) {
> -            my $alpha = SDL::Surface->new(-width => $img->width,
> -height => $img->height, -depth => 32);
> -            $img->set_alpha(0, 0);  #- for RGBA->RGBA blits,
> SDL_SRCALPHA must be removed or destination alpha is preserved
> -            $img->blit(undef, $alpha, undef);
> -            fb_c_stuff::alphaize(surf($alpha));
> -            push @{$imgbin{menu_cursor}{"${cursortype}alpha"}}, $alpha;
> -            $img->set_alpha(SDL_SRCALPHA(), 0);
> +            #my $alpha = SDL::Surface->new( SDL_ANYFORMAT,  $img->w,
> $img->h,  32, 0,0,0,0);
> +            #SDL::Video::set_alpha($img, 0, SDL_ALPHA_OPAQUE);  #-
> for RGBA->RGBA blits, SDL_SRCALPHA must be removed or destination
> alpha is preserved
> +            #SDL::Video::blit_surface($img,
> SDL::Rect->new(0,0,$img->w,$img->h), $alpha,
> SDL::Rect->new(0,0,$img->w,$img->h));
> +            #Games::FrozenBubble::CStuff::alphaize($alpha);
> +            push @{$imgbin{menu_cursor}{"${cursortype}alpha"}}, $img; #$alpha;
> +            #SDL::Video::set_alpha($img, SDL_SRCALPHA, SDL_ALPHA_OPAQUE);
>          }
>      }
> 
> is that definitive? most of it is commented out.
Good catch I will change this. 
http://sdlperl.ath.cx/projects/SDLPerl/ticket/136
> 
>      #- the RGBA effects algorithms assume little endian RGBA surfaces
> -    my $replace = SDL::Surface->new(-width =>
> $imgbin{menu_logo}->width, -height => $imgbin{menu_logo}->height,
> -depth => 32);
> -    $imgbin{menu_logo}->set_alpha(0, 0);  #- for RGBA->RGBA blits,
> SDL_SRCALPHA must be removed or destination alpha is preserved
> -    $imgbin{menu_logo}->blit(undef, $replace, undef);
> -    $imgbin{menu_logo} = $replace;
> -    add_default_rect($replace);
> +    #my $replace = SDL::Surface->new( SDL_ANYFORMAT,
> $imgbin{menu_logo}->w,  $imgbin{menu_logo}->h, 32, 0, 0, 0, 0);
> +    #SDL::Video::set_alpha($imgbin{menu_logo}, 0, SDL_ALPHA_OPAQUE);
> #- for RGBA->RGBA blits, SDL_SRCALPHA must be removed or destination
> alpha is preserved
> +    #SDL::Video::blit_surface($imgbin{menu_logo},
> SDL::Rect->new(0,0,$imgbin{menu_logo}->w,$imgbin{menu_logo}->h),
> $replace, SDL::Rect->new(0,0,$imgbin{menu_logo}->w,$imgbin{menu_logo}->h));
> +    #$imgbin{menu_logo} = $imgbin{menu_logo}; #$replace;
> +    #add_default_rect($replace);
> 
> same
Added to ticket 136 
> 
> 
> -            my $tmp = SDL::Surface->new(-width =>
> $high_rect->width/4, -height => $high_rect->height/4,
> -                                        -depth => 32, -Amask => "0
> but true")->display_format;
> -            fb_c_stuff::shrink(surf($tmp),
> surf($background->display_format), 0, 0, rect($high_rect), 4);
> -            $tmp->blit(undef, $app, SDL::Rect->new(-x => $high_posx,
> '-y' => $high_posy));
> +           my $tmp =
> SDL::Video::display_format(SDL::Surface->new($high_rect->w/4,
> $high_rect->h/4, 32, 0, 0, 0, 0));
> +           #Games::FrozenBubble::CStuff::shrink($tmp,
> SDL::Video::display_format($background), 0, 0, $high_rect, 4);
> +            SDL::Video::blit_surface($tmp,
> SDL::Rect->new(0,0,$tmp->w,$tmp->h), $app, SDL::Rect->new($high_posx,
> $high_posy, $tmp->w, $tmp->h));
> 
> same - with shrinking disabled the highscores are probably broken?
No the highscores should work. Wait what branch are you on? Redesign?
This was changed later.
> 
> 
> -       if ($i) {
> -           print_('menu', $app, $MENUPOS{xpos_panel}, $ypos, $i,
> $imgbin{void_panel}->width, 'center');
> -       }
> -       $ypos += $lineheight;
> +               print_('menu', $app, $MENUPOS{xpos_panel}, $ypos, $i,
> $imgbin{void_panel}->w, 'center') if $i;
> +               $ypos += $lineheight;
> 
> I think it's better to stick with the old code style (even if it's
> probably not perfect) than mixing different code styles; in
> particular, I avoid veeeeeeeryyyyyyyy looooongggggg statements
> following by a very short conditional (if $i) because it's easy to
> miss the conditional. So please I think it's not good to make such
> modifications.

Good point. We should change this in the refactor or before.

> 
> 
> -       my $synchro_ticks = $app->ticks;
> -        if ($graphics_level > 1) {
> -            $draw_overlook->();
> -            $app->update(@update_rects);
> -            @update_rects = ();
> -        }
> -        $event->pump;
> -        while ($event->poll != 0) {
> +               my $synchro_ticks = SDL::get_ticks();
> +# commented out because otherwise we see only a white box instead of
> highlighted background image
> +#        if ($graphics_level > 1) {
> +#            $draw_overlook->();
> +#            SDL::Video::update_rects($app, @update_rects);
> +#            @update_rects = ();
> +#        }
> +        SDL::Events::pump_events();
> +        while (SDL::Events::poll_event($event) != 0) {
> 
> where do we stand, about that one? any fix along the way?
I don't understand the breakage here. Do we need this? I think this was
FROGGS fix.
> 
> -            if ($smg_status_messages[-$i] =~ /^<U+202B>/) {
> +            if ($smg_status_messages[-$i] =~ /^?/) {
>                  #- if text begins with unicode RTL direction, we also
> need to tell pango to align on the right
> 
> why was that changed? the "strange" character was here on purpose.
> have you tested in e.g. farsi?
No I didn't test farsi. Again FROGGS knows more about this.
> 
> http://www.fileformat.info/info/unicode/char/202B/index.htm
> 
> seems that change originates from:
> 
> commit cf36fb9b66c568c542445a813783488695afff13
> Author: Kartik Thakore <[email protected]>
> Date:   Thu Apr 1 21:17:27 2010 +0000
...
> 
> $$back -> $back behavorial change?
 Yup no more crazy referal things. 
> 
> I need to stop now; I'll try to review the other half soon!
> 
> 
> PS: Anyone tested the joysticks?
No don't have one. Please test it? 
> PS: can you add the already discussed warning about not being an
> official release, or something else with the same intent, on CPAN?
> search still produces
> http://search.cpan.org/~kthakore/Games-FrozenBubble-2.201/lib/Games/FrozenBubble.pm
> which seems unmodified so far

I have update the Games::FrozenBubble to 2.202 as you said. 

P.S.

Please join us on #sdl irc.perl.org it makes this much eaiser.

> 
> -- 
> Guillaume Cottenceau - http://zarb.org/~gc/

Peace,
Kartik
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.