diff -r 4cbf854ad095 -r edf56dca1587 hedgewars/uTeams.pas --- a/hedgewars/uTeams.pas Thu Sep 01 18:41:23 2005 +0000 +++ b/hedgewars/uTeams.pas Sat Sep 03 16:01:28 2005 +0000 @@ -50,7 +50,7 @@ visStepPos: LongWord; BotLevel : LongWord; // 0 - Human player end; - THHAmmo = array[0..cMaxSlot, 0..cMaxSlotAmmo] of TAmmo; + THHAmmo = array[0..cMaxSlotIndex, 0..cMaxSlotAmmoIndex] of TAmmo; TTeam = record Next: PTeam; Color: Cardinal; @@ -168,6 +168,19 @@ end; end; +procedure FillAmmoGroup(Ammo: PHHAmmo); +var mi: array[0..cMaxSlotIndex] of byte; + a: TAmmoType; +begin +FillChar(mi, sizeof(mi), 0); +for a:= Low(TAmmoType) to High(TAmmoType) do + begin + TryDo(mi[Ammoz[a].Slot] <= cMaxSlotAmmoIndex, 'Ammo slot overflow', true); + Ammo^[Ammoz[a].Slot, mi[Ammoz[a].Slot]]:= Ammoz[a].Ammo; + inc(mi[Ammoz[a].Slot]) + end; +end; + procedure InitTeams; var p: PTeam; i: integer; @@ -175,20 +188,13 @@ p:= TeamsList; while p <> nil do begin + FillAmmoGroup(@p.Ammos[0]); for i:= 0 to cMaxHHIndex do if p.Hedgehogs[i].Gear <> nil then begin - p.Ammos[i][0, 0]:= Ammoz[amGrenade].Ammo; - p.Ammos[i][0, 1]:= Ammoz[amUFO].Ammo; - p.Ammos[i][1, 0]:= Ammoz[amBazooka].Ammo; - p.Ammos[i][2, 0]:= Ammoz[amShotgun].Ammo; - p.Ammos[i][3, 0]:= Ammoz[amPickHammer].Ammo; - p.Ammos[i][3, 1]:= Ammoz[amRope].Ammo; - p.Ammos[i][4, 0]:= Ammoz[amSkip].Ammo; p.Hedgehogs[i].Gear.Health:= 100; - p.Hedgehogs[i].Ammo:= @p.Ammos[0] - {0 - общее на всех оружие, i - у каждого своё - можно группировать ёжиков, чтобы у каждой группы было своё оружие} + p.Hedgehogs[i].Ammo:= @p.Ammos[0] // 0 means all hedgehogs + // will have common set of ammo end; p:= p.Next end; @@ -203,7 +209,7 @@ if Ammo[CurSlot, CurAmmo].Count = 0 then begin CurAmmo:= 0; - while (CurAmmo <= cMaxSlotAmmo) and (Ammo[CurSlot, CurAmmo].Count = 0) do inc(CurAmmo) + while (CurAmmo <= cMaxSlotAmmoIndex) and (Ammo[CurSlot, CurAmmo].Count = 0) do inc(CurAmmo) end; with Ammo[CurSlot, CurAmmo] do @@ -234,7 +240,7 @@ repeat b:= false; ami:= 0; - while (not b) and (ami < cMaxSlotAmmo) do + while (not b) and (ami < cMaxSlotAmmoIndex) do if (Ammo[slot, ami].Count = 0) and (Ammo[slot, ami + 1].Count > 0) then b:= true else inc(ami);