NavAdder mutator

Mod development and tools for UE1 game titles here.
Posts: 906
Joined: Sat Sep 30, 2017 5:03 am

Re: NavAdder mutator

Post by Nelsona » Fri Apr 06, 2018 5:47 pm

Changes for 21 means replacing XC files as described by Higor - UCC.exe is not a must replace thing. If you take in account my problem with constants or other hidden values that's a different story, I have reconfigured another Engine.u file (UScript part) for getting access at compiling some stuff which usually is not possible because Epic were busy to hide properties (like bSpecialCost). bSpecialCost is helpful in development but getting it right in Editor it's a hackish thing. Right now I'm not going to test compatibility of new file with old one in server - server should run confirmed with original, but definitely Editor do needs some Love.
Different said I want more "visibility" in Editor toward stuff, there are things stored in map which are never seen in a more human-friendly readable format...
Not often maintained
My UT Mapping works...
Learn the rules like a pro, so you can break them like an artist.
- Pablo Picasso -

Posts: 906
Joined: Sat Sep 30, 2017 5:03 am

Re: NavAdder mutator

Post by Nelsona » Sat Apr 07, 2018 5:26 pm

Bump - moving ball here.
I've finished but I have to check patching files for map MH-super_tomokoV2 - this is not the best ever Level but I prefer such works rather than the most of post 2012 year "productions". Geometry was simple with a few pathing problems but, an empty map is an easy deal for dropping run-time paths and operating a few changes to map's mechanics. Level is unsigned and textures doesn't have the best ever alignment, is a rush work but it might have a game-play in normal conditions.
Operations executed so far:
- added paths and Bot objectives - one of them protected against rushing - Monster around is a critical one;
- moved some movers/lifts, tweaking and changing their first keyframe - I don't have a clue why so high for no reason;
- adjusted some monsters because are very poor visible and looking stupid;
- a flag decoration was waving in a wall so it was moved back into area;
- some dark spots have lamps for making light;
- added additional health and ammo in heavy combat areas;
- in first start location area do looks cold - I've added 2 fire-decorations (client only) and bit audible as well for a warm up feeling;
- some lights in start area have been completed with tiny lamps else they do look like the light comes from nowhere - lol design.

If everything is fine during tests, I'll drop here patching files.
Not often maintained
My UT Mapping works...
Learn the rules like a pro, so you can break them like an artist.
- Pablo Picasso -

Posts: 906
Joined: Sat Sep 30, 2017 5:03 am

Re: NavAdder mutator

Post by Nelsona » Sun Apr 08, 2018 8:02 pm

First post updated with NavAdder's patching files required for map MH-super_tomokoV2.
Map's checksums:
  • CRC-32: 7c79e497
    MD5: b533187099bf63ba540d78ce93457b27
    SHA-1: 4cdce23e6c777d1fa9a7c82485c042fa491e728e
    SHA-256: d7a33929d317baf9ff1c93a95a6129c88fdd79601cc341e5f577887359880b10
Patch operations notes have been posted in previous post. For additional information out of document from archive let's see some visual changes around.
This is Before to load patch files:
Before_STv2.png (443.4 KiB) Viewed 2807 times
And this is After loading patch files - Lift will move a bit lower:
After_STv2.png (490.51 KiB) Viewed 2807 times
Usually I do not have (and neither my Bots) the desire to jump like goats when we don't fight :P . Actually this lift can be called from that Bottom location if Player/Bot wants a reload from that "secret room" located on top :lol: .
In a XCGE game/server minimum v20 with NavAdder mutator loaded, drop U files in System, and uz (lzma) in redirection location in case of a Net game. At next votes, if map voted is MH-super_tomokoV2, it will have patch files active and client package is mapped automatically. Do not blame me for not using a Capital Letter at map-name - this is a Japan type grammar high-tech...

