Quake MOD - In The Shadows

Discuss anything not covered by any of the other categories.
Dr. Shadowborg
InsideQC Staff
Posts: 1120
Joined: Sat Oct 16, 2004 3:34 pm

Re: Quake MOD - In The Shadows

Post by Dr. Shadowborg »

Somehow missed this, downloaded and tried it. (haven't finished it yet)

Bugs:
None noticed.

General Feedback:

Pluses:
1. I like how the stealth gameplay is entirely optional. It's like getting two games in one. (that said, vanilla quake weapons...again? *sighs* Then again, some people seem to prefer things that way...)

2. Visuals are amazing, love the walls that turn transparent in stealth mode.

3. AI pathfinding seems to be working well, I liked how the start map fiend knows how to use the button to get out and kill you. >=D

4. Map alterations depending on route chosen?! Awesome.

Minuses:
1. Start map can be a little confusing because you need to shoot some buttons to get into the vault. I didn't see them right away and ended up wandering around the map not knowing what to do. Also, some secrets / areas seemed...not immediately accessable. Maybe they become accessable later?

I'll update some more once I finish with it.

EDIT:

Finished it, no bugs to report. AI navigation appeared flawless. Also, I now belatedly noticed the highly id1 inspired map design. :D

All that said, stealth really isn't my thing...suffered through the first map in stealth mode, stuck with it through start map redux, ditched it for "Castle of Shadows", had a lot more fun playing oldskool-style. (guess I'm just the "kick ass and chew bubblegum" kinda guy...)

Excellent atmosphere, the floating book thingies were cool too.

All in all, I give it 9/10 score.
sock
Posts: 137
Joined: Thu Aug 23, 2012 7:16 pm
Location: Wandering Around
Contact:

Re: Quake MOD - In The Shadows

Post by sock »

Image

Well here is it, 'The Cosmetic Upgrade' because it has so many visual additions. New particles, new models, new skins, new textures, new tutorial, more main story, new stealth books, new menu/help system and a few changes to the layout of some maps!

http://www.simonoc.com/files/maps/sp/its_demo_v1_1.zip - V1.1 Download Link (16.5Mb File Size)
http://www.simonoc.com/files/maps/sp/it ... readme.txt - V1.1 Readme File

@Dr. Shadowborg, thanks for the feedback. The vault button was something that is now fixed in the new version. I would love to know why you did not like the stealth? Too hard? Did you try a different skill level? Was things not explained very well? The latest version does have a ton more hints and tips and the tutorial is longer with more information. If you have time I would love if you could try the new version and tell me if stealth is easier to understand? To quickly get to the tutorial section, load the start map, bring down the console and type 'training' and let me know what you think. It might be so good you might try the bonus maps again! :)

Something is completely screwed with this forum, the PHP is going crazy with the cookies, I have to block cookies for this forum. Constantly clearing cache does not work. Something has changed and I am still using the same browser/OS. Firefox really does not like this website anymore.
Well he was evil, but he did build a lot of roads. - Gogglor
Dr. Shadowborg
InsideQC Staff
Posts: 1120
Joined: Sat Oct 16, 2004 3:34 pm

Re: Quake MOD - In The Shadows

Post by Dr. Shadowborg »

Downloaded, playing it now.

Inital impression is that this is MUCH more polished than the original.

I'll let you know more once I've played some more. :wink:
taniwha
Posts: 401
Joined: Thu Jan 14, 2010 7:11 am
Contact:

Re: Quake MOD - In The Shadows

Post by taniwha »

Darn, it was working in quakeforge until I opened the book. qf got stuck spewing "SZ_GetSpace: overflow". I'll look into it (no matter what, there's a bug in qf as I had to ssh in and kill nq-x11).

I like your particle work, especially the runes, and the other artwork I saw in the area was very nice. Then I approached the book :/.

