Backtracking
#3526 posted by Lunaran on 2005/04/13 09:18:36
Backtracking is a good way to extend the length and monster count of your map, but it's not to be taken lightly.
First, there must be new monsters. Period.
Second, these areas must be designed well enough that the player discovers new gameplay, with new advantages/disadvantages, when he's coming into these areas from the other direction.
Third, don't backtrack too much. The map will wear thin if you make the player haul across the same stuff three or four times.
Fourth, make it clear where he's going. Unless the map has a really unique and varied design that the player can easily remember his way around in, make sure he's ushered in the right direction. The big obvious quake-arrows help. It's a pain wandering around a map where everything looks the same, finding a key, and going, "okay, where the hell was the door?" The player doesn't have a top down view like you do.
One Advantage To Backtracking
#3527 posted by necros on 2005/04/13 16:15:12
is that the player has already learnt from his previous experiences, what are the best ways to fight in a certain spot (or should at least have an idea anyway).
to this end, you can increase difficulty to what would normally be a little excessive. the player's knowledge of the areas he'll be fighting in, should give him a bit of an edge, and make that excessive situation just about normal.
Backtracking Ideas
#3528 posted by pushplay on 2005/04/16 00:25:24
- fighting your way down a pit and then fighting back up
- shift platforms or walls, reveal traps
- open up the ceiling to reveal the skybox or other inconsequential coolness
- block directions the player shouldn't take
- and of course spawn more monsters
Quake C Question
#3529 posted by blaGGer on 2005/04/17 09:14:51
I have two progs.dat files. One is much bigger than the other and I am looking at the differences. I am looking at ogre.qc and see these two differences-
void () ogre_die3 = [ 114, ogre_die4 ]
{
self.solid = SOLID_NOT;
self.ammo_rockets = SPAWNFLAG_LASER;
DropBackpack ();
};
and the other-
void () ogre_die3 = [ 114, ogre_die4 ]
{
self.solid = SOLID_NOT;
self.ammo_rockets = MOVETYPE_FLY;
DropBackpack ();
};
Why should there be differences and what does it do in the game?
Code And Decompiling
#3530 posted by Preach on 2005/04/17 10:45:36
MOVETYPE_FLY and SPAWNFLAG_LASER are both just constant floats within the QC, defined in defs.qc and in misc.qc. SPAWNFLAG_LASER takes the value 2, so that the ogre drops 2 rockets in that mod. MOVETYPE_FLY normally has the value 5 assigned to it, so in that mod the ogres will drop 5 rockets instead. However, the fact that either of those constants appear in the code you're quoting suggests that you got the code by decompiling. Are you sure that's the only difference between the two sets of code?
If it is the only difference, then the size of the compiled progs files could just be due to the compiler originally used on each one. More recent compilers perform lots of optimisations that reduce the size of the progs(the size reduction is a side effect of the intended aim, which is to make the file hit fewer limits in the quake engine and so on). If there are more changes in the code, then they are much more likely to account for the difference in size.
In short, the only gameplay difference will be the number of rockets dropped by the ogre, and I'd guess that shouldn't affect the progs size at all.
Preach
#3531 posted by blaGGer on 2005/04/17 11:20:21
Thank you for explaining. What is the benefits by using constants instead of entering the value you want?
Yes, I did get the codes from de-compiling and one of the versions was (I think) yours - spawning monsters by the use of the 'style' flag in the map?
I have since found some more differences which is to do with setting monsters health from the map file. And also to do with ogres shooting missiles instead of grenades but I can not yet work it out.
Constants And Decompiling
#3532 posted by Preach on 2005/04/17 17:17:59
The advantage of of using constants is to make the code clearer, and the ogre code above is a really bad example of this, as it's made things more confusing not less. The quake engine and the QC code both remember a lot of properties, such as the way an object moves (it's movetype) as numbers. But if you want to code something with the flight movetype, it's annoying to have to look up a number, and when you read the code back:
self.movetype = 5;
isn't very clear; you'd have to look up what movetype corresponds with 5 to figure out what the code means.
self.movetype = MOVETYPE_FLY;
is much easier to understand, although once it's compiled, both lines are equivalent.
The equivalence causes a problem when you come to decompile the code. The decompiler can't see which constants to use where(to the best of my knowledge) and so it takes a guess as to which ones belong where. In the case of the ogre, it's guessed incorrectly that the number of rockets should be a constant. In the case of the ogre, there is no advantage in using a constant instead of just entering the value, and in the original code it is just a number:
void() ogre_die3 =[ $death3, ogre_die4 ]
{self.solid = SOLID_NOT;
self.ammo_rockets = 2;DropBackpack();};
As a recommendation, I'd try to not work with decompiled code where you can, I hope that the source to the mod I wrote is included with the mod, otherwise let me know and I'll send you it. If you're trying to merge multiple mods together, and there's no way to get the source code for the other mods, start with the clean source/source to my mod, then add just the bits of decompiled code that you need to that base.
Decompiled code also lacks comments, which are sometimes quite helpful. For the teleport mod, all the changes I made were commented, so if you wanted to add teleporting to another mod, you could simply find all the comments in the code, and follow the instructions to copy them into another mod.
Phew, that ended up long...
Preach
#3533 posted by blaGGer on 2005/04/18 14:42:14
Words of wisdom thank you.
I started looking at code back about front as I wanted to see how to compile before I had written anything to compile. So I decompiled some progs.dat to play with which is why I ended up with code without comments. So now I try to do it right.
I now have the source code and it is yours. What is the extension .$$$ used for? The code in these files includes shalrath_tele. Does the $$$ files get compiled just the same?
How does the game know that the code for monster_shalrath_tele as entered in the map file is in the shalrath qc file, is this defined somewhere else? I am not clear because you say in the readme file that if the shalrath is not to teleport away than use the ordinary shalrath so I think that both will be compiled.
I am really interested in learning about this code so I am sorry if all of this is too simple for you but will be pleased if you will help.
Make $$$ Quick!!!!!
#3534 posted by Preach on 2005/04/18 16:44:52
Arrrgh, I shouldn't have left the $$$ files in there. They are backup files that get automatically generated by the program I use to edit qc files, you can safely ignore them or delete them.
The idea behind the monster_shalrath_tele is this: When a map is loaded, the engine looks at the name of every entity that is included in the map. It then tries to find a function in the QC with the same name as the entity, and runs that function(or produces an error message if it can't find the function). The function is usually designed to set up the entity in question, set it's model, it's behaviour and so on. The engine sets the entity called self to be the entity in the map, so by setting self.health in the function you affect the health of the thing in the map.
When you run this mod along with a map that has a monster_shalrath_tele entity, it runs the function
monster_shalrath_tele();, which basically makes a vore in the right place in the map, with a special death animation that looks like a teleport.
Because there's a new function for this kind of shalrath, the old one is still present, and unchanged. So any monster_shalrath in the map will be just like the ones in the original quake. I could have programmed it differently, so that you just set a flag on a normal monster_shalrath in the map, that makes it teleport out on death, but I did it this way because that's what the original recipient requested.
If you wanted to make, say, a new monster, so that the entity you added to a map was called monster_troll, then you'd call all the animation functions and so on whatever you like(although it's usual to stick to the conventions in the existing code). Then just ensure the spawn function was called monster_troll().
Hope that clears up how the game knows what code to use for which entites.
Preach
#3535 posted by blaGGer on 2005/04/18 23:18:17
Great, I understand now. Thank you.
Preach
#3536 posted by blaGGer on 2005/04/19 13:16:27
Well, I am quite pleased because I managed to find your error tutorial hidden in the shambler.qc file ;-)
monster_shambler_tele_set
and
monster_shambler_set_tele
I stared at it for a long time before I could see it!
I didnot try the progs.dat supplied as I was adding some code so I cannot say if is OK or not. But it compiles good now and works fine. Thanks again.
Preach
#3537 posted by blaGGer on 2005/04/19 13:17:03
Well, I am quite pleased because I managed to find your error tutorial hidden in the shambler.qc file ;-)
monster_shambler_tele_set
and
monster_shambler_set_tele
I stared at it for a long time before I could see it!
I didnot try the progs.dat supplied as I was adding some code so I cannot say if is OK or not. But it compiles good now and works fine. Thanks again.
Preach
#3538 posted by blaGGer on 2005/04/19 13:17:47
Well, I am quite pleased because I managed to find your error tutorial hidden in the shambler.qc file ;-)
monster_shambler_tele_set
and
monster_shambler_set_tele
I stared at it for a long time before I could see it!
I didnot try the progs.dat supplied as I was adding some code so I cannot say if is OK or not. But it compiles good now and works fine. Thanks again.
Preach
#3539 posted by blaGGer on 2005/04/19 13:18:25
Well, I am quite pleased because I managed to find your error tutorial hidden in the shambler.qc file ;-)
monster_shambler_tele_set
and
monster_shambler_set_tele
I stared at it for a long time before I could see it!
I didnot try the progs.dat supplied as I was adding some code so I cannot say if is OK or not. But it compiles good now and works fine. Thanks again.
Preach
#3540 posted by blaGGer on 2005/04/19 13:26:36
Well, I am quite pleased because I managed to find your error tutorial hidden in the shambler.qc file ;-)
monster_shambler_tele_set
and
monster_shambler_set_tele
I stared at it for a long time before I could see it!
I didnot try the progs.dat supplied as I was adding some code so I cannot say if is OK or not. But it compiles good now and works fine. Thanks again.
Preach
#3541 posted by blaGGer on 2005/04/19 13:26:47
Well, I am quite pleased because I managed to find your error tutorial hidden in the shambler.qc file ;-)
monster_shambler_tele_set
and
monster_shambler_set_tele
I stared at it for a long time before I could see it!
I didnot try the progs.dat supplied as I was adding some code so I cannot say if is OK or not. But it compiles good now and works fine. Thanks again.
Preach
#3542 posted by blaGGer on 2005/04/19 13:27:04
Well, I am quite pleased because I managed to find your error tutorial hidden in the shambler.qc file ;-)
monster_shambler_tele_set
and
monster_shambler_set_tele
I stared at it for a long time before I could see it!
I didnot try the progs.dat supplied as I was adding some code so I cannot say if is OK or not. But it compiles good now and works fine. Thanks again.
Preach
#3543 posted by blaGGer on 2005/04/19 13:28:06
Well, I am quite pleased because I managed to find your error tutorial hidden in the shambler.qc file ;-)
monster_shambler_tele_set
and
monster_shambler_set_tele
I stared at it for a long time before I could see it!
I didnot try the progs.dat supplied as I was adding some code so I cannot say if is OK or not. But it compiles good now and works fine. Thanks again.
Preach
#3544 posted by blaGGer on 2005/04/19 13:28:13
Well, I am quite pleased because I managed to find your error tutorial hidden in the shambler.qc file ;-)
monster_shambler_tele_set
and
monster_shambler_set_tele
I stared at it for a long time before I could see it!
I didnot try the progs.dat supplied as I was adding some code so I cannot say if is OK or not. But it compiles good now and works fine. Thanks again.
Preach
#3545 posted by blaGGer on 2005/04/19 13:28:25
Well, I am quite pleased because I managed to find your error tutorial hidden in the shambler.qc file ;-)
monster_shambler_tele_set
and
monster_shambler_set_tele
I stared at it for a long time before I could see it!
I didnot try the progs.dat supplied as I was adding some code so I cannot say if is OK or not. But it compiles good now and works fine. Thanks again.
Lol
#3546 posted by Kinn on 2005/04/19 13:31:39
Holy Fuck,
#3547 posted by - on 2005/04/19 14:15:00
a new record!
blaGGer, please don't hit submit a bunch of times, or refresh or whatever the hell you did.
Hahahahahahaha
#3548 posted by pjw on 2005/04/19 18:31:18
A dectuple-post!!
Hell yeah. If you're going to do something, then by golly, just go all out with your bad self.
I'm home sick today and feel kind of shitty, and that made me feel better.
#3549 posted by madfox on 2005/04/19 21:12:05
I am not in the trunc dreath?
I am not in the grunt breath?
I am not in the drunk thread?
Blagger Is Just Simply Quite Pleased!
#3550 posted by Friction on 2005/04/19 22:15:09
;-)
|