Jump to content
SubSpace Forum Network

I'm looking for all Clients, Servers Billers that have been made.


Recommended Posts

Posted

Hello all,

 

Looking for a list of all things SUBSPACE.

 

Particularity anything that can actually be used to play Subspace.

 

So there are the classics

Subspace 1.34

Subspace 1.35

Continuum  (anyone know what versions can still play the game)

 

So if you have a combination that works let me know

Something like subgame1 and subspace 1.32 that would be great.

 

Or Discretion and Subiller2 etc

 

 

Any Help and knowledge is greatly appreciated.

 

2ndary info like chat clients or bots that can work with specific versions

 

...Axe

 

.

 

 

Posted

You will find that almost all servers will not allow earlier clients to play. IIRC they can enter spec though as can subspace clients if the player is given access to do so.

Posted

i control the horizontal and the vertical don't be alarmed.

 

What i'm looking for is what combinations work.

 

Ie i'll run the servers what i'm interested is in what clients work with what billers.  I'm not worried about continuum restrictions.

 

Its time to move away from a continuum only viewpoint.

 

the more i dig the more fun stuff i find.

 

For Example in programming and using other stuff more options arise.

 

I much prefer Subspace to continuum  its much smoother to play but i will say continuum chat is good but its time to improve and move beyond it.

Thus taking bits from everything and moving forward.

 

So back to the original post.  Specific answers are best.  ie Subspace 1.31 doesn't work with subiller2 etc

 

If you want to play orginal subspace just log into SSDZ KAOS South.  and you can fly to your hearts content probably even without the cd crack :)

 

 

 

 

 

...Axe


Ship 9 indeed :) 

give me some time and you'll see it one way or the other.

 

..Axe

  • 1 month later...
Posted

Don't fear innovation Dr Brain even those type of programs can be used for good :)

 

Just because SS didn't fear memory locations that were out in the open doesn't make them bad.

 

Feel free to send me any programs that work.  I'm still looking for more old copies of billers and version that work with them.

 

 

 

 

...Axe

  • 2 weeks later...
Posted

Old twister source code:

 

unit submain; 


{ 
+--------------------------------------------------------------------+ 
|           CyberWare Subspace Twister v.1.34.2, main module         | 
|       Copyright (c) 1998 CyberWare, Inc. All Rights Reserved.      | 
|                                                                    | 
|                 -= Written by Alex // cyberware =-                 | 
|                                                                    | 
|          subspace cheat impelemtations submain.pas v1.34.2         | 
|                                                                    | 
|    author: voice +7 (095) 550-3599; e-mail: sage386@hotmail.com    | 
|--------------------------------------------------------------------| 
| Compile this source using: dcc32 subcheat.dpr        | 04-Nov-1998 | 
+--------------------------------------------------------------------+ 
} 


interface 


uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
  StdCtrls, syncobjs, registry; 


{$I subcheat.inc} 


type 
  TCheatForm = class(TForm) 
    Label1: TLabel; 
    Label2: TLabel; 
    Memo1: TMemo; 
    procedure FormCreate(Sender: TObject); 
    procedure FormClose(Sender: TObject; var Action: TCloseAction); 
  private 
    param, cheat: string; 
    paramv: integer; 
    locations: TStringList; 
    safe: TCriticalSection; 
    FEquip: longint;            // ship equipment table; 
    FTable: longint; 


    { Private declarations } 
    procedure WMCheat(var Msg: TMessage); message WM_CHEAT; 


    procedure ExecuteCheat; 


    function GetShipBase: integer; 


    function GetShipX: integer; 
    function GetShipY: integer; 
    procedure SetShipX(value: integer); 
    procedure SetShipY(value: integer); 
    function GetShipShape: integer; 
    procedure SetShipShape(value: integer); 
    procedure SetSupervisor; 
    procedure SetFlag; 
    procedure SetFlaggerWeaponsUpgrade; 
    procedure RequestGreen; 
    procedure SetupKillMultiplier; 
    procedure UnlimitedWeapons; 
    procedure Unban; 


    procedure SaveLocation; 
    procedure RestoreLocation; 
    procedure JumpRelative; 
    procedure JumpToMap; 
    procedure ChangeShip; 


    // NEW: access to ship equipment 
    function GetShipEquip(index: integer): integer; 
    procedure SetShipEquip(index, value: integer); 
    procedure FillEquip; 
    procedure GetIndexMinMax(index: integer; var aMin, aMax: integer); 
    procedure EquipLoad; 


  public 
    { Public declarations } 
    property ShipX: integer read GetShipX write SetShipX; 
    property ShipY: integer read GetShipY write SetShipY; 
    property ShipShape: integer read GetShipShape write SetShipShape; 
    property ShipEquip[index: integer]: integer read GetShipEquip write SetShipEquip; 
  end; 