Anyway, I've been bitten: I now have a reason to go in and poke at QF's nq engine some more (last time was conflagrant rodent).

One bug report so far (in your docs):
engine: This demo has been designed and tested to *ONLY* work with the following engines:
Please move "*ONLY*" to before "the following":
engine: This demo has been designed and tested to work with only the following engines:
You want to put the "fence" around "the following engines", not "work" :) and you don't really need to emphasize the word that much (but that's up to you).
Leave others their otherness.
http://quakeforge.net/
taniwha
Posts: 401
Joined: Thu Jan 14, 2010 7:11 am
Contact:

Re: Quake MOD - In The Shadows

Post by taniwha »

Sock: I've found the reason for the hang, but I am currently uncertain what to do about it. I have modified nq's think code to loop like qw's does:

Code: Select all

do {
    ...
    sv_pr_think (ent);
    ...
} while (SVfloat (ent, nextthink) >= sv.time);
Actually, original QW code is while(1). The current condition is from fixing a similar issue in honey.

However, book_fade() is setting nextthing to time:

Code: Select all

book_fade:
8160 address self.count, [$1113]
...
817f address self.nextthink, [$1113]
8180 storep.f time, *[$1113]
Now, I could put a "runthink_mode" control in the while condition, but I'd really rather not. Instead...

What exactly are you trying to achieve? My guess is you want book_fade to run again the next frame, but why? My asm decompile skills are rather rusty so decompiling unfamiliar code is rather time consuming, but my guess is to do a smooth fade of something. If you want book_fade to run several times in the one frame (which QF's nq supports, and qw always has, at least since before the GPL release) then you need some smarter code. If you want book_fade to run the next frame, does it really need to be exactly the next frame? time + 0.02 (50fps) should get a similar result, though you might need to keep track of the last think time if you're calculating a smooth fade.

[edit]I temporarily disabled the looping and now I know what you're fading. Nice effect, now if only a solution that leaves everyone happy can be found.
Leave others their otherness.
http://quakeforge.net/
Spike
Posts: 2914
Joined: Fri Nov 05, 2004 3:12 am
Location: UK
Contact:

Re: Quake MOD - In The Shadows

Post by Spike »

Code: Select all

void() book_fade =
{
	self.count = ((self.amuletfade + FL_SWIM) * FOGDEN_DEFAULT);
	self.lip = (((time - self.ltime) / self.count) * BOOK_FADEOUT);
	if (!(self.amuletfade != FALSE))
		self.lip = (BOOK_FADEOUT - self.lip);
	if ((self.lip < FALSE))
		self.lip = FALSE;
	else
	{
		if ((self.lip > BOOK_FADEOUT))
			self.lip = BOOK_FADEOUT;
		else
			self.nextthink = time;
	}
	stuffcmd(self.enemy, "\nv_cshift 0 0 0 ");
	stuffcmd(self.enemy, ftos(self.lip));
	stuffcmd(self.enemy, "\n");
};
Spammy as hell, but should at least be as smooth as it can be.
If a player starts timing out, the server can still spam them to overflowing.
Common practise in single-player-only mods.
What I am surprised at, is that taniwha has not encountered this issue before - you really do need to be able to early-out if the mod didn't advance the nextthink beyond what it already was or you'll break on quite a few mods.
taniwha
Posts: 401
Joined: Thu Jan 14, 2010 7:11 am
Contact:

Re: Quake MOD - In The Shadows

Post by taniwha »

Spike: so it seems. The problem is, I haven't had enough mods lying around to do the required testing. This is one of the areas that gets in the way of merging the servers. I guess I might need to add that loop control flag :(

Heh, fte has a decompiler? Can tell by the crazy symbols for the constants :) Thanks.

Yeah, it looks like just adding a small number to time will fix it (so long as time never gets to be more than a few hours). 0.01 is ok for about a day (see "Tables").

