Jump to content

Home

SAGA specifications


Slunker

Recommended Posts

Good job.

 

I was stuck on this for quite some time already, thinking why it displayed the round won/loss messages correctly but not objective won/loss messages NOR the custom sounds.

 

Ah and another note: the default sound in the code is an un-existant one. That's why there's no sound on objective/round completion.

 

 

Only thing I hope, is that people will actually play and like this gametype.

Link to comment
Share on other sites

  • Replies 186
  • Created
  • Last Reply

Since this gametype evidently will become a mod due to the quantity of modfieid coding, I just you all work together. SAGA will not succeed if their are dozens of different versions that people have to download just to play individual maps.

 

Secondly, this needs to become a full mod, not just something which unlocks the gametype and adds a few tweaks to the code, a class system would be nice to see.

 

Thirdly, when the mod is running, hide the other gametypes in the same way that Hydroball only lets you select the one gametype.

 

Finally, I have been waiting for this kind of project ever since I expressed my view that Infiltrate! for JK should be revived, since this is close, I am keen to make maps for it.

Link to comment
Share on other sites

Hmmmmm....

 

I managed to set up my source to use a "World" group, and made a paired value that sets/unsets lightsaber-only. Force disabled is apparently a bit trickier. I can set the g_forcePowerDisable cvar, but it isn't doing anything, really. Afterwards, I run WPInitForcePowers() or whatever the func is, but that doesn't accomplish anything, either. I think that perhaps WPInitForcePowers() needs to be reprogrammed, because it has special areas for CTF/CTY and GT_TOURNAMENT... probably others, I got tired of digging through source code and took a break for the day afterward. Anyhow. Progress is being made. After getting diabling force powers to work, I'm going to make a big project out of nolightsaber mode (and it accompanying control from the .saga file). Lastly, limiting available skins by team (i.e. Stormtrooper and Imperial are the only available skins for the Imperial team, Rebel is the only available skin for the rebel team, or some such) would be a fun option to have available (but not absolutely necessary), to make the scenarios seem more... *shrugs* realistic?

 

-Slunker

 

btw, if anyone has a better understanding of disabling force powers, and knows of something necessary other than changing the cvar and running that function, please say so.

Link to comment
Share on other sites

For force powers and stuff, wouldn't the easiest way be to add a function to the initsagamode that reads the "world" definition group and set the cvars on startup. As for the model and skins sounds like it would take a lot of rewriting in the UI and cg files. Say, how are you planning on releasing this code? A lot of people are complaining that there's too many server varities / Mods as is. It would probably be a good idea if we all get together and make a single upgraded Saga Mod instead of 50 zillion different minor Mods....

 

Razor Ace

Link to comment
Share on other sites

Without having much experience in this kind of thing, except as an end-user (read - gamer) and someone with a slightly vague plan to get involved in this side of things in future...

 

Instead of releasing this as a mod in its own right (as seems to have been cavassed above), wouldn't it be better to simply make the code available to any mod makers who want to create objective based mods and/or maps in the future? Basically, open source code to be implemented wherever and by whoever needs it.

 

I don't see much use in having this as a mod in its own right (which seems to be what others were saying). Incorporate it into a mod or foget about it, would be my humble view for any actual or potential mod makers out there.

Link to comment
Share on other sites

That's how I'm using the cvars... at the end of the saga_init function, it reads in World, and all the accompanying paired values (only 2 right now, one that works)...

 

Yah, that skins thing'll be... difficult. But! That's a long way away as I see it, so! I guess I'll have to look harder at WP_ForcePowerInit() if no one has any ideas.

 

As far as open source goes: I agree that releasing our improvements here as source code will be important, since: any mod we release will incorporate a working version of an entire gametype. It makes sense for it to be public property, therefore, since the working source for all other gametypes (except, uh... duel_tournament and single_player- the other two unreleased gametypes) is public property. HOWEVER. Releasing this as a mod in its own right is important, because otherwise, saga gametype will never be used. Get it? So. Anyhow! If you'd like the source for the noweaps code, it's pretty easy. At the end of Saga_init() (outside all enclosing if statements related with the rebel/imperial groups...)

 

if (GetValueGroup(saga_info,"World",objectives))

{

if(GetPairedValue(objectives,"noweaps",goalreq))

{

trap_Cvar_Set("g_weaponDisable",goalreq);

}

}

 

Pretty easy, like I said. Notice that I send goalreq to trav_Cvar_Set, not atoi(goalreq). Obviously, this is because the value argument of trap_Cvar_Set() is a character pointer. Okay!

 

-Slunker

Link to comment
Share on other sites

since the working source for all other gametypes (except, uh... duel_tournament and single_player- the other two unreleased gametypes) is public property

 

GT_TOURNAMENT is the Duel gametype

GT_SINGLE_PLAYER does nothing except a bit more aggressive bots. It's most likely a remaining gametype from Quake 3 Single Player game.

Link to comment
Share on other sites

Originally posted by Slunker

if (GetValueGroup(saga_info,"World",objectives))