var 
  CheatForm: TCheatForm; 


procedure RegisterCallback; external 'SUBKEYS'; 
procedure UnregisterCallback; external 'SUBKEYS'; 


implementation 


{$R *.DFM} 


var 
   StartupInfo: TStartupInfo; 
   ProcessInfo: TProcessInformation; 
   bloaded: integer; 


function Min(const a, b: longint): longint; register; assembler; 
asm 
  cmp eax, edx; jl @@1; mov eax, edx; @@1: 
end; 


function Max(const a, b: longint): longint; register; assembler; 
asm 
  cmp eax, edx; jg @@1; mov eax, edx; @@1: 
end; 


function TCheatForm.GetShipBase: integer; 
var 
   addr1, addr2: integer; 
begin 
  if (not ReadProcessMemory(ProcessInfo.hProcess, ptr($47C278), @addr1, 4, bloaded)) or 
     (not ReadProcessMemory(ProcessInfo.hProcess, ptr($4AC768), @addr2, 4, bloaded)) or 
     (addr1 <> addr2) then abort; 
  result := addr1; 
end; 


function TCheatForm.GetShipX: integer; 
begin 
  if not ReadProcessMemory(ProcessInfo.hProcess, 
    ptr(GetShipBase + $96), @result, 4, bloaded) then abort; 
end; 


function TCheatForm.GetShipY: integer; 
begin 
  if not ReadProcessMemory(ProcessInfo.hProcess, 
    ptr(GetShipBase + $96 + 4), @result, 4, bloaded) then abort; 
end; 


function TCheatForm.GetShipShape: integer; 
var 
   a: byte; 
begin 
  if not ReadProcessMemory(ProcessInfo.hProcess, 
    ptr(GetShipBase + $56), @a, 1, bloaded) then abort; 
  result := a; 
end; 


procedure TCheatForm.SetShipX(value: integer); 
begin 
  value := max(0, min(value, $FA0000)); 
  if not WriteProcessMemory(ProcessInfo.hProcess, 
    ptr(GetShipBase + $96), @value, 4, bloaded) then abort; 
end; 


procedure TCheatForm.SetShipY(value: integer); 
begin 
  value := max(0, min(value, $FA0000)); 
  if not WriteProcessMemory(ProcessInfo.hProcess, 
    ptr(GetShipBase + $96 + 4), @value, 4, bloaded) then abort; 
end; 


procedure TCheatForm.SetShipShape(value: integer); 
begin 
  value := max(1, min(value, 9)) - 1; 
  if not WriteProcessMemory(ProcessInfo.hProcess, 
    ptr(GetShipBase + $56), @value, 1, bloaded) then abort; 
end; 


// saves current ship location to the 'param' slot 
procedure TCheatForm.SaveLocation; 
begin 
  if param = '' then begin 
    // save to file 
    Locations.SaveToFile('subcheat.loc'); 
  end else begin 
    // save to slot 
    Locations.Values[param] := '$' + IntToHex(ShipX, 8) + '$' + IntToHex(ShipY, 8); 
  end; 
end; 


procedure TCheatForm.SetupKillMultiplier; 
type 
  KillerRecord = packed record 
    opcode: byte; 
    value: longint; 
    nops: word; 
  end; 
