Mind Reader

Search, find and discuss about Mutators!
Buggie
Godlike
Posts: 2733
Joined: Sat Mar 21, 2020 5:32 am

Re: Mind Reader

Post by Buggie »

v1.10

- Fix flood in log when spectate monsters.

Always check latest posts in this topic, for be sure you download latest version.
MindReader-1.10.zip
(19.08 KiB) Downloaded 12 times
Last edited by Buggie on Mon Oct 10, 2022 8:56 pm, edited 1 time in total.
User avatar
Gustavo6046
Godlike
Posts: 1462
Joined: Mon Jun 01, 2015 7:08 pm
Personal rank: Resident Wallaby
Location: Porto Alegre, Brazil
Contact:

Re: Mind Reader

Post by Gustavo6046 »

Could the black background be translucent? As it stands it's a little jarring to look at.
"Everyone is an idea man. Everybody thinks they have a revolutionary new game concept that no one else has ever thought of. Having cool ideas will rarely get you anywhere in the games industry. You have to be able to implement your ideas or provide some useful skill. Never join a project whose idea man or leader has no obvious development skills. Never join a project that only has a web designer. You have your own ideas. Focus on them carefully and in small chunks and you will be able to develop cool projects."

Weapon of Destruction
Buggie
Godlike
Posts: 2733
Joined: Sat Mar 21, 2020 5:32 am

Re: Mind Reader

Post by Buggie »

No any point. For readability solid is best.
User avatar
OjitroC
Godlike
Posts: 3613
Joined: Sat Sep 12, 2015 8:46 pm

Re: Mind Reader

Post by OjitroC »

One interesting thing I've noticed when using MindReader with ScriptedPawns is that the Destination and Focus are sometimes given as 'QueenDest' in maps which don't have this Actor in them - it's not important (at least for me) but any idea why that should be?

DM-[NES]USZ_2022 is one of the maps where this happens.
Buggie
Godlike
Posts: 2733
Joined: Sat Mar 21, 2020 5:32 am

Re: Mind Reader

Post by Buggie »

MindReader report only exists things. If it report about QueenDest, then on map present QueenDest. Use search actors for find them.
Sometimes mapper drop actors, which don't has visible representation by one or another reason. Since they not visible, mapper not notice them and release map with it.
This explain invisible redeemer ammo, invisible collide trees and invisible flames.
Same can be here.
User avatar
Barbie
Godlike
Posts: 2802
Joined: Fri Sep 25, 2015 9:01 pm
Location: moved without proper hashing

Re: Mind Reader

Post by Barbie »

No QueenDests in that map:
DM-[NES]USZ_2022-NameTable.jpg
@OjitroC: what mutators do you use? Maybe one of them injects QueenDests into the map.
"Multiple exclamation marks," he went on, shaking his head, "are a sure sign of a diseased mind." --Terry Pratchett
User avatar
sektor2111
Godlike
Posts: 6410
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Mind Reader

Post by sektor2111 »

Can I bring you my opinions ?
Let's see...
In map's Editing process, some boys are copying assets from elsewhere from pathed maps. This will result in some references that are ONLY DESCRIBED but they don't exist in target map. I was already showing some map with supposed paths that are nowhere. VisNoReachPaths are Navigation ACTORS referenced and we can have here internal chains created in previous source map pointing to corresponding actors. When these are selected and "COPY-PASTE"-ed elsewhere in that state it's normal to return a map with GAPS pointing Actors that are nowhere - and if you ask my private public opinion, this is the first route to memory corruptions making some players to get tired of GPF crashes since these boys are not having any clue what they do.

In other hand I would like to drop an eye over that map...
Last edited by sektor2111 on Sat Aug 27, 2022 11:15 am, edited 1 time in total.
User avatar
OjitroC
Godlike
Posts: 3613
Joined: Sat Sep 12, 2015 8:46 pm

Re: Mind Reader

Post by OjitroC »

Barbie wrote: Sat Aug 27, 2022 9:51 am @OjitroC: what mutators do you use? Maybe one of them injects QueenDests into the map.
Yes, you are right of course - I'm using MonsterSpawn and, looking at the (obfuscated) code, I see that it does indeed inject QueenDests into maps (as one would expect I suppose) - so that's cleared that up for me :tu:
User avatar
sektor2111
Godlike
Posts: 6410
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Mind Reader

Post by sektor2111 »

So MonsterSpawn doesn't use a sanity check if internal QueenDests could spawn ? Good to know...
User avatar
OjitroC
Godlike
Posts: 3613
Joined: Sat Sep 12, 2015 8:46 pm

Re: Mind Reader

Post by OjitroC »