{

if(GetPairedValue(objectives,"noweaps",goalreq))

{

trap_Cvar_Set("g_weaponDisable",goalreq);

}

}

 

-Slunker

It would be easier on the parser code if you added the Strip_Tabs() before the GetPairedValue.
Link to comment
Share on other sites

The way I see it, release it with all the current code fixes so that mappers can get started, and so that they can be played.

 

But continue working with it and make it into a proper team-game with classes etc. We've had too many minor mods, ie saber tweaks, jetpack etc. Games thrive on actual gametype modifications not minor mods.

 

As I said in an earlier post, this is exactly the type of project i've been waiting for, but since i'm a mapper not a coder (yet) I haven't gone anywhere far. If done well this could become very popular.

 

If you want maps/websites/ideas/rants contact me :D - det@massassi.net

Link to comment
Share on other sites

cant you guys just use the g_jediVmerc for force disabling. Obviously it wouldnt work for some senario's but for a Rebel Vs. Empire map it would well.

 

This sucks cause i just finished my map today. I was able to make a objective based map just with CTF with no coding. But it looks like Ill have to change it to Saga now. If you guys need help with this Ill help with anything, this is definitely what this game needs, And we do need to work together and get a fleshed out mod, try to enclude Jedimod, jetpack, grapple...ect. we can make it like a patch 1.05 to bring this game back to life.

 

anyways I think JediVmerc is the way to go, one Idea I had was to make Mercs start with Detpacks and use them like engineers in RTCW, that way jedi would be better fighters but Mercs would be vital to winning objectives.

 

I'll put the map up later anyways.

Link to comment
Share on other sites

Good idea on the striptabs() thing, btw. And with JediVMerc, I'm simply not going to use that, since that is not my original intention. My original intention was to make it so that force powers could be totally disabled from the .saga file. It WILL be done that way. Classes and such, (but more specifically, the ability for the mapmaker to create his own classes for his own map) are important, but not our current objective. As far as I see, there should be nothing out of control of the mapper, so using g_JediVMerc and making it so that jedis fight and mercs complete objective isn't what we're after at all. That would be creating a gamme. We're creating a gametype. The differences are huge.

 

-Slunker

Link to comment
Share on other sites

NOW THIS IS A GAMEPLAY MODE!

 

Excellent work guys. I've been wanting to do something like this in JK2 ever since playing some of those cool MP levels in Return To Castle Wolenstein.

Esp. the blow up the Submarine level ;-)

 

My current map is nearly complete and I am eager to add this gameplay mode to the map.

 

I think I follow the instructions, but perhaps a tutorial (with PIX) would be beneficial.

 

I will propbably be posting a few questions as I go though as my coding skills are kinda rusty/extinct.

 

Monsoontide

Link to comment
Share on other sites

Slunker - Yes! That would be excellent.

Just a step by step on how to set up, say... 2 or 3 objectives per team - Code wise as well as what needs to be done in Radiant (With specific (simple) examples that people can use as a base to start from.

Woohoo - the possibilty of playing a game where the objective is more than just arsing around trying to kill people.

(Sorry - trying to stab someone with a lightsabre for the umpteeth time gets tedious quickly).

 

If I can assist in any way or give feedback on this let me know

 

Monsoontide :)

Link to comment
Share on other sites

The basics:

 

.saga file

 

//saga info file
Rebel              // one of the 2 groups that must exist. The other is Imperial
{
RequiredObjectives	2	// number of required objectives required for win
attackers	1	// sets bot behaviour
wonround "Congratulations" //message on win round
lostround	 "You Suck"		//message on lose round
roundover_sound_wewon "/sounds/somesound.wav"	//not required, but will be played on win if defined
roundover_sound_welost "/sounds/somesound.wav"	//not required, but will be played on loss if defined
Objective2					// each objective is defined as Objective#
{
	final 0		// if 1, game ends on objective completion
	target ent1_name	// name of map entity to activate on completion (can be used to open doors, etc)
	message_rebel "Congratulations! Objective 1 complete!" // text on objective completion for the team
	message_imperial  "You suck! Objective 1 was completed" // text on objective completion for the opposing team
	sound_imperial "/sounds/somesound.wav"		//not required, but will play for imperial on this completion
	sound_rebel "/sounds/somesound.wav"		//not required, but will play for rebel on this completion
}
Objective3
{
	final 			0
	target 			obj1_name
	message_rebel		"Congratulations! Objective 2 complete!"
	message_imperial	"You suck! Objective 2 was completed"
}
Objective4
{
	final 			1
	target 			obj1_name
	message_rebel		"Congratulations! Objective 3 complete!"
	message_imperial	"You suck! Objective 3 was completed"
}
}
//imperial here
Imperial
{
RequiredObjectives		1
attackers			0
wonround  "Congratulations"
lostround  "You Suck"
Objective1
{
	final			1
	target			obj2_name
	message_imperial "Congratulations! Objective 1 complete!"
	message_rebel "You suck! Objective 1 was completed"
}
}

 

Map:

 

For every start point of the rebels, place info_player_rebel entity

For every start point of the Imperials place info_player_imperial entity