const 
  DefaultCode1: array[1..7] of byte = ($0F, $BF, $15, $32, $DD, $47, $00); 
  KillersCode1: KillerRecord =  
    (opcode:$BA; value: 0; nops:$9090); 


  DefaultCode2: array[1..7] of byte = ($0F, $BF, $05, $32, $DD, $47, $00); 
  KillersCode2: KillerRecord =  
    (opcode:$B8; value: 0; nops:$9090); 
var 
   ptr1, ptr2: pointer; 
begin 
  if param = '' then 
    begin 
      // restore default flagger kill multiplier behavior 
      ptr1 := @DefaultCode1; 
      ptr2 := @DefaultCode2; 
    end  
  else 
    begin 
      // setup new behaviour 
      KillersCode1.value := max(1, min(10000000, StrToInt(param))); 
      KillersCode2.value := KillersCode1.value; 
      ptr1 := @KillersCode1; 
      ptr2 := @KillersCode2; 
    end; 
  WriteProcessMemory(ProcessInfo.hProcess, ptr($416C5B), ptr1, sizeof(DefaultCode1), bloaded); 
  WriteProcessMemory(ProcessInfo.hProcess, ptr($416C6F), ptr2, sizeof(DefaultCode1), bloaded); 
end; 


procedure TCheatForm.SetSupervisor; 
var 
  value: integer; 
begin 
  value := StrToInt(param); 
  if not WriteProcessMemory(ProcessInfo.hProcess, ptr($4B2174), @value, 4, bloaded) 
    then abort; 
end; 


// setup virtual flag, so each kill 
procedure TCheatForm.SetFlag; 
begin 
  WriteProcessMemory(ProcessInfo.hProcess, 
    ptr(GetShipBase + $66), @paramv, 4, bloaded); // Flags; 


  if paramv > 0 then SetFlaggerWeaponsUpgrade; 
end; 


procedure TCheatForm.RequestGreen; 
const 
  DefaultCode: array[1..6] of byte = ($8B, $52, $0C, $8B, $01, $52); 
  FakeCode:    array[1..6] of byte = ($8B, $01, $6A, $7F, $90, $90); 


 function check(const lex: string): boolean; 
 // return true if current param string matches specified lexem 
 var 
   len, i: integer; 
 begin 
   result := false; 
   len := min(length(param), length(lex)); 
   for i := 1 to len do if param[i] <> lex[i] then exit; 
   result := true; 
 end; 


begin 
  if param = '' then 
    begin 
      // restore default green codeflow 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($42EFB5), 
         @DefaultCode, sizeof(DefaultCode), bloaded);       
    end 
  else 
    begin 
      // setup requested green 
      try 
        FakeCode[4] := max(1, min($1C, StrToInt(param))); 
      except 
        param := Uppercase(param); 
        if check('PORTAL')     then FakeCode[4] := 28 else 
        if check('ROCKET')     then FakeCode[4] := 27 else 
        if check('BRICK')      then FakeCode[4] := 26 else 
        if check('WALL')       then FakeCode[4] := 26 else 
        if check('MULTIPRIZE') then FakeCode[4] := 25 else 
        if check('PRIZE')      then FakeCode[4] := 25 else 
        if check('THOR')       then FakeCode[4] := 24 else 
        if check('DECOY')      then FakeCode[4] := 23 else 
        if check('BURST')      then FakeCode[4] := 22 else 
        if check('REPELLER')   then FakeCode[4] := 21 else 
        if check('ANTIWARP')   then FakeCode[4] := 20 else 
        if check('SHRAPNEL')   then FakeCode[4] := 19 else 
        if check('SHIELDS')    then FakeCode[4] := 18 else 
        if check('SUPERPOWER') then FakeCode[4] := 17 else 
        if check('PROXIMITY')  then FakeCode[4] := 16 else 
        if check('MULTIFIRE')  then FakeCode[4] := 15 else 
        if check('FIRE')       then FakeCode[4] := 15 else 
        if check('SHUTDOWN')   then FakeCode[4] := 14 else 
        if check('RECHARGE')   then FakeCode[4] := 13 else 
        if check('FULLCHARGE') then FakeCode[4] := 13 else 
        if check('SPEED')      then FakeCode[4] := 12 else 
        if check('TOPSPEED')   then FakeCode[4] := 12 else 
        if check('THRUSTERS')  then FakeCode[4] := 11 else 
        if check('BOUNCING')   then FakeCode[4] := 10 else 
        if check('BOMBS')      then FakeCode[4] := 09 else 
        if check('GUNS')       then FakeCode[4] := 08 else 
        if check('WARP')       then FakeCode[4] := 07 else 
        if check('RADAR')      then FakeCode[4] := 06 else 
        if check('CLOACK')     then FakeCode[4] := 05 else 
        if check('STEALTH')    then FakeCode[4] := 04 else 
        if check('ROTATION')   then FakeCode[4] := 03 else 
        if check('ENERGY')     then FakeCode[4] := 02 else 
        if check('MAXENERGY')  then FakeCode[4] := 02 else 
        if check('RATE')       then FakeCode[4] := 01 else 
        if check('CHARGERATE') then FakeCode[4] := 01 else exit; 
      end; 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($42EFB5), 
         @FakeCode, sizeof(FakeCode), bloaded); 
    end; 