sektor2111 wrote: Sat Aug 27, 2022 11:16 am So MonsterSpawn doesn't use a sanity check if internal QueenDests could spawn ? Good to know...
At the risk of derailing the thread, I'm not sure in what circumstances internal QueenDests would be spawned in a DM map? However my uninformed reading of the code suggests that MonsterSpawn only spawns QueenDests if the property/variable AllowQueensXtraTeleports is set to true - which mine is at the moment anyway. Since I don't use QUeens in MonsterSpawn, I'll turn it off and see what happens.
User avatar
OjitroC
Godlike
Posts: 3613
Joined: Sat Sep 12, 2015 8:46 pm

Re: Mind Reader

Post by OjitroC »

Had the following crash using MindReader (the first time it has crashed after extensive use)

Code: Select all

Critical: appError called:
Critical: MindReaderHUD DM-(LAGG)MountainCity.MindReaderHUD0 (Function MindReader.MindReaderHUD.DrawLine:00D9) Runaway loop detected (over 10000000 iterations)
Critical: Windows GetLastError: Not enough memory. (8)
Exit: Executing UObject::StaticShutdownAfterError
Exit: Executing UWindowsClient::ShutdownAfterError
Exit: UGalaxyAudioSubsystem::ShutdownAfterError
Log: DirectDraw End Mode
Exit: UD3D9RenderDevice::ShutdownAfterError
Critical: FFrame::Serialize
Critical: (DM-(LAGG)MountainCity.MindReaderHUD0 MindReader.MindReaderHUD.DrawLine)
Critical: (DM-(LAGG)MountainCity.MindReaderHUD0 MindReader.MindReaderHUD.PostRender)
Critical: (DM-(LAGG)MountainCity.SoundsHUDHelper0 2k4Sounds24.SoundsHUDHelper.PostRender)
Critical: (DM-(LAGG)MountainCity.ERelicHUDMutator0 EnhancedRelics.ERelicHUDMutator.PostRender)
Critical: (DM-(LAGG)MountainCity.ChallengeHUD0 Botpack.ChallengeHUD.PostRender)
Critical: UObject::ProcessEvent
Critical: (MMOniKonokoF DM-(LAGG)MountainCity.MMOniKonokoF0, Function Engine.PlayerPawn.PostRender)
Critical: UGameEngine::Draw
Critical: UWindowsViewport::Repaint
Critical: UWindowsClient::Tick
Critical: ClientTick
Critical: UGameEngine::Tick
Critical: UpdateWorld
Critical: MainLoop
Don't know if there is enough information there to indicate what might be the cause of the runaway loop or of the crash.

The map is a pathed version of (LAGG)MountainCity - I pathed it using PathsMaker and then it was 'cleaned up', using MapGarbage, to remove or reposition PathNodes without connections in and/or out and the pathnetwork then rebuilt (I don't normally alter PlayerStarts or InventorySpots that lack connections as I am not pathing the map for bots but for the spawning of Relics and ScriptedPawns).

I had a crash in the same map earlier related to the drawing of the Biogelm LodMesh but presumably the 2 crashes are unrelated.

Nothing out of the ordinary in the map except that a rifle and some ammo 'fell out of the world' - I use StuffSwapper with CS weapons and this happens sometimes, possibly due to the size or whatever of those weapons/ammo compared to the default UT sniper and ammo.
Buggie
Godlike
Posts: 2733
Joined: Sat Mar 21, 2020 5:32 am

Re: Mind Reader

Post by Buggie »

Unfortunately in UT no way for draw line on screen. So it going with hack with fill pixel 1-by-1. Which is expensive and if there many lines, this can hit runaway limit. :(
Unfortunately there no much which can be done with that. But this happen not really often.
User avatar
OjitroC
Godlike
Posts: 3613
Joined: Sat Sep 12, 2015 8:46 pm

Re: Mind Reader

Post by OjitroC »

Thanks for the info. No, it doesn't happen often at all - I run MindReader all the time and use it quite a lot in-game particularly when checking out 'new' ScriptedPawns - so it's very useful and the (very) occasional crash is not a problem.
Buggie
Godlike
Posts: 2733
Joined: Sat Mar 21, 2020 5:32 am

Re: Mind Reader

Post by Buggie »

v1.11

- Show Accelearation.
- Show AmbushSpot for bots.

Always check latest posts in this topic, for be sure you download latest version.
MindReader-1.11.zip
(17.69 KiB) Downloaded 5 times
User avatar
Gustavo6046
Godlike
Posts: 1462
Joined: Mon Jun 01, 2015 7:08 pm
Personal rank: Resident Wallaby
Location: Porto Alegre, Brazil
Contact:

Re: Mind Reader

Post by Gustavo6046 »

Buggie wrote: Sun Oct 09, 2022 1:46 am Unfortunately in UT no way for draw line on screen.
A workaround is to use a diagonal line texture ("slope 1"), and mess around with RectX and RectY below to 'rotate' it.

Image

Here is something I imagine could work, but I haven't tested it – it does, however, have the original idea. This assumes that using a negative value for RectY in DrawRect will flip the texture upside down.

Documentation comments are Doxygen-style.

Code: Select all

/**
 * @brief Draw a line in a Canvas using texture skew.
 *
 * Uses a texture of a diagonal (slope 1) line to draw a line across the
 * screen.
 *
 * Does not support dynamic adjustment of line thickness. Also, due to the
 * nature of the skewing algorithm, line thickness will be bigger for longer
 * lines. To avoid that, use @ref DrawLine, which automatically segments the
 * line.
 *
 * @param Target        The Canvas unto which to draw the line.
 * @param x             The starting X position of the line.
 * @param y             The starting Y position of the line.
 * @param dx            The line's length along the X axis.
 * @param dy            The line's length along the Y axis.
 * @param LineTex       The slope-1 texture used to draw the line. Defaults
 *                      to LineTexDefault' (who would have thought!)
 */
function DrawLineTex(Canvas Target,
                     int x, int y, int dx, int dy,
                     optional Texture LineTex) {

	local float slope; // The slope of the line.

	// Set default LineTex.
	if (LineTex == None) {
		LineTex = Texture'LineTexDefault';
	}

	// Sanity check: do not draw dots or nothingnesses.
	if (dx == 0 && dy == 0) {
		return;
	}

	// Calculate the slope of this line.
	if (dx == 0) {
		// Avoid divide-by-one by adding a single pixel.
		dx = 1;
	}

	if (dy == 0) {
		dy = 1;
	}

	// If dx is negative, flip.
	if (dx < 0) {
		x += dx;
		dx *= -1;
		dy *= -1;
	}

	slope = dy / dx;

	// Move Canvas to line origin.
	Canvas.CurX = x;
	Canvas.CurY = y;

	// Draw line segment.
	// If slope is negative, dx is positive but dy is negative.
	// Confusingly, if dy is positive, the texture must be mirrored
	//   vertically.
	if (slope > 0) {
		// A positive dy goes *down* the screen; the line in the
		// texture goes up (slope 1), Therefore, use a negative
		// height to flip the texture.

		Canvas.CurY += dy;
		Canvas.DrawRect(LineTex, dx, -dy);
	}

	else {
		Canvas.DrawRect(LineTex, dx, dy);
	}
}

/**
 * @brief Draw a line in a Canvas using texture skew, segmented to
 *        minimize thickness distortion.
 *
 * Uses a texture of a diagonal (slope 1) line to draw a line across the
 * screen, segmenting it into multiple @ref DrawLineTex calls to minimize
 * distortion caused by line length.
 *
 * @param Target        The Canvas unto which to draw the line.
 * @param x             The starting X position of the line.
 * @param y             The starting Y position of the line.
 * @param dx            The line's length along the X axis.
 * @param dy            The line's length along the Y axis.
 * @param LineTex       The slope-1 texture used to draw the line. Defaults
 *                      to LineTexDefault' (who would have thought!)
 * @param MaxSegLength  The maximum length of any one single segment of the
 *                      line. Defaults to 32.
 */
function DrawLine(Canvas Target,
                  int x, int y, int dx, int dy,
                  optional Texture LineTex,
                  optional float MaxSegLength) {

	local float     FullLength; // The full length of the line.
	local int       NumSegs;    // Number of segments to split the
	                            //   line into.
	local float     sdx, sdy;   // Delta x and delta y for each
	                            //   segment.
	local int       seg;

	// Set default MaxSegLength, in pixels.
	if (MaxSegLength <= 0) {
		MaxSegLength = 32;
	}

	// Sanity check: do not draw dots or nothingnesses.
	if (dx == 0 && dy == 0) {
		return;
	}

	// Get the current line length.
	FullLength = Sqrt( Square(float(dx)) + Square(float(dy)) );

	// Calculate the desired segment count and length.
	NumSegs = Ceil(FullLength / MaxSegLength);

	sdx = dx / NumSegs;
	sdy = dy / NumSegs;

	for (seg = 0; seg < NumSegs; seg++) {
		DrawLineTex(Target,
		            x + dx * seg,
		            y + dy * seg,
			    sdx, sdy,
			    LineTexture);
	}
}


"Everyone is an idea man. Everybody thinks they have a revolutionary new game concept that no one else has ever thought of. Having cool ideas will rarely get you anywhere in the games industry. You have to be able to implement your ideas or provide some useful skill. Never join a project whose idea man or leader has no obvious development skills. Never join a project that only has a web designer. You have your own ideas. Focus on them carefully and in small chunks and you will be able to develop cool projects."

Weapon of Destruction
Post Reply