EntityPlus - A single player Q3 mod

Discussion for Level editing, modeling, programming, or any of the other technical aspects of Quake
EmeraldTiger
Posts: 392
Joined: Fri Sep 17, 2010 1:53 am

Re: Here's a wild idea: EntityPlus

Post by EmeraldTiger »

obsidian wrote:
^misantropia^ wrote:From now on, we will only use image sizes that are powers of one!
Voxels?
id tech 6! :up:

Just looked at the new version. Even though it`s still very early on I think this mod has gone quite far since you first started it, with each update. Also, to Hipshot, Obsidian, and DaEngineer: very snazzy model work!

Dunno if this is tacked down yet, but if you gauntlet a bot (enemy), you still recieve a Humilation medal. I`m not sure if you want to keep this or not, but throwing it in just in case.

It would also be nice to have a message appearing if you don`t have the required key to open the door. It would make it more clear to the player that he was missing the key.

Good job. :up:
[color=#00FF00][b]EmeraldProductions[/b][/color]
http://emeraldproductions.weebly.com/index.html
akm
Posts: 11
Joined: Sat May 08, 2010 12:15 pm

Re: Here's a wild idea: EntityPlus

Post by akm »

Great project, reminds of Quake1. Been watching this thread closely, hope it goes far :D
ShadoW_86
Posts: 270
Joined: Tue Jan 08, 2008 1:20 pm

Re: Here's a wild idea: EntityPlus

Post by ShadoW_86 »

What's exactly the reason why there is no hud or crosshair :)?

Can I control bots so they won't jump or run?
[url]http://shadowsdomain.wordpress.com/[/url]
User avatar
Eraser
Posts: 19177
Joined: Fri Dec 01, 2000 8:00 am

Re: Here's a wild idea: EntityPlus

Post by Eraser »

ShadoW_86 wrote:What's exactly the reason why there is no hud or crosshair :)?
err, the reason is most likely that you have cg_draw2d set to 0? :paranoid:
ShadoW_86 wrote:Can I control bots so they won't jump or run?
Not at this time, no. The AI can be made a lot more SP-like, but I really have to sink my teeth in there because AI programming is something have have absolutely zilch knowledge on.
User avatar
Eraser
Posts: 19177
Joined: Fri Dec 01, 2000 8:00 am

Re: Here's a wild idea: EntityPlus

Post by Eraser »

EmeraldTiger wrote:Dunno if this is tacked down yet, but if you gauntlet a bot (enemy), you still recieve a Humilation medal. I`m not sure if you want to keep this or not, but throwing it in just in case.
Yeah I noticed that the medal awards get kind of annoying, especially when gunning down hordes of enemies and the excellent award just keeps coming. So I removed all awards for single player mode.
DaEngineer
Posts: 210
Joined: Fri May 28, 2010 2:30 pm

Re: Here's a wild idea: EntityPlus

Post by DaEngineer »

Eraser wrote:
ShadoW_86 wrote:Can I control bots so they won't jump or run?
Not at this time, no. The AI can be made a lot more SP-like, but I really have to sink my teeth in there because AI programming is something have have absolutely zilch knowledge on.
This is something that could easily be changed by adding new bots with different behaviours to the bot list with the Bot Maker of yours. Of course it won't address the behaviour in general, but at least jumping and running could be fixed.
[url=http://www.victorkarp.com]Portfolio[/url] - [url=https://victorkarp.com/tutorials/quake-3-mapping-tutorials/]My Quake 3 mapping tutorials[/url] - [url=http://www.lvlworld.com/author/DaEngineer]My Quake 3 maps[/url]
ShadoW_86
Posts: 270
Joined: Tue Jan 08, 2008 1:20 pm

Re: Here's a wild idea: EntityPlus

Post by ShadoW_86 »

Eraser wrote:
ShadoW_86 wrote:What's exactly the reason why there is no hud or crosshair :)?
err, the reason is most likely that you have cg_draw2d set to 0? :paranoid:
Epic fail xP.

About bots - in lower skill modes they tend to not jump or even run (play with Crash on q3dm0 on lowest skill level). Maybe you could use that, and look into bot behaviour files to see why they don't do some things in lower skill levels. I remember there were bot files defining how to behave and what are they weapon preferances.

Also for the future - some kind of bot navigation system would be great :). The best scenario would be if we had new entity (or mybe even use info_bot_roam) with which we could set up simple paths and routes for bots navigation.

