XC_Engine [20] - XC_Core [7b] - XC_IpDrv

Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [16] - XC_Core [5]

Post by Higor »

Just weird floating point precision issues at high tickrates, too many operations and movement may end up being zero in some cases.

Btw the temporary actor replacer was no good when I forced the hook to run on net clients, was worth testing though.
Unreal Engine 3 has some interesting name hash iterators, maybe using something of that sort + looking up the dynamic actors on the map might work.
Hashes are essentially multiple linked lists, so it makes sense that they become extremely slow to cleanup when their size becomes ridiculously big, which explains that 15-second garbage collection in the UnrealKillers server.
It used to be 60 seconds untill I modified Siege protectors to recycle projectiles within UnrealScript.

Still, this buile is the best pre-v17 build for net clients (no actor recycler, grid appears to no longer crash)
ShaiHulud
Adept
Posts: 460
Joined: Sat Dec 22, 2012 6:37 am

Re: XC_Engine [16] - XC_Core [5]

Post by ShaiHulud »

Thanks for your insight, and appreciate your ongoing efforts with XC_Engine.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [16] - XC_Core [5]

Post by Higor »

This is lovely stuff.
Replaced actor recycler with name recycler, also fixed a couple of memory leaks.
Should be a lot more stable and faster.
In order to enable on client games where it's off, you have to use bForceLevelHook=True on XCGE settings.

If this works... then we can start using particle spawners, smoke generators and other stuff without any worry at all.
TBH, a major engine enhancement here.
XC_Engine_gridtest6.1.7z
Spoiler
Log: Created name: sgHUD0
Log: Created name: FontInfo2
Log: Created name: ServerInfoTeam0
Log: Created name: FontInfo3
Log: Created name: sgPlayerData0
Log: Created name: sgClient0
Log: Created name: UTTeleportEffect0
Log: Created name: ChainSaw0
Log: Created name: ImpactHammer0
Log: Created name: LCImpactHammer0
Log: Created name: sgPulseGun0
Log: Created name: PAmmo0
Log: Created name: ShockRifle0
Log: Created name: LCShockRifle0
Log: Created name: ShockCore0
Log: Created name: UT_FlakCannon0
Log: Created name: FlakAmmo0
Log: Created name: ut_biorifle0
Log: Created name: BioAmmo0
Log: Created name: sgMinigun0
Log: Created name: LCMinigun0
Log: Created name: sgMiniammo0
Log: Created name: SniperRifle0
Log: Created name: LCSniperRifle0
Log: Created name: BulletBox0
Log: Created name: ripper0
Log: Created name: BladeHopper0
Log: Created name: UT_Eightball0
Log: Created name: RocketPack0
Log: Created name: sgNukeLauncher0
Log: Created name: WarHeadAmmo0
Log: Created name: sgConstructor0
Log: Created name: sgAmmo0
Log: Created name: sgEnforcer0
Log: Created name: LCEnforcer0
Log: Created name: sgEClip0
Log: Created name: XC_LagCompensator0
Log: Created name: XC_PlayerPosList0
Log: Created name: UTTeleEffect0
Log: Created name: UTTeleEffect1
Log: Created name: sgExpRocketCannon0
Log: Created name: sgParticle0
Log: Created name: sgParticle1
Log: Created name: sgParticle2
Log: Created name: sgParticle3
Log: Created name: sgParticle4
Log: Created name: sgParticle5
Log: Created name: sgParticle6
Log: Created name: sgParticle7
Log: Created name: sgParticle8
Log: Created name: sgParticle9
Log: Created name: sgParticle10
Log: Created name: sgParticle11
Log: Created name: sgParticle12
Log: Created name: sgParticle13
Log: Created name: sgParticle14
Log: Created name: sgParticle15
Log: Created name: sgParticle16
Log: Created name: sgParticle17
Log: Created name: sgParticle18
Log: Created name: sgParticle19
Log: Created name: sgParticle20
Log: Created name: sgParticle21
Log: Created name: sgParticle22
Log: Created name: sgParticle23
Log: Created name: sgParticle24
Log: Created name: sgParticle25
Log: Created name: sgParticle26
Log: Created name: sgParticle27
Log: Created name: sgParticle28
Log: Created name: sgParticle29
Log: Created name: sgParticle30
Log: Created name: sgParticle31
Log: Created name: sgParticle32
Log: Created name: sgParticle33
Log: Created name: sgParticle34
Log: Created name: sgParticle35
Log: Created name: sgParticle36
Log: Created name: sgParticle37
Log: Created name: sgParticle38
Log: Created name: sgParticle39
Log: Created name: sgParticle40
Log: Created name: sgParticle41
Log: Created name: sgParticle42
Log: Created name: sgParticle43
Log: Created name: sgParticle44
Log: Created name: sgParticle45
Log: Created name: sgParticle46
Log: Created name: sgParticle47
Log: Created name: sgParticle48
Log: Created name: sgParticle49
Log: Created name: sgParticle50
Log: Created name: sgParticle51
Log: Created name: sgParticle52
Log: Created name: sgParticle53
Log: Created name: sgParticle54
Log: Created name: sgParticle55
Log: Created name: sgParticle56
Log: Created name: sgParticle57
Log: Created name: sgParticle58
Log: Created name: sgFlash2
Log: Created name: RocketMk0
Log: Created name: RocketTrail0
Log: Created name: RocketMk1
Log: Created name: RocketTrail1
Log: Created name: UTSmokeTrail0
Log: Created name: UTSmokeTrail1
Log: Created name: UTSmokeTrail2
Log: Created name: UTSmokeTrail3
Log: Created name: UTSmokeTrail4
Log: Created name: UTSmokeTrail5
Log: Created name: RocketMk2
Log: Created name: RocketTrail2
Log: Created name: RocketMk3
Log: Created name: RocketTrail3
Log: Created name: UTSmokeTrail6
Log: Created name: UTSmokeTrail7
Log: Created name: LightSmokeTrail0
Log: Created name: LightSmokeTrail1
Log: Created name: UTSmokeTrail8
Log: Created name: UTSmokeTrail9
Log: Created name: RocketMk4
Log: Created name: RocketTrail4
Log: Created name: RocketMk5
Log: Created name: RocketTrail5
Log: Created name: UT_SpriteBallExplosion0
Log: Created name: BlastMark0
Log: Created name: LightSmokeTrail2
Log: Created name: LightSmokeTrail3
Log: Created name: LightSmokeTrail4
Log: Created name: LightSmokeTrail5
Log: Created name: LightSmokeTrail6
Log: Created name: LightSmokeTrail7
Log: Created name: LightSmokeTrail8
Log: Created name: UTSmokeTrail10
Log: Created name: UTSmokeTrail11
Log: Created name: UTSmokeTrail12
Log: Created name: UTSmokeTrail13
Log: Created name: UTSmokeTrail14
Log: Created name: UT_SpriteBallExplosion1
Log: Created name: BlastMark1
Log: Created name: LightSmokeTrail9
Log: Created name: LightSmokeTrail10
Log: Created name: LightSmokeTrail11
Log: Created name: LightSmokeTrail12
Log: Created name: UTSmokeTrail15
Log: Created name: UTSmokeTrail16
Log: Created name: UTSmokeTrail17
Log: Created name: UTSmokeTrail18
Log: Created name: UT_SpriteBallExplosion2
Log: Created name: BlastMark2
Log: Created name: UT_SpriteBallExplosion3
Log: Created name: BlastMark3
Log: Created name: LightSmokeTrail13
Log: Created name: LightSmokeTrail14
Log: Created name: UT_SpriteBallExplosion4
Log: Created name: BlastMark4
Log: Created name: LightSmokeTrail15
Log: Created name: RocketMk6
Log: Created name: RocketTrail6
Log: Created name: RocketMk7
Log: Created name: RocketTrail7
Log: Created name: UTSmokeTrail19
Log: Created name: UTSmokeTrail20
Log: Created name: UTSmokeTrail21
Log: Created name: RocketMk8
Log: Created name: RocketTrail8
Log: Created name: RocketMk9
Log: Created name: RocketTrail9
Log: Created name: UT_SpriteBallExplosion5
Log: Created name: BlastMark5
Log: Created name: LightSmokeTrail16
Log: Created name: LightSmokeTrail17
Log: Created name: LightSmokeTrail18
Log: Created name: LightSmokeTrail19
Log: Created name: RocketMk10
Log: Created name: RocketTrail10
Log: Created name: RocketMk11
Log: Created name: RocketTrail11
Log: Created name: LightSmokeTrail20
Log: Created name: LightSmokeTrail21
Log: Created name: LightSmokeTrail22
Log: Created name: LightSmokeTrail23
Log: Created name: LightSmokeTrail24
Log: Created name: LightSmokeTrail25
Log: Created name: UTSmokeTrail22
Log: Created name: UTSmokeTrail23
Log: Created name: LightSmokeTrail26
Log: Created name: LightSmokeTrail27
Log: Created name: LightSmokeTrail28
Log: Created name: LightSmokeTrail29
Log: Created name: UTSmokeTrail24
Log: Created name: UTSmokeTrail25
Log: Created name: LightSmokeTrail30
Log: Created name: LightSmokeTrail31
Log: Created name: LightSmokeTrail32
Log: Created name: LightSmokeTrail33
Log: Created name: RocketMk12
Log: Created name: RocketTrail12
Log: Created name: RocketMk13
Log: Created name: RocketTrail13
Log: Created name: LightSmokeTrail34
Log: Created name: LightSmokeTrail35
Log: Created name: LightSmokeTrail36
Log: Created name: UT_SpriteBallExplosion6
Log: Created name: BlastMark6
Log: Created name: LightSmokeTrail37
Log: Recycled name: RocketMk0
Log: Recycled name: RocketTrail0
Log: Recycled name: RocketMk3
Log: Recycled name: RocketTrail3
Log: Recycled name: LightSmokeTrail0
Log: Recycled name: LightSmokeTrail1
Log: Recycled name: LightSmokeTrail2
Log: Recycled name: LightSmokeTrail3
Log: Recycled name: LightSmokeTrail10
Log: Recycled name: LightSmokeTrail4
Log: Recycled name: LightSmokeTrail5
Log: Recycled name: LightSmokeTrail6
Log: Recycled name: LightSmokeTrail7
Log: Recycled name: LightSmokeTrail8
Log: Recycled name: LightSmokeTrail13
Log: Recycled name: LightSmokeTrail9
Log: Recycled name: LightSmokeTrail11
Log: Recycled name: LightSmokeTrail12
Log: Created name: LightSmokeTrail38
Log: Created name: LightSmokeTrail39
Log: Created name: LightSmokeTrail40
Log: Created name: LightSmokeTrail41
Log: Created name: LightSmokeTrail42
Log: Created name: LightSmokeTrail43
Log: Created name: LightSmokeTrail44
Log: Created name: LightSmokeTrail45
Log: Created name: LightSmokeTrail46
Log: Recycled name: UT_SpriteBallExplosion0
Log: Created name: BlastMark7
Log: Created name: LightSmokeTrail47
Log: Recycled name: UT_SpriteBallExplosion1
Log: Created name: BlastMark8
Log: Created name: LightSmokeTrail48
Log: Created name: LightSmokeTrail49
Log: Created name: LightSmokeTrail50
Log: Created name: LightSmokeTrail51
Log: Created name: LightSmokeTrail52
Log: Created name: LightSmokeTrail53
Log: Created name: LightSmokeTrail54
Log: Created name: LightSmokeTrail55
Log: Recycled name: UT_SpriteBallExplosion2
Log: Created name: BlastMark9
Log: Created name: LightSmokeTrail56
Log: Created name: LightSmokeTrail57
Log: Created name: LightSmokeTrail58
Log: Created name: LightSmokeTrail59
Log: Created name: LightSmokeTrail60
Log: Recycled name: UT_SpriteBallExplosion3
Log: Created name: BlastMark10
Log: Created name: LightSmokeTrail61
Log: Recycled name: UT_SpriteBallExplosion4
Log: Created name: BlastMark11
Log: Created name: LightSmokeTrail62
Log: Recycled name: UT_SpriteBallExplosion5
Log: Created name: BlastMark12
Log: Created name: LightSmokeTrail63
Log: Created name: UT_SpriteBallExplosion7
Log: Created name: BlastMark13
Log: Created name: LightSmokeTrail64
Log: Created name: UT_SpriteBallExplosion8
Log: Created name: BlastMark14
Log: Created name: LightSmokeTrail65
Log: Created name: UT_SpriteBallExplosion9
Log: Created name: BlastMark15
Log: Recycled name: RocketMk2
Log: Recycled name: RocketTrail2
Log: Recycled name: RocketMk1
Log: Recycled name: RocketTrail1
Log: Recycled name: UTSmokeTrail8
Log: Recycled name: UTSmokeTrail0
Log: Recycled name: UTSmokeTrail1
Log: Recycled name: UTSmokeTrail6
Log: Recycled name: UTSmokeTrail12
Log: Recycled name: UTSmokeTrail16
Log: Recycled name: RocketMk4
Log: Recycled name: RocketTrail4
Log: Recycled name: RocketMk5
Log: Recycled name: RocketTrail5
Log: Created name: LightSmokeTrail66
Log: Created name: LightSmokeTrail67
Log: Recycled name: UTSmokeTrail2
Log: Recycled name: UTSmokeTrail3
Log: Recycled name: RocketMk8
Log: Recycled name: RocketTrail8
Log: Created name: RocketMk14
Log: Created name: RocketTrail14
Log: Created name: LightSmokeTrail68
Log: Created name: LightSmokeTrail69
Log: Created name: LightSmokeTrail70
Log: Created name: LightSmokeTrail71
Log: Created name: LightSmokeTrail72
Log: Created name: UT_SpriteBallExplosion10
Log: Created name: BlastMark16
Log: Created name: LightSmokeTrail73
Log: Created name: LightSmokeTrail74
Log: Created name: LightSmokeTrail75
Log: Created name: UT_SpriteBallExplosion11
Log: Created name: BlastMark17
Log: Created name: LightSmokeTrail76
Log: Created name: LightSmokeTrail77
Log: Created name: LightSmokeTrail78
Log: Created name: LightSmokeTrail79
Log: Recycled name: UTSmokeTrail4
Log: Recycled name: UTSmokeTrail5
Log: Created name: RocketMk15
Log: Created name: RocketTrail15
Log: Recycled name: sgFlash0
Log: Created name: UT_SpriteBallExplosion12
Log: Created name: LightSmokeTrail80
Log: Created name: LightSmokeTrail81
Log: Created name: LightSmokeTrail82
Log: Created name: LightSmokeTrail83
Log: Recycled name: UTSmokeTrail7
Log: Recycled name: UTSmokeTrail9
Log: Recycled name: UTSmokeTrail11
Log: Recycled name: UTSmokeTrail10
Log: Recycled name: UTSmokeTrail13
Log: Recycled name: UTSmokeTrail14
Log: Recycled name: UTSmokeTrail17
Log: Recycled name: UTSmokeTrail15
Log: Recycled name: UTSmokeTrail18
Log: Created name: UTSmokeTrail26
Log: Created name: UTSmokeTrail27
Log: Created name: UTSmokeTrail28
Log: Created name: UTSmokeTrail29
Log: Created name: UTSmokeTrail30
Log: Created name: UTSmokeTrail31
Log: Created name: UTSmokeTrail32
Log: Created name: UTSmokeTrail33
Log: Created name: UTSmokeTrail34
Log: Created name: UTSmokeTrail35
Log: Created name: UTSmokeTrail36
Log: Created name: UTSmokeTrail37
Log: Created name: UT_SpriteBallExplosion13
Log: Created name: BlastMark18
Log: Created name: LightSmokeTrail84
Log: Created name: UT_SpriteBallExplosion14
Log: Created name: BlastMark19
Log: Created name: LightSmokeTrail85
Log: Created name: UT_SpriteBallExplosion15
Log: Created name: BlastMark20
Log: Created name: LightSmokeTrail86
Log: Recycled name: LightSmokeTrail14
Log: Recycled name: LightSmokeTrail15
Log: Recycled name: UT_SpriteBallExplosion6
Log: Created name: BlastMark21
Log: Recycled name: LightSmokeTrail36
Log: Recycled name: UTSmokeTrail19
Log: Recycled name: UTSmokeTrail20
Log: Recycled name: UT_SpriteBallExplosion0
Log: Created name: BlastMark22
Log: Created name: UT_SpriteBallChild0
Log: Recycled name: sgExpRocketCannon0
Log: Recycled name: sgParticle0
Log: Recycled name: sgParticle1
Log: Recycled name: sgParticle3
Log: Recycled name: sgParticle4
Log: Recycled name: sgParticle2
Log: Recycled name: sgParticle6
Log: Recycled name: sgParticle7
Log: Recycled name: sgParticle8
Log: Recycled name: sgParticle10
Log: Recycled name: sgParticle11
Log: Recycled name: sgParticle12
Log: Recycled name: sgParticle13
Log: Recycled name: sgParticle5
Log: Recycled name: sgParticle14
Log: Recycled name: sgParticle16
Log: Recycled name: sgParticle9
Log: Recycled name: sgParticle18
Log: Recycled name: sgParticle19
Log: Recycled name: sgParticle21
Log: Recycled name: sgParticle22
Log: Recycled name: sgParticle23
Log: Recycled name: sgParticle24
Log: Recycled name: sgParticle15
Log: Recycled name: sgParticle25
Log: Recycled name: sgParticle17
Log: Recycled name: sgParticle27
Log: Recycled name: sgParticle28
Log: Recycled name: sgParticle29
Log: Recycled name: sgParticle20
Log: Recycled name: sgParticle30
Log: Recycled name: sgParticle33
Log: Recycled name: sgParticle35
Log: Recycled name: sgParticle26
Log: Recycled name: sgParticle36
Log: Recycled name: sgParticle39
Log: Recycled name: sgParticle31
Log: Recycled name: sgParticle32
Log: Recycled name: sgParticle34
Log: Recycled name: sgParticle45
Log: Recycled name: sgParticle46
Log: Recycled name: sgParticle37
Log: Recycled name: sgParticle38
Log: Recycled name: sgParticle48
Log: Recycled name: sgParticle40
Log: Recycled name: sgParticle47
Log: Recycled name: sgParticle50
Log: Recycled name: sgParticle41
Log: Recycled name: sgParticle51
Log: Recycled name: sgParticle42
Log: Recycled name: sgParticle52
Log: Recycled name: sgParticle43
Log: Recycled name: sgParticle53
Log: Recycled name: sgParticle44
Log: Recycled name: sgParticle54
Log: Recycled name: sgParticle55
Log: Recycled name: sgParticle58
Log: Recycled name: sgParticle49
Log: Recycled name: sgParticle56
Log: Recycled name: sgParticle57
Log: Recycled name: sgFlash0
Log: Recycled name: RocketMk6
Log: Recycled name: RocketTrail6
Log: Recycled name: RocketMk7
Log: Recycled name: RocketTrail7
Log: Recycled name: UTSmokeTrail21
Log: Recycled name: UTSmokeTrail22
Log: Recycled name: RocketMk9
Log: Recycled name: RocketTrail9
Log: Recycled name: RocketMk0
Log: Recycled name: RocketTrail0
Log: Recycled name: LightSmokeTrail16
Log: Recycled name: LightSmokeTrail17
Log: Recycled name: UTSmokeTrail23
Log: Recycled name: UTSmokeTrail24
Log: Recycled name: UTSmokeTrail25
Log: Recycled name: UTSmokeTrail8
Log: Recycled name: UTSmokeTrail0
Log: Recycled name: UTSmokeTrail1
Log: Recycled name: UTSmokeTrail6
Log: Recycled name: UTSmokeTrail12
Log: Recycled name: UTSmokeTrail16
Log: Recycled name: UTSmokeTrail2
Log: Recycled name: UT_SpriteBallExplosion1
Log: Created name: BlastMark23
Log: Recycled name: LightSmokeTrail18
Log: Recycled name: UTSmokeTrail3
Log: Created name: UTSmokeTrail38
Log: Created name: UTSmokeTrail39
Log: Created name: UTSmokeTrail40
Log: Created name: UTSmokeTrail41
Log: Created name: UTSmokeTrail42
Log: Recycled name: UT_SpriteBallExplosion2
Log: Created name: BlastMark24
Log: Recycled name: LightSmokeTrail19
Log: Created name: UTSmokeTrail43
Log: Recycled name: UT_SpriteBallExplosion3
Log: Created name: BlastMark25
Log: Recycled name: RocketMk3
Log: Recycled name: RocketTrail3
Log: Recycled name: RocketMk10
Log: Recycled name: RocketTrail10
Log: Recycled name: LightSmokeTrail20
Log: Created name: UTSmokeTrail44
Log: Created name: UTSmokeTrail45
Log: Created name: UTSmokeTrail46
Log: Recycled name: UT_SpriteBallExplosion4
Log: Created name: BlastMark26
Log: Recycled name: RocketMk11
Log: Recycled name: RocketTrail11
Log: Recycled name: RocketMk12
Log: Recycled name: RocketTrail12
Log: Recycled name: LightSmokeTrail21
Log: Recycled name: LightSmokeTrail30
Log: Recycled name: RocketMk13
Log: Recycled name: RocketTrail13
Log: Recycled name: RocketMk2
Log: Recycled name: RocketTrail2
Log: Recycled name: LightSmokeTrail74
Log: Recycled name: LightSmokeTrail75
Log: Recycled name: LightSmokeTrail76
Log: Recycled name: LightSmokeTrail77
Log: Recycled name: LightSmokeTrail85
Log: Recycled name: LightSmokeTrail78
Log: Recycled name: UTSmokeTrail35
Log: Recycled name: UTSmokeTrail4
Log: Recycled name: UTSmokeTrail5
Log: Recycled name: UTSmokeTrail30
Log: Recycled name: UTSmokeTrail7
Log: Recycled name: UTSmokeTrail36
Log: Recycled name: UTSmokeTrail9
Log: Recycled name: UTSmokeTrail11
Log: Recycled name: UTSmokeTrail10
Log: Recycled name: UTSmokeTrail13
Log: Recycled name: UTSmokeTrail18
Log: Recycled name: UTSmokeTrail14
Log: Recycled name: UT_SpriteBallExplosion13
Log: Created name: BlastMark27
Log: Recycled name: LightSmokeTrail79
Log: Recycled name: LightSmokeTrail15
Log: Recycled name: LightSmokeTrail80
Log: Recycled name: LightSmokeTrail81
Log: Recycled name: LightSmokeTrail82
Log: Recycled name: UT_SpriteBallExplosion14
Log: Created name: BlastMark28
Log: Recycled name: LightSmokeTrail83
Log: Recycled name: LightSmokeTrail86
Log: Recycled name: LightSmokeTrail84
Log: Recycled name: LightSmokeTrail14
Log: Recycled name: RocketMk14
Log: Recycled name: RocketTrail14
Log: Recycled name: RocketMk15
Log: Recycled name: RocketTrail15
Log: Recycled name: LightSmokeTrail36
Log: Recycled name: LightSmokeTrail16
Log: Recycled name: LightSmokeTrail17
Log: Recycled name: LightSmokeTrail22
Log: Recycled name: LightSmokeTrail23
Log: Recycled name: LightSmokeTrail24
Log: Recycled name: UTSmokeTrail31
Log: Recycled name: UTSmokeTrail17
Log: Recycled name: UTSmokeTrail15
Log: Recycled name: UTSmokeTrail26
Log: Recycled name: LightSmokeTrail25
Log: Recycled name: LightSmokeTrail26
Log: Recycled name: UTSmokeTrail27
Log: Recycled name: UTSmokeTrail28
Log: Recycled name: UTSmokeTrail29
Log: Recycled name: UTSmokeTrail32
Log: Recycled name: UT_SpriteBallExplosion15
Log: Created name: BlastMark29
Log: Recycled name: UT_SpriteBallExplosion6
Log: Created name: BlastMark30
Log: Recycled name: LightSmokeTrail27
Log: Recycled name: LightSmokeTrail47
Log: Recycled name: LightSmokeTrail55
Log: Recycled name: LightSmokeTrail28
Log: Recycled name: UT_SpriteBallExplosion0
Log: Created name: BlastMark31
Log: Recycled name: UT_SpriteBallExplosion1
Log: Created name: BlastMark32
Log: Recycled name: UT_SpriteBallExplosion2
Log: Created name: BlastMark33
Log: Recycled name: RocketMk7
Log: Recycled name: RocketTrail7
Log: Recycled name: RocketMk0
Log: Recycled name: RocketTrail0
Log: Recycled name: LightSmokeTrail29
Log: Recycled name: RocketMk9
Log: Recycled name: RocketTrail9
Log: Recycled name: RocketMk6
Log: Recycled name: RocketTrail6
Log: Recycled name: UT_SpriteBallExplosion5
Log: Created name: BlastMark34
Log: Recycled name: LightSmokeTrail31
Log: Recycled name: LightSmokeTrail32
Log: Recycled name: LightSmokeTrail33
Log: Recycled name: LightSmokeTrail64
Log: Recycled name: UTSmokeTrail33
Log: Recycled name: UTSmokeTrail34
Log: Recycled name: UTSmokeTrail37
Log: Recycled name: UTSmokeTrail19
Log: Recycled name: UTSmokeTrail20
Log: Recycled name: UTSmokeTrail12
Log: Recycled name: UTSmokeTrail21
Log: Recycled name: UTSmokeTrail22
Log: Recycled name: RocketMk1
Log: Recycled name: RocketTrail1
Log: Recycled name: RocketMk5
Log: Recycled name: RocketTrail5
Log: Recycled name: LightSmokeTrail65
Log: Recycled name: LightSmokeTrail4
Log: Recycled name: LightSmokeTrail38
Log: Recycled name: LightSmokeTrail35
Log: Recycled name: UT_SpriteBallExplosion7
Log: Created name: BlastMark35
Log: Recycled name: LightSmokeTrail34
Log: Recycled name: LightSmokeTrail37
Log: Recycled name: LightSmokeTrail0
Log: Recycled name: LightSmokeTrail1
Log: Recycled name: LightSmokeTrail2
Log: Recycled name: UTSmokeTrail41
Log: Recycled name: UTSmokeTrail8
Log: Recycled name: RocketMk4
Log: Recycled name: RocketTrail4
Log: Recycled name: RocketMk8
Log: Recycled name: RocketTrail8
Log: Recycled name: LightSmokeTrail3
Log: Recycled name: LightSmokeTrail5
Log: Recycled name: LightSmokeTrail10
Log: Recycled name: UT_SpriteBallExplosion8
Log: Created name: BlastMark36
Log: Recycled name: LightSmokeTrail6
Log: Recycled name: LightSmokeTrail7
Log: Recycled name: LightSmokeTrail8
Log: Recycled name: LightSmokeTrail13
Log: Recycled name: UT_SpriteBallExplosion9
Log: Created name: BlastMark37
Log: Recycled name: LightSmokeTrail9
Log: Recycled name: LightSmokeTrail11
Log: Recycled name: LightSmokeTrail61
Log: Recycled name: UT_SpriteBallExplosion10
Log: Created name: BlastMark38
Log: Recycled name: LightSmokeTrail60
Log: Recycled name: LightSmokeTrail12
Log: Recycled name: LightSmokeTrail39
Log: Recycled name: LightSmokeTrail40
Log: Recycled name: UTSmokeTrail23
Log: Recycled name: UT_SpriteBallExplosion11
Log: Created name: BlastMark39
Log: Recycled name: UTSmokeTrail24
Log: Recycled name: UTSmokeTrail25
Log: Created name: UTSmokeTrail47
Log: Recycled name: UT_SpriteBallExplosion12
Log: Created name: BlastMark40
Log: Recycled name: LightSmokeTrail41
Log: Recycled name: LightSmokeTrail42
Log: Created name: UTSmokeTrail48
Log: Created name: UTSmokeTrail49
Log: Recycled name: UTSmokeTrail0
Log: Recycled name: UTSmokeTrail1
Log: Recycled name: UTSmokeTrail6
Log: Recycled name: UTSmokeTrail38
Log: Recycled name: UT_SpriteBallExplosion3
Log: Created name: BlastMark41
Log: Recycled name: RocketMk3
Log: Recycled name: RocketTrail3
Log: Recycled name: RocketMk2
Log: Recycled name: RocketTrail2
Log: Recycled name: LightSmokeTrail18
Log: Recycled name: RocketMk10
Log: Recycled name: RocketTrail10
Log: Recycled name: sgFlash0
Log: Recycled name: UT_SpriteBallExplosion4
Log: Recycled name: LightSmokeTrail19
Log: Recycled name: LightSmokeTrail20
Log: Recycled name: LightSmokeTrail82
Log: Recycled name: LightSmokeTrail21
Log: Recycled name: UT_SpriteBallExplosion13
Log: Created name: BlastMark42
Log: Recycled name: LightSmokeTrail30
Log: Recycled name: LightSmokeTrail74
Log: Recycled name: LightSmokeTrail75
Log: Recycled name: UTSmokeTrail16
Log: Recycled name: UTSmokeTrail2
Log: Recycled name: LightSmokeTrail76
Log: Recycled name: UTSmokeTrail3
Log: Recycled name: UTSmokeTrail39
Log: Recycled name: LightSmokeTrail77
Log: Recycled name: UT_SpriteBallExplosion14
Log: Created name: BlastMark43
Log: Recycled name: UTSmokeTrail9
Log: Recycled name: UTSmokeTrail40
Log: Recycled name: UTSmokeTrail42
Log: Recycled name: UTSmokeTrail43
Log: Recycled name: UTSmokeTrail46
Log: Recycled name: UTSmokeTrail35
Log: Recycled name: UT_SpriteBallExplosion15
Log: Created name: BlastMark44
Log: Recycled name: UTSmokeTrail44
Log: Recycled name: UTSmokeTrail45
Log: Recycled name: UTSmokeTrail28
Log: Recycled name: UT_SpriteBallExplosion6
Log: Created name: BlastMark45
Log: Created name: sgExpRocketCannon1
Log: Recycled name: sgParticle0
Log: Recycled name: sgParticle1
Log: Recycled name: sgParticle3
Log: Recycled name: sgParticle4
Log: Recycled name: sgParticle6
Log: Recycled name: sgParticle2
Log: Recycled name: sgParticle8
Log: Recycled name: sgParticle10
Log: Recycled name: sgParticle11
Log: Recycled name: sgParticle7
Log: Recycled name: sgParticle12
Log: Recycled name: sgParticle13
Log: Recycled name: sgParticle5
Log: Recycled name: sgParticle16
Log: Recycled name: sgParticle9
Log: Recycled name: sgParticle18
Log: Recycled name: sgParticle19
Log: Recycled name: sgParticle21
Log: Recycled name: sgParticle22
Log: Recycled name: sgParticle23
Log: Recycled name: sgParticle24
Log: Recycled name: sgParticle15
Log: Recycled name: sgParticle14
Log: Recycled name: sgParticle25
Log: Recycled name: sgParticle17
Log: Recycled name: sgParticle27
Log: Recycled name: sgParticle33
Log: Recycled name: sgParticle26
Log: Recycled name: sgParticle36
Log: Recycled name: sgParticle35
Log: Recycled name: sgParticle39
Log: Recycled name: sgParticle28
Log: Recycled name: sgParticle32
Log: Recycled name: sgParticle29
Log: Recycled name: sgParticle31
Log: Recycled name: sgParticle34
Log: Recycled name: sgParticle20
Log: Recycled name: sgParticle45
Log: Recycled name: sgParticle30
Log: Recycled name: sgParticle46
Log: Recycled name: sgParticle38
Log: Recycled name: sgParticle48
Log: Recycled name: sgParticle40
Log: Recycled name: sgParticle47
Log: Recycled name: sgParticle50
Log: Recycled name: sgParticle41
Log: Recycled name: sgParticle51
Log: Recycled name: sgParticle42
Log: Recycled name: sgParticle52
Log: Recycled name: sgParticle37
Log: Recycled name: sgParticle43
Log: Recycled name: sgParticle53
Log: Recycled name: sgParticle44
Log: Recycled name: sgParticle54
Log: Recycled name: sgParticle55
Log: Recycled name: sgParticle49
Log: Recycled name: sgParticle56
Log: Recycled name: sgParticle58
Log: Recycled name: sgParticle57
Log: Recycled name: sgFlash0
Log: Recycled name: RocketMk4
Log: Recycled name: RocketTrail4
Log: Recycled name: RocketMk8
Log: Recycled name: RocketTrail8
Log: Recycled name: UTSmokeTrail8
Log: Recycled name: UTSmokeTrail41
Log: Recycled name: UTSmokeTrail6
Log: Recycled name: UTSmokeTrail0
Log: Recycled name: UTSmokeTrail24
Log: Recycled name: UTSmokeTrail25
Log: Recycled name: UTSmokeTrail47
Log: Recycled name: UTSmokeTrail48
Log: Recycled name: UTSmokeTrail38
Log: Recycled name: UT_SpriteBallExplosion11
Log: Created name: BlastMark46
Log: Recycled name: UTSmokeTrail49
Log: Recycled name: UTSmokeTrail1
Log: Recycled name: UTSmokeTrail35
Log: Recycled name: UTSmokeTrail43
Log: Recycled name: UTSmokeTrail40
Log: Recycled name: RocketMk10
Log: Recycled name: RocketTrail10
Log: Recycled name: RocketMk2
Log: Recycled name: RocketTrail2
Log: Recycled name: RocketMk3
Log: Recycled name: RocketTrail3
Log: Recycled name: RocketMk11
Log: Recycled name: RocketTrail11
Log: Recycled name: LightSmokeTrail34
Log: Recycled name: LightSmokeTrail37
Log: Recycled name: LightSmokeTrail6
Log: Recycled name: UT_SpriteBallExplosion12
Log: Created name: BlastMark47
Log: Recycled name: LightSmokeTrail8
Log: Recycled name: LightSmokeTrail0
Log: Recycled name: LightSmokeTrail1
Log: Recycled name: LightSmokeTrail3
Log: Recycled name: UTSmokeTrail16
Log: Recycled name: UTSmokeTrail2
Log: Recycled name: LightSmokeTrail5
Log: Recycled name: UT_SpriteBallExplosion3
Log: Created name: BlastMark48
Log: Recycled name: LightSmokeTrail13
Log: Recycled name: UTSmokeTrail3
Log: Recycled name: UTSmokeTrail39
Log: Recycled name: LightSmokeTrail9
Log: Recycled name: UT_SpriteBallExplosion4
Log: Created name: BlastMark49
Log: Recycled name: LightSmokeTrail11
Log: Recycled name: UT_SpriteBallExplosion13
Log: Created name: BlastMark50
Log: Recycled name: LightSmokeTrail12
Log: Recycled name: UT_SpriteBallExplosion14
Log: Created name: BlastMark51
Log: Recycled name: RocketMk13
Log: Recycled name: RocketTrail13
Log: Recycled name: RocketMk14
Log: Recycled name: RocketTrail14
Log: Recycled name: UTSmokeTrail9
Log: Recycled name: UTSmokeTrail42
Log: Recycled name: UTSmokeTrail46
Log: Recycled name: UTSmokeTrail44
Log: Recycled name: UT_SpriteBallExplosion15
Log: Created name: BlastMark52
Log: Recycled name: LightSmokeTrail39
Log: Recycled name: UT_SpriteBallExplosion6
Log: Created name: BlastMark53
Log: Recycled name: UT_SpriteBallChild0
You do not have the required permissions to view the files attached to this post.
User avatar
sektor2111
Godlike
Posts: 6443
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [16] - XC_Core [5]

