Advertisement
Guest User

utils.pas lmp2map

a guest
Jan 19th, 2013
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.52 KB | None | 0 0
  1. unit utils;
  2.  
  3. interface
  4.  
  5. type
  6.   SArray = array of string;
  7.  
  8. function CollideN(X1, Y1: Integer; Width1, Height1: Word;
  9.                  X2, Y2: Integer; Width2, Height2: Word): Boolean;
  10. function Collide(X1, Y1: Integer; Width1, Height1: Word;
  11.                  X2, Y2: Integer; Width2, Height2: Word): Boolean;
  12. function parse(s: string): SArray;
  13. procedure ProcessResourceStr(ResourceStr: string; FileName, SectionName,
  14.                              ResourceName: PString);
  15. function tostr(i: Integer): string;
  16. procedure unpack(Buf: Pointer; Len: Integer; OutBuf: Pointer);
  17. function GetPanel(OldType: Byte): Word;
  18. function GetItem(OldType: Byte): Byte;
  19. function GetMonster(OldType: Byte): Byte;
  20. function GetArea(OldType: Byte): Byte;
  21. function GetTrigger(OldType: Byte): Byte;
  22. function GetBlockName(t: SmallInt): string;
  23. function Min(a, b: Integer): Integer;
  24.  
  25. implementation
  26.  
  27. uses
  28.   d2ddef, MAPDEF, MAP, windows;
  29.  
  30. function CollideN(X1, Y1: Integer; Width1, Height1: Word;
  31.                  X2, Y2: Integer; Width2, Height2: Word): Boolean;
  32. begin
  33.  Result := not (((Y1 + Height1 < Y2) or
  34.                 (Y1           > Y2 + Height2)) or
  35.                 ((X1 + Width1 < X2) or
  36.                 (X1           > X2 + Width2)));
  37. end;
  38.  
  39. function Collide(X1, Y1: Integer; Width1, Height1: Word;
  40.                  X2, Y2: Integer; Width2, Height2: Word): Boolean;
  41. begin
  42.  Result := not (((Y1 + Height1 <= Y2) or
  43.                 (Y1           >= Y2 + Height2)) or
  44.                 ((X1 + Width1 <= X2) or
  45.                 (X1           >= X2 + Width2)));
  46. end;
  47.  
  48. function parse(s: string): SArray;
  49. var
  50.   a: Integer;
  51. begin
  52.  Result := nil;
  53.  if s = '' then Exit;
  54.  
  55.  while s <> '' do
  56.  begin
  57.   for a := 1 to Length(s) do
  58.    if (s[a] = ',') or (a = Length(s)) then
  59.    begin
  60.     SetLength(Result, Length(Result)+1);
  61.  
  62.     if s[a] = ',' then Result[High(Result)] := Copy(s, 1, a-1)
  63.      else Result[High(Result)] := s;
  64.  
  65.     Delete(s, 1, a);
  66.     Break;
  67.    end;
  68.  end;
  69. end;
  70.  
  71.  
  72. procedure ProcessResourceStr(ResourceStr: string; FileName, SectionName,
  73.                              ResourceName: PString);
  74. var
  75.   a, i, l1, l2: Integer;
  76. begin
  77.  for i := Length(ResourceStr) downto 1 do
  78.   if ResourceStr[i] = ':' then Break;
  79.  
  80.  if FileName <> nil then
  81.  begin
  82.   FileName^ := Copy(ResourceStr, 1, i-1);
  83.   l1 := Length(FileName^);
  84.  end else l1 := 0;
  85.  
  86.  for a := i+1 to Length(ResourceStr) do
  87.   if ResourceStr[a] = '\' then Break;
  88.  
  89.  if ResourceName <> nil then
  90.  begin
  91.   ResourceName^ := Copy(ResourceStr, a+1, Length(ResourceStr)-Abs(a));
  92.   l2 := Length(ResourceName^);
  93.  end else l2 := 0;
  94.  
  95.  if SectionName <> nil then
  96.   SectionName^ := Copy(ResourceStr, i+1, Length(ResourceStr)-l2-l1-2);
  97. end;
  98.  
  99. function tostr(i: Integer): string;
  100. begin
  101.  Str(i, Result);
  102. end;
  103.  
  104. procedure unpack(Buf: Pointer; Len: Integer; OutBuf: Pointer);
  105. type
  106.   ByteArray = array[0..1] of Byte;
  107.   PByteArray = ^ByteArray;
  108.  
  109. var
  110.   p, o: Word;
  111.   l, n: SmallInt;
  112. begin
  113.  o := 0;
  114.  p := 0;
  115.  l := Len;
  116.  {$R-}
  117.  while l > 0 do
  118.  begin
  119.   if PByteArray(Buf)^[p] = 255 then
  120.   begin
  121.    p := p+1;
  122.    CopyMemory(@n, Pointer(Integer(Buf)+p), 2);
  123.    p := p+2;
  124.    FillMemory(Pointer(Integer(OutBuf)+o), n, PByteArray(Buf)^[p]);
  125.    o := o+n;
  126.    l := l-3;
  127.   end
  128.    else
  129.   begin
  130.    PByteArray(OutBuf)^[o] := PByteArray(Buf)^[p];
  131.    o := o+1;
  132.   end;
  133.  
  134.   p := p+1;
  135.   l := l-1;
  136.  end;
  137.  {$R+}
  138. end;
  139.  
  140. function Min(a, b: Integer): Integer;
  141. begin
  142.  if a < b then Result := a else Result := b;
  143. end;
  144.  
  145. function GetPanel(OldType: Byte): Word;
  146. begin
  147.  case OldType of
  148.   W_CLEAR: Result := PANEL_BACK;
  149.   W_WALL: Result := PANEL_WALL;
  150.   W_STEP: Result := PANEL_STEP;
  151.   W_WATER: Result := PANEL_WATER;
  152.   W_CLOSEDDOOR: Result := PANEL_CLOSEDOOR;
  153.   W_OPENEDDOOR: Result := PANEL_OPENDOOR;
  154.   W_ACID1: Result := PANEL_ACID1;
  155.   W_ACID2: Result := PANEL_ACID2;
  156.   W_BLOCKMON: Result := PANEL_BLOCKMON;
  157.   W_LIFTUP: Result := PANEL_LIFTUP;
  158.   W_LIFTDOWN: Result := PANEL_LIFTDOWN;
  159.   else Result := PANEL_NONE;
  160.  end;
  161. end;
  162.  
  163. function GetItem(OldType: Byte): Byte;
  164. begin
  165.  case OldType of
  166.   TH_CLIP: Result := ITEM_AMMO_BULLETS;
  167.   TH_SHEL: Result := ITEM_AMMO_SHELLS;
  168.   TH_ROCKET: Result := ITEM_AMMO_ROCKET;
  169.   TH_CELL: Result := ITEM_AMMO_CELL;
  170.   TH_AMMO: Result := ITEM_AMMO_BULLETS_BOX;
  171.   TH_SBOX: Result := ITEM_AMMO_SHELLS_BOX;
  172.   TH_RBOX: Result := ITEM_AMMO_ROCKET_BOX;
  173.   TH_CELP: Result := ITEM_AMMO_CELL_BIG;
  174.   TH_STIM: Result := ITEM_MEDKIT_SMALL;
  175.   TH_MEDI: Result := ITEM_MEDKIT_LARGE;
  176.   TH_BPACK: Result := ITEM_AMMO_BACKPACK;
  177.   TH_CSAW: Result := ITEM_WEAPON_SAW;
  178.   TH_SGUN: Result := ITEM_WEAPON_SHOTGUN1;
  179.   TH_SGUN2: Result := ITEM_WEAPON_SHOTGUN2;
  180.   TH_MGUN: Result := ITEM_WEAPON_CHAINGUN;
  181.   TH_LAUN: Result := ITEM_WEAPON_ROCKETLAUNCHER;
  182.   TH_PLAS: Result := ITEM_WEAPON_PLASMA;
  183.   TH_BFG: Result := ITEM_WEAPON_BFG;
  184.   TH_ARM1: Result := ITEM_ARMOR_GREEN;
  185.   TH_ARM2: Result := ITEM_ARMOR_BLUE;
  186.   TH_MEGA: Result := ITEM_SPHERE_WHITE;
  187.   TH_INVL: Result := ITEM_INV;
  188.   TH_AQUA: Result := ITEM_OXYGEN;
  189.   TH_RKEY: Result := ITEM_KEY_RED;
  190.   TH_GKEY: Result := ITEM_KEY_GREEN;
  191.   TH_BKEY: Result := ITEM_KEY_BLUE;
  192.   TH_SUIT: Result := ITEM_SUIT;
  193.   TH_SUPER: Result := ITEM_SPHERE_BLUE;
  194.   TH_GUN2: Result := ITEM_WEAPON_SUPERPULEMET;
  195.   else Result := ITEM_NONE;
  196.  end;
  197. end;
  198.  
  199. function GetMonster(OldType: Byte): Byte;
  200. begin
  201.  case OldType of
  202.   TH_DEMON:  Result := MONSTER_DEMON;
  203.   TH_IMP:    Result := MONSTER_IMP;
  204.   TH_ZOMBY:  Result := MONSTER_ZOMBY;
  205.   TH_SERG:   Result := MONSTER_SERG;
  206.   TH_CYBER:  Result := MONSTER_CYBER;
  207.   TH_CGUN:   Result := MONSTER_CGUN;
  208.   TH_BARON:  Result := MONSTER_BARON;
  209.   TH_KNIGHT: Result := MONSTER_KNIGHT;
  210.   TH_CACO:   Result := MONSTER_CACO;
  211.   TH_SOUL:   Result := MONSTER_SOUL;
  212.   TH_PAIN:   Result := MONSTER_PAIN;
  213.   TH_SPIDER: Result := MONSTER_SPIDER;
  214.   TH_BSP:    Result := MONSTER_BSP;
  215.   TH_MANCUB: Result := MONSTER_MANCUB;
  216.   TH_SKEL:   Result := MONSTER_SKEL;
  217.   TH_VILE:   Result := MONSTER_VILE;
  218.   TH_FISH:   Result := MONSTER_FISH;
  219.   TH_BARREL: Result := MONSTER_BARREL;
  220.   TH_ROBO:   Result := MONSTER_ROBO;
  221.   TH_MAN:    Result := MONSTER_MAN;
  222.   else Result := MONSTER_NONE;
  223.  end;
  224. end;
  225.  
  226. function GetArea(OldType: Byte): Byte;
  227. begin
  228.  case OldType of
  229.   TH_PLR1: Result := AREA_PLAYERPOINT1;
  230.   TH_PLR2: Result := AREA_PLAYERPOINT2;
  231.   TH_DMSTART: Result := AREA_DMPOINT;
  232.   else Result := AREA_NONE;
  233.  end;
  234. end;
  235.  
  236. function GetTrigger(OldType: Byte): Byte;
  237. begin
  238.  case OldType of
  239.   SW_EXIT: Result := TRIGGER_EXIT;
  240.   SW_EXITS: Result := TRIGGER_EXIT;
  241.   SW_OPENDOOR: Result := TRIGGER_OPENDOOR;
  242.   SW_SHUTDOOR: Result := TRIGGER_CLOSEDOOR;
  243.   SW_SHUTTRAP: Result := TRIGGER_CLOSETRAP;
  244.   SW_DOOR: Result := TRIGGER_DOOR;
  245.   SW_DOOR5: Result := TRIGGER_DOOR5;
  246.   SW_PRESS: Result := TRIGGER_PRESS;
  247.   SW_TELE: Result := TRIGGER_TELEPORT;
  248.   SW_SECRET: Result := TRIGGER_SECRET;
  249.   SW_LIFTUP: Result := TRIGGER_LIFTUP;
  250.   SW_LIFTDOWN: Result := TRIGGER_LIFTDOWN;
  251.   SW_TRAP: Result := TRIGGER_TRAP;
  252.   SW_LIFT: Result := TRIGGER_LIFT;
  253.   else Result := TRIGGER_NONE;
  254.  end;
  255. end;
  256.  
  257. function GetBlockName(t: SmallInt): string;
  258. begin
  259.  case t of
  260.   MB_COMMENT:   Result := 'MB_COMMENT';
  261.   MB_END:       Result := 'MB_END';
  262.   MB_WALLNAMES: Result := 'MB_WALLNAMES';
  263.   MB_BACK:      Result := 'MB_BACK';
  264.   MB_WTYPE:     Result := 'MB_WTYPE';
  265.   MB_FRONT:     Result := 'MB_FRONT';
  266.   MB_THING:     Result := 'MB_THING';
  267.   MB_SWITCH:    Result := 'MB_SWITCH';
  268.   MB_MUSIC:     Result := 'MB_MUSIC';
  269.   MB_SKY:       Result := 'MB_SKY';
  270.   MB_SWITCH2:   Result := 'MB_SWITCH2';
  271.   MB__UNKNOWN:  Result := 'MB__UNKNOWN';
  272.   else Result := '';
  273.  end;
  274. end;
  275.  
  276. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement