Page 1 of 1

Pupaer (improved pupae, not crazy tho)

Posted: Wed Feb 07, 2018 2:25 pm
by Kelly
OK today's source code dump is a simple one. A few years ago I worked on improving the default pupae so it's much more than just cannon fodder. This is the result.

The current pupae has several problems that are fixable but very glaring. These include:
-Bad texturing (green panel) on a hind leg
-Pupae freeze up when attacking upwards or downwards
-Many small obstacles totally prevent them from moving
-Even a very low box or step can totally shield a player from attacks

I've seen way overdone pupae like the red ones in MH maps but they are just unreasonable. You don't need them to be ultra fast and do mega damage/redeemer blast on death. Pupae should overwhelm players by sheer numbers and by being dangerous but not necessarily deadly in smaller numbers. So with this in mind I set out to fix it... and man was it tough to get right.

From the readme:
Spoiler
************************************************

New settings in the actor once it is placed on the map. These will be in a new section called "Jumping"...
JumpVelocity -Lunge power/distance. Default is 450ish. Higher number gives stronger jump and longer range.
CanLeapUp -Allows the pupae to leap around much more and leap onto boxes, etc if it needs to get to you.
LeapUpStrength -Leap power/distance. Default is 600ish.
MeleeRangeCheck -Default check for 'is in melee range' Default is 80ish.

Jumpvelocity is the normal lunge attack hop that the pupae does anyway. Setting the pupae to CanLeapUp=True lets it hop and jump much more, especially if it is attacking you or in pursuit. The MeleeRangeCheck is a very different way of checking for attacks that will work for monsters with low collision height and cannot fly. Please feel free to use this class in your monster and adjust it as you need.

Important: If you use this monster and change it's drawscale upwards very much it will screw up the checks. It's best to use a default pupae class for this. Once you reach a certain threshold in drawscale it will pass all the collision checks anyway and the buggy pupae behavior (get it, buggy) will disappear. This monster is for normal to slightly larger pupae only.

************************************************
By placing these monsters into your map you can tweak them upwards in strength slowly from default to allow them to pursue players throughout terrain, up stairs, jump up onto low boxes to reach players, etc. They act and attack much more like swarm insects this way.
PupaerUTMod.7z
(116.2 KiB) Downloaded 742 times
Included is the compiled u file, ready to be placed and used by mappers. Source code is also included along with the fixed model (rear leg is correct now). If you are an MH mapper and you use these please playtest so that it won't become frustrating for your players. These incremental increases in the pupae behavior make a HUGE difference in default maps. Once you can't really get away from them by jumping up on something or firing downwards from stairs then it's a whole new ball game. If you doubt this to be true try playing BukieAntFarm after replacing the pupae with these. You'll see what I mean pretty quickly.

Hope someone finds this useful!

Re: Pupaer (improved pupae, not crazy tho)

Posted: Thu Feb 08, 2018 12:26 am
by SC]-[WARTZ_{HoF}
I can see this being used. I wonder if Nels will have something to say.

Re: Pupaer (improved pupae, not crazy tho)

Posted: Thu Feb 08, 2018 2:35 am
by D13GO_{HoF}
And what happens with Pupaes in Bigger Size like in Godz MH Maps, With bigger hitboxes they cant follow as good as normal ones and its always alone or with a group of easy to kill pupaes

Re: Pupaer (improved pupae, not crazy tho)

Posted: Sat Jun 09, 2018 5:44 pm
by Nelsona
Time for bumping pupae spirit here.
First note toward some posting at UT99.org regarding to pupae mapping add-ons or such amnesia toward UT MH mapping. First of all READ SHRIMP's docs, in other terms, RTFM and then, get lost. Pupae is recommended as a training stage, primary threat for warming up spirits, I just changed my mouse and I wanna see how do it works, let's play some map... perhaps starting with Level 0 to Level X is very suitable for such a task, the rest is blabbering. Games generally have Levels of difficulty created from low to high and not what "sudden mappers" are doing nowadays because they cannot play their own Levels in their own dumb set servers.

I will not waste a lot of time with designing a Level-Map, not productive for me, but I can slap some monsters in poorly loaded maps using patching methods used since forever but doable closer to year 2018. What is doable in some "map-injection" technology nowadays ?
Let's see that we can deploy more or less randomly a sort of more polished creatures in these maps if we had to touch them. If we are only fixing errors perhaps this is pointless and doesn't worth efforts. If we are changing things for a bit, maybe player is rewarded for patience toward still playing UT'99 in '18, ahem.
As a note I wrote various functions for bringing new stuff ignoring what was poorly done before. Sample in spoiler...
Spoiler

Code: Select all

final function SetNewMonster( Pawn aPawn, optional int HP,
	optional float DS,
		optional bool bRandProj,
			optional name MstEvent,
				optional string AMenu,
					optional Texture aSkin,
						optional float ZPivotAdj,
							optional Texture MultiSkin0,
							optional Texture MultiSkin1,
							optional Texture MultiSkin2,
							optional Texture MultiSkin3,
							optional Texture MultiSkin4,
							optional Texture MultiSkin5,
							optional Texture MultiSkin6,
							optional Texture MultiSkin7 )
{
	local int I;
	local class<Projectile> ProjType;

	if (aPawn == None || aPawn.bDeleteMe)
	{
		GoTo NothingToDo;
	}
	else
	{
		if ( HP != 0 )
			aPawn.Health = int(RandRange(aPawn.class.Default.Health*2+(HP/2),
				aPawn.class.Default.Health*2+HP));
		if (bRandProj)
		if ( ScriptedPawn(aPawn) != None && ScriptedPawn(aPawn).default.RangedProjectile != None )
		{
			I = Rand(5);
			if ( I > 4 ) I = 4;
			switch(I)
			{
				case 0: ProjType = Class'RocketMk2';
					break;
				case 1: ProjType = Class'CannonShot';
					break;
				case 2: ProjType = Class'Razor2Alt';
					break;
				case 3: ProjType = Class'UT_Grenade';
					break;
				case 4: ProjType = Class'flakslug';
					break;
			}
			ScriptedPawn(aPawn).RangedProjectile = ProjType;
		}
		if ( DS != 0 )
		{
			aPawn.DrawScale = DS;
			aPawn.Health = aPawn.Health * aPawn.DrawScale/aPawn.Default.DrawScale;
			aPawn.SetCollisionSize(aPawn.CollisionRadius*aPawn.DrawScale/aPawn.Default.DrawScale
				,aPawn.CollisionHeight*aPawn.DrawScale/aPawn.Default.DrawScale);
		}
		if ( MstEvent != '')
		{
			aPawn.Event = MstEvent;
			log("WK Mechanic has set as Event for"@aPawn.Name@aPawn.Event);
		}
		if ( AMenu != "")
		{
			aPawn.MenuName = AMenu;
			log("WK Mechanic has set as Name for"@aPawn.Name@aPawn.MenuName);
		}
		if ( ZPivotAdj != 0 )
			aPawn.PrePivot.Z = ZPivotAdj;
		if ( aSkin != None )
			aPawn.Skin = aSkin;
		if ( MultiSkin0 != None )
			aPawn.Multiskins[0] = MultiSkin0;
		if ( MultiSkin1 != None )
			aPawn.Multiskins[1] = MultiSkin1;
		if ( MultiSkin2 != None )
			aPawn.Multiskins[2] = MultiSkin3;
		if ( MultiSkin3 != None )
			aPawn.Multiskins[3] = MultiSkin3;
		if ( MultiSkin4 != None )
			aPawn.Multiskins[4] = MultiSkin4;
		if ( MultiSkin5 != None )
			aPawn.Multiskins[5] = MultiSkin5;
		if ( MultiSkin6 != None )
			aPawn.Multiskins[6] = MultiSkin6;
		if ( MultiSkin7 != None )
			aPawn.Multiskins[7] = MultiSkin7;
	}
NothingToDo:
}
And then I think I can use another pupae as long as default one is pretty much a sort of experimental junk (my innocent deduction) of Epic taking in account the rest of borks from ScriptedPawn which some day I will remove without even to blink an eye.
Spoiler
Calling function for default pupae but... I think this will be changed (Without Editor at random)

Code: Select all

SetNewMonster(Spawn(class'Pupae',,,vect(-360,-424,-14966)),300,,,,"ZBugger",,5,,Texture'JPupae1_1');
Where pupae can be happily spawned as a prototype properly imported from this package...

Re: Pupaer (improved pupae, not crazy tho)

Posted: Mon Jun 11, 2018 12:18 am
by evilgrins
I get 3 more versions of pupae and I can finally complete my evil football team.

Will test this thing soon.

Re: Pupaer (improved pupae, not crazy tho)

Posted: Mon Jun 11, 2018 6:44 pm
by Nelsona
Umm... this pawn do seems to look Okay in more instances but maybe not 100% well at high ranges, like mesh suffers, a few surfaces went invisible at firing that "Pupae King" and boosting it to the sky by 4 morons (me and 3 bots) using miniguns, it's not a big deal but probably in oversized maps is not suitable that much, the rest do looks great. I don't know what is about this new mesh but something there is still sensitive...

Re: Pupaer (improved pupae, not crazy tho)

Posted: Wed Jun 13, 2018 2:00 pm
by Kelly
It's not the mesh I think. The model has wonky collision checks and does some weird stuff when it parses collision, especially with BSP level. I think it has to do with the model being so low to the ground and it looked like they were trying to address players being able to just run over the pupae like it was a mobile step. Whatever it is there is oddness in it and that's what made trying to fix it so damn hard. Anyhow that was my attempt. Feel free to improve as you like. I'm sure it can be done better.

Re: Pupaer (improved pupae, not crazy tho)

Posted: Wed Jun 13, 2018 5:15 pm
by Nelsona
I'm not sure if can be tweaked better, probably using max 2 for DrawScale won't be a problem, this pupae is way better than original. In any spawner/tweaker can be used as it is, I did not see errors so far, maybe old HUD types are showing class-name even if MenuName is available, but for me this is not a big deal...