Need More Fixes ?

Posts about Nelsona's findings in UT!
Post Reply
User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Wed Nov 14, 2012 1:16 am

Hm, I think I loved Bots enough. I was wandered if monsters can travel opening all doors (except mission objectives) to travel from a room to another or even to use small lifts. Yep is a small challenge but is not so harmfull, a mountain of maps doesn't have paths (chickens) so I have no reason to be woried about their ability to handle doors, :D.

For maps pathed ? No problem. Just run ... is not a stupid race this MH (as a few "players" are thinking) ? If end is not active by default might be a charm looking at you hunted well, :P. At least I'm not woried because I know how are acting monsters - you should learn fighting as well not laming, and can be helpfull and interesting. Also playing as a team is helping a lot.

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Sat Nov 17, 2012 1:40 pm

Another subject might be frustration by other player.
Looking around to a takedamage function, we can debate a different formula:

Code: Select all

	if(bUseAntiBoost)
	{
		if(Victim != None && InstigatedBy != None)
		{
			if ((InstigatedBy.IsA('PlayerPawn') && Victim.IsA('PlayerPawn') && Victim != InstigatedBy) || (InstigatedBy.IsA('Bot') && Victim.IsA('PlayerPawn')))
			{
				Momentum.z *= 0.1;
				Momentum.x *= 0.1;
				Momentum.y *= 0.1;
				if (string(DamageType)=="RedeemerDeath")
				{
					Victim.Velocity = Victim.Velocity * 0.05;
				}
			}
		}
	}
Now let's translate what is about.
We have a victim and an instigator. If victim is not the same with instigator he won't move too much (we have default friendly fire without to alter game-rules). If instigator is closer to damage area will suffer based on his/her/it's own action. Which means even if an aggressive Bot is using brute force will be punished without to throw player in the sky but might throw other Bot - die together because you help each-other not me when I call help. In fact, laming around developing frustration for others is punished very nice. I did not find a good antiboost as I wanted to be. More stuff has nothing for Kira, is time to deal with hitsounds as well, :P.
Let me see if is not recommended even a small taunt from victim informing instigator about his non-teamplay actions: Loser, etc. But might be spam, so let's leave these alones.

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Sun Dec 02, 2012 12:54 pm

I'm not crying for default MH game when we play it local.

Code: Select all

ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function MonsterHunt.MonsterHunt.AddToTeam:0150) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function MonsterHunt.MonsterHunt.AddToTeam:0185) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function MonsterHunt.MonsterHunt.AddToTeam:0150) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function MonsterHunt.MonsterHunt.AddToTeam:0185) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function MonsterHunt.MonsterHunt.AddToTeam:0150) Accessed None
....
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.TeamGamePlus.ReduceDamage:007D) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.TeamGamePlus.ReduceDamage:0095) Accessed None
ScriptWarning: UTStatLogFile MH-BelowTheCaves.UTStatLogFile0 (Function Engine.StatLog.LogPickup:005F) Accessed None
ScriptWarning: UTStatLogFile MH-BelowTheCaves.UTStatLogFile0 (Function Engine.StatLog.LogPickup:005F) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.TeamGamePlus.ReduceDamage:007D) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.TeamGamePlus.ReduceDamage:0095) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.TeamGamePlus.ReduceDamage:007D) Accessed None
happening right when we start the party. Nice start... grrr...
After some debates I have reworked a few codes (these errors not exist in Server) but are so visible playing local. Somewhere a few errors are lost, server console looking like a clean crystal. My question: These errors blocked somewhere won't show some teeths later like a mad dog ? Maybe yes. Remaining to solve:

Code: Select all

ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
ScriptWarning: MonsterHunt MH-BelowTheCaves.MonsterHunt0 (Function Botpack.DeathMatchPlus.ChangeName:0085) Accessed None
Log: Possessed PlayerPawn: TMale1 MH-BelowTheCaves.TMale3
Well, counting number of such errors I observed something... they match the skaarjs number from maps. Now I have to rework that function and to import it in controller to override default stupid bIsPlayer call which is triggered by monster and it doesn't have replication like players, urghh - and others found this ideea for other weapon-holders which are coded worse than Skaarj, LOL...
Last edited by Nelsona on Sun Dec 02, 2012 5:57 pm, edited 1 time in total.

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Sun Dec 02, 2012 1:06 pm

The function AddToTeam was reworked and now is silent in both instances ON-LINE and OFF-LINE.
New option

Code: Select all

function AddToTeam( int num, Pawn Other )		//Yea, exactly to Team (not outside :D)
{
	local teaminfo aTeam;
	local Pawn P;
	local bool bSuccess;
	local string SkinName, FaceName;
	num = 0;

	if ( Other == None )
	{
		log("Added none to team!!!");
		return;
	}
	
	if (MaxTeams == 2 || MaxAllowedTeams == 2) //So what ? Let me know if might be a problem ...
	if ( Other != None )
	{
		aTeam = Teams[num];
		aTeam.Size++;
		Other.PlayerReplicationInfo.Team = num;
		Other.PlayerReplicationInfo.TeamName = aTeam.TeamName;
		bSuccess = False;
		if ( Other.IsA('PlayerPawn') && !Other.IsA('ScriptedPawn'))
		{
			Other.PlayerReplicationInfo.TeamID = 0; //So, team assigned, right ?
// PlayerPawn(Other).ClientChangeTeam(Other.PlayerReplicationInfo.Team); I cannot see a reason to force client to step in red, this will happen anyway
		}
		else if ( Other.IsA('ScriptedPawn') )
			ScriptedPawn(Other).TeamID = 1; //I think is better in AlwaysKeep :D

		while ( !bSuccess )
		{
			bSuccess = true;
			for ( P=Level.PawnList; P!=None; P=P.nextPawn )
				if ( P.bIsPlayer && (P != Other) && !P.IsA('ScriptedPawn')  //LOL, never deal with monsters
					&& (P.PlayerReplicationInfo.Team == Other.PlayerReplicationInfo.Team) 
					&& (P.PlayerReplicationInfo.TeamId == Other.PlayerReplicationInfo.TeamId) )
					{	
					Other.PlayerReplicationInfo.TeamID++;
					bSuccess = False;
					}
		}

		if (MonsterReplicationInfo2(GameReplicationInfo).bUseLive)
			Other.PlayerReplicationInfo.Deaths = MonsterReplicationInfo2(GameReplicationInfo).Live;

		if (MonsterReplicationInfo2(GameReplicationInfo).bUseTeamSkin)	//Bla, bla something is missing here anyway
		{
			Other.static.GetMultiSkin(Other, SkinName, FaceName);		//Was always nasty in Network
			Other.static.SetMultiSkin(Other, SkinName, FaceName, num);
		}
	}
}

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Sun Dec 02, 2012 5:49 pm

Accesed nones from ChangeName were killed, LOL...

Code: Select all

function ChangeName(Pawn Other, string S, bool bNameChange) //This is called returning some errors... Fixed ?
{
	S = left(S,24);
	if (Other.PlayerReplicationInfo.PlayerName~=S)
		return;
	Super(GameInfo).ChangeName(Other, S, bNameChange); //Let GameInfo to deal with this chapter
}
I think simple is faster than doing PawnList (including monsters). If I'll be disturbed by changing names during spectating I'll setup restriction. For the moment I'm not using spectator slots because is not a movie, is a game :!: .

Done ? Well we have cross-roads between Skaarjs and Bots.

Code: Select all

(Function Botpack.TeamGamePlus.SetBotOrders:018C) Accessed None
(Function Botpack.TeamGamePlus.SetBotOrders:018C) Accessed None
(Function Botpack.TeamGamePlus.SetBotOrders:018C) Accessed None
Next move, errors killed by me...

Code: Select all

function SetBotOrders(Bot NewBot) //This is called as well returning errors - Fixed ?
{
	local Pawn P, L;
	local int num, total;

	// only follow players, if there are any
	if ( (NumSupportingPlayer == 0)
		 || (NumSupportingPlayer < Teams[NewBot.PlayerReplicationInfo.Team].Size/2 - 1) ) 
	{
		For ( P=Level.PawnList; P!=None; P= P.NextPawn )
		{
			if ( P.IsA('ScriptedPawn') ) //Keep going without this ANIMAL
				continue;
			if ( P.IsA('PlayerPawn') && (P.PlayerReplicationInfo.Team == NewBot.PlayerReplicationInfo.Team)
					&& !P.IsA('Spectator'))
				{
					num++;
					if ( (L == None || L.IsA('ScriptedPawn')) || (FRand() < 1.0/float(num)) ) //Next exception...
						L = P; //Modify if null or is monster
				}
		}
		if ( L != None )
		{
			NumSupportingPlayer++;
			NewBot.SetOrders('Freelance',None,True); //Not Follow, move out of here
			return;
		}
	}
	num = 0;
	For ( P=Level.PawnList; P!=None; P= P.NextPawn )
	{	
		if ( P.IsA('ScriptedPawn') ) //Keep going without this
			continue;
		if ( P.bIsPlayer && (P.PlayerReplicationInfo.Team == NewBot.PlayerReplicationInfo.Team) )
		{
			total++;
			if ( (P != NewBot) && P.IsA('Bot') && (Bot(P).Orders == 'Attack') ) //Engage attack for this one
			{
				num++;
				if ( (L == None || L.IsA('ScriptedPawn')) || (FRand() < 1/float(num)) ) //Repeat, asses other pawn if monster or none... craps eliminated.
					L = P;			}
		}
	}			
	if ( (L != None) && (FRand() < float(num)/float(total)) )
	{
		NewBot.SetOrders('Freelance',None,true); //Stop bugging me with follow, move on...
		return;
	}
	NewBot.SetOrders('Freelance', None, true); //Attack might bug here - no relevant target just a stupid keypoint :|
}
Now I can see silent night in console (jobs executed for local environment).

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Tue Dec 11, 2012 2:00 pm

Other rarely but with chances to happen:

Code: Select all

function CheckEndGame()		//If a dude is losing lives will be removed from party, too bad
{
	local Pawn PawnLink;
//	local int StillPlaying; useless copied from Domination - Nice codes soup
//	local bool bStillHuman;
	local bot B, D;

	if ( bGameEnded )
		return;

	LivePpl = 0;
	PlainPpl = 0;

	for ( PawnLink=Level.PawnList; PawnLink!=None; PawnLink=PawnLink.nextPawn )
	{
		if (PawnLink.IsA('ScriptedPawn')) //Except these, pls...
			continue;
		if ( PawnLink.bIsPlayer)
		{
			if ( ( PawnLink.PlayerReplicationInfo.Deaths >= 1 ) && 
				!PawnLink.PlayerReplicationInfo.bIsSpectator )
				LivePpl ++;
			if ( PawnLink.IsA('PlayerPawn') &&
				(PawnLink.PlayerReplicationInfo.Deaths >= 1) )
				PlainPpl ++;
		}
	}
	if ( LivePpl < 1 )
		EndGame("No Hunters");

	else if ( PlainPpl < 1 && LivePpl > 0 ) //Only if human(s) missing and is still somebody here.
	{
		for ( PawnLink=Level.PawnList; PawnLink!=None; PawnLink=PawnLink.NextPawn )
		{
			B = Bot(PawnLink);
			if ( (B != None) && (B.Health > 0) )
				B.SetOrders('Attack',None,true);
		}
	}		
}
In maps where Skaarjs are spawning a lot...

Code: Select all

function int ReduceDamage(int Damage, name DamageType, pawn injured, pawn instigatedBy)
{
	Damage = Super(DeathMatchPlus).ReduceDamage(Damage, DamageType, injured, instigatedBy);

	if ( instigatedBy == None )
		return Damage;

	if (instigatedBy != injured)
	{
		if (injured.bIsPlayer && !injured.IsA('ScriptedPawn') && instigatedby.IsA('ScriptedPawn'))
			return (Damage*instigatedby.DamageScaling);
		else if (injured.IsA('ScriptedPawn') && !instigatedby.IsA('Scriptedpawn'))
			return (Damage*instigatedby.DamageScaling);
		else if (injured.IsA('ScriptedPawn') && instigatedby.IsA('ScriptedPawn'))
			return Damage; //manage later other things with TakeDamage
		else if ( injured.bIsPlayer && instigatedby.bIsplayer && !injured.IsA('ScriptedPawn') && !instigatedby.IsA('ScriptedPawn'))
		{
			if ( injured.IsA('Bot'))
				Bot(Injured).YellAt(instigatedBy);
			return (Damage * FriendlyFireScale);
		}
		else return Damage; //other instances are bad anyway;
	}
	else
		return Damage;
}
Continuing checks...

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Tue Dec 11, 2012 5:03 pm

Personal observation (I'm sorry if is a bit off-topic ):

Now I can see very very well why in default INI we have bNoMonsters=True... LOL, some guys weren't able to deal with their own stuff. Or grandmother started the soup and grandfather continued this soup following steak rules :lol: , both of them being a half blind :mrgreen: .

Off-Topic ended. Back in subject.
Now I have to check each function what is doing or is not doing, and if it need to do something for me (even for others).

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Fri Dec 14, 2012 6:36 am

In chapter values, settings, distances, a guy asked me how I can do a bunch of tests. I'm doing only a few tests but they can be enough relevant. Assuming you want to see a very dangerous monster in a map, my suggestion is to learn some A.I. or else you just mess up as shown in these images:
NotYet.JPG
Even is boosted by mod to have 5000 SightRadius he cannot see me yet and Engine is assuming I cannot see him (engine maybe is retard this time, LOL) I'm at 4480 much lower than 5000 and I cannot see anything dangerous yet.

Later:
EnemyDetected.JPG
It seems finally to see me and to try some combat under 3500 UU,
You don't want to see other settings and orders added ...

Now I have to stop some "ideeas" because are just forcing engine useless without to return something cool.
You do not have the required permissions to view the files attached to this post.

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Sat Dec 15, 2012 1:15 pm

Next subject... um... might be linked better to mapping... or can be added in new game-type. Let me present something:

Code: Select all

function NavigationPoint FindPlayerStart( Pawn Player, optional byte InTeam, optional string incomingName )
{
	local PlayerStart Dest, Candidate[16], Best;
	local float Score[16], BestScore, NextDist;
	local pawn OtherPlayer;
	local int i, num;
	local Teleporter Tel;
	local NavigationPoint N;
	local byte Team;

	if ( bStartMatch && (Player != None) && Player.IsA('TournamentPlayer') 
		&& (Level.NetMode == NM_Standalone)
		&& (TournamentPlayer(Player).StartSpot != None) )
		return TournamentPlayer(Player).StartSpot;

	if ( (Player != None) && (Player.PlayerReplicationInfo != None) )
		Team = Player.PlayerReplicationInfo.Team;
	else
		Team = InTeam;

	if( incomingName!="" )
		foreach AllActors( class 'Teleporter', Tel )
			if( string(Tel.Tag)~=incomingName )
				return Tel;

	if ( Team == 255 )
		Team = 0;
				
	//choose candidates	
	for ( N=Level.NavigationPointList; N!=None; N=N.nextNavigationPoint )
	{
		Dest = PlayerStart(N);
		if ( (Dest != None) && Dest.bEnabled
			&& (!bSpawnInTeamArea || (Team == Dest.TeamNumber)) )
		{
			if (num<16)
				Candidate[num] = Dest;
			else if (Rand(num) < 16)
				Candidate[Rand(16)] = Dest;
			num++;
		}
	}

	if (num == 0 )
	{
		log("Didn't find any player starts in list for team"@Team@"!!!"); 
		foreach AllActors( class'PlayerStart', Dest )
		{
			if (num<16)
				Candidate[num] = Dest;
			else if (Rand(num) < 16)
				Candidate[Rand(16)] = Dest;
			num++;
		}
		if ( num == 0 )
			return None;
	}

	if (num>16) 
		num = 16;
	
	//assess candidates
	for (i=0;i<num;i++)
	{
		if ( Candidate[i] == LastStartSpot )
			Score[i] = -6000.0;
		else
			Score[i] = 4000 * FRand(); //randomize
	}		
	
	for ( OtherPlayer=Level.PawnList; OtherPlayer!=None; OtherPlayer=OtherPlayer.NextPawn)	
		if ( OtherPlayer.bIsPlayer && (OtherPlayer.Health > 0) && !OtherPlayer.IsA('Spectator') )
			for (i=0; i<num; i++)
				if ( OtherPlayer.Region.Zone == Candidate[i].Region.Zone ) 
				{
					Score[i] -= 1500;
					NextDist = VSize(OtherPlayer.Location - Candidate[i].Location);
					if (NextDist < 2 * (CollisionRadius + CollisionHeight))
						Score[i] -= 1000000.0;
					else if ( (NextDist < 2000) && (OtherPlayer.PlayerReplicationInfo.Team != Team)
							&& FastTrace(Candidate[i].Location, OtherPlayer.Location) )
						Score[i] -= (10000.0 - NextDist);
				}
	
	BestScore = Score[0];
	Best = Candidate[0];
	for (i=1; i<num; i++)
		if (Score[i] > BestScore)
		{
			BestScore = Score[i];
			Best = Candidate[i];
		}
	LastStartSpot = Best;
				
	return Best;
}
Let's talk less even this code is long...
Is about a map very meant for servers with 32 slots having a bunch of player starts placed at begining. Correct ?
NOPE ! Not even a bit !
Without a custom MH controller any player joined will find a random PlayerStart from a list. How many ? 16, read again.
Adding 24 or 30 is complete useless. Default routines are looking for an empty place decreasing order. By example might start from PlayerStart 15 continuing until 0, yeah will be better to keep notice about "new playerstarts" and how we adding them in map - exactly in reverse. This subject was debated in other old forums but seems to be for nothing - lazy people aren't bother to search in forums different things. Let's clarify this subject then.

Previous function can be added simply modifying 16 with 32 and we can be GOTY ready. Right ? Maybe... yes. For the moment is just this default, not very fixable in default MH.

Do I need support for GOTY with more players at least for map randomizing spawning if players aren't so many now days, in a team, all of them can spawn in the same time (in theory or in reality - some server I think needs this) ? Even some maps are brutalizing the brain of beautifull player with small rooms and others with frames lost in huge rooms for non-hunters, we have to be ready for everything or simply we can ignore spawning an entire army.

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Sat Dec 15, 2012 8:14 pm

EvilGrins asked Ferali about some pawns to be used as monsters. If is a good ideea or not I think I have to prepare new A.I... Controller being done (I guess) I just told a small story at monsters. They are nice usually - human player is the only enemy native possible (other recoded classes might be more aggressive not defaults), even aren't instructed to hunt FlockPawns, TeamCannons (other abstract of these "cool pawns") and so on. If monsters are hunted by different pawns (even Biterfishies ?), they will respond at damage with hate, once hated a pawn is a matter of seconds until will be brutalized by original monsters. And that's it. Now I'm waiting to see "maps" because I'm interested in testing.

Firsts personal tests were succesfull. Skaarj spawned over Cannons touching them triggered their interest to open fire. In less than a second Skaarj fought back stoping cannon. Later he even attacked Mercs (those special Mercenaries from MH-Lost-Souls) because Mercs weren't glad about Skaarj presence. Was a prety cool battle.

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Sun Dec 16, 2012 6:46 am

Continuing more testing monsters and less monsters. I think now I know why game might be completely stucked (happens rarely but there are such chances).

Default monster will calculate Strength VS his enemy based on weapon's rating holded by enemy, intelligence, health. When this computing result will attempt to involve unexistent values from other pawns undeclared anywhere, he even will refuse to believe that was killed stucking something in engine. If you are panicated bind a key for TaskManager and have fun with that, :lol: .

Also I have to scan in hoping to catch other interesting bunch of errors appeared from nowhere in other test. Those Mercs suddenly triggered accesed nones at computing RelativeStrenght (just copied codes from default monster and nothing fixed, LOL - SprayTarget - accesed none, etc.), maybe they discovered a Skaarj dying killed by a cannon and they were triggered in attack to hunt a dead body, anyway I'll check what kind of errors might occur when is used a pawns soup in maps each of them trying to kill something and trying to evaluate their enemy with missing variables and doing divide by 0 (zero - lol, learn some math if you want to understant what is a divide by 0, :P), this time game not crashed, but errors were spreaded in next game as well (garbage objects unremoved ?).
So, I'm agree to see a bunch of classes added, maybe is helping mapper to gain popularity as a guy who don't know what is doing, but he is keep working in hope for a new game-type meant to sustain all trashes even to predict future like Nostradamus what will be added in 2020 and to not crash, I want to see that controller...

User avatar
Kelly
Posts: 131
Joined: Sat Dec 01, 2012 2:29 am
NoMoreSpam: Silver
Location: Coos Bay, Oregon

Re: Need More Fixes ?

Post by Kelly » Sun Dec 16, 2012 6:51 am

Nelsona wrote:(garbage objects unremoved ?).
That right there is at the heart of a lot of UT's problems.
When everyone you ever known is headed for a headstone
I don’t wanna give the end away but we’re gonna die one day

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Wed Dec 19, 2012 1:42 am

That's why I think I have to debate that but is prety hard.

Other thing, as I could see randomly, I tweaked a bit roaming state of monster, even is lazy and is not runing. If is a roamer and doesn't have a desired enemy or target will keep moving around appearing in unexpected places. I found this good for my tastes. I don't need to learn about a monster as being only in a certain location and to predict position - is unfair. Randomizing the hunt was in purpose for a long time. Is not the best ever code done because in default are counted the number of roamers, if are too many they will stop roaming, but is a bit of help when there are 2 or 3 roamers. I'll try to have a deal with this count system as well and later will check CPU load in heavy loaded maps and PATHED.

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Thu Dec 20, 2012 1:57 pm

Between maps, after ending votes, server will pass to next voted map. Grr, now I'm disturbed and I have to rework HUD no. 3. This one returns a few accesed none (seems not harmfull because nobody is crashing), first thing coming in my head about these errors seems an attempt to draw something in spectating mode before to start game, damn, now is a bit of challenge to stop them, because I need more tests in order to have good results.

User avatar
Nelsona
Posts: 998
Joined: Sun Mar 06, 2011 11:45 am
Location: Still at Keyboard
Contact:

Re: Need More Fixes ?

Post by Nelsona » Sat Dec 22, 2012 6:39 am

Expected result seems good - related to HUD.

But (other chapter)... happening exactly like in Coop Games, some movers with special properties for monsters rarely (or often in MH) might remains stucked after a good fight around. As I noticed the causes, mover is not done only as a moving brush (to anoy pawns) but even he speak with them for a while (A.I. code from mover). Is some problem here because mover even triggered by monsters won't notice this subject too much (mostly the Bot is on target), by example even a mover under "TriggerControl" might remain blocked in open position if can be multiple triggered and some instigators are gone in heaven or they are already too far runing fast from that location. Also mover cannot speak with dead pawns (because is not some witch), as result of nasty instances undebated in original Mover code you might see strange things happening. I studied these mover states a bit and onestly I don't really love them (just examples for starting new custom brushes - not as a need to clone them as they are).

I worked to set up properly mover reaction instigated and opened VS Instigator state, lol. Was a challenge to catch mover because IsInState call seems tricky in this case (I couldn't deal with that until this moment speaking about mover). Also I reworked timer (I had a few ForEach functions replaced with a single one) for such cases, controlling movers will be activated only if game was started not earlier.
I'll put up some fight to test how are things working.

Post Reply