/usr/share/perl5/Games/PangZero/PlaybackGame.pm is in pangzero 1.4-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | ##########################################################################
package Games::PangZero::PlaybackGame;
##########################################################################
@ISA = qw(Games::PangZero::PanicGame);
use strict;
use warnings;
sub new {
my ($class, $numGuys, $difficultyLevel, $record, $rand, $messages) = @_;
my $self = Games::PangZero::PanicGame->new();
%{$self} = (%{$self},
'record' => $record,
'rand' => $rand,
'messages' => $messages,
);
bless $self, $class;
$self->InitPlayback($numGuys);
Games::PangZero::Config::SetDifficultyLevel($difficultyLevel);
return $self;
}
sub InitPlayback {
my ($self, $numGuys) = @_;
$self->{recordpointer} = 0;
$self->{randpointer} = 0;
$self->{oldnumguys} = $Games::PangZero::NumGuys;
$self->{olddifficultylevel} = $Games::PangZero::DifficultyLevelIndex;
$Games::PangZero::NumGuys = $numGuys;
for (my $i=0; $i < $numGuys; ++$i) {
$Games::PangZero::Players[$i]->{oldkeys} = $Games::PangZero::Players[$i]->{keys};
$Games::PangZero::Players[$i]->{keys} = [ "DLEFT$i", "DRIGHT$i", "DFIRE$i" ];
}
}
sub RestoreGameSettings {
my $self = shift;
for (my $i=0; $i < $Games::PangZero::NumGuys; ++$i) {
$Games::PangZero::Players[$i]->{keys} = $Games::PangZero::Players[$i]->{oldkeys};
delete $Games::PangZero::Players[$i]->{oldkeys};
}
$Games::PangZero::NumGuys = $self->{oldnumguys};
Games::PangZero::Config::SetDifficultyLevel($self->{olddifficultylevel});
}
sub CalculateAdvances {
my $self = shift;
return length($self->{record}) if $self->{skip};
return $self->SUPER::CalculateAdvances() * ($Games::PangZero::Keys{::SDLK_f()} ? 15 : 1);
}
sub Rand {
my $self = shift;
my $result = $self->{rand}->[$self->{randpointer}];
++$self->{randpointer};
return $result;
}
sub PreAdvanceAction {
my $self = shift;
my ($record, $keys);
for (my $i=0; $i < $Games::PangZero::NumGuys; ++$i) {
$record = substr($self->{record}, $self->{recordpointer}++, 1);
$keys = $Games::PangZero::Players[$i]->{keys};
$Games::PangZero::Keys{$keys->[0]} = $record & 1;
$Games::PangZero::Keys{$keys->[1]} = $record & 2;
$Games::PangZero::Events{$keys->[2]} = $record & 4;
$Games::PangZero::GameEvents{superkill} = 1 if $Games::PangZero::NumGuys == 1 and $record & 8;
}
$self->{abortgame} = 1 if $self->{recordpointer} >= length $self->{record};
if ($self->{messages}) {
my $message = $self->{messages}->{$self->{recordpointer}};
$self->DisplayMessage($message) if $message;
}
}
sub DisplayMessage {
my ($self, $message) = @_;
my ($len, $adv) = (0, 0);
my $x = ( $Games::PangZero::PhysicalScreenWidth - &Games::PangZero::Graphics::TextWidth($message) ) / 2;
my $y = $Games::PangZero::PhysicalScreenHeight / 2;
$self->DrawGame();
while (1) {
Games::PangZero::HandleEvents();
return if $self->{abortgame};
my $advance = $self->CalculateAdvances();
$adv += $advance;
$len = int($adv / 5);
SDLx::SFont::print_text( $Games::PangZero::App,$x, $y, substr($message, 0, $len) );
$Games::PangZero::App->sync();
last if $len > length($message) + 15;
}
SDL::Video::blit_surface($Games::PangZero::Background, SDL::Rect->new(0, $y, $Games::PangZero::PhysicalScreenWidth, $y, 40), $Games::PangZero::App, SDL::Rect->new(0, $y, $Games::PangZero::App->w, $Games::PangZero::App->h));
}
1;
|