Also, there should be a sound when key_entity is used.
[url]http://shadowsdomain.wordpress.com/[/url]
Perle
Posts: 65
Joined: Sat Mar 07, 2009 4:08 pm

Re: Here's a wild idea: EntityPlus

Post by Perle »

I have integrated debris in my mod. works well. But i don´t have the smoke trails. Is this set by the mapper in Radiant?

And why you have coded your breakable without launching something? This would be easier as doing the trigger thing with the debrisemitter.
[b][url]http://www.per-thormann.de/[/url][/b]
User avatar
Eraser
Posts: 19177
Joined: Fri Dec 01, 2000 8:00 am

Re: Here's a wild idea: EntityPlus

Post by Eraser »

Perle wrote:And why you have coded your breakable without launching something? This would be easier as doing the trigger thing with the debrisemitter.
Explained before in this post.
I will some time look into a solution, but it's not a priority at this moment
Perle
Posts: 65
Joined: Sat Mar 07, 2009 4:08 pm

Re: Here's a wild idea: EntityPlus

Post by Perle »

Look at my Q3Rally Code. I have breakables with lauching particles.

http://q3rallysa.svn.sourceforge.net/viewvc/q3rallysa/
[b][url]http://www.per-thormann.de/[/url][/b]
User avatar
Eraser
Posts: 19177
Joined: Fri Dec 01, 2000 8:00 am

Re: Here's a wild idea: EntityPlus

Post by Eraser »

Sorry if this seems like a dumb question, but where are your G_BreakGlass, G_BREAKWOOD and G_BREAKMETAL functions implemented? Also, I see my func_breakable code is in there. Seems identical to what I have except for calls to the above methods in g_combat.c, but I'm not sure they're related?
Perle
Posts: 65
Joined: Sat Mar 07, 2009 4:08 pm

Re: Here's a wild idea: EntityPlus

Post by Perle »

Look in g_misc.c there you can find the following code. :-)

Code: Select all

/*
 =================
 G_BreakGlass
 =================
 */
 void G_BreakGlass(gentity_t *ent, vec3_t point, int mod) {
	gentity_t   *tent;
    vec3_t      size;
	vec3_t      center;
    qboolean    splashdmg;
    
	// Lanz: Cleaned up compiler errors.

    // Get the center of the glass
    VectorSubtract(ent->r.maxs, ent->r.mins, size);
    VectorScale(size, 0.5, size);
    VectorAdd(ent->r.mins, size, center);
 
    // if the health of our glass brush is at 0 we'll break it
    if( ent->health <= 0 ) {
		G_FreeEntity( ent );
   
		switch( mod ) {
			case MOD_GAUNTLET:
				splashdmg = qfalse;
				break;
			default:
				splashdmg = qtrue;
				break;
		}

        // Now we call our EVs(Events) so that cgame can work on it
        switch( splashdmg ){
			case qtrue:
				tent = G_TempEntity( center, EV_BREAK_GLASS );
				tent->s.eventParm = 0;
				break;
			case qfalse:
				tent = G_TempEntity( point, EV_BREAK_GLASS );
				tent->s.eventParm = 0;
				break;
		}
     }
 }
  /*QUAKED func_breakwood (1 0 0) (-16 -16 -16) (16 16 16)
    we have breakable wood  
  */
 void SP_func_breakwood( gentity_t *ent ) {
  int health;
 
  // It's a model brush , show it
  trap_SetBrushModel( ent, ent->model );
  // the default health will be set to 25
  G_SpawnInt( "health", "0", &health );
  if( health <= 0 )
   health = 50;
 
  // set health on the function
  ent->health = health;
  // our function can receive damage
  ent->takedamage = qtrue;
  // that's our new ET(EntityType)
  ent->s.eType = ET_BREAKWOOD;
  // additional brush model
  if ( ent->model2 ) {
      ent->s.modelindex2 = G_ModelIndex( ent->model2 );
  }
  // link the entity ( otherwise nothing will work :) )
  trap_LinkEntity (ent);
 }

 /*
 =================
 G_BREAKWOOD
 =================
 */
