#From $From_D2s to $To_D2s: #- Added 99 to all skills use warnings; use strict; # my $From_D2s = 'my_c.d2s'; my $To_D2s = 'my_d.d2s'; # my ($Letter_change) = $To_D2s =~ m#my_([a-z]).d2s#; #Open for reading the original D2S file. open(my ${f1}, '<', $From_D2s) or die $!; sysseek(${f1}, 767, 0); sysread(${f1}, my $s, 400); my $skill_loc = index($s, 'if'); #print $skill_loc, "\n"; #40 $skill_loc += 767; sysseek(${f1}, 0, 0); #First calculate checksum my $c = 0; #checksum my $loc = 0; while(sysread(${f1}, my $s, 1)){ my ($byte) = unpack('C', $s); if($loc == 12 || $loc == 13 || $loc == 14 || $loc == 15){ $byte = 0; } elsif($loc == 23){ #my_d $byte = ord($Letter_change); } elsif($loc >= $skill_loc + 2 && $loc < $skill_loc + 32){ $byte = 99; } if($c < 0){ $byte++; } $c = $byte + $c * 2; undef $byte; ($c) = unpack('l', pack('l', $c)); $loc++; } #Now create my_b.d2s with the new checksum and new name. $loc = 0; sysseek(${f1}, 0, 0); open(my ${f2}, '>', $To_D2s) or die $!; while(sysread(${f1}, my $s, 1)){ if($loc == 12){ #insert the checksum. syswrite(${f2}, pack('L', $c), 4); $loc++; next; } elsif($loc == 13 || $loc == 14 || $loc == 15){ $loc++; next; } elsif($loc == 23){ #insert the name. syswrite(${f2}, $Letter_change, 1); $loc++; next; } elsif($loc >= $skill_loc + 2 && $loc < $skill_loc + 32){ syswrite(${f2}, pack('C', 99), 1); $loc++; next; } syswrite(${f2}, $s, 1); $loc++; } undef $loc; undef $c; close ${f1}; close ${f2}; print <