0b17b07aca12eb5dd00c7a83877dafab8da0a492
[perl/schtarr.git] / Data-StarCraft / lib / Data / StarCraft / Tileset.pm
1 package Data::StarCraft::Tileset;
2
3 use strict;
4 use warnings;
5 use Data::Dumper;
6
7 sub open {
8         my ($class, $filename) = @_;
9         my $self = bless {}, $class;
10         open my $groupfile, '<', "$filename.cv5" or return;
11         $self->readgroups($groupfile);
12         # vf4 = minitile type
13         # vr4 = minitile sprites
14         # vx4 = minitile map?
15         return $self;
16 }
17
18 sub _read {
19         my $self = shift;
20         my ($fh, $size, $seek) = @_;
21         seek $fh, $seek, 0 if $seek;
22         read($fh, my $in, $size) eq $size or return undef;
23         return $in;
24 }
25
26 sub readgroups {
27         my $self = shift;
28         my ($fh) = @_;
29         my $id = 0;
30         my @tilemap;
31         while (defined (my $line = $self->_read($fh, 52))) {
32                 my @data = unpack "vCC v24", $line;
33                 my %row = (
34                         build => $data[1] & 0xF0,
35                         height => $data[2] & 0xF,
36                         walk => undef,
37                 );
38                 $self->{group}->[$id] = \%row;
39                 push @tilemap, $_ for @data[11..26];
40                 $id++;
41         }
42         $self->{tile} = \@tilemap;
43         return;
44         # index (ground_height unknown4 buildable unknown3) u6 u7 u8 u9 u10 u11 u12 u13
45         # 1 (ground_height unknown4 buildable unknown3) 35 0 doodad_group 0 58 6 6 0
46 }
47
48 1;
49