Forum

ASSIST, AMERICA'S ARMY COMMUNITY - RELIVE THE GLORY DAYS OF AMERICA'S ARMY 2.5

Poll

Do you think that the SAI should be implemented in 2.5?

Yes
1654 (83.7%)
No
322 (16.3%)

Total Members Voted: 57

Author Topic: SAI Mod  (Read 37436 times)

0 Members and 1 Guest are viewing this topic.

Offline ELiZ

Re: SAI Mod
« Reply #15 on: Monday, April 22, 2013, 07:41:10 AM »
Reason I asked of the current state of your SAi was that I have done some further work on the Byteconverter of the uscripts of 2.8.5 and should have complete access to the 2.8.5 SAI related stuff.

Offline KARI-30

Re: SAI Mod
« Reply #16 on: Monday, April 22, 2013, 09:58:00 AM »
Personally I would love the game to stay as it is now. Why modding the 2.5 version. You really want the game to look like BF3 or COD or other games with that nonsense radar? Might aswell put the enemy locations in it :D

AAO has always been about realism. The realism of the radar = 0.
« Last Edit: Monday, April 22, 2013, 10:01:34 AM by KARI-30 »

Offline Spanky

  • <?php echo $opinion .' is better.'; ?>
  • Administrator
  • Posts like a Spanky!
  • *
  • Posts: 10,893
    • View Profile
    • NatesComp.com
  • AA: tigobitties
Re: SAI Mod
« Reply #17 on: Monday, April 22, 2013, 13:46:37 PM »
AAO has always been about realism. The realism of the radar = 0.

You're right. I bet the defense research guys absolutely hate the idea of infantry seeing locations of friendlies and objectives/targets in real time on miniature displays. It would also be stupid to share that information with other branches of military to avoid friendly casualties when support is sent in. Fucking unrealistic.

An update to stop server admins using mods would be good
+1 vote.
It's like shaving your pubes to make your junk look bigger.
Might look bigger, but it aint.....

Offline ]-KTA-[Helldiver

Re: SAI Mod
« Reply #18 on: Monday, April 22, 2013, 14:38:06 PM »
+1 for kari.

SAI sux mates, pls let the game be like it is now :-)


Offline Koden

  • Cogito Ergo Khodohn
  • Global Moderator
  • Epic Poster
  • *
  • Posts: 2,333
  • Hmmm rainbows.
    • View Profile
Re: SAI Mod
« Reply #19 on: Monday, April 22, 2013, 16:29:58 PM »
You're right. I bet the defense research guys absolutely hate the idea of infantry seeing locations of friendlies and objectives/targets in real time on miniature displays. It would also be stupid to share that information with other branches of military to avoid friendly casualties when support is sent in. Fucking unrealistic.

Just for the record for those who call it COD-like: on Killing Floor things like this, made by the community (interface related), have been integrated into the game by the developers theirselves (Tripwire Interactive).

Offline Flatlander

  • Jr. Member
  • **
  • Posts: 46
    • View Profile
Re: SAI Mod
« Reply #20 on: Monday, April 22, 2013, 16:31:00 PM »
+1 for kari.

SAI sux mates, pls let the game be like it is now :-)

Question is now,do you rather play alone with a compass or maybe with some new people but  SAI!?

Personally i dont care which will be used,i just see the potential of this change ;)

Offline ELiZ

Re: SAI Mod
« Reply #21 on: Tuesday, April 23, 2013, 16:07:37 PM »
Here is some of the 2.8.5 code, from AGP_UI.u
3 classes you might find usefull.

This code should only be used as a reference, I don't garantee that the decompilation is correct, it's still a work in progress.
Code: [Select]
//================================================================================
// UIHUDCompass.
//================================================================================
class UIHUDCompass extends UIControl;

const kMaxObjectives= 8;
var(None) int ScaledObjectiveTextX;
var(None) int ScaledObjectiveTextY;
var(None) Texture _tLeft;
var(None) Texture _tRight;
var(None) Texture _BracketTexture;
var(None) UIControl _ElementList;
var(None) bool _InitializedObjectives;
var export Texture _tObjectiveSymbols;
var export string _sObjectiveSymbols;
var(None) Texture _tObjectiveUp;
var(None) Texture _tObjectiveDown;
var(None) Texture _tObjectiveLevel;
var export UIHUDCompassPointObj _Objectives;
var(None) UIHUDCompassPointV _TeamPoint;
var(None) Texture _tTeamSSG;
var(None) Texture _tTeamSGT;
var(None) Texture _tTeamPVT;
var(None) Texture _tTeamMedic;
var(None) Material _tTeamBleed;
var input Texture _tFT;
var(None) Texture _tTeamIFVIP;
var(None) Texture _tTeamSFCapt;
var(None) Texture _tTeamSSG1st;
var(None) Texture _tTeamIF;
var(None) bool _bIsSettingTarget;
const kArrowDeadRange= 132;
const kObjectiveArrowScaleX= 0.5;
const kObjectiveSize= 16;
const kObjectiveTextY= 112;
const kObjectiveTextX= 786;
const kLocationTextY= 82;
const kLocationTextX= 786;
const kCompassTextureWidth= 1024;
const kCompassY= 16;
const kCompassHeight= 32;
const kCompassWidth= 512;

function Destroyed ()
{
local(None) int i;
local(None) UIControl Control;
local(None) UIControl NextControl;

Super.Destroyed();
_tLeft=None;
_tRight=None;
_BracketTexture=None;
_TeamPoint=None;
_tTeamSSG=None;
_tTeamSGT=None;
_tTeamPVT=None;
_tTeamMedic=None;
_tTeamBleed=None;
_tTeamIFVIP=None;
_tTeamSFCapt=None;
_tTeamSSG1st=None;
_tTeamIF=None;
i=0;
JL0068:
if ( i < 8 )
{
_tObjectiveSymbols[i]=None;
if ( _Objectives[i] != None )
{
_Objectives[i].Destroyed();
_Objectives[i]=None;
}
i++;
goto JL0068;
}
Control=_ElementList;
JL00C9:
if ( Control != None )
{
NextControl=Control.cNextControl;
Control.Destroyed();
Control=NextControl;
goto JL00C9;
}
_ElementList=None;
return;
}

function IsSettingTarget ()
{
local(None) bool ReturnValue;

return _bIsSettingTarget;
return;
}

function SetTarget ()
{
local(None) bool E;

_bIsSettingTarget=E;
return;
}

function Draw ()
{
local(None) Canvas Canvas;
local(None) int oldstyle;
local(None) GameReplicationInfo GRI;
local(None) PlayerController PC;

if ( cFrame.cActor == None )
{
return;
}
if ( Pawn(cFrame.cActor) == None )
{
return;
}
oldstyle=Canvas.Style;
if (  !_InitializedObjectives )
{
InitializeObjectives();
}
PC=cFrame.cHUD.PlayerOwner;
GRI=PC.GameReplicationInfo;
if ( ShouldDrawCompass() )
{
if ( (GRI != None) &&  !GRI.bHUDHideCompass && (PC != None) &&  !PC.bHUDHideCompass )
{
DrawLocation(Canvas);
}
}
if ( ShouldDrawObjectiveList() )
{
if ( (GRI != None) &&  !GRI.bHUDHideCompass && (PC != None) &&  !PC.bHUDHideCompass )
{
DrawObjectiveList(Canvas);
}
}
Canvas.Style=oldstyle;
return;
}

function InitializeObjectives ()
{
local(None) BaseObjective obj;
local(None) UIHUDCompassPointObj objcompass;
local(None) int objnum;

objnum=0;
foreach cFrame.cActor.DynamicActors(Class'BaseObjective',obj)
{
if ( obj.IsA('AGP_Objective') )
{
objcompass=new (None,Class'UIHUDCompassPointObj');
objcompass.setObjective(obj);
objnum=obj.GetHUDPosition();
if ( objnum > 8 )
{
objnum=8 - 1;
}
objcompass.SetTexture(_tObjectiveSymbols[objnum]);
objcompass.SetText(_sObjectiveSymbols[objnum]);
objcompass.setOrder(objnum);
objcompass.Create(cFrame,cScreen,0,-1,0);
if ( _Objectives[objnum] == None )
{
_Objectives[objnum]=objcompass;
} else {
objcompass.cNextControl=_Objectives[objnum];
_Objectives[objnum]=objcompass;
}
}
}
_InitializedObjectives=True;
return;
}

function DrawCompass ()
{
local(None) Canvas Canvas;
local(None) float X;
local(None) float Y;
local(None) float fFOV;
local(None) int iCompassSrc;
local(None) int iCompassStart;
local(None) float fDegrees;
local(None) float Width;

if (  !ShouldDrawCompass() )
{
return;
}
if ( _tLeft == None )
{
Canvas.SetPos(100.00,100.00);
Canvas.DrawText("UIHUDCompass::Draw NO TEXTURE");
return;
}
Canvas.Style=6;
if ( cFrame != None )
{
Canvas.DrawColor=cFrame.cHUD.HUDColor;
}
X=Canvas.ClipX / 2 - 512 * cFrame.fScaleX / 2;
Y=16.00;
Canvas.SetPos(X,Y);
fFOV=Pawn(cFrame.cActor).Controller.FovAngle;
iCompassSrc=fFOV * 1024 * 2 / 360;
fDegrees=cFrame.cActor.Rotation.Yaw * 360.00 / 65535.00;
iCompassStart=fDegrees * 1024 * 2 / 360;
iCompassStart -= iCompassSrc / 2;
iCompassStart=iCompassStart % 2 * 1024;
JL01CC:
if ( iCompassStart < 0 )
{
iCompassStart += 2 * 1024;
goto JL01CC;
}
if ( iCompassStart <= 1024 )
{
if ( 1024 > iCompassSrc + iCompassStart )
{
Canvas.DrawTile(_tLeft,512.00 * cFrame.fScaleX,32.00 * cFrame.fScaleY,iCompassStart,0.00,iCompassSrc,_tLeft.VSize);
} else {
Width=(1024.00 - iCompassStart) / iCompassSrc;
Canvas.DrawTile(_tLeft,Width * 512 * cFrame.fScaleX,32.00 * cFrame.fScaleY,iCompassStart,0.00,_tLeft.USize - iCompassStart,_tLeft.VSize);
Canvas.SetPos(X + Width * 512 * cFrame.fScaleX,Y);
Width=1.00 - Width;
Canvas.DrawTile(_tRight,Width * 512 * cFrame.fScaleX,32.00 * cFrame.fScaleY,0.00,0.00,iCompassSrc - _tRight.USize - iCompassStart,_tRight.VSize);
}
} else {
if ( 1024 * 2 > iCompassSrc + iCompassStart )
{
Canvas.DrawTile(_tRight,512.00 * cFrame.fScaleX,32.00 * cFrame.fScaleY,iCompassStart - 1024,0.00,iCompassSrc,_tRight.VSize);
} else {
Width=(2.00 * 1024 - iCompassStart) / iCompassSrc;
Canvas.DrawTile(_tRight,Width * 512 * cFrame.fScaleX,32.00 * cFrame.fScaleY,iCompassStart - 1024,0.00,_tRight.USize - iCompassStart - 1024,_tRight.VSize);
Canvas.SetPos(X + Width * 512 * cFrame.fScaleX,Y);
Width=1.00 - Width;
Canvas.DrawTile(_tLeft,Width * 512 * cFrame.fScaleX,32.00 * cFrame.fScaleY,0.00,0.00,iCompassSrc - 2 * 1024 - iCompassStart,_tRight.VSize);
}
}
X=Canvas.ClipX / 2 - 512 * cFrame.fScaleX / 2;
Y=16.00;
Canvas.SetPos(X,Y);
Canvas.DrawTile(_BracketTexture,512.00 * cFrame.fScaleX,32.00 * cFrame.fScaleY,0.00,0.00,_BracketTexture.USize,_BracketTexture.VSize);
return;
}

function DrawLocation ()
{
local(None) Canvas Canvas;
local(None) Texture tobj;
local(None) float X;
local(None) float Y;
local(None) float XL;
local(None) float YL;
local(None) float Xi;
local(None) float Yi;
local(None) PlayerReplicationInfo myPRI;
local(None) string LocString;
local(None) Volume C;
local(None) BaseObjective obj;

if ( (Pawn(cFrame.cActor) != None) && (Pawn(cFrame.cActor).PlayerReplicationInfo != None) )
{
myPRI=Pawn(cFrame.cActor).PlayerReplicationInfo;
}
if ( (myPRI == None) || myPRI.isDead() )
{
return;
}
X=786.00 * cFrame.fScaleX;
Y=82.00 * cFrame.fScaleY;
C=myPRI.GetCommVolume();
if ( C != None )
{
obj=BaseObjective(myPRI.GetNearbyObjective(C));
}
if ( obj != None )
{
tobj=_tObjectiveSymbols[obj.GetHUDPosition()];
Xi=16.00 * cFrame.fScaleX;
Yi=16.00 * cFrame.fScaleY;
Canvas.SetPos(X - Xi,Y);
Canvas.DrawTile(tobj,Xi,Yi,0.00,0.00,tobj.USize,tobj.VSize);
Xi *= 1.50;
}
LocString=myPRI.GetLocationName(C);
Canvas.TextSize(LocString,XL,YL);
Canvas.SetPos(X - XL - Xi,Y);
Canvas.DrawTextClipped(LocString);
return;
}

function DrawObjectives ()
{
local(None) Canvas Canvas;
local(None) bool ReturnValue;
local(None) int ctr;
local(None) UIControl Current;
local(None) UIHUDCompassPoint currentpoint;
local(None) bool retval;

retval=False;
ctr=0;
JL000F:
if ( ctr < 8 )
{
Current=_Objectives[ctr];
JL002C:
if ( Current != None )
{
currentpoint=UIHUDCompassPoint(Current);
if ( currentpoint.IsA('UIHUDCompassPointObj') )
{
DrawCompassPoint(currentpoint,Canvas);
retval=True;
} else {
if ( (currentpoint != None) && currentpoint.IsOnCompass(Pawn(cFrame.cActor).Controller) )
{
DrawCompassPoint(currentpoint,Canvas);
}
}
Current=Current.cNextControl;
goto JL002C;
}
ctr++;
goto JL000F;
}
return retval;
return;
}

function ScaleControl ()
{
local(None) Canvas Canvas;

Super.ScaleControl(Canvas);
ScaledObjectiveTextX=786 * cFrame.fScaleX;
ScaledObjectiveTextY=112 * cFrame.fScaleY;
return;
}

function DrawObjectiveList ()
{
local(None) Canvas Canvas;
local(None) float X;
local(None) float Y;
local(None) float XL;
local(None) float YL;
local(None) int ctr;
local(None) UIControl Current;
local(None) UIHUDCompassPointObj currentobj;
local(None) string ObjString;

X=ScaledObjectiveTextX;
Y=ScaledObjectiveTextY;
Canvas.SetPos(X,Y);
if ( _bIsSettingTarget )
{
Canvas.TextSize("SET SQUAD TARGET:",XL,YL);
Canvas.SetPos(X - XL,Y);
Canvas.DrawTextClipped("SET SQUAD TARGET:");
} else {
Canvas.TextSize("OBJECTIVES",XL,YL);
Canvas.SetPos(X - XL,Y);
Canvas.DrawTextClipped("OBJECTIVES");
}
Y += YL * 0.50;
ctr=0;
JL011B:
if ( ctr < 8 )
{
Current=_Objectives[ctr];
JL0138:
if ( Current != None )
{
currentobj=UIHUDCompassPointObj(Current);
if ( currentobj != None )
{
ObjString=currentobj.GetString();
}
if ( (currentobj == None) ||  !currentobj.IsEnabled() || (ObjString == "") )
{
Current=Current.cNextControl;
} else {
Canvas.TextSize(ObjString,XL,YL);
Y += YL;
Canvas.SetPos(X - XL,Y);
Canvas.DrawTextClipped(ObjString);
Current=Current.cNextControl;
}
goto JL0138;
}
ctr++;
goto JL011B;
}
return;
}

function DrawCompassPoint ()
{
local(None) UIHUDCompassPoint currentpoint;
local(None) Canvas Canvas;
local(None) float ptdegrees;
local(None) float fDegrees;
local(None) Material ptTexture;
local(None) float X;
local(None) float Y;
local(None) float XL;
local(None) float YL;
local(None) byte FT;
local(None) PlayerReplicationInfo myPRI;

if (  !_InitializedObjectives )
{
InitializeObjectives();
}
fDegrees=cFrame.cActor.Rotation.Yaw * 360.00 / 65535.00;
if ( (currentpoint == None) ||  !currentpoint.IsOnCompass(Pawn(cFrame.cActor).Controller) )
{
return;
}
if ( currentpoint.IsA('UIHUDCompassPointObj') && cFrame.cHUD.bHideCompassObjPoints )
{
return;
}
ptTexture=currentpoint.GetTexture();
ptdegrees=currentpoint.GetRotation(cFrame.cActor);
ptdegrees=ptdegrees - fDegrees;
if ( ptdegrees > 180.00 )
{
ptdegrees=ptdegrees - 360.00;
} else {
if ( ptdegrees < -180.00 )
{
ptdegrees=ptdegrees + 360.00;
}
}
X=ptdegrees / Pawn(cFrame.cActor).Controller.FovAngle / 2.00 * 512 * cFrame.fScaleX / 2.00;
if ( X <  -512 * cFrame.fScaleX / 2.00 )
{
X= -512 * cFrame.fScaleX / 2.00;
}
if ( X > 512 * cFrame.fScaleX / 2.00 )
{
X=512.00 * cFrame.fScaleX / 2.00;
}
X += Canvas.ClipX / 2.00;
XL=16.00 * cFrame.fScaleX;
X -= XL / 2.00;
X -= XL * 0.50 / 2.00;
Y=16.00 + 32 * cFrame.fScaleY + 5;
Canvas.SetPos(X,Y);
Canvas.DrawTile(ptTexture,XL,16.00 * cFrame.fScaleY,0.00,0.00,ptTexture.MaterialUSize(),ptTexture.MaterialVSize());
FT=currentpoint.getFT();
if ( FT != 255 )
{
Canvas.SetPos(X + 16 * cFrame.fScaleX / 4,Y + (16 + 2) * cFrame.fScaleY);
Canvas.DrawTile(_tFT[FT],XL / 2,16.00 * cFrame.fScaleY / 2,0.00,0.00,_tFT[FT].USize,_tFT[FT].VSize);
}
Canvas.SetPos(X + XL,Y);
YL=currentpoint.CompareHeight(cFrame.cActor);
if ( YL <  -132 )
{
ptTexture=_tObjectiveDown;
} else {
if ( YL > 132 )
{
ptTexture=_tObjectiveUp;
} else {
ptTexture=_tObjectiveLevel;
}
}
Canvas.DrawTile(ptTexture,XL * 0.50,16.00 * cFrame.fScaleY,0.00,0.00,ptTexture.MaterialUSize(),ptTexture.MaterialVSize());
if ( (Pawn(cFrame.cActor) != None) && (Pawn(cFrame.cActor).PlayerReplicationInfo != None) )
{
myPRI=Pawn(cFrame.cActor).PlayerReplicationInfo;
if ( (myPRI.Team != None) && currentpoint.IsA('UIHUDCompassPointObj') && UIHUDCompassPointObj(currentpoint).IsSquadTarget(myPRI.Team.TeamIndex) )
{
Canvas.SetPos(X,Y + (16 + 2) * cFrame.fScaleY);
ptTexture=currentpoint.GetTexture();
Canvas.DrawTile(ptTexture,XL,2.00,2.00,2.00,4.00,4.00);
}
}
return;
}

function DrawPlayer ()
{
local(None) Canvas Canvas;
local(None) PlayerReplicationInfo Player;
local(None) Material Icon;

if ( Icon == None )
{
return;
} else {
if ( Icon == _tTeamBleed )
{
Canvas.SetDrawColor(255,0,0,Canvas.DrawColor.A);
}
}
_TeamPoint.setVector(Player.GetPawnLocation());
_TeamPoint.SetTexture(Icon);
_TeamPoint.setFT(Player.FT);
DrawCompassPoint(_TeamPoint,Canvas);
Canvas.DrawColor=cFrame.cHUD.HUDColor;
return;
}

function GetPlayerIcon ()
{
local(None) PlayerReplicationInfo myPRI;
local(None) PlayerReplicationInfo otherPRI;
local(None) Material ReturnValue;

if ( (otherPRI == None) || otherPRI.isDead() || (myPRI == otherPRI) )
{
return None;
}
if ( myPRI.bIsMedic )
{
if ( otherPRI.bCallForMedic )
{
return _tTeamBleed;
}
}
if ( otherPRI.bIsMedic )
{
if ( myPRI.bCallForMedic || (myPRI.FT == otherPRI.FT) )
{
return _tTeamMedic;
}
}
if ( otherPRI.IsSquadLeader() &&  !otherPRI.bGuerrillaPS &&  !otherPRI.bSpecialForcesPS )
{
return _tTeamSSG;
} else {
if ( otherPRI.IsSquadLeader() && otherPRI.bSpecialForcesPS && otherPRI.bQualifiedSF )
{
return _tTeamSFCapt;
} else {
if ( otherPRI.IsSquadLeader() && otherPRI.bVIPPS )
{
return _tTeamIFVIP;
} else {
return None;
}
}
}
if ( myPRI.IsSquadLeader() )
{
if ( otherPRI.isTeamLeader() &&  !otherPRI.bSpecialForcesPS &&  !otherPRI.bGuerrillaPS )
{
return _tTeamSGT;
} else {
if ( otherPRI.isTeamLeader() && otherPRI.bSpecialForcesPS && otherPRI.bQualifiedSF )
{
return _tTeamSSG1st;
} else {
return None;
}
}
} else {
if ( myPRI.isTeamLeader() )
{
if ( (otherPRI.FT == myPRI.FT) &&  !otherPRI.bSpecialForcesPS &&  !otherPRI.bGuerrillaPS )
{
return _tTeamPVT;
} else {
if ( (otherPRI.FT == myPRI.FT) && otherPRI.bSpecialForcesPS && otherPRI.bQualifiedSF )
{
return _tTeamSSG;
} else {
if ( (otherPRI.FT == myPRI.FT) && otherPRI.bGuerrillaPS )
{
return _tTeamIF;
}
}
}
} else {
if ( (otherPRI.FT == myPRI.FT) && otherPRI.isTeamLeader() )
{
return _tTeamSGT;
}
}
}
return None;
return;
}

function DrawTeam ()
{
local(None) Canvas Canvas;
local(None) PlayerReplicationInfo myPRI;
local(None) PlayerReplicationInfo otherPRI;
local(None) int i;

if ( _TeamPoint == None )
{
_TeamPoint=new (None,Class'UIHUDCompassPointV');
}
if ( (Pawn(cFrame.cActor) != None) && (Pawn(cFrame.cActor).PlayerReplicationInfo != None) )
{
myPRI=Pawn(cFrame.cActor).PlayerReplicationInfo;
}
if ( (myPRI == None) || (myPRI.Team == None) )
{
return;
}
i=0;
JL00A3:
if ( i < myPRI.Team.Size )
{
otherPRI=myPRI.Team.GetFromList(i);
DrawPlayer(Canvas,otherPRI,GetPlayerIcon(myPRI,otherPRI));
i++;
goto JL00A3;
}
return;
}

function SetTexture ()
{
local(None) Texture pleft;

return;
}

function SetBracketTexture ()
{
local(None) Texture Tex;

_BracketTexture=Tex;
return;
}

function ShouldDrawCompass ()
{
local(None) bool ReturnValue;
local(None) Weapon wpn;

if ( cFrame.cHUD.PlayerOwner.IsInState('MedicTraining_SittingAtDesk') || cFrame.cHUD.PlayerOwner.IsInState('MedicTraining_SittingAtDesk2') || cFrame.cHUD.PlayerOwner.IsInState('MedicTraining_TakingExam') || cFrame.cHUD.PlayerOwner.IsInState('MedicTraining_TakingExam2') )
{
return False;
}
if ( Pawn(cFrame.cActor) == None )
{
return False;
}
wpn=Pawn(cFrame.cActor).Weapon;
if ( wpn == None )
{
return True;
}
return  !wpn.IsZoomed();
return;
}

function ShouldDrawLocation ()
{
local(None) bool ReturnValue;

return False;
return;
}

function ShouldDrawObjectiveList ()
{
local(None) bool ReturnValue;

return cFrame.cHUD.bShowObjectives &&  !cFrame.cHUD.bShowScores;
return;
}

function GetLastControl ()
{
local(None) UIControl ReturnValue;
local(None) UIControl Control;

Control=_ElementList;
JL000B:
if ( Control != None )
{
if ( Control.cNextControl == None )
{
return Control;
}
Control=Control.cNextControl;
goto JL000B;
}
return Control;
return;
}

function AddControlToTail ()
{
local(None) UIControl Control;
local(None) UIControl lastcontrol;

lastcontrol=GetLastControl();
if ( lastcontrol == None )
{
_ElementList=Control;
} else {
lastcontrol.cNextControl=Control;
}
return;
}

function GetControl ()
{
local(None) int Id;
local(None) UIControl ReturnValue;
local(None) UIControl Control;

Control=_ElementList;
JL000B:
if ( Control != None )
{
if ( Control.GetID() == Id )
{
return Control;
}
Control=Control.cNextControl;
goto JL000B;
}
return None;
return;
}

function EnableControl ()
{
local(None) int Id;
local(None) bool State;
local(None) bool ReturnValue;
local(None) UIControl Control;

Control=GetControl(Id);
if ( Control == None )
{
return False;
} else {
Control.SetEnabled(State);
return True;
}
return;
}

defaultproperties
{
    _tLeft=Texture'T_AA2_UI.HUD.hud_nav_compass_01'
    _tRight=Texture'T_AA2_UI.HUD.hud_nav_compass_02'
    _tObjectiveSymbols(0)=Texture'T_AA2_UI.HUD.ui_hud_obj_A'
    _tObjectiveSymbols(1)=Texture'T_AA2_UI.HUD.ui_hud_obj_B'
    _tObjectiveSymbols(2)=Texture'T_AA2_UI.HUD.ui_hud_obj_C'
    _tObjectiveSymbols(3)=Texture'T_AA2_UI.HUD.ui_hud_obj_D'
    _tObjectiveSymbols(4)=Texture'T_AA2_UI.HUD.ui_hud_obj_E'
    _tObjectiveSymbols(5)=Texture'T_AA2_UI.HUD.ui_hud_obj_F'
    _tObjectiveSymbols(6)=Texture'T_AA2_UI.HUD.ui_hud_obj_G'
    _tObjectiveSymbols(7)=Texture'T_AA2_UI.HUD.ui_hud_obj_H'
    _sObjectiveSymbols(0)="A"
    _sObjectiveSymbols(1)="B"
    _sObjectiveSymbols(2)="C"
    _sObjectiveSymbols(3)="D"
    _sObjectiveSymbols(4)="E"
    _sObjectiveSymbols(5)="F"
    _sObjectiveSymbols(6)="G"
    _sObjectiveSymbols(7)="H"
    _tObjectiveUp=Texture'T_AA2_UI.HUD.ui_hud_obj_up'
    _tObjectiveDown=Texture'T_AA2_UI.HUD.ui_hud_obj_down'
    _tObjectiveLevel=Texture'T_AA2_UI.HUD.ui_hud_obj_level'
    _tTeamSSG=Texture'T_AA2_UI.HUD.hud_rank_ssg'
    _tTeamSGT=Texture'T_AA2_UI.HUD.hud_rank_sgt'
    _tTeamPVT=Texture'T_AA2_UI.HUD.hud_rank_pvt'
    _tTeamMedic=Texture'T_AA2_UI.HUD.ui_hud_medic'
    _tTeamBleed=FinalBlend'T_AA2_UI.HUD.ui_hud_bleeding_fb'
    _tFT(0)=Texture'T_AA2_UI.HUD.hud_fireteam_a'
    _tFT(1)=Texture'T_AA2_UI.HUD.hud_fireteam_b'
    _tFT(2)=Texture'T_AA2_UI.HUD.hud_fireteam_c'
    _tFT(3)=Texture'T_AA2_UI.HUD.hud_fireteam_d'
    _tTeamIFVIP=Texture'T_AA2_UI.HUD.hud_rank_VIP'
    _tTeamSFCapt=Texture'T_AA2_UI.HUD.hud_rank_captain'
    _tTeamSSG1st=Texture'T_AA2_UI.HUD.hud_rank_staffsgt_1st'
    _tTeamIF=Texture'T_AA2_UI.HUD.hud_rank_indigenous'
}

Code: [Select]
//================================================================================
// UIHUD_Radar.
//================================================================================
class UIHUD_Radar extends UIControl;

var(None) Material _tGrid;
var(None) Range GridRange;
var(None) float CurrentRange;
var(None) Position GridUV;
var(None) array<UIHUD_RadarDot> RadarDotPool;
var(None) PlayerReplicationInfo myPRI;
var(None) bool bFrontUp;
var(None) bool bMap;
var(None) int MapSize;
var(None) bool bInitialized;

function Initialize ()
{
local(None) string map_name;
local(None) Material NewMap;

map_name="T_AA2_UI.Map.Map_" $ cFrame.cActor.Level.sLevelName;
NewMap=Material(DynamicLoadObject(map_name,Class'Texture'));
if ( NewMap != None )
{
_tGrid=NewMap;
}
bInitialized=True;
return;
}

function ShouldDrawRadar ()
{
local(None) bool ReturnValue;
local(None) Weapon wpn;

if ( Pawn(cFrame.cActor).Controller.IsInState('MedicTraining_SittingAtDesk') || Pawn(cFrame.cActor).Controller.IsInState('MedicTraining_SittingAtDesk2') || Pawn(cFrame.cActor).Controller.IsInState('MedicTraining_TakingExam') || Pawn(cFrame.cActor).Controller.IsInState('MedicTraining_TakingExam2') )
{
return False;
}
if ( Pawn(cFrame.cActor) == None )
{
return False;
}
wpn=Pawn(cFrame.cActor).Weapon;
if ( wpn == None )
{
return True;
}
return  !wpn.IsZoomed();
return;
}