I need to get around to making Sys_DoubleTime 2G offset.
Leave others their otherness.
http://quakeforge.net/
Spike
Posts: 2914
Joined: Fri Nov 05, 2004 3:12 am
Location: UK
Contact:

Re: Quake MOD - In The Shadows

Post by Spike »

the three engine portability issues I've seen are these:
1: ent counts can be quite high with particles etc all moving at once at once, thus it requires an engine with increased packet sizes/ent limits. Fair enough, not much you can do about that one without sacrificing stuff. You could make some temp1 flag to disable particles I suppose, which might help with coop/internet games even with fitzquake etc.
2: "gl_texturemode 3\n" stuffcmds - that should be "gl_texturemode gl_nearest_mipmap_nearest\n" (I assume) if you want greater engine compat. This should be an easy change that won't break fitzquake, while the more verbose form is understood even by vanilla glquake.
3: scr_menusize - this is specific to fitzquake. Other engines tend to use vid_conwidth/vid_conheight, but setting those correctly is often too much of a hassle. Presumably the sensible thing to do here is to move that setting into your default.cfg file instead, though their regular config might still override that... Not really sure if this can be fixed in a portable way, other than to directly detect the client engine and then pick the appropriate stuffcmd.

There may be more issues with other engines/maps.
taniwha
Posts: 401
Joined: Thu Jan 14, 2010 7:11 am
Contact:

Re: Quake MOD - In The Shadows

Post by taniwha »

1) ok, qf should have that covered
2) yeah, that's a problem. qf doesn't accept numeric arguments for gl_texturemode
3) They're con_width and con_height in QF. Not only that, they're read-only. The only runtime mode changing QF supports at this time is fullscreen toggle. Regardless of that, IMHO a mod has no place modifying such vars anyway, especially console width/height as they affect text scaling in GL and the user might have things set up "just so". Probably the best thing to do is just document the required space for the menus and let the user decide what to do about it.
Leave others their otherness.
http://quakeforge.net/
taniwha
Posts: 401
Joined: Thu Jan 14, 2010 7:11 am
Contact:

Re: Quake MOD - In The Shadows

Post by taniwha »

sock: Here's a patch to the readme with my suggestions for better wording of some of the sentences (just ones with "only" in them, nothing else made me twitch). For completeness, it includes the one I've already mentioned.
Leave others their otherness.
http://quakeforge.net/
taniwha
Posts: 401
Joined: Thu Jan 14, 2010 7:11 am
Contact:

Re: Quake MOD - In The Shadows

Post by taniwha »

The dragon room (?) was nifty. Neat trick and it crashed QF (found a bug because this is the first time the same texture has been used for both wall and water).

Fun. Though I got the shammy first try the first time I played, it took a couple of goes after that. That is certainly an interesting mod.

I've yet to get past the start map :/.
Leave others their otherness.
http://quakeforge.net/
sock
Posts: 137
Joined: Thu Aug 23, 2012 7:16 pm
Location: Wandering Around
Contact:

Re: Quake MOD - In The Shadows

Post by sock »

taniwha wrote:You want to put the "fence" around "the following engines", not "work" :) and you don't really need to emphasize the word that much (but that's up to you).
I certainly don't want to restrict my MOD to certain engines but when I asked at Func_msgboard (http://www.celephais.net/board/view_thread.php?id=60452 - post 370+) about the Quakespasm engine and the error 'PF_VarString: Overflow' I was told more or less 'Go away and stop doing things you are not suppose to do with this engine!'. I will gladly work with any engine developer to get round problems but being told 'no go away' does not really offer any chance of fixing things.
Spike wrote:1: ent counts can be quite high with particles etc all moving at once at once, thus it requires an engine with increased packet sizes/ent limits. Fair enough, not much you can do about that one without sacrificing stuff. You could make some temp1 flag to disable particles I suppose, which might help with coop/internet games even with fitzquake etc.
My mod uses a crazy amount of ENTS / particles and the engine will crash if 'max_edicts' is not set higher for engines that don't change when needed. This also has a nasty side effect of making the demo files huge because each particle is an entity that lives for a certain amount of time and then removed. Is there a way to mark all the particles ENTS with a temporary flag so they are not saved in demo files and do not impact other parts of the engine? I also have plans to switch off most of the particles for DM game play, but that is something I was going to implement later, the primary focus is SP at the moment.
Spike wrote:2: "gl_texturemode 3\n" stuffcmds - that should be "gl_texturemode gl_nearest_mipmap_nearest\n" (I assume) if you want greater engine compat. This should be an easy change that won't break fitzquake, while the more verbose form is understood even by vanilla glquake.
That is something I fixed in the latest version 1.1 (links above), this is the QC I use now:

Code: Select all

		// Based on serverflag update linear filtering
		if (serverflags & SVR_PIXELSOFF) stuffcmd(client, "\ngl_texturemode GL_LINEAR_MIPMAP_LINEAR\n");
		else stuffcmd(client, "\ngl_texturemode GL_NEAREST_MIPMAP_LINEAR\n");
Spike wrote:3: scr_menusize - this is specific to fitzquake. Other engines tend to use vid_conwidth/vid_conheight, but setting those correctly is often too much of a hassle. Presumably the sensible thing to do here is to move that setting into your default.cfg file instead, though their regular config might still override that... Not really sure if this can be fixed in a portable way, other than to directly detect the client engine and then pick the appropriate stuffcmd.
This is fixed in the latest version 1.1 (links above). I originally had a pile of entities in the map doing stuff commands when the client was put into the server, I got the idea from looking at the honey source files by CZG. This was a really bad idea and eventually someone told me to use the quake.rc file instead. All the menu commands are in the right place (quake.rc) and not in the map files anymore.

Code: Select all

//-----------------------------------------------------------
// Shadow Settings
// If you don't like it, override with autoexec.cfg
//-----------------------------------------------------------
gl_clear 1
gl_overbright 1
scr_menuscale 2
scr_conspeed 600
r_wateralpha 0.65
crosshair 1
taniwha wrote:Darn, it was working in quakeforge until I opened the book. qf got stuck spewing "SZ_GetSpace: overflow".
Here is the QC I use and if there is a better way of doing this I will gladly change my QC to fix this problem. I also use something similar for fading models (distraction bolts fade on impact) and fading stealth walls (the dragon closet is an example of this)

Code: Select all

float BOOK_FADEOUT = 192;						// Background density while reading books

//----------------------------------------------------------------------
// Store self so think functions can work correctly
// direction = TRUE, fade up ; FALSE, fade down
//----------------------------------------------------------------------
void(float direction) book_fadeuse =
{
	local entity tself;
	
	tself = self;
	self = self.ghostmarker;
	self.height = direction;
	self.use();
	self = tself;
};

//----------------------------------------------------------------------
void() book_fade =
{
	self.count = (self.amuletfade + 2 ) * 0.1;
	self.lip = ((time - self.ltime) / self.count)  * BOOK_FADEOUT;
	if (!self.amuletfade) self.lip = BOOK_FADEOUT - self.lip;
   
  if (self.lip < 0 ) self.lip = 0;
  else if (self.lip > BOOK_FADEOUT) self.lip = BOOK_FADEOUT;
	else self.nextthink = time;

	// Change screen background density (makes text easier to read)
	stuffcmd(self.enemy, "\nv_cshift 0 0 0 "); 
	stuffcmd(self.enemy, ftos(self.lip) );
	stuffcmd(self.enemy, "\n");
};

//----------------------------------------------------------------------
void() book_fadetrigger =
{
	self.amuletfade = self.height;
	self.think = book_fade;
	self.nextthink = time;
	self.ltime = self.nextthink;
};