Place one info_player_deathmatch to allow for spectators/pre-match camera to load correctly (without this entity a "No Spawn Points" error will appear)

To add objectives:

 

Place info_saga_objective entity for each objective. If the objective is for imperials, set side to 1, else to 2 (in entity properties add a new entry called side). Also, add an entry "objective #" where # is the one that is in the .saga file (so the entity with objective 5, will use the Objective5 block of the .saga

To trigger the objective you could use something like func_button linked to the info_saga_objective. Anything that will trigger the ent->use property. This allows for objectives such as "run through that door" or "press this button" or "destroy the switch" (in the last case, without some more coding, a team can just destroy the enemy's intended objective and screw them up, so for now it could be implemented via "press this button to blow things up" and starting the effect by using the target field in .saga file).

 

Source code modifications: these are only basic, and provide bug fixes to 2 major bugs in the code:

 

1) objective can be triggered by any team member:

 

g_saga.c, sagaTriggerUseFunction

 

below

 

if (activator && activator->client)
{ //activator will hopefully be the person who triggered this event
	clUser = activator->s.number;
}

add


if(ent->side != activator->client->sess.sessionTeam) // only allow Imperial to trigger imperial objs and vice-versa
{
	return;
}

 

2) objective can be triggered multiple times:

 

here i decided to use an array where the elements are 1 or 0 depending if the objective was completed. This effectively limits the max objective number for each team, but 50 should be more than enough:

at the start of the file add this:

 

#define MAX_OBJ_NUM 50
int			rebel_obj[MAX_OBJ_NUM];
int			imperial_obj[MAX_OBJ_NUM];

 

in InitSagaMode() at the end

 

// Just to be safe, reset both arrays to 0
for(i=0; i<MAX_OBJ_NUM; i++)
{
	imperial_obj[i]=0;
	rebel_obj[i]=0;
}

 

better be safe than sorry :)

 

in sagaTriggerUse below the 1st fix code and above the main part:

 

// =============       Disable multiple triggering of one entity over and over ========//
if(ent->side == SAGATEAM_IMPERIAL)
{
	if(imperial_obj[ent->objective]==1)  // already triggered 
	{
		return;
	}
	imperial_obj[ent->objective]=1;
}
else
{
	if(rebel_obj[ent->objective]==1)  // already triggered 
	{
		return;
	}
	rebel_obj[ent->objective]=1;
}

 

after doing these, compile the jk2mpgame.qvm. Since it's server-side, regular clients can join at will.

 

For an example get http://www.darklordsofsith.com/ask/saga_mod.zip

 

It may not work for you, since I did not test it much, but it worked for me (it contains the above bugfixes, a test map and a method of displaying it in UI)

Link to comment
Share on other sites

*grins!* Wow, thanks for taking care of that for me, ASk! I'm lazy, I should point out, so I probably wouldn't have gotten to it very quickly. Yesh, the ways of triggering objectives is INFINITE. Since anything firing at an objective will trigger it. The interesting thing about this is bot behavior regarding objectives.

 

While you can't count on a bot to do something like, say, push a button, use a particular force power on something, manipulation items properly, etc., bots are actually fairly well-done! For each objective, (if attackers is set to '1') the bot will go find what targets the objective, find what targets that, etc., until it makes a list of OBJECTIVE SOURCES. These are things like breakable items, buttons, etc., that originally trigger objectives. It then picks one of these sources and attacks toward it. (If you've ever played one of Blizzards RTS's, you know what I mean. It moves toward its objective, while attacking all enemies it comes across.) I'm not sure how intelligent this system is, as I've never tested it on a bot-mapped map before. However, at the very least, the bots will try and hold the area AROUND the objective until someone bright enough to complete it comes along.

 

If attackers is 0, the bots on your team show yet another spurt of intelligence. They do what they did if attackers was 1, except for the OTHER TEAM'S OBJECTIVES. Except instead of making an effort to complete the objective, they just try and keep the enemy away from the objective source. Pretty smart, eh?

 

Anyhow! Just some clarity there.

Link to comment
Share on other sites

OMG this is k-rad!

 

I've been waiting so long for this to become clear since the original thread about the gametype.

 

This, i think, is best compared to Tribes 2 and RTCW objectives.. I think what the community really needs is definately a full scale mod. you all need to work together, as there are far too many variants of existing mods.. take JediMod for example, there have been so many other mods spawned from it and so many new versions of those mods.. that achieves nothing except confusion and indecision for the players..

 

A combined effort *should* produce the best mod thus far (not just because of the saga gametype, but because it creates a standard for mappers to follow).

 

I'll be looking forward to some quality modding! :monkey4:

Link to comment
Share on other sites

A mate and myself were just discussing some possibilities, and what really struck a chord was the possibility of porting team fortress to JK2.. with a JK2 theme..

 

Think about JK2 Fortress.. it's got some great potential as an idea for a mod using the base of the saga gametype..

 

I know it would revive the game quite a lot.. but it'd probably take so long to get it done it might come too late..

 

Just an idea anyway I guess.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.


×
×
  • Create New...