function Draw ()
{
local(None) Canvas C;
local(None) GameReplicationInfo GRI;
local(None) PlayerController PC;

if (  !bInitialized )
{
Initialize();
}
PC=cFrame.cHUD.PlayerOwner;
GRI=PC.GameReplicationInfo;
if ( ShouldDrawRadar() )
{
if (  !GRI.bHUDHideRadar &&  !PC.bHUDHideRadar )
{
UpdateRadarDots();
DrawRadarGrid(C);
}
}
return;
}

function DrawRadarGrid ()
{
local(None) Canvas C;

C.SetPos(_ScaledPos.X,_ScaledPos.Y);
C.SetDrawColor(255,255,255,C.DrawColor.A);
C.DrawTile(_tGrid,_ScaledPos.W,_ScaledPos.H,GridUV.X,GridUV.Y,GridUV.W,GridUV.H);
C.DrawColor=cFrame.cHUD.HUDColor;
return;
}

function UpdateRadarDots ()
{
local(None) TeamInfo MyTeam;
local(None) int i;
local(None) int draw_num;
local(None) float max_distance_s;

myPRI=Pawn(cFrame.cActor).PlayerReplicationInfo;
MyTeam=myPRI.Team;
if ( MyTeam != None )
{
i=0;
JL0048:
if ( i < MyTeam.Size )
{
if ( ShouldDraw(MyTeam.TeamList[i]) )
{
UpdateRadarDot(MyTeam.TeamList[i],draw_num);
max_distance_s=FMax(max_distance_s,RadarDotPool[draw_num].GetDistanceSquared());
draw_num++;
}
i++;
goto JL0048;
}
} else {
UpdateRadarDot(myPRI,draw_num);
draw_num++;
}
UpdateCurrentRange(Sqrt(max_distance_s));
i=draw_num;
JL0101:
if ( i < RadarDotPool )
{
RadarDotPool[i].bVisible=False;
i++;
goto JL0101;
}
return;
}

function CreateNewRadarDot ()
{
local(None) UIHUD_RadarDot NewRadarDot;

cScreen.AddHUDBaseDisplay("AGP_UI.UIHUD_RadarDot",-1,_Pos,1);
NewRadarDot=UIHUD_RadarDot(cScreen.GetLastControl());
NewRadarDot.SetMyRadar(self);
NewRadarDot.ScaleControl(None);
RadarDotPool[RadarDotPool]=NewRadarDot;
return;
}

function UpdateRadarDot ()
{
local(None) PlayerReplicationInfo PRI;
local(None) int draw_number;
local(None) UIHUD_RadarDot RadarDot;
local(None) Vector MyLoc;
local(None) Vector DotLoc;
local(None) Vector RelLoc;
local(None) Rotator R;

JL0000:
if ( RadarDotPool <= draw_number )
{
CreateNewRadarDot();
goto JL0000;
}
RadarDot=RadarDotPool[draw_number];
RadarDot.bVisible=True;
MyLoc=myPRI.GetPawnLocation();
DotLoc=PRI.GetPawnLocation();
RelLoc=MyLoc - DotLoc;
if ( bFrontUp )
{
R.Yaw=myPRI.GetMyPawn().Rotation.Yaw;
RelLoc=RelLoc << R;
}
RadarDot.SetRadarDotXY(RelLoc.X,RelLoc.Y);
return;
}

function ShouldDraw ()
{
local(None) PlayerReplicationInfo PRI;
local(None) bool ReturnValue;

if ( PRI.isDead() )
{
return False;
} else {
return True;
}
return;
}

function UpdateCurrentRange ()
{
local(None) float max_distance;
local(None) float NewRange;

NewRange=FClamp(max_distance * 1.50,GridRange.Min,GridRange.Max);
if ( (NewRange != CurrentRange) || bMap )
{
SetCurrentRange(NewRange);
}
return;
}

function SetCurrentRange ()
{
local(None) float NewRange;
local(None) float ratio;
local(None) float u_max;
local(None) float v_max;
local(None) Vector CenterLoc;
local(None) float U;
local(None) float V;
local(None) float X;
local(None) float Y;
local(None) float X1;
local(None) float X2;
local(None) float Y1;
local(None) float Y2;

CurrentRange=NewRange;
u_max=_tGrid.MaterialUSize();
v_max=_tGrid.MaterialVSize();
if ( bMap )
{
CenterLoc=myPRI.GetMyPawn().Location;
X=CenterLoc.Y;
Y= -CenterLoc.X;
X += MapSize / 2;
Y += MapSize / 2;
X1=X - CurrentRange;
Y1=Y - CurrentRange;
X2=X + CurrentRange;
Y2=Y + CurrentRange;
GridUV.X=u_max * X1 / MapSize;
GridUV.Y=v_max * Y1 / MapSize;
GridUV.W=u_max * (X2 - X1) / MapSize;
GridUV.H=v_max * (Y2 - Y1) / MapSize;
} else {
ratio=1.00 - CurrentRange / GridRange.Max;
U=ratio * u_max / 2;
V=ratio * v_max / 2;
GridUV.X=U;
GridUV.Y=V;
GridUV.W=u_max - U - U;
GridUV.H=v_max - V - V;
}
return;
}

defaultproperties
{
    GridRange=(Min=0.00, Max=1.60231035868848196E34)
    bMap=True
    MapSize=32768
}

Code: [Select]
//================================================================================
// UIHUD_RadarDot.
//================================================================================
class UIHUD_RadarDot extends UIControl;

var(None) bool bVisible;
var(None) Material _tPlayerDot;
var(None) float X;
var(None) float Y;
var(None) float dot_size;
var(None) Position PlayerXY;
var(None) UIHUD_Radar MyRadar;

function SetMyRadar ()
{
local(None) UIHUD_Radar NewRadar;

MyRadar=NewRadar;
return;
}

function Draw ()
{
local(None) Canvas C;

if ( bVisible )
{
UpdatePlayerDot();
DrawPlayerDot(C);
}
return;
}

function DrawPlayerDot ()
{
local(None) Canvas C;

C.SetPos(PlayerXY.X,PlayerXY.Y);
C.DrawTile(_tPlayerDot,PlayerXY.W,PlayerXY.H,0.00,0.00,_tPlayerDot.MaterialUSize(),_tPlayerDot.MaterialVSize());
return;
}

function UpdatePlayerDot ()
{
local(None) float draw_x;
local(None) float draw_y;
local(None) float draw_size;
local(None) float screen_x;
local(None) float screen_y;
local(None) float Size;
local(None) float size_squared;
local(None) float Range;

Range=MyRadar.CurrentRange;
draw_size=dot_size * (1 - Range / MyRadar.GridRange.Max);
draw_size=FMax(draw_size,8.00);
size_squared=GetDistanceSquared();
if ( size_squared > Range * Range )
{
Size=Sqrt(size_squared);
draw_x=X / Size * Range;
draw_y=Y / Size * Range;
draw_size *= 1.50;
} else {
draw_x=X;
draw_y=Y;
}
screen_x=( -draw_y / Range + 1.00) / 2;
screen_y=(draw_x / Range + 1.00) / 2;
PlayerXY.W=draw_size;
PlayerXY.H=draw_size;
PlayerXY.X=_ScaledPos.X + _ScaledPos.W * screen_x - draw_size / 2;
PlayerXY.Y=_ScaledPos.Y + _ScaledPos.H * screen_y - draw_size / 2;
return;
}

function SetRadarDotXY ()
{
local(None) float new_x;
local(None) float new_y;

X=new_x;
Y=new_y;
return;
}

function GetDistanceSquared ()
{
local(None) float ReturnValue;

return X * X + Y * Y;
return;
}

defaultproperties
{
    _tPlayerDot=Texture'T_AA2_UI.HUD.hud_group_army'
    dot_size=32.00
}

Offline ELiZ

Re: SAI Mod
« Reply #22 on: Tuesday, April 23, 2013, 16:12:06 PM »
I moved all the post discussing Server mods to a new thread, please be on topic.

Offline ELiZ

Re: SAI Mod
« Reply #23 on: Wednesday, April 24, 2013, 06:16:19 AM »
Variables used in the 2.8.5 Levelinfo-class, but already exists in 2.5.0

Code: [Select]
var bool bShowRadarMap;
var string RadarMapImage;

New in the 2.8.5 Levelinfo Class


Code: [Select]
var float RadarMapSize;
var vector RadarMapOffset;
var array<float> RadarZoomLevels;
« Last Edit: Wednesday, April 24, 2013, 06:28:12 AM by ELiZ »

Offline ELiZ

Re: SAI Mod
« Reply #24 on: Wednesday, April 24, 2013, 09:09:59 AM »
How complex should the 2.5 SAI be?

Show Friendlies
Show Reported Enemies
Show Objectives
Show Reported ESS

What have I forgotten?
It was so long since I played 2.8.5 I've forgotten most things about the 2.8.5 SAI.


Offline [SWISS]Merlin

Re: SAI Mod
« Reply #25 on: Wednesday, April 24, 2013, 12:41:41 PM »
if i could, i would help you with that. but same to me, i forgot the most thing about.
but i will ask my son - maybe he knows it still

Offline insidiae

Re: SAI Mod
« Reply #26 on: Wednesday, April 24, 2013, 13:14:22 PM »
I might have forgotten but was this ever in any AA version? Been away for 5 years, shit's rusty.

Offline teddy_grizzly_bear

  • Used to be known as nobody
  • Administrator
  • Epic Poster
  • *
  • Posts: 5,709
  • what are you looking at?
    • View Profile
  • AA: teddy_grizzIy_bear
Re: SAI Mod
« Reply #27 on: Wednesday, April 24, 2013, 13:32:49 PM »
It was in 2.8.5 (since 2.8 I think?), but if you've been away for 5 years, maybe it hadn't been implemented yet back then.
<image removed due to imgur stuff - probably for the best>

"Mathematics may be defined as the subject in which we never know what we are talking about, nor whether what we are saying is true." Bertrand Russell

Offline insidiae

Re: SAI Mod
« Reply #28 on: Wednesday, April 24, 2013, 13:41:14 PM »
It's like, I think I remember it, but I'm not sure haha. Seeing as I continued playing CoD4 which had a radar.

Offline ELiZ

Re: SAI Mod
« Reply #29 on: Tuesday, July 23, 2013, 07:16:48 AM »
I added a poll to the main post.

 

Download Assist

×

Download Game Client

Important: Battletracker no longer exists. However, old Battletracker accounts may still work. You can create a new 25Assist account here

Download Server Manager