void G_BREAKWOOD(gentity_t *ent, vec3_t point, int mod) {
	gentity_t   *tent;
    vec3_t      size;
    vec3_t      center;
    qboolean    splashdmg;
    
	// Lanz: cleaned up compiler errors.

    // Get the center of the BOX
    VectorSubtract(ent->r.maxs, ent->r.mins, size);
    VectorScale(size, 0.5, size);
    VectorAdd(ent->r.mins, size, center);
 
    // if the health of our wood brush is at 0 we'll move it
    if( ent->health <= 0 ) {
		G_FreeEntity( ent );
   
		switch( mod ) {
			case MOD_GAUNTLET:
				splashdmg = qfalse;
				break;
			default:
				splashdmg = qtrue;
				break;
		}
        
		// Now we call our EVs(Events) so that cgame can work on it
        switch( splashdmg ){
			case qtrue:
				tent = G_TempEntity( center, EV_BREAKWOOD );
				tent->s.eventParm = 0;
				break;
			case qfalse:
				tent = G_TempEntity( point, EV_BREAKWOOD );
				tent->s.eventParm = 0;
				break;
		}
     }
 }

/*QUAKED func_breakmetal (1 0 0) (-16 -16 -16) (16 16 16)
  We have breakable metal in our mod , if you hit it till health 0 it will explode and spawn models
 */
 void SP_func_breakmetal( gentity_t *ent ) {
  int health;
 
  // It's a model brush , show it
  trap_SetBrushModel( ent, ent->model );
  // the default health will be set to 25
  G_SpawnInt( "health", "0", &health );
  if( health <= 0 )
   health = 50;
 
  // set health on the function
  ent->health = health;
  // our function can receive damage
  ent->takedamage = qtrue;
  // that's our new ET(EntityType)
  ent->s.eType = ET_BREAKMETAL;
  // additional brush model
  if ( ent->model2 ) {
      ent->s.modelindex2 = G_ModelIndex( ent->model2 );
  }
  // link the entity ( otherwise nothing will work :) )
  trap_LinkEntity (ent);
 }

 /*
 =================
 G_BreakMetal
 =================
 */
 void G_BREAKMETAL(gentity_t *ent, vec3_t point, int mod) {
	gentity_t   *tent;
    vec3_t      size;
	vec3_t      center;
    qboolean    splashdmg;
    
	// Lanz: Cleaned up compiler errors.

    // Get the center of the metal
    VectorSubtract(ent->r.maxs, ent->r.mins, size);
    VectorScale(size, 0.5, size);
    VectorAdd(ent->r.mins, size, center);
 
    // if the health of our metal brush is at 0 we'll break it
    if( ent->health <= 0 ) {
		G_FreeEntity( ent );
   
		switch( mod ) {
			case MOD_GAUNTLET:
				splashdmg = qfalse;
				break;
			default:
				splashdmg = qtrue;
				break;
		}

        // Now we call our EVs(Events) so that cgame can work on it
        switch( splashdmg ){
			case qtrue:
				tent = G_TempEntity( center, EV_BREAKMETAL );
				tent->s.eventParm = 0;
				break;
			case qfalse:
				tent = G_TempEntity( point, EV_BREAKMETAL );
				tent->s.eventParm = 0;
				break;
		}
	}
}
[b][url]http://www.per-thormann.de/[/url][/b]
Perle
Posts: 65
Joined: Sat Mar 07, 2009 4:08 pm

