program TS203modfix; uses crt, dos; var fileok:boolean; procedure cntin; var pause: char; begin writeln; writeln('Press any key to continue.'); repeat until keypressed; pause:=ReadKey(); end; {cntin} procedure checkdat; var f:file; buffer:array[1..12] of byte; check:array[1..12] of byte; teller,status:integer; actual:word; begin assign(f,ParamStr(1)); {$I-} reset(f,1); status:=IOResult; if status<>0 then begin writeln(); writeln('Error opening "',ParamStr(1),'"'); fileok:=false; end else begin check[1] := 217; check[2] := 86; check[3] := 87; check[4] := 139; check[5] := 242; check[6] := 141; check[7] := 76; check[8] := 36; check[9] := 24; check[10] := 232; check[11] := 89; check[12] := 86; seek(f,480425); blockread (f,buffer,12,actual); for teller:=1 to 12 do Begin if check[teller]<>buffer[teller] then fileok:=false; end; close(f); {$I+} end; end; Procedure hackdat; type hack = record offset : integer; value : byte; end; var f:file; data:array [1..39] of hack; teller,status:integer; actual:word; begin write('Patching...'); assign(f,ParamStr(1)); {$I-} reset(f,1); status:=IOResult; if status<>0 then begin writeln(); writeln('Error opening "',ParamStr(1),'"'); fileok:=false; end else begin data[1].offset := 480416 ; data[1].value :=51; data[2].offset := 480417 ; data[2].value :=192; data[3].offset := 480418 ; data[3].value :=131; data[4].offset := 480419 ; data[4].value :=255; data[5].offset := 480420 ; data[5].value :=1; data[6].offset := 480421 ; data[6].value :=117; data[7].offset := 480422 ; data[7].value :=1; data[8].offset := 480423 ; data[8].value :=64; data[9].offset := 480424 ; data[9].value :=195; data[10].offset := 480996 ; data[10].value :=59; data[11].offset := 480997 ; data[11].value :=5; data[12].offset := 480998 ; data[12].value :=0; data[13].offset := 480999 ; data[13].value :=26; data[14].offset := 481000 ; data[14].value :=113; data[15].offset := 481001 ; data[15].value :=0; data[16].offset := 481002 ; data[16].value :=15; data[17].offset := 481003 ; data[17].value :=133; data[18].offset := 481004 ; data[18].value :=159; data[19].offset := 481005 ; data[19].value :=0; data[20].offset := 481006 ; data[20].value :=0; data[21].offset := 481007 ; data[21].value :=0; data[22].offset := 481008 ; data[22].value :=144; data[23].offset := 481009 ; data[23].value :=144; data[24].offset := 481167 ; data[24].value :=59; data[25].offset := 481168 ; data[25].value :=199; data[26].offset := 481169 ; data[26].value :=15; data[27].offset := 481170 ; data[27].value :=133; data[28].offset := 481171 ; data[28].value :=89; data[29].offset := 481172 ; data[29].value :=255; data[30].offset := 481173 ; data[30].value :=255; data[31].offset := 481174 ; data[31].value :=255; data[32].offset := 481175 ; data[32].value :=163; data[33].offset := 481176 ; data[33].value :=0; data[34].offset := 481177 ; data[34].value :=26; data[35].offset := 481178 ; data[35].value :=113; data[36].offset := 481179 ; data[36].value :=0; data[37].offset := 481180 ; data[37].value :=235; data[38].offset := 481181 ; data[38].value :=14; data[39].offset := 702717 ; data[39].value :=3; for teller:=1 to 39 do Begin seek(f,data[teller].offset); blockwrite(f,data[teller].value,1,actual); end; close(f); {$I+} writeln(' Done'); end; end; {hackdat} begin writeln('Tiberian Sun 2.03 mod patch Written by Nyerguds'); writeln('---------------------------'); writeln(); fileok:=true; if ParamCount = 0 then writeln('Drop a TS 2.03 exe file onto this program to patch it.') else begin checkdat; if fileok<>true then writeln('This is not a valid TS 2.03 exe file!') else hackdat; end; cntin; end.