end; 


// change flagger bombs upgrade flag 
procedure TCheatForm.SetFlaggerWeaponsUpgrade; 
const 
  IncEDX: byte = $42; 
  IncECX: byte = $41; 
  TheNOP: byte = $90; 
var 
  aptr: pointer; 
begin 
  aptr := @TheNOP; 


  // bombs 
  if paramv = 0 then aptr := @IncEDX; 
  WriteProcessMemory(ProcessInfo.hProcess, ptr($41101B), aptr, 1, bloaded); 


  // bullets 
  if paramv = 0 then aptr := @IncECX; 
  WriteProcessMemory(ProcessInfo.hProcess, ptr($410D8F), aptr, 1, bloaded); 
end; 


// restores ship position from the 'param' slot 
procedure TCheatForm.RestoreLocation; 
begin 
  if param = '' then begin 
    // load from file 
    Locations.Clear; 
    Locations.LoadFromFile('subcheat.loc'); 
  end else begin 
    param := Locations.Values[param]; 
    ShipX := StrToInt(copy(param, 1, 9)); 
    ShipY := StrToInt(copy(param, 10, 9)); 
  end; 
end; 


procedure TCheatForm.JumpRelative; 
var 
   delta: integer; 
begin 
  if length(param) < 2 then abort; 
  delta := StrToInt(copy(param, 2, 255)) * 65535; 
  case upcase(param[1]) of 
   'U','N': ShipY := ShipY - delta;   // up, north 
   'L','W': ShipX := ShipX - delta;   // left, west 
   'R','E': ShipX := ShipX + delta;   // right, east 
   'D','S': ShipY := ShipY + delta;   // down, south 
  end; 
end; 


procedure TCheatForm.JumpToMap; 
var 
   x, y: integer; 
begin 
  if length(param) < 2 then abort; 
  x := min(19, max(0, byte(upcase(param[1])) - ord('A'))); 
  y := min(19, max(0, StrToInt(copy(param, 2, 255)) - 1)); 
  ShipX := x * 819200 + 409600; 
  ShipY := y * 819200 + 409600; 
end; 


procedure TCheatForm.ChangeShip; 
begin 
  ShipShape := StrToInt(param); 
end; 


procedure TCheatForm.ExecuteCheat; 
begin 
 try 
   safe.Enter; 
   try 
     param := copy(cheat, 2, 255); 
     case upcase(cheat[1]) of 
       'S': SaveLocation;       // stores current ship location 
       'R': RestoreLocation;    // restores ship location 
       '0'..'9': begin          // quick position restore 
          param := cheat[1]; 
          RestoreLocation; 
        end; 
       'J': JumpRelative;       // relative jump 
       'M': JumpToMap;          // absolute jump by map coordinates 
       'C': ChangeShip;         // change ship 
       'V': SetSupervisor;      // setup supervisor mode 
       'E': EquipLoad;          // full load equipment; 
       'G': RequestGreen; // request next green to be.... 
       'K': SetupKillMultiplier; 
       'U': UnlimitedWeapons;   // Set or clear unlimited thors, walls etc.. 
       'B': Unban; 
     end; 
   finally 
     Safe.Leave; 
   end; 
   MessageBeep(-1); 
 except 
   // oops, an error encountered 
   MessageBeep(MB_ICONEXCLAMATION); 
 end; 