Main Reminder:
If you want source-code for files you can decompile them using Editor because these are not stripped. I don't share as a must these resources because a new coder will never be able to compile these, they are coded and compiled in another UT environment - that over-debated Modding Copy Version screwed for getting powerful U files capable of things which an usual U file will not do as long as it cannot be compiled using a regular method.
Not often maintained
My UT Mapping works...
Learn the rules like a pro, so you can break them like an artist.
- Pablo Picasso -

Posts: 906
Joined: Sat Sep 30, 2017 5:03 am

Re: NavAdder mutator

Post by Nelsona » Tue Apr 10, 2018 10:25 am

Bump - Just A Note
For a completion, I see that exist a map "super_tomokoV3" which is... completed with a few more monsters, if a patch is required for that too the answer is... USELESS. Why ? Simply because we can patch such things, we can turn version V2 in V3 during run-time without having a new file to load and new modules to copy making folder to be read in ages - creating even conditional options:
- Monday - Friday - map is running as V2 - (because are less players generally);
- Saturday - Sunday - map is running as V3 - (because in week-end probably we want more party).
I can do an update (without triggering any changes in client) which can turn current V2 map into V3 because Levels are pretty much the same by adding those missing monsters from V3 into V2 and even I can develop a virtual V4 (with mooore monsters). Changes are doable only in server and making client to run normally without moving a finger.

If such things are demanded probably I can do patch files like that working in dual format.
Not often maintained
My UT Mapping works...
Learn the rules like a pro, so you can break them like an artist.
- Pablo Picasso -

Posts: 906
Joined: Sat Sep 30, 2017 5:03 am

Re: NavAdder mutator

Post by Nelsona » Fri Apr 13, 2018 1:48 pm

Another sort of morphing idea distracted me due to some random "download search" topic.

Assault maps generally if I'm not entirely mistaking are somehow compatible with MonsterHunt but properly converted. I think in MapVote we can load an Assault map for playing some MonsterHunt inside, I really do have to check out this thing. Probably those AS works which are not having so many players - this is the truth.
I think if MapVote will trigger MonsterHunt to load an Assault map the rest of MonsterHunt specific needs are... doable in first second of game, happily setting up a few monsters, getting rid of that AssaultRandomizer crap - I think I have another way of deal right here, so I'm guessing we can have a new playground, we will not need to mess an AS map in Editor we can turn it into a MH one during run-time...
Perhaps column 7 or such from that MapVote a la "UL" might load a few AS Maps and NavAdder will trigger morphing these AS Levels into MH - not many servers might have this way...
Not often maintained
My UT Mapping works...
Learn the rules like a pro, so you can break them like an artist.
- Pablo Picasso -

User avatar
Site Admin
Posts: 356
Joined: Wed May 10, 2017 7:08 am

Re: NavAdder mutator

