Esempio n. 1
0
char *G_NewString( const char *string ) {
	char	*newb, *new_p;
	int		i,l;
	char buffer[MAX_STRING_CHARS];
	
	l = strlen(string) + 1;

	Q_strncpyz(buffer,string,sizeof(buffer));

//	newb = (char *) G_Alloc2( l );
	newb = G_FindAlloc(buffer);//G_FindMemory( buffer );
	if (!newb)
		return G_NewString2(buffer);

	new_p = newb;

	// turn \n into a real linefeed
	for ( i=0 ; i< l ; i++ ) {
		if (string[i] == '\\' && i < l-1) {
			i++;
			if (string[i] == 'n') {
				*new_p++ = '\n';
			} else {
				*new_p++ = '\\';
			}
		} else {
			*new_p++ = string[i];
		}
	}
	
	return newb;
}
void JKG_Pairs_SetKey(KeyPairSet_t *set, const char *key, const char *value) {
	int index = JKG_Pairs_FindKey(set, key);
	if(index >= 0) {
		G_NewString2((void **)&set->pairs[index].value, value);
	}
	else {
		JKG_Pairs_Add(set, key, value);
	}
}
/*QUAKED target_play_music (1 0 0) (-4 -4 -4) (4 4 4)
target_play_music
Plays the requested music files when this target is used.

"targetname"
"music"		music WAV or MP3 file ( music/introfile.mp3 [optional]  music/loopfile.mp3 )

If an intro file and loop file are specified, the intro plays first, then the looping
portion will start and loop indefinetly.  If no introfile is entered, only the loopfile
will play.
*/
void SP_target_play_music( gentity_t *self )
{
	char *s;

	G_SetOrigin( self, self->s.origin );
	if (!G_SpawnString( "music", "", &s ))
	{
		G_Error( "target_play_music without a music key at %s", vtos( self->s.origin ) );
	}

	//self->message = G_NewString(s);
	G_NewString2((void **)&self->message, s);

	self->use = target_play_music_use;
}
/*QUAKED target_level_change (1 0 0) (-4 -4 -4) (4 4 4)
"mapname" - Name of map to change to
*/
void SP_target_level_change( gentity_t *self )
{
	char *s;

	G_SpawnString( "mapname", "", &s );

	
	//self->message = G_NewString(s);
	G_NewString2((void **)&self->message, s);

	if ( !self->message || !self->message[0] )
	{
		G_Error( "target_level_change with no mapname!\n");
		return;
	}

	G_SetOrigin( self, self->s.origin );
	self->use = target_level_change_use;
}
Esempio n. 5
0
void SP_target_interest( gentity_t *self )
{//FIXME: rename point_interest
	if(level.numInterestPoints >= MAX_INTEREST_POINTS)
	{
		Com_Printf("ERROR:  Too many interest points, limit is %d\n", MAX_INTEREST_POINTS);
		G_FreeEntity(self);
		return;
	}

	VectorCopy(self->r.currentOrigin, level.interestPoints[level.numInterestPoints].origin);

	if(self->target && self->target[0])
	{
		//level.interestPoints[level.numInterestPoints].target = G_NewString( self->target );
		G_NewString2(&level.interestPoints[level.numInterestPoints].target, self->target);
	}

	level.numInterestPoints++;

	G_FreeEntity(self);
}
unsigned int JKG_Pairs_Add(KeyPairSet_t *set, const char *key, const char *value){
	unsigned int index = JKG_Arrays_AddArrayElement((void **)&set->pairs, sizeof(KeyPair_t), &set->count);
	G_NewString2((void **)&set->pairs[index].key, key);
	G_NewString2((void **)&set->pairs[index].value, value);
	return index;
}