end; 


procedure TCheatForm.UnlimitedWeapons; 
const 
  SuperPower: word = $FB2B; 
  SuperEnergy: word = $D12B; 
  TheNop: word = $9090; 
  DecESI: byte = $4E; 
  DecEBX: byte = $4B; 
begin 
  if (param = '') or (StrToInt(param) = 0) then 
    begin 
      // restore default flow 


      // thors 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($412413), @DecESI, 1, bloaded); 
      // decoys 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($412370), @DecESI, 1, bloaded); 
      // burst 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($4123A9), @DecESI, 1, bloaded); 
      // repels 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($4123DF), @DecESI, 1, bloaded); 
      // rockets 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($411A31), @DecESI, 1, bloaded); 
      // walls 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($4119C5), @DecESI, 1, bloaded); 
      // portals 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($411FB7), @DecEBX, 1, bloaded); 


      // super power 
      //WriteProcessMemory(ProcessInfo.hProcess, ptr($42D1B8), @SuperPower, 2, bloaded); 
      // shields power 
      //WriteProcessMemory(ProcessInfo.hProcess, ptr($42D177), @SuperPower, 2, bloaded); 
      // energy level 
      //WriteProcessMemory(ProcessInfo.hProcess, ptr($412542), @SuperEnergy, 2, bloaded); 
    end 
  else 
    begin 
      // setup unlimited weapon config 


      // thors 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($412413), @TheNOP, 1, bloaded); 
      // decoys 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($412370), @TheNOP, 1, bloaded); 
      // burst 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($4123A9), @TheNOP, 1, bloaded); 
      // repels 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($4123DF), @TheNOP, 1, bloaded); 
      // rockets 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($411A31), @TheNOP, 1, bloaded); 
      // walls 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($4119C5), @TheNOP, 1, bloaded); 
      // portals 
      WriteProcessMemory(ProcessInfo.hProcess, ptr($411FB7), @TheNOP, 1, bloaded); 


      // super power 
      //WriteProcessMemory(ProcessInfo.hProcess, ptr($42D1B8), @TheNop, 2, bloaded); 
      // shields power 
      //WriteProcessMemory(ProcessInfo.hProcess, ptr($42D177), @TheNop, 2, bloaded); 
      // energy 
      //WriteProcessMemory(ProcessInfo.hProcess, ptr($412542), @TheNop, 2, bloaded); 
    end; 
end; 


procedure TCheatForm.Unban; 
var 
  Reg: TRegistry; 
  d1, d2: integer; 
begin 
  reg := TRegistry.Create; 
  try 
    reg.RootKey := HKEY_LOCAL_MACHINE; 
    if reg.OpenKey('Software', false) then 
      begin 
        Randomize; 
        d1 := Random(maxint); 
        d2 := Random(maxint); 
        reg.WriteInteger('D1', d1); 
        reg.WriteInteger('D2', d2); 
        reg.CloseKey; 
      end; 
    // randomize values in memory 
    WriteProcessMemory(ProcessInfo.hProcess, ptr($4AFF38), @d1, 4, bloaded); 
    WriteProcessMemory(ProcessInfo.hProcess, ptr($4AFBA0), @d2, 4, bloaded); 
  finally 
    reg.Free; 
  end; 
end; 


procedure TCheatForm.WMCheat; 
begin 
  case Msg.wParam of 
    // execute entered chear sequence 
    VK_RETURN: if length(cheat) > 0 then begin 
      ExecuteCheat; 
      cheat := ''; 
    end; 
    // abort current cheat sequence 
    VK_ESCAPE, VK_CHEAT: begin 
      MessageBeep(MB_ICONEXCLAMATION); 
      cheat := ''; 
    end; 
    VK_BACK: begin 
      if length(cheat) > 0 then cheat := copy(cheat, 1, pred(length(cheat))); 
    end; 
    VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN, VK_SHIFT, VK_TAB: exit; 
    // ordinal; chanarters, store into cheat string 
    else if length(cheat) < 255 then begin 
      cheat := cheat + char(Msg.wParam); 
      MessageBeep(-1); 
    end; 
  end; 
end; 


procedure TCheatForm.FormCreate(Sender: TObject); 
//var 
//  wnd: hWND; 
begin 
  cheat := ''; 
  CheatForm.Caption := CHEAT_WINDOW; 
  application.Title := CHEAT_WINDOW; 
  Locations := TStringList.Create; 
  safe := TCriticalSection.Create; 


  FillChar(StartupInfo, sizeof(StartupInfo), 0); 
  StartupInfo.cb := sizeof(StartupInfo); 


 { wnd := FindWindow(nil, SUBSPACE_WINDOW); 
  if dword(wnd) <> 0 then 
    begin 
      // 'Please close subspace and run SUBCHEAT.EXE instead' 
    end else 
 } 
  if CreateProcess(nil, 'subspace.exe', 
    nil, nil, false, 0, nil, nil, StartupInfo, ProcessInfo) then begin 
      RegisterCallback; 
    end; 


  //Label1.Caption := IntToHex(ProcessInfo.hProcess, 8); 
end; 


procedure TCheatForm.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
  UnregisterCallback; 
  Locations.Free; 
  safe.Free; 
end; 




// NEW 
procedure TCheatForm.FillEquip; 
begin 
  ReadProcessMemory(ProcessInfo.hProcess, ptr(GetShipBase + $92), @FTable, 4, bloaded); 
  ReadProcessMemory(ProcessInfo.hProcess, ptr(FTable + $04), @FEquip, 4, bloaded); 
end; 


function TCheatForm.GetShipEquip(index: integer): integer; 
var 
  FEquipXor: integer; 
begin 
  FillEquip; 
  ReadProcessMemory(ProcessInfo.hProcess, ptr(FTable + $0c), @FEquipXor, 4, bloaded); 
  ReadProcessMemory(ProcessInfo.hProcess, ptr(FEquip + index), @result, 4, bloaded); 
  result := result xor FEquipXor; 
end; 


procedure TCheatForm.SetShipEquip(index, value: integer); 
var 
  FEquipXor: integer; 
begin 
  FillEquip; 
  ReadProcessMemory(ProcessInfo.hProcess, ptr(FTable + $0c), @FEquipXor, 4, bloaded); 
  value := value xor FEquipXor; 
  WriteProcessMemory(ProcessInfo.hProcess, ptr(FEquip + index), @value, 4, bloaded); 
end; 


procedure TCheatForm.GetIndexMinMax(index: integer; var aMin, aMax: integer); 
var 
   shp, minadr, maxadr: integer; 
begin 
  aMin := 0; aMax := 0; 
  case index of 
    $74: begin 
           minadr := $47D864; 
           maxadr := $47d85a; 
         end; 
    $7c: begin 
           minadr := $47D85e; 
           maxadr := $47d854; 
         end; 
    $80: begin 
           minadr := $47D860; 
           maxadr := $47d856; 
         end; 
    $84: begin               
           minadr := $47D862; 
           maxadr := $47d858; 
         end; 
    else exit; 
  end; 
  shp := ShipShape * 9 * 16; 
  ReadProcessMemory(ProcessInfo.hProcess, ptr(minadr + shp), @amin, 2, bloaded); 
  ReadProcessMemory(ProcessInfo.hProcess, ptr(maxadr + shp), @amax, 2, bloaded); 
end; 


procedure TCheatForm.EquipLoad; 
  procedure _gun(val: integer); 
  begin 
    ShipEquip[$38] := max(0, min(val, 3));  // Guns; 
    ShipEquip[$24] := byte(val > 0);        // multifire bullets 
  end; 
  procedure _bombs(val: integer);       // Mines/Bombs; 
  var 
     exists: integer; 
  begin 
    val := max(0, min(val, 3)); 
    exists := byte(val > 0); 
    ShipEquip[$4C] := exists; 
    ShipEquip[$2C] := exists; 
    ShipEquip[$3C] := val; 
  end; 
  procedure _recharger;  // Recharge level, Thrusters, Speed, Rotation -- to max; 
  var 
    exists, temp: integer; 
  begin 
    GetIndexMinMax($74, exists, temp); 
    ShipEquip[$74] := temp; 
    GetIndexMinMax($7C, exists, temp); 
    ShipEquip[$7C] := temp; 
    GetIndexMinMax($80, exists, temp); 
    ShipEquip[$80] := temp; 
    GetIndexMinMax($84, exists, temp); 
    ShipEquip[$84] := temp; 
  end; 
  procedure _fullload; 
  begin 
    ShipEquip[$58] := 2;    // Burst;   + 
    ShipEquip[$64] := 2;    // Repels;  + 
    ShipEquip[$70] := 2;    // Decoys;  + 
    ShipEquip[$68] := 2;    // Thors;   + 
    ShipEquip[$5C] := 2;    // Walls;   + 
    ShipEquip[$60] := 2;    // Rockets; + 
    ShipEquip[$6C] := 2;    // Portals; + 
    _gun(3); 
    _bombs(3); 
    _recharger; 
    ShipEquip[$50] := 10000; 
    ShipEquip[$28] := 1;    // Bouncing bullets (amount) 
    ShipEquip[$14] := 1;    // Steath; 
    ShipEquip[$20] := 1;    // Cloak; 
    ShipEquip[$1C] := 1;    // Xradar; 
    ShipEquip[$18] := 1;    // Antiwarp; 
  end; 
begin 
  if param = '' then _fullLoad else begin 


  if length(param) < 2 then abort; 
  paramv := StrToInt(copy(param, 2, 255)); 


  case upcase(param[1]) of 
    'A': ShipEquip[$18] := max(0, min(1, paramv));    // Antiwarp; 
    'B': ShipEquip[$58] := paramv;                    // Burst; 
    'C': ShipEquip[$20] := max(0, min(1, paramv));    // Cloak; 
    'D': ShipEquip[$70] := paramv;                    // Decoys; 
    'E': ShipEquip[$78] := paramv * 1000;             // Energy Level; 
    'F': SetFlag; 
    'G': _gun(paramv); 
    'H': ShipEquip[$14] := max(0, min(1, paramv));    // Steath; 
    'I': _Recharger; 
  //'J': 
    'K': ShipEquip[$60] := paramv;                    // Rockets; 
    'L': ShipEquip[$50] := paramv;                    // Shields; 
    'M': _bombs(paramv); 
    'N': ShipEquip[$40] := paramv;                    // Shrapnel amount; 
    'O': ShipEquip[$28] := paramv;                    // Bouncing bullets (amount) 
    'P': ShipEquip[$6C] := paramv;                    // Portals; 
  //'Q': 
    'R': ShipEquip[$64] := paramv;                    // Repels; 
  //'S': 
    'T': ShipEquip[$68] := paramv;                    // Thors; 
    'U': ShipEquip[$48] := paramv;                    // Super time; 
  //'V': 
    'W': ShipEquip[$5C] := paramv;                    // Walls; 
    'X': ShipEquip[$1C] := max(0, min(1, paramv));    // Xradar; 
    'Y': ShipEquip[$34] := paramv;                    // Bounty; 
    'Z': SetFlaggerWeaponsUpgrade; 
  end; 


  end; 
end; 


end.
  • 1 month later...
Posted

I might be able to entertain you if you feel something is missing, I tend to store everything so depending on your purpose I might be inclined to look it up for you; what exactly did you manage to collect thus far?

 

Seek and you shall find, or at least one might hope so; I am still looking for a player from a long long time ago - The Serpent Mage. I have even forgotten the zone I attented, it was (one of?) Balle the Nalle's zones. In case anyone has contact information, I would still like to get into touch with TSM (even after all these years).

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...