//----------------------------------------------------------------------
void() book_fadesetup =
{
	// Find player for distance check
	if (!self.enemy) {
		self.enemy = find(world, classname, "player");
		// If cannot find the player, try again later
		if ( self.enemy.flags & FL_CLIENT ) {
			self.use = book_fadetrigger;
		}
		else {
			self.enemy = world;
			self.nextthink = time + 0.1;
		}
	}
};

//----------------------------------------------------------------------
void() book_fadecontroller =
{
	self.ghostmarker = spawn();
	self.ghostmarker.owner = self;
	self.ghostmarker.movetype = MOVETYPE_NONE;
	self.ghostmarker.solid = SOLID_NOT;
	self.ghostmarker.classtype = CT_BOOKFADER;
	self.ghostmarker.oldorigin = self.origin + '0 0 32';
	setorigin(self.ghostmarker, self.ghostmarker.oldorigin);
	setsize (self.ghostmarker, VEC_ORIGIN, VEC_ORIGIN);
	self.ghostmarker.amuletfade = TRUE;
	self.ghostmarker.lip = 0;
	self.ghostmarker.think = book_fadesetup;
	self.ghostmarker.nextthink = time + 0.2;
}

If there are anything else going wrong please let me know and I will gladly fix the problems. I just don't know enough about all the different engines and what stuff is constant across all engines. I developed my MOD using the Fitz engine and I assumed because it is so old everyone used that engine as a baseline.
Well he was evil, but he did build a lot of roads. - Gogglor
Spirit
Posts: 1068
Joined: Sat Nov 20, 2004 9:00 pm
Contact:

Re: Quake MOD - In The Shadows

Post by Spirit »

I have no idea about anything but could you circumvent that 'PF_VarString: Overflow' problem by splitting the strings into smaller chunks and display one on top, the other lower, etc? This might lead to more problems depending how engines handle their 2D scale. Just a random thought. :)
Improve Quaddicted, send me a pull request: https://github.com/Quaddicted/quaddicted-data
sock
Posts: 137
Joined: Thu Aug 23, 2012 7:16 pm
Location: Wandering Around
Contact:

Re: Quake MOD - In The Shadows

Post by sock »

@spirit, there are plenty of ways of dealing with this engine error and here is a quick list. (I am sure there are more options available)

1. Truncate the string and only display what the engine thinks is valid. Don't constantly spam the console with the same error message and make it a 'dev' only error (need developer 1 to see message). Players don't need to see this error, only developers of the map/engine can really fix this.
2. Allow the engine to have a command line parameter to let the string overflow (can even make this a SP only mode if necessary)
3. Added an extra centerprint function so the QC can display the string properly and add a way for the QC to know what engine it is running on.

As I have stated on many occasions, I will gladly work with people to fix problems but people have to be willing to try different solutions.
Well he was evil, but he did build a lot of roads. - Gogglor
Baker
Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

Re: Quake MOD - In The Shadows

Post by Baker »

Trying to make a complicated mod work on "all engines" is a waste of your time and kind of like "fool's gold".

The burden of engine compatibility is not on modders, it is on various engine authors. Trying to do this in reverse is checking into the heart-break hotel, it isn't going to go well no matter what you do. And you'll spend a lot of time chasing an unattainable goal.

Do yourself a favor. Don't open pandora's box. Stick with a target engine, work within what it does.

You've made reasonable design decisions to limit "evil". That's all you can do. Trying to appease everybody ultimately appeases nobody, and costs you a ton of time and there isn't a qualification to be an armchair quarterback, nor do they really know the true costs of their "ideas" or complaints (oh dear, a few years I had an asshat tell me how "easy" it would be to make Quake just be a jpeg stream and this guy would start talking about it every time I connected to a server to play. One time I said "Look, I'm here to play. I don't want to talk." and I guess that made him upset and caused him to not like me.)
The night is young. How else can I annoy the world before sunsrise? 8) Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
Post Reply