Seite: 1 [2] >> |
Autor |
Mitteilung |
|
verfasst am: 30.06.2008, 21:32
|
Registrierdatum: 30.11.2007, 21:58
Beiträge: 165
|
wel i dont get german so i can't look in other forums but how do weapons and armor work? |
|
verfasst am: 30.06.2008, 22:45
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Basically the weapon needs a piercing strenght higher than the armor value to do any damage at all. Depending on how much higher the piercing value is above the armor value, a greater percentage of the damage is substracted from the hitpoints of the target. |
|
verfasst am: 01.07.2008, 11:00
|
Registrierdatum: 30.11.2007, 21:58
Beiträge: 165
|
and what is the formula? |
|
verfasst am: 01.07.2008, 16:18
|
Programming
Registrierdatum: 01.07.2008, 07:53
Beiträge: 109
|
|
|
verfasst am: 01.07.2008, 16:39
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
yes and no - the problem is that the formula alone is not enough to calculate the damage. I would have posted it above if it was that simple.
You also need to know the armor value of each object the projectile had pierced before - and the armor of an alien and the alien itself are two different objects to be damaged and possible pierced. |
|
verfasst am: 01.07.2008, 17:06
|
Programmierer, allgemeines
Registrierdatum: 06.06.2004, 17:19
Beiträge: 3186
|
function TISOObject.PenetrateObject(Power: Integer): Boolean;
begin
result:=true;
if GetSchadensTyp=stGlobal then
exit;
inc(fResistance,Power);
result:=fResistance<fPower;
if not result then
Explode;
end;
function TGameFigure.DoTreffer(ISOObject: TObject): boolean;
var
Dummy : Integer;
Fig : TGameFigure;
Treffer : TTrefferParameter;
IStatus : Integer;
OffSets : TPoint;
begin
Assert(ISOObject is TISOObject,'TGameFigure.DoTreffer: Object ist kein gültiges ISOObject');
result:=false;
if (fManager=nil) or fDead then
exit;
// Schaden an der Panzerung verursachen (bisher nur theoretisch
//fManager.DamagePanzer(TISOObject(ISOObject).GetDamagePoints);
// Objekt ist an der Panzerung abgeprallt (bzw. Verringerung der Durchschlagskraft, falls Panzerung durchdrungen wird)
if (GetTrefferZone(ISOObject)=tzHeadLeft) or (GetTrefferZone(ISOObject)=tzHeadRight) or (GetTrefferZone(ISOObject)=tzHeadFront) or (GetTrefferZone(ISOObject)=tzHeadBack) then
if not TISOObject(ISOObject).PenetrateObject(fManager.ArmHead) then
exit;
if (GetTrefferZone(ISOObject)=tzTorsoLeft) or (GetTrefferZone(ISOObject)=tzTorsoRight) or (GetTrefferZone(ISOObject)=tzTorsoFront) or (GetTrefferZone(ISOObject)=tzTorsoBack) then
if not TISOObject(ISOObject).PenetrateObject(fManager.ArmTorso) then
exit;
if (GetTrefferZone(ISOObject)=tzFootLeft) or (GetTrefferZone(ISOObject)=tzFootRight) or (GetTrefferZone(ISOObject)=tzFootFront) or (GetTrefferZone(ISOObject)=tzFootBack) then
if not TISOObject(ISOObject).PenetrateObject(fManager.ArmLegs) then
exit;
Treffer.Strength:=random(10)+(TISOObject(ISOObject).GetDamagePoints-10 );
Treffer.Zone:=GetTrefferZone(ISOObject);
result:=fManager.DoTreffer(Treffer);
// Natürlichen Widerstand der Einheit berücksichtigen (verringert nur den Schaden
// bei nachfolgenden Einheiten)
TISOObject(ISOObject).PenetrateObject(10);
if (fEinsatzKI<>nil) then
TUnitKI(fEinsatzKI).DoTreffer(TISOObject(ISOObject).Figure);
...
function TGameFigureManager.DoTreffer(var Treffer: TTrefferParameter): boolean;
const
SchadensWerte: Array[TTrefferZone] of Double = (
{tzNone} 0.0,
{tzGlobal} 1.0,
{tzHeadLeft} 1.3,
{tzHeadRight} 1.3,
{tzHeadFront} 1.6,
{tzHeadBack} 1.2,
{tzTorsoLeft} 1.0,
{tzTorsoRight} 1.0,
{tzTorsoFront} 0.9,
{tzTorsoBack} 1.1,
{tzFootLeft} 1.1,
{tzFootRight} 1.1,
{tzFootFront} 1.1,
{tzFootBack} 1.1);
var
Schaden : Integer;
Abwehr : double;
begin
{$IFDEF NOTREFFER}
result:=false;
exit;
{$ENDIF}
(* if Treffer.Power>0 then
{$IFDEF EXTERNALFORMULARS}
Abwehr:=formular_utils_SolveFormular('CalcAbwehr',['Angriff','Panzer', 'Power'],[Treffer.Strength,Panzer,Treffer.Power])
{$ELSE}
Abwehr:=Treffer.Strength*(Panzer/Treffer.Power)
{$ENDIF}
else
Abwehr:=Treffer.Strength;*)
Schaden:=max(0,round(Treffer.Strength*SchadensWerte[Treffer.Zone]));
// Schaden in der Trefferzone berechnen
Treffer.SchadenAbs:=min(Gesundheit,Schaden);
ChangeGesundheit(-Schaden);
result:=fGesundheit<=0;
end; |
|
verfasst am: 22.12.2021, 05:45
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 22.12.2021, 05:45
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 22.12.2021, 05:46
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 22.12.2021, 05:46
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 22.12.2021, 05:47
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 22.12.2021, 05:47
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 22.12.2021, 05:47
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 22.12.2021, 05:47
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 22.12.2021, 05:48
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 22.12.2021, 05:48
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 22.12.2021, 05:48
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 22.12.2021, 05:49
|
Registrierdatum: 22.12.2021, 05:40
Beiträge: 15
|
|
|
verfasst am: 30.12.2021, 11:28
|
Registrierdatum: 22.12.2021, 05:54
Beiträge: 14
|
|
|
verfasst am: 09.03.2022, 08:10
|
Registrierdatum: 19.05.2021, 09:13
Beiträge: 42
|
|
Seite: 1 [2] >> |