Post by sektor2111 »

I'll slap a couple of tests next period. Today I was cleaning machine for this new guest (XC v17) and I went to fully defrag drive in cause. It takes a couple of hours due to a cute German technology in wrapping files perfectly as in old Win98. After finishing job I'll prepare some party, I see orders speech fixed, pickups works, some A.I. looks stuck a bit randomly (not my MBot as much as a default Krall has been caught by a Door). I'll see if some collision issues will happen or not. In other map with low Gravity I was able to camp a while on a Wall (not permanent but strange) - I hope is not a side effect of new grid this Pawn's spider type tiny occurrences. On other note, it looks faster. Example: Map having a bunch of pawns, big, machine hosting both server and client 436 - it was running smoother as butter, no warping or frames blabbering.
7-8 times tick-rate went 15 of 30, I think in that moment I was gibing 40-50 pupaes with bEightball + using 8 MBots, more testing will come soon in an outside machine VIA Net.
User avatar
Barbie
Godlike
Posts: 2956
Joined: Fri Sep 25, 2015 9:01 pm
Location: moved without proper hashing

Re: XC_Engine [16] - XC_Core [5]

Post by Barbie »

It's a nice idea to decelerate the growing of the name table, but it breaks the rule that an object instance name is unique in a game session. (Is it in fact a rule? I've derived it from my log files only.)
Example: To overcome the problem the non-raising-event of a telefragged queen, a mapper could have added the following code in a timer function:

Code: Select all

if (ActorExists('Queen0'))
	return; // Queen is still alife
else
	RaiseEvent(EventOnQueenDeath); // my Queen has gone
If the "original" Queen0 was killed and the name Queen0 has been reused between two timer events, that above code is not reliable any more.

Maybe it's better to limit the name re-usage to objects with a limited life time only (LifeSpan != 0)?
"If Origin not in center it be not in center." --Buggie
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [16] - XC_Core [5]

Post by Higor »

Number one: names generated by a linker load object won't be recycled.
Number two: that has to be one of the most horrible ways I've seen of triggering that event.
User avatar
sektor2111
Godlike
Posts: 6443
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [16] - XC_Core [5]

Post by sektor2111 »

Barbie wrote: a mapper could have added the following code in a timer function:
Suuure... in 30 years of drawing walls... Majority are a utterly void at techs, and MAP is Factor number 1 in server troubles, unfortunately each so called Modder starts with doing maps - as always - a wrong start rather than understanding a common Trigger how do works and what is NOT recommended. Until some day I'll lose patience and all string "Queen" will be "PUPAE".
It's Pawn code doing nasty things at encroachment, somewhere Queen it's just removed without to call all death chain of events so good bye MRS Queen, you have been vaporized properly by mapper's dumbness.
For additional info stuff, I was probing what does Queen if is telefraged by Human or Bot, looks like it dies normally + Event properly granted.
Another pawn types with incomplete death things are FlockPawns. Bird1 is somehow fixable by calling "Level.Game.Killed...." from any mutator so player can even score such a kill, the rest seems just craps.
Maybe Higor can hook encroachment and removing sucky code if something goes True at ScriptedPawn with No PlayerReplicationInfo and No bIsPlayer (to leave UTDMT alone as it is) - types with "special" manure integrated to be loved with some C++ as SetEnemy, simply when Queen wants to teleport and location is busy claim Attack or TacticalMove. And return encroachment simple as for a Krall or other - No stupid un-existent gibing or removal.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [16] - XC_Core [5]

Post by Higor »

Event doesn't trigger if a pawn gets telefragged?
If the fix is simple I can hook it in.
User avatar
sektor2111
Godlike
Posts: 6443
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [16] - XC_Core [5]

Post by sektor2111 »

Not really at Queen and similar. Test:
A Cube, a CreatureFactory, a counter for triggering a Bing-Bang. Factory is fired. 5-7 Queens / row + QueenDests also used. See the percent rate of finishing them with Bing-Bang. Perhaps is relevant with 30 Queens, Insta or bEightball. Take pauses, kill, a small pause, kill. If they teleport into the same spot bye Counter - btw you can use a custom one to capture hits.
I think the key is that encroachment.
Edit:Another common recommended fix.
Ordering a Pawn with a state which doesn't exist. Revert dumbness to a default
fake example

Code: Select all

if (ScriptedPawn(P).Orders == 'SpamingShitInConsole') // Or some C++ finding available states if doesn't match what Pawn can do - except "attacking" because it's nonsense to attack walls.
ScriptedPawn(P).Orders = '';
I'm getting tired to hack all manure which mapping noobs are doing in Editor. I don't know a way to find if state is available in advance to not send Pawn nowhere. I can only reset things.
It is advisable to be operated under "bMonsterOrdersHack" - Yes, hack sounds better, we have to hack these for ruining trash 0 creativity.
Doable ?
I'm my opinion Engine should hack these by default with a small log "log: Wrong Setup > Creature $ThatGuy$ won't follow orders $something_rammed". And perhaps logging things as "Wrong, Bad, Error" might trigger them to a revision. it says "state Not found" and I think it causes confusion in understanding bad setup because Mapper did not debate any state he was messing at orders.

I could finish wrapping files and starting a bit of MH. Meh... Nice job so far... :thuup:

Edit2:
I sustain creating Bool configs for removal of SPEECH tweak because it doesn't work in outside properly. In MH5.04 I don't ATTACK any base I just "SearchAndDestroy". Like I said, bools are needed. Everything which might not be completed well it should be disabled on demand.
Chapter "glue" - Randomly Bot might getting stuck into a "deco-tree" or something like this. Predecessors didn't include this problem. Visible and annoying in LandsOfNapali. First time I though that I have a S3TC visual glitch.

Edit3:
Files problem - sorta mismatch.
Default UT > If player get a wrong UZ from redirect will attack a direct download from server downloading files twice and entering the game.
XCGE+ > If player get a wrong lzma (uz ?) file it won't return at server for direct download - it will get a drop connection unable to load proper file and join. I don't know where is coming from this problem.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [16] - XC_Core [5]

Post by Higor »

You are not specifying where the speech problem is occuring, menu of voice? (Because voice works for me)
BTW, replacing the superclass with Domination is a really fucked up hack, just sayin'

/.

Code: Select all

// for Voice message popup menu - since order names may be replaced for some game types
static function string GetOrderString(int i, string GameType )
{
	if ( i > 9 )
		return ""; //high index order strings are alternates to the base orders 
	if (i == 2)
	{
		if (GameType == "Capture the Flag")
		{
			if ( Default.OrderAbbrev[10] != "" )
				return Default.OrderAbbrev[10];
			else
				return Default.OrderString[10];
		} else if (GameType == "Domination") {
			if ( Default.OrderAbbrev[11] != "" )
				return Default.OrderAbbrev[11];
			else
				return Default.OrderString[11];
		}
	}

	if ( Default.OrderAbbrev[i] != "" )
		return Default.OrderAbbrev[i];

	return Default.OrderString[i];
}
User avatar
sektor2111
Godlike
Posts: 6443
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [16] - XC_Core [5]

Post by sektor2111 »

Server V17 - Client with only v17 files without INI specifications - Rammed - Server in other machine VIA NET using UCC.exe
Server V17 - Client v17 - Functional - Server in the same machine - Using UnrealTournament.exe.

Just check all instances - First time I said that it works (was same config server-client) but later it didn't (different configs).

Edit (above and bellow):
V16 used in the same environments was functional.
Perhaps I'm gonna change default rules by rewriting other ChallengeVoicePak and fixing it as I want, but still V17 is not a real need as long as player can camp on walls randomly ( MH-Godz...LastChance - LowGrav map 0 paths crappy inventories placed - good to check if MBot can manage dumb spots ). I've been fired in air by some pawn (never mind who) and shortly I was able to stay on a wall. So it's not a voice problem as much is physics related problem. By curiosity I'm gonna hunt some CTF Hockey related map which I heavy recall or a MH one with a few ICE surfaces for figuring if I can slide with 10000 speed as default UT is permitting - damn, I think I must do that "air smashing" mutator. (I recall my best moments of MH when I was able to watch a projectile flying around me, he he... while I was sliding on ICE and latter telling at projectile fired:"Damn, you are too slow this time, moooo...").
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [16] - XC_Core [5]

Post by Higor »

So after one week of live testing v17 on the most populated UT server with a very CPU demanding mod and I noticed a few things:

- Pretty damn stable.
I bet the collision grid changes are doing wonders here.
This crap took me almost two months of trial and error until I figured out what was going on.

- Bandwidth usage isn't always capped at maximum whene there's more than 12 players.
Despite the XC_TCPNetDriver's max client rate being 25000, it still hovers around ~17000 to ~23000.
That is because I added at last minute an experimental hack that's aimed at slightly reducing bandwidth usage on bSimulatedPawn actors, MH will see big benefits here as well.
The hack basically avoids updating location if the client is expected to properly predict the movement on his side.

- Loading times are better... but still inacceptably long (went from 40-20 secs to 30-15 secs)
I believe I know what's up here, actor names are being properly recicled and all.
But let's not forget actor channels are UObject derivates and therefore, named as well.
If my theory is right, a very crowded server will be generating 10x more channel names than actor names, rendering the name recycler useless on highly populated servers.


I'll add a case for 'Monsterhunt' in the PlayerSpeech hook so that it plays the same message as in domination, that's the least I can do before porting v17 to linux and releasing, your call sektor2111.

======================
Ideas for v18:

- DynamicLoadObject hook for servers and standalone games (gotta see how I do this without screwing up ServerCrashFix)
Adds polymorphism by allowing XC_Engine to load objects from a different package.
Example:
PackageOverride=BossSkins,ExtendedSkins0001
PackageOverride=SoldierSkins,ExtendedSkins0001
With the ability to automap the Override packages to be sent to clients, this will fix old mutators that use DynamicLoadObject and will allow some cool skin modifications without taking up too much bandwidth (facepacks for existing skins, portraits for faces without portraits, etc)

- Actor Channel naming convention.
Each connection can only have up to 1023 channels... so I 'could' hardcode the channel names based on the slot they occupy to avoid creating new names.
May or may not be possible but worth a shot if it fixes loading times.

- Massive ScriptedPawn hooks.
Native SetEnemy, ability to plugin attitute to non-scriptedpawns (?)
Fix as many accessed nones I can.
Make Queen not teleport if no teleport dest, or have said pawns use FerBotz styled AI to pick an aggression/flee teleport location without queendests (?)
Improve Skaarj behaviour, fix the mutated weapon issue if possible.
User avatar
sektor2111
Godlike
Posts: 6443
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: XC_Engine [16] - XC_Core [5]

Post by sektor2111 »

Skaarj tweaking must be under bool config. Why ? Simply "default" trash MH servers will need that. My server doesn't need anything because I have other timers + my pawns are SUCKING weapons around without hacks. Actually if you look at NsTDM2 Skaarj given as example doesn't fail weaponry and not even LogPickup stupidity.

Chapter general Scriptedpawn
Allow development - POINT headers without style "SetEnemy" because people might want to rewrite that after their needs, native should not screw a FALSE demanded by that pawn.
It might be a check if possible to get a hack way through "packageremap" UnrealShare.ScriptedPawn -> SomeIniDefinedPackage.ScriptedPawn - let people to fix monsters without MonsterSpawn type "fixes" exiting servers with returns and no dead messages in controller when are killed by lava, acid or other nasty things.
I'm using

Code: Select all

if (something != None)
{
Proceed();
}
and I avoid as much as possible this one - I got last confirmation in some MHBotyMan where at a moment it stops working due to returns abused - since nobody send feedback or seems interested about it, I don't need to release any public fix, I avoid >>

Code: Select all

if (something == None) return;
Pretty unhealthy, in C++ return means end of program - fix me if I'm mistaking.
Higor wrote:Native SetEnemy, ability to plugin attitute to non-scriptedpawns (?)
Finally...
NsMonster_Res.zip
Here is a sort of monster that can be friend if Team byte is properly set (I have Spawner for that and game-type as well), so these things might be let alone as they are VIA bools. Yes, Attitude was a Problem after all - now it's not.
You do not have the required permissions to view the files attached to this post.
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [16] - XC_Core [5]

Post by Higor »