Re: Here's a wild idea: EntityPlus

Post by Perle »

And in cg_effects.c you can find this.

Code: Select all

/*
 ==================
 CG_LaunchShard
 ==================
 */
 void CG_LaunchShard( vec3_t origin, vec3_t velocity, qhandle_t hModel ) {
    int             bounce;
   localEntity_t   *le;
    refEntity_t      *re;
 
    le = CG_AllocLocalEntity();
    re = &le->refEntity;
 
    le->leType = LE_FRAGMENT;
    le->startTime = cg.time;
    le->endTime = le->startTime + 30000 + random() * 3000;
 
    VectorCopy( origin, re->origin );
    AxisCopy( axisDefault, re->axis );
    re->hModel = hModel;
 
    le->pos.trType = TR_GRAVITY;
    VectorCopy( origin, le->pos.trBase );
    VectorCopy( velocity, le->pos.trDelta );
    le->pos.trTime = cg.time;
 
    bounce = le->bounceFactor;
   bounce = 0.3;
 
    le->leFlags = LEF_TUMBLE;
    le->leBounceSoundType = LEBS_BRASS;
    le->leMarkType = LEMT_NONE;
 }
 
 


 /*
 ===================
 CG_BreakGlass
 
 Breaks our brush and generates a few models on launches them all over the map :)
 ===================
 */

 #define   GLASS_VELOCITY   175 //175
 #define   GLASS_JUMP      125 //125

 void CG_BreakGlass( vec3_t playerOrigin ) {
    vec3_t    origin, velocity;
        int     value;
     int     count = 20; //20
    int     states[] = {1,2,3};
        int     numstates = sizeof(states)/sizeof(states[0]);
 
    while ( count-- ) {
    
    value = states[rand()%numstates];
    VectorCopy( playerOrigin, origin );
    velocity[0] = crandom() *  165; //165
    velocity[1] = crandom() *  125; //125
	//velocity[2] = 0; //GLASS_JUMP + crandom() * 1; //165
    velocity[2] = GLASS_JUMP + crandom() * 165; //165
    
   switch (value) {
    case 1:
      CG_LaunchShard( origin, velocity, cgs.media.glass01 );
        break;
    case 2:
       CG_LaunchShard( origin, velocity, cgs.media.glass02 );
        break;
    case 3:
       CG_LaunchShard( origin, velocity, cgs.media.glass03 );
    break;
      }
   }
}

  /*
 ==================
 CG_LaunchWood
 ==================
 */
 void CG_LaunchWood( vec3_t origin, vec3_t velocity, qhandle_t hModel ) {
    int             bounce;
   localEntity_t   *le;
    refEntity_t      *re;
 
    le = CG_AllocLocalEntity();
    re = &le->refEntity;
 
    le->leType = LE_FRAGMENT;
    le->startTime = cg.time;
    le->endTime = le->startTime + 30000 + random() * 3000;
 
    VectorCopy( origin, re->origin );
    AxisCopy( axisDefault, re->axis );
    re->hModel = hModel;
 
    le->pos.trType = TR_GRAVITY;
    VectorCopy( origin, le->pos.trBase );
    VectorCopy( velocity, le->pos.trDelta );
    le->pos.trTime = cg.time;
 
   bounce = le->bounceFactor;
   bounce = 0.9; //0.3
   //newq3ball	
  /* pm->ps->velocity[2] = -vel * 0.5; //2
	if (pm->ps->velocity[2] <= 0.001) {
    pm->ps->velocity[2] = 0;
 */
 //endnew
    le->leFlags = LEF_TUMBLE;
    le->leBounceSoundType = LEBS_BRASS;
    le->leMarkType = LEMT_NONE;
 }
 
 


 /*
 ===================
 CG_BREAKWOOD
 
 Breaks our brush and generates a few (here 1 model) on launches them all over the map :)
 ===================
 */

 #define   BOX_VELOCITY   60 //175
 #define   BOX_JUMP      85 //125

 void CG_BREAKWOOD( vec3_t playerOrigin ) {
    vec3_t    origin, velocity;
     int     value;
     int     count = 8; //20
     int     states[] = {1,2,3};
        int     numstates = sizeof(states)/sizeof(states[0]);
 
    while ( count-- ) {
    
    value = states[rand()%numstates];
    VectorCopy( playerOrigin, origin );
    velocity[0] = crandom() *  80; //165
    velocity[1] = crandom() *  125; //125
    velocity[2] = BOX_JUMP + crandom() * 165;  //165
    //velocity[2] = 165;  //165
	   //newq3ball	
//  velocity[2] = -velocity[0] * 0.5; //2
// if (velocity[2] <= 0.001) {
 // velocity[2] = 0;
// }
 //endnew
   switch (value) {
    case 1:
      CG_LaunchWood( origin, velocity, cgs.media.wood01 );
        break;
    case 2:
       CG_LaunchWood( origin, velocity, cgs.media.wood02 );
        break;
    case 3:
       CG_LaunchWood( origin, velocity, cgs.media.wood03 );
    break;
      }
   }
}

  /*
 ==================
 CG_LaunchMetal
 ==================
 */
 void CG_LaunchMetal( vec3_t origin, vec3_t velocity, qhandle_t hModel ) {
    int             bounce;
   localEntity_t   *le;
    refEntity_t      *re;
 
    le = CG_AllocLocalEntity();
    re = &le->refEntity;
 
    le->leType = LE_FRAGMENT;
    le->startTime = cg.time;
    le->endTime = le->startTime + 30000 + random() * 3000;
 
    VectorCopy( origin, re->origin );
    AxisCopy( axisDefault, re->axis );
    re->hModel = hModel;
 
    le->pos.trType = TR_GRAVITY;
    VectorCopy( origin, le->pos.trBase );
    VectorCopy( velocity, le->pos.trDelta );
    le->pos.trTime = cg.time;
 
   bounce = le->bounceFactor;
   bounce = 0.9; //0.3

    le->leFlags = LEF_TUMBLE;
    le->leBounceSoundType = LEBS_BRASS;
    le->leMarkType = LEMT_NONE;
 }


/*
 ===================
 CG_BREAKMETAL
 
 Breaks our brush and generates a few (here 1 model) on launches them all over the map :)
 ===================
 */

#define   METAL_VELOCITY   60 //175
 #define   METAL_JUMP      85 //125

 void CG_BREAKMETAL( vec3_t playerOrigin ) {
    vec3_t    origin, velocity;
     int     value;
     int     count = 8; //20
     int     states[] = {1,2,3};
        int     numstates = sizeof(states)/sizeof(states[0]);
 
    while ( count-- ) {
    
    value = states[rand()%numstates];
    VectorCopy( playerOrigin, origin );
    velocity[0] = crandom() *  80; //165
    velocity[1] = crandom() *  125; //125
    velocity[2] = METAL_JUMP + crandom() * 165;  //165
    //velocity[2] = 165;  //165
	   //newq3ball	
//  velocity[2] = -velocity[0] * 0.5; //2
// if (velocity[2] <= 0.001) {
 // velocity[2] = 0;
// }
 //endnew
   switch (value) {
    case 1:
      CG_LaunchMetal( origin, velocity, cgs.media.metal01 );
        break;
    case 2:
       CG_LaunchMetal( origin, velocity, cgs.media.metal02 );
        break;
    case 3:
       CG_LaunchMetal( origin, velocity, cgs.media.metal03 );
    break;
      }
   }
}
And they are prototyped in cg_local.h

Code: Select all

void CG_BreakGlass( vec3_t playerOrigin );
void CG_BREAKWOOD( vec3_t playerOrigin );
void CG_BREAKMETAL( vec3_t playerOrigin );
[b][url]http://www.per-thormann.de/[/url][/b]
User avatar
Eraser
Posts: 19177
Joined: Fri Dec 01, 2000 8:00 am

Re: Here's a wild idea: EntityPlus

Post by Eraser »

Thanks a lot sir. It was basically just this bit of code I needed:

Code: Select all

// Get the center of the glass
VectorSubtract(ent->r.maxs, ent->r.mins, size);
VectorScale(size, 0.5, size);
vectorAdd(ent->r.mins, size, center);
Now there's no longer need for a target_debrisemitter for func_breakable.
I'll leave the target_debrisemitter in there though.
Perle
Posts: 65
Joined: Sat Mar 07, 2009 4:08 pm

Re: Here's a wild idea: EntityPlus

Post by Perle »

I also leave it in my code. With other models it could be useful for some other stuff.

EDIT : You credit me in your readme. Nice. Thanks.
[b][url]http://www.per-thormann.de/[/url][/b]
DaEngineer
Posts: 210
Joined: Fri May 28, 2010 2:30 pm

Re: Here's a wild idea: EntityPlus

Post by DaEngineer »

*bumping the thread with a new idea you'll might shake your heads over*
In the last time I played Bulletstorm and Borderlands quite a lot. Then I had one of these nostalgic moments and fired up Call of Duty 1. I loaded the last savegame and was right behind a knee-high wall, two foot soldiers and an MG shooting at me. I switched from crouching to standing, was hit, tried to hit the MG myself, failed, switched to crouching, waited for some seconds and tried it again. And I waited for my health to refill. Until I noticed that small bar that had to be green but had changed to dark yellow in the meantime. Right! There was an era of health pickups. Seems I'd forgot that.

After picking off some more enemies (and enyoing the fact that I can understand what both parties yell - being German is really useful sometimes) I found this old energy system slowed down the game quite a lot. There's not so much freedom to try out things. It's always the same F5-try-fail-F9 procedure. If you play a game with energy regeneration on hard difficulties, there's still enough room to fail, but if you don't die, you look for cover, think about why your way of handling the situation was stupid and try it another way.

I know that the entire Quake series uses the old health system. And it's not that I didn't like it when I played the games. But I've come quite used to the health regeneration systems new games have and thought about how it would fit a Quake 3 single player campaign. If this campaign will really exist some day - and I want to contribute at least one level to it, that's for sure - health regeneration could, in my eyes, open the gates for big fights with many foes instead of the old "jeez, these five guys were really mean - where can I get some health now?" question.

What do you think about it? Yes? No? Try it out? Make it optional and let the mapping guys put health pickups everywhere in their maps but add an option to the menu to let the player decide if he wants to use them or let them disappear and use regeneration instead? Or ban my acount for this ignominious thought of adding health regeneration to a Quake game?
Last edited by DaEngineer on Fri May 06, 2011 11:43 pm, edited 1 time in total.
[url=http://www.victorkarp.com]Portfolio[/url] - [url=https://victorkarp.com/tutorials/quake-3-mapping-tutorials/]My Quake 3 mapping tutorials[/url] - [url=http://www.lvlworld.com/author/DaEngineer]My Quake 3 maps[/url]
Peenyuh
Posts: 3783
Joined: Thu Jan 03, 2008 3:46 am

Re: Here's a wild idea: EntityPlus

Post by Peenyuh »

Wow! THAT was a bit manic! :olo: I've, actually seen this question come up before. My own opinion, is to not mess with the health regen at all. I'm with the whole "yer gonna get better" at the game this way. There's still one or two games I never finished because I cannot get past a point without dying. Just my two bits, yah?
[color=#00FF00][b]"How do you keep the natives off the booze long enough to pass the test?" Asked of a Scottish driving instructor in 1995.[/b][/color]
fKd
Posts: 2478
Joined: Sat Jun 03, 2006 2:54 am
Location: Wellington
Contact:

Re: Here's a wild idea: EntityPlus

Post by fKd »

Peenyuh wrote:I'm with the whole "yer gonna get better" at the game this way.
agree, unless you made it like a global command, set damageregen 1 in worldspawn or something so the mapper can choose...
Silicone_Milk
Posts: 2237
Joined: Sat Mar 12, 2005 10:49 pm

Re: Here's a wild idea: EntityPlus

Post by Silicone_Milk »

I personally hate the health regen system. There's no sense of danger with it. You don't actually have to think about the cons of jumping in to a fight or choosing to avoid it. All you have to do is hide behind a cardboard box for a couple seconds and jump back in.

Health pickups actually require you to manage your health and assess the situation instead of just blindly running in rambo style and spraying bullets at enemies while you take shells from tanks, lasers from alien spaceships, and get your face charred from several flamethrowers (but its cool, just hide behind some drying laundry, you'll heal in no time)
VolumetricSteve
Posts: 449
Joined: Sat Nov 06, 2010 2:33 am

Re: Here's a wild idea: EntityPlus

Post by VolumetricSteve »

Silicone_Milk wrote:I personally hate the health regen system.
I don't know why this health system got as popular as it did. The only time I've found it really passable was in Portal. Beyond that, even the way Prey handled life/afterlife seemed kinda silly, and had the same effect on any combat related judgement as you mentioned.
Perle
Posts: 65
Joined: Sat Mar 07, 2009 4:08 pm

Re: Here's a wild idea: EntityPlus

Post by Perle »

It could be an option where players can choose. A key in the preferences of health packs an the player can choose what kinda experience of play he would like.
[b][url]http://www.per-thormann.de/[/url][/b]
Silicone_Milk
Posts: 2237
Joined: Sat Mar 12, 2005 10:49 pm

Re: Here's a wild idea: EntityPlus

Post by Silicone_Milk »

Perle wrote:It could be an option where players can choose. A key in the preferences of health packs an the player can choose what kinda experience of play he would like.
Another point I disagree with - giving the player a wide range of choices on how he'd like to experience a game.

A game designer's job is to design the game to provide a specific experience. Leaving it up to the player is lazy and irresponsible. You really shoot yourself in the foot when you try to play it safe and please everybody by giving them a choice of several mediocre directions rather than sticking to one and providing a single mind-blowing ass-kicking experience.

Might as well be like "well, lets let them choose if they want to play this game as a side-scrolling platformer or an FPS."

Developers need to have the balls to settle on a direction and to cut out options (even if they're great ones) that don't quite fit well with the experience they want delivered to the player imo.
Perle
Posts: 65
Joined: Sat Mar 07, 2009 4:08 pm

Re: Here's a wild idea: EntityPlus

Post by Perle »

Okay. Touchdown for you. :-)
[b][url]http://www.per-thormann.de/[/url][/b]
ShadoW_86
Posts: 270
Joined: Tue Jan 08, 2008 1:20 pm

Re: Here's a wild idea: EntityPlus

Post by ShadoW_86 »

Silicone_Milk wrote:I personally hate the health regen system. There's no sense of danger with it. You don't actually have to think about the cons of jumping in to a fight or choosing to avoid it. All you have to do is hide behind a cardboard box for a couple seconds and jump back in.
THIS.
[url]http://shadowsdomain.wordpress.com/[/url]
fKd
Posts: 2478
Joined: Sat Jun 03, 2006 2:54 am
Location: Wellington
Contact:

Re: Here's a wild idea: EntityPlus

Post by fKd »

that is why i said make it a worldspawn key in gtk. the designer can define the game health system.
Post Reply