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