sektor2111 wrote:Skaarj tweaking must be under bool config.
Tweaking will not be destructive, the native hook on Skaarj (and maybe mutator's replacer) will interact with SpawnActor directly to attempt to guarantee a direct Spawn result.
They'll probably get smarter too...

sektor2111 wrote:SetEnemy
There will be additional events that may optionally be called, I'll be using FerBotz's enemy setting system for these and they will override any other ScriptedPawn rules if present.
- Event set 1: will be handled by a registered attitude handler if present.
- Event set 2: (runs if event 1 doesn't override result) will be handled by the would-be enemy pawn.

sektor2111 wrote:UnrealShare.ScriptedPawn -> SomeIniDefinedPackage.ScriptedPawn
Impossible.

sektor2111 wrote:Pretty unhealthy, in C++ return means end of program - fix me if I'm mistaking.
Attempting to access an invalid pointer results in a General Page Fault, returns must be had where they're needed.
Branching into the end of function is virtually the same as returning... if you take a look at compiled assemblies, also, contrary to unrealscript stacking boolean operators on IF checks will generate new branches so you can either stack all returns in a single IF or add a single return per infividual IF, the compiler will do the same.

SetEnemy is an event and doesn't run intensively, branching can be done excessively without any performance worries, properly branching the code will yield expected results without crashing the program.


===================
===================
On a completely different note, where we actually want to optimize and hope our optimization doesn't have bugs.
An example where we want to eliminate conditional branching to maximize execution speed, modern CPU's have code pipelines so they run faster if they can predict the code path effectively:

This is my version of the FastTrace used by relevancy loop, this goes through transparent surfaces in the BSP tree... most of them anyways.

- Surface flag checking:
NF_NotCsg = 0b00000001 (1)
NF_NotVisBlocking = 0b00000100 (4)
We need to see if a surface has either of both flags.
Take a look at both old and new lines for NotCsg, I removed a conditional operator and replaced it with bitwise shifting+masking.
The compiler will not generate a code branch and the CPU will not have to rebuild the code pipeline if it doesn't accurately predict the result of a hypothetical || operator, the branchless code is guaranteed to run faster on a modern CPU despite having one or two more instructions in it.

- Distance of Start/End to plane that contains surface (Dist array) evaluation:
Instead of setting up G1, G2 early on and see if they match (same sign of distance, same side of plane)
We're doing a bitwise XOR to turn non-identical bits into 1's, so numbers of different sign will end with it's sign bit in 1 (negative), THEN we perform the sign check.
** We're interpreting the Dist array as integers here, see the reinterpretation: *(INT*)&FloatVar
** This way, the compiler will not utilize the FPU stack that require loading and popping and will directly operate on it's general purpose registers (EAX, EBX, etc)
Then we setup either G1 or G2, this specific piece of code is very hard to predict

Some of the new compilers will employ internal tricks based on architecture to turn actual conditional code into branchless code internally, but I'm doing it anyways because VC++6 and gcc2.95 are ancient.

Also, DoublePlaneDotU and FLinePlaneIntersectDist are XC_Core inlines with SSE assembly on them, lots of memory read/write operations are eliminated here.
You'll find more SSE1 assemblies in the XC_Core headers than in most of the internet so it's a good resource if you ever go that deep, everyone using SSE intrinsics these days (or simply compiling their code with ISE)

Code: Select all

//Relevancy traces use this
//CAREFUL: End and Start's W must be -1.f
static BYTE LineCheckInner( INT iNode, FVector4* End, FVector4* Start, BYTE Outside )
{
	while( iNode != INDEX_NONE )
	{
		const FBspNode&	Node = (const FBspNode&)GLineCheckNodes[iNode];
		FLOAT Dist[2];
		DoublePlaneDotU( &Node.Plane, Start, End, Dist);
//		BYTE  NotCsg = (Node.NodeFlags & NF_NotCsg) || (Node.NodeFlags & NF_NotVisBlocking);
		BYTE  NotCsg = (Node.NodeFlags & NF_NotCsg) | ((Node.NodeFlags & NF_NotVisBlocking) >> 2); //No branches right?
//		INT   G1 = *(INT*)&Dist[0] >= 0;
//		INT   G2 = *(INT*)&Dist[1] >= 0;
//		if( G1!=G2 )
		if ( (*(INT*)&Dist[0] ^ *(INT*)&Dist[1]) < 0 ) //Different sign check
		{
			INT G2 = *(INT*)&Dist[1] >= 0; //Better here
			FVector4 Middle = FLinePlaneIntersectDist( Start, End, Dist);
			if( !LineCheckInner(Node.iChild[G2],&Middle,End,G2^((G2^Outside) & NotCsg)) )
				return 0;
			End = &Middle;
		}
		INT   G1 = *(INT*)&Dist[0] >= 0; //Better here
		Outside = G1^((G1^Outside)&NotCsg);
		iNode   = Node.iChild[G1];
	}
	return Outside;
}
Higor
Godlike
Posts: 1866
Joined: Sun Mar 04, 2012 6:47 pm

Re: XC_Engine [17] - XC_Core [5] - XC_IpDrv

Post by Higor »

XC_Engine changes for version 17:

Linux:
- Compatible with v440/v451. (99% tested)
- Failure to load a map shouldn't crash the game.
-+- Relevancy traces on relevancy loop will go through walls due to a GCC bug, will fix for v18
-+- Said bug affects most vector4 math

XC_GameEngine:
- Removed ThreadCount property.
- Red loading screen.
- Game version text on main menu displays XC_Engine, XC_Core versions.
- LoadMap replaced with own code, better hook points.
** Now all XC_Engine specific code can also be used during level initialization.

Level hook:
- Newly spawned actors' names will be tagged as recyclable and will be reused when the owner actors are destroyed.
** Tremendously simplifies the name hash on long, loaded games.
** Garbage collector takes less time during level switch.
*** Dumb mappers that use particle generators are no longer dumb (BOOYA!).
* (Still doesn't address servers with huge channel counts)

New Relevancy Loop:
- Fixed update frequency being misscaled on listen servers.
- Improved tickrate stability on crowded servers.
- Added actor property: bNotRelevantToOwner (net owner does not receive this actor)
- When channel count reaches 800, the server starts discarding bAlwaysRelevant actors to keep free channel slots.
- For spectators, checks for non-owned actors are capped at half the server tickrate.
- Implemented Pawn replication hack that reduces bandwidth usage by not updating location when necessary.
** Calculates (LastLocation+Velocity*Delta) and compares it with CurrentLocation, if distance between both
** is less than 1 unit then data is not sent. (Saves bandwidth for most walking pawns without degrading gameplay)

FCollisionCacus:
- Actor validity check added, should get rid of the crashes for actors that aren't properly removed from the grid.
- Fixed XC_PrimitiveActor crash when HitActor=none.
** HitActor is set before primitive code is used.
** Therefore more than one actor may use the same primitive actor.
*** Not recommended for primitives that precache information.
- Fixed 2-unit sized discrepancy in Mover HitLocation between clients and dedicated servers that don't use brush tracker.
** Clients add Normal*2 to hit location to make sure movers are prioritized over level due to brush tracker.
*** This behaviour is now present even if brush tracker doesn't exist.
*** This should also fix yet another 'CheckForActors' crash.
- Fixed a rare bug where two nodes end up being created in the same grid spot, causing all sorts of anomalies.
- Simplified node initialization/destruction.
** Removed a dynamic array with node references.
*** Creating/destructing nodes faster now.

FPrecomputedRay:
- Some more optimization on most of it.
** More vectorization.
** Added special case for horizontal-only traces.
*** Should be better on levels with lots of walking pawns.
*** Now there's 3 cases: general, vertical, horizontal

Added XC_PrimitivePlane:
- Applies plane collision within the actor cylinder.
- Can be centered at the actor or the primitive actor.
- Can be fully solid behind the collision plane.
- Supports one-way collision traces through the plane.

Added native hook for ChallengeVoicePack.PlayerSpeech
- Respones with CallSign -1 are global (example: Speech 0 0 -1 says "Roger" globally)
- "Got your back" and "Hang in there" messages targeted at teammate being aimed at.
- Fixes massive log spam on any game that uses non-player pawns.
- Domination attack cue "Search and Destroy" also applied to MonsterHunt

Added native hook for UWindowList.Sort
- Massive speed increase on practise session menu.
- No crash when map number exceeds a certain number.
*** Disconnect first, hook only active when player isn't connected to a server!!!

Added native hooks on PlayerPawn (with corresponding log warnings fixed):
- ViewClass: much faster, doesn't lag or crashes the server.
- ViewPlayerNum: same as above, also works as in UTPure for spectators (num = PlayerID instead of TeamID)
- ViewPlayer: Partial name matches if no exact match is found (case sensitive).
- TeamSay: added UTPure styled macros '%z' (location), '%h' '%H' (hp, health), '%a' '%A' (a, armor), '%w' '%W (weapon)


XC_IpDrv changes:

Fixed some of the URL errors causing bad resolve requests and inability to reach some redirects.
Added connection count can be capped, all dataless connections are closed once cap is hit.
** Default value: ConnectionLimit=128