Post by SC]-[WARTZ_{HoF} » Sat Apr 14, 2018 12:24 am

Sounds like a solid plan. :D

Posts: 906
Joined: Sat Sep 30, 2017 5:03 am

Re: NavAdder mutator

Post by Nelsona » Sat Apr 14, 2018 3:52 pm

All right, I was inspecting that supposed map... eh... perhaps we don't have many... hopes. It was a 15 MB Level but this is not the problem. The problem comes from insanity, we don't have some decorations used as decorations, we have pawns there used as decorations, I can imagine that crap when Bot decides to attack that trash "decoration" coming from a sick idea... I think those poorly build AS maps are more messed up that majority of MonsterHunt trashes spread around lasts years.
The fascinating thing is that it was mentioned in read-me in known bugs chapter some HOM effect. Seriously map is more crapped that with a simple HOM which can be ignored at a moment I can say is not that important all the time after all.
The problem is that these bStatic VISIBLE actors are a harder thing to solve but probably not that impossible requiring ugly hacks which might crash clients. And another fact is some UTFlare which morons are removing it as non-bStatic when class is bStatic by default. As result NOBODY can see that ever in On-Line games, but nobody because log says "....cannot spawn because ... is bStatic or bNoDelete". But who cares ? OMG it doesn't work well On-Line. Why ? Check logs, you geniuses...
Not often maintained
My UT Mapping works...
Learn the rules like a pro, so you can break them like an artist.
- Pablo Picasso -

User avatar
Posts: 178
Joined: Fri Sep 29, 2017 1:54 pm
Location: Coos Bay Oregon

Re: NavAdder mutator

Post by Kelly » Sun Apr 15, 2018 1:12 am

I looked some years back at converting AS maps to MH using a mutator and spawning monsters in via the pathnoding but as you can see the AS maps are a fucking mess. I gave up because they have all kinds of stupid hacky shit in them. Mappers didn't care to learn how to map for AS, they just set everything to triggers and hoped it worked online. Bad mapping is what ruined AS.
I don’t wanna give the end away
but we’re gonna die one day

Posts: 906
Joined: Sat Sep 30, 2017 5:03 am

Re: NavAdder mutator

Post by Nelsona » Sun Apr 15, 2018 3:18 am

Yup, that's the main AS problem and not the last thing, BotPack.Assault it's far from a good controller.

Else, I think I've finished a "Post-Patch-Update" for "super_tomokoV2". The patch does a simple task without any change in files already downloaded by client because new stuff turning V2 into a "V3+" uses another package which clients are downloading if day of week is Saturday or Sunday. So to speak we have more strength in week-end. To summarize shortly map "super_tomokoV2" will run different during Week-End times having more monsters, some custom stuff it's used here and a few signs on walls completely client-side being timer-free decals so to speak smoother as oil.

After doing a couple of tests into my server, patch files are going to be ready to rock in public and... if that remote application is running, I can update HOF's XC_MH server, else update can be done by Schwartz.

Edit: Umm, I demand more stuff
So far map might have a bit of challenge. Some function doing the task is like this

Code: Select all

function SpawnOtherMonsters()
	local Rotator NewRot;
	local ScriptedPawn S;

	Spawn(class'Tentacle',,,vect(-112,-4240,393),NewRot).Health = 400;
	Spawn(class'Tentacle',,,vect(112,-4224,393),NewRot).Health = 400;
	Spawn(class'Tentacle',,,vect(-96,-3872,393),NewRot).Health = 400;
	Spawn(class'Tentacle',,,vect(128,-3872,393),NewRot).Health = 400;
	Spawn(class'Tentacle',,,vect(112,-3600,393),NewRot).Health = 400;
	Spawn(class'Tentacle',,,vect(-96,-3600,393),NewRot).Health = 400;
	S = Spawn(class'Tentacle',,,vect(0,-4448,9),NewRot);
	if ( S != None )
		S.DrawScale = 3.000000;
		S.Health = int(RandRange(3000,4000));
		S.RangedProjectile = class'RocketMk2';
	RULES from class Pawn
		SetCollisionSize(CollisionRadius*DrawScale/Default.DrawScale, CollisionHeight*DrawScale/Default.DrawScale);
		Health = Health * DrawScale/Default.DrawScale;
		S.Health = S.Health * S.DrawScale/S.Default.DrawScale;
		S = None;
	S = Spawn(class'Krall',,,vect(-21,-4694,-437),NewRot);
	if (S != None)
		S.DrawScale = 3.000000;
		S.Health = int(RandRange(2500,3500));
		S.RangedProjectile = class'RocketMk2';
		S.Health = S.Health * S.DrawScale/S.Default.DrawScale;
		S = None;
	Spawn(class'Krall',,,vect(-446,-11643,-480)).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(-429,-11745,-480)).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(-435,-11870,-480)).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(-419,-11972,-480)).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(-572,-11750,-480)).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(-584,-11875,-480)).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(-568,-11977,-480)).Health = int(RandRange(300,600));

	Spawn(class'Krall',,,vect(748,-11920,-480),NewRot).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(851,-11909,-480),NewRot).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(976,-11922,-480),NewRot).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(1079,-11912,-480),NewRot).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(744,-12063,-480),NewRot).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(847,-12052,-480),NewRot).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(972,-12071,-480),NewRot).Health = int(RandRange(300,600));
	Spawn(class'Krall',,,vect(1075,-12061,-480),NewRot).Health = int(RandRange(300,600));

	Spawn(class'Tentacle',,,vect(1711,-11512,601),NewRot).Health = int(RandRange(400,600));
	Spawn(class'Tentacle',,,vect(1791,-11448,601),NewRot).Health = int(RandRange(400,600));
	Spawn(class'Tentacle',,,vect(1695,-11320,601),NewRot).Health = int(RandRange(400,600));
	Spawn(class'Tentacle',,,vect(1790,-11225,601),NewRot).Health = int(RandRange(400,600));

	Spawn(class'IceSkaarj',,,vect(1552,-19192,-448)).Health = 1000;
	Spawn(class'IceSkaarj',,,vect(1888,-19160,-448),NewRot).Health = 1000;
	Spawn(class'IceSkaarj',,,vect(1760,-19000,-448)).Health = 1000;
	Spawn(class'IceSkaarj',,,vect(1547,-19066,-448)).Health = 1000;
	Spawn(class'IceSkaarj',,,vect(1883,-19034,-448),NewRot).Health = 1000;
	Spawn(class'IceSkaarj',,,vect(1755,-18874,-448)).Health = 1000;

	Spawn(class'IceSkaarj',,,vect(-1308,-23392,-5440)).Health = 1000;
	Spawn(class'IceSkaarj',,,vect(-1292,-23680,-5440)).Health = 1000;
	Spawn(class'Behemoth',,,vect(-1648,-23440,-5352)).Health = 1500;
	Spawn(class'Behemoth',,,vect(-1552,-23936,-5352)).Health = 1500;

	Spawn(class'Behemoth',,,vect(-928,-24914,-5432)).Health = 1500;
	Spawn(class'Behemoth',,,vect(-664,-25088,-5432)).Health = 1500;
	Spawn(class'Behemoth',,,vect(-880,-25104,-4920)).Health = 1500;
	Spawn(class'Behemoth',,,vect(-1472,-24928,-4984)).Health = 1500;
	Spawn(class'Behemoth',,,vect(-1968,-24944,-4984)).Health = 1500;

	Spawn(class'Behemoth',,,vect(-635,-22313,-5432)).Health = 1500;
	Spawn(class'Behemoth',,,vect(-992,-22434,-5432)).Health = 1500;
	Spawn(class'Behemoth',,,vect(-846,-22256,-4920)).Health = 1500;
	Spawn(class'Behemoth',,,vect(-1471,-22400,-4984)).Health = 1500;
	Spawn(class'Behemoth',,,vect(-1983,-22368,-4984)).Health = 1500;
	Spawn(class'Behemoth',,,vect(-2624,-22224,-4920)).Health = 1500;


	Spawn(class'Pupae',,,vect(-1272,-11168,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1329,-11169,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1393,-11171,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1449,-11173,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1505,-11173,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1561,-11174,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2268,-11181,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2323,-11182,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2387,-11185,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2442,-11186,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2498,-11186,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2554,-11188,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1272,-11085,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1328,-11086,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1392,-11088,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1448,-11090,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1504,-11090,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1560,-11091,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2267,-11098,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2322,-11099,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2385,-11102,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2441,-11103,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2497,-11103,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2553,-11105,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1274,-11008,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1330,-11009,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1394,-11011,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1450,-11013,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1506,-11013,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-1562,-11014,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2268,-11021,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2324,-11022,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2387,-11025,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2443,-11026,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2499,-11026,-518),NewRot).Health = int(RandRange(250,350));
	Spawn(class'Pupae',,,vect(-2555,-11028,-518),NewRot).Health = int(RandRange(250,350));

	Spawn(class'Behemoth',,,vect(1124,-7611,-456),NewRot).Health = int(RandRange(1250,2250);
	Spawn(class'Behemoth',,,vect(1172,-7403,-456),NewRot).Health = int(RandRange(1250,2250);
Perhaps should be good for an Extra Party...
Not often maintained
My UT Mapping works...
Learn the rules like a pro, so you can break them like an artist.
- Pablo Picasso -