Advertisement
Guest User

DaggerfallGetItems.pl

a guest
Jul 17th, 2011
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.83 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. my $buffer;
  4.  
  5. sub read_item
  6. {
  7.     my $buffer;
  8.     read(FALL, $buffer, 24);
  9.     my $name = $buffer;
  10.     $name =~ s/\x00//g;
  11.     read(FALL, $buffer, 4);
  12.     my $weight = unpack("L", $buffer);
  13.     read(FALL, $buffer, 2);
  14.     my $hitpoints = unpack("S", $buffer);
  15.     read(FALL, $buffer, 4);
  16.     my $capacity = unpack("L", $buffer);
  17.     read(FALL, $buffer, 4);
  18.     my $price = unpack("L", $buffer);
  19.     read(FALL, $buffer, 2);
  20.     my $enchant = unpack("S", $buffer);
  21.     read(FALL, $buffer, 3);
  22.     my @bytes = unpack("C*", $buffer);
  23.     my $unknown = join(", ", @bytes);
  24.     read(FALL, $buffer, 1);
  25.     my $jbits = unpack("B*", $buffer);
  26.     my @bits = split(//, $jbits);
  27.     my $blunt = $bits[3];
  28.     my $liquid = $bits[4];
  29.     my $onehanded = $bits[5];
  30.     my $ingredient = $bits[7];
  31.     read(FALL, $buffer, 2);
  32.     my @bytes = unpack("C*", $buffer);
  33.     my $worldid;
  34.     my $playerid;
  35.     my $worldtex;
  36.     my $playertex;
  37.     if ($bytes[0]>127) {
  38.         $worldid = $bytes[0]-128;
  39.         $worldtex = 2*$bytes[1]+1;
  40.     } else {
  41.         $worldid = $bytes[0];
  42.         $worldtex = 2*$bytes[1];
  43.     }
  44.     read(FALL, $buffer, 2);
  45.     my @bytes = unpack("C*", $buffer);
  46.     if ($bytes[0]>127) {
  47.         $playerid = $bytes[0]-128;
  48.         $playertex = 2*$bytes[1]+1;
  49.     } else {
  50.         $playerid = $bytes[0];
  51.         $playertex = 2*$bytes[1];
  52.     }
  53.     return "$name, $weight, $hitpoints, $capacity, $price, $enchant, $unknown, $blunt, $liquid, $onehanded, $ingredient, $worldid, $worldtex, $playerid, $playertex\n";
  54. }
  55.  
  56. my $fall = "FALL.EXE";
  57. open(FALL, "<$fall") or die "cannot open FALL.EXE";
  58. binmode(FALL);
  59. seek(FALL, 0x1b682a, 0);
  60.  
  61.  
  62. print "id, name, weight, hit points, target/capacity, base price, enchant points, unknown 1/unknown 2, unknown 3/variants, effect/slot, blunt weapon, liquid, one handed, ingredient, world image, world texture, player image, player texture\n";
  63. foreach my $i (1..288) {
  64.     print "$i, ";
  65.     print read_item;
  66. }
  67.  
  68. close(FALL);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement