Massassi Forums Logo

This is the static archive of the Massassi Forums. The forums are closed indefinitely. Thanks for all the memories!

You can also download Super Old Archived Message Boards from when Massassi first started.

"View" counts are as of the day the forums were archived, and will no longer increase.

ForumsShowcase → Egyptian Pyramid level I dug out of the dust
123
Egyptian Pyramid level I dug out of the dust
2005-07-30, 9:03 PM #81
I have a dilemma. Many people think that it is annoying to have to scale the
side of the pyramid every time you get spawned or catapulted up there. I
even think it is annoying. The only problem is that if I make an easy way down
then gamplay on the side of the pyramid will be basically demolished because
you can get up or down and just skip over the middle. I sort of like having no
way down as a deterrent for going up and will probably remove that spawn
point. I haven't even thought out the spawn points of the level yet. As of now
they are just the remaining walkplayers that I created to make quick jumps in
the 3d preview screen for convient level editing.

I'd like some feedback to see what you all think about me not making an easy
way down now that I've told you my purpose in not doing one when it was first
mentioned.
If curiosity killed the cat then perhaps Curious George killed the cat.
But Cat's do have nine lives so who knows?
2005-07-31, 1:25 AM #82
I'd make an easy way to get down, like a slender non-stepped vertical stripe, where people can slide down (maybe don't flag it as floor). To make people go up the side of the pyramid, just place the best powerups there.
"Häb Pfrässe, süsch chlepfts!" - The coolest language in the world (besides Cherokee)
2005-07-31, 4:08 AM #83
You can get down quickly without dying by running down one of the corners.
"Well ain't that a merry jelly." - FastGamerr

"You can actually see the waves of me not caring in the air." - fishstickz
2005-07-31, 9:22 AM #84
Originally posted by zagibu:
I'd make an easy way to get down, like a slender non-stepped vertical stripe, where people can slide down (maybe don't flag it as floor). To make people go up the side of the pyramid, just place the best powerups there.


That's a possibility but I would flag it as floor because If I didn't then I'm afraid
you'd get going so fast that you'd die anyway. I'll try the flat ribbon thing though
If curiosity killed the cat then perhaps Curious George killed the cat.
But Cat's do have nine lives so who knows?
2005-07-31, 11:17 AM #85
[QUOTE=jedi I]That's a possibility but I would flag it as floor because If I didn't then I'm afraid
you'd get going so fast that you'd die anyway. I'll try the flat ribbon thing though[/QUOTE]
Well, you could add a pool of water below...I think it'd be fun to slide that pyramid down. A normal slope will probably work, too, though.
"Häb Pfrässe, süsch chlepfts!" - The coolest language in the world (besides Cherokee)
2005-07-31, 11:18 AM #86
what kinda of Egyptian pyramid has water under it? Egypt is a desert lol
2005-07-31, 3:36 PM #87
[QUOTE=Xzero Phoenix]what kinda of Egyptian pyramid has water under it? Egypt is a desert lol[/QUOTE]

Yea it is a desert but lay of zagibu. That catapult idea of his has made my level
100X cooler. I'm looking for peoples oppinions like that that can make a better
level and what good is it to bash on eachother like that anyway? I might
experiment with the icy/very icy flags to make it slide but sorry Zagibu, definitely
no pool under it. I have some wells I'm working on in the sphinx interior and
that should be a pretty interesting (even realistic perhaps) water source that
wouldn't be quite so intrusive as an exterrior pool of water would be. I'll do
something to make the side of the pyramid where I have smoothed it out slide.
If curiosity killed the cat then perhaps Curious George killed the cat.
But Cat's do have nine lives so who knows?
2005-07-31, 4:06 PM #88
Large, breakable vases. You know the Egyptians had tons of those things around. You can even find a way of putting things inside of them, like ammo or weapons/powerups.
Who made you God to say "I'll take your life from you"?
2005-07-31, 11:07 PM #89
Originally posted by SM_Trige:
Large, breakable vases. You know the Egyptians had tons of those things around. You can even find a way of putting things inside of them, like ammo or weapons/powerups.


I am putting a ton a vases in but haven't got around to making them all. I want to
get this project finished soon so I probably won't mess with putting powerups
inside unless I can do it easily like those white crates in JK that you get powerups
from. The 3do work on this level is one of the only things I've got left. I'm sure it
will take me a while to get the level to where I would make a final release of it but
it's getting there. Great Idea by the way!
If curiosity killed the cat then perhaps Curious George killed the cat.
But Cat's do have nine lives so who knows?
2005-08-01, 1:42 AM #90
[QUOTE=Xzero Phoenix]what kinda of Egyptian pyramid has water under it? Egypt is a desert lol[/QUOTE]
You ever heard of a term called oasis? There are already palm trees in the level...wherefrom do you think are they getting their water?
"Häb Pfrässe, süsch chlepfts!" - The coolest language in the world (besides Cherokee)
2005-08-02, 1:54 PM #91
hmm, good point, maybe a sea of quick sand at the bottom (of the ramp thing)that will pull you under into a secret cavern with good items, sorta like in super mario bros. 3, you know, that level near the end,...heh

(yes, i know my ideas are bad)
mmmmm... JopoJelly!
2005-08-02, 11:42 PM #92
I made it so you can slide down one side of the pyramid with the Icy flags and
no damage is inflicted upon the player at all when you hit the ground. I am
nearly completed with the sphinx interior archi but still have to light it and align
the textures properly which may take me a while because they are my least
favorite aspects of editing. When I get it looking real good I'll post some good
pics and another beta.
If curiosity killed the cat then perhaps Curious George killed the cat.
But Cat's do have nine lives so who knows?
2005-08-04, 9:32 AM #93
I am trying to get this cog to work, but with my limited experience with cog I am
having a bit of trouble. It is supposed to work like the cog that gives you a
powerup out a crate you destroy except I want the crate to respawn after the
powerup is taken. If any of you can help I'd much appreciate it.

# Jedi Knight Cog Script
#
# ACTOR_POT.COG
#
# This cog makes a pot explode if damaged enough
# Possibly creates a powerup
# Actually a class COG
#
# 2005 Jedi I
#
# ========================================================================================

symbols

message created
message damaged
message touched
message taken


int crate local
int frame local

flex cratehealth local
flex damage local
flex rval local
flex waittime=10.0
flex amount local

template pottemp=bowl1 local
template crate_exp=+pot_exp local
template powerup=+DHealthPack local
template powerup1=+DBactaTank local
template powerup2=+DShield local
template powerup3=+DBattery local
template powerup4=+DEnergyCell local
template powerup5=+DPowerCell local
template powerup6=+dsmbp local

thing powerup local
thing pot local
Thing player local


sound respawnsnd=Activate01.wav local

end

# ========================================================================================
code

created:
SetThingUserData(GetSenderRef(), 40); // set the initial user data (i.e. "health")
return;

# ............................................................................................

damaged:
crate = GetSenderRef();
damage = GetParam(0);
cratehealth = GetThingUserData(crate);

if(GetParam(1) == 1) Return; // crate won't be damaged by damage type impact

if(cratehealth <= totaldamage) // is this enough damage to kill the crate ?
{
CreateThing(crate_exp, GetSenderRef()); // create an explosion
rval = Rand();
if (rval < 0.15)
{
powerup = CreateThing(powerup3, GetSenderRef());
SetLifeleft(powerup, 200.0);
}
else if (rval < 0.35)
{
powerup = CreateThing(powerup2, GetSenderRef());
SetLifeleft(powerup, 200.0);
}
else if (rval < 0.45)
{
powerup = CreateThing(powerup, GetSenderRef());
SetLifeleft(powerup, 200.0);
}
else if (rval < 0.46)
{
powerup = CreateThing(powerup1, GetSenderRef());
SetLifeleft(powerup, 200.0);
}
else if(rval < 0.61)
{
powerup = CreateThing(powerup4, GetSenderRef());
SetLifeleft(powerup, 200.0);
}
else if(rval < 0.66)
{
powerup = CreateThing(powerup5, GetSenderRef());
SetLifeleft(powerup, 200.0);
}
else if(rval < 0.67)
{
newthing = CreateThing(powerup6, GetSenderRef());
SetLifeleft(powerup, 200.0);
}


DestroyThing(GetSenderRef()); // Destroy the crate

return;
}

SetThingUserData(crate, cratehealth - damage);
return;

# ========================================================================================

touched:
player = GetSourceRef();
amount = GetInv(player, 60);

if((amount < GetInvMax(player, 60)) || GetThingHealth(player) < 100)
{
powerup = GetSenderRef();
TakeItem(powerup, player);
}

Return;

# ========================================================================================
taken:
player = GetSourceRef();
powerup = GetSenderRef();

// Do effects.
PlaySoundThing(pickupsnd, powerup, 1.0, -1, -1, 0);
AddDynamicTint(player, 0.0, 0.0, 0.2);

// Max Health.
SetThingHealth(player, 100);

// Max Shield
SetInv(player, 60, GetInvMax(player, 60));

frame = GetCurFrame(powerup);

Sleep(waittime);

CreateThing(pottemp, frame);

PlaySoundThing(respawnsnd, pot, 1, .05, 2.4, 0x0);

Return;

end
If curiosity killed the cat then perhaps Curious George killed the cat.
But Cat's do have nine lives so who knows?
2005-08-04, 3:49 PM #94
This cog should work:
Code:
# Jedi Knight Cog Script
#
# ACTOR_POT.COG
#
# This cog makes a pot explode if damaged enough
# Possibly creates a powerup
# Actually a class COG
#
# 2005 Jedi I
#                   modified by zagibu@gmx.ch
# ========================================================================================

symbols

thing		victim				local
thing		dummy				local

template	exp_tpl=+crate_exp		local
template	powerup0=+dhealthpack		local
template	powerup1=+dbactatank		local
template	powerup2=+dshield		local
template	powerup3=+dbattery		local
template	powerup4=+denergycell		local
template	powerup5=+dpowercell		local
template	powerup6=+dsmbp			local

sound		respawn_snd=Activate01.wav	local

flex		life=40				local
flex		wait_time=30			local
flex		health				local
flex		damage				local
flex		rval				local
flex		geo_mode			local
flex		collide_type			local

message		created
message		damaged
message		timer

end

# ========================================================================================

code

created:
	SetThingUserData(GetSenderRef(), life);
	Return;

# ........................................................................................

damaged:
	victim = GetSenderRef();
	health = GetThingUserData(victim);
	damage = GetParam(0);

	// Check type of damage and return if type is "impact" (damage flag 0x1)
	if(GetParam(1) & 0x1)
		Return;

	// Are we applying enough damage to "kill" the poor thing
	if(damage >= health)
	{
		// Create the explosion template at the damaged thing's position
		CreateThing(exp_tpl, victim);

		// Remove the victim (render it invisible and disable it's collision switch)
		geo_mode = GetThingCurGeoMode(victim);
		SetThingCurGeoMode(victim, 0);
		collide_type = GetCollideType(victim);
		SetCollideType(victim, 0);

		// Start the respawn timer
		SetThingTimer(victim, wait_time);

		// Create a random powerup at the victim's position
		rval = Rand();
		if (rval < 0.15)
		{
			dummy = CreateThing(powerup0, victim);
		}
		else if (rval < 0.35)
		{
			dummy = CreateThing(powerup1, victim);
		}
		else if (rval < 0.45)
		{
			dummy = CreateThing(powerup2, victim);
		}
		else if (rval < 0.46)
		{
			dummy = CreateThing(powerup3, victim);
		}
		else if(rval < 0.61)
		{
			dummy = CreateThing(powerup4, victim);
		}
		else if(rval < 0.66)
		{
			dummy = CreateThing(powerup5, victim);
		}
		else if(rval < 0.67)
		{
			dummy = CreateThing(powerup6, victim);
		}
	}
	else
		SetThingUserData(victim, health - damage);

	Return;

# ........................................................................................

timer:
	victim = GetSenderRef();

	// Check if the powerup is still there and destroy it if necessary
	if(dummy != -1)
		DestroyThing(dummy);

	// Respawn the victim (render it visible and enable it's collision switch)
	SetThingCurGeoMode(victim, geo_mode);
	SetCollideType(victim, collide_type);

	// Reset the victim's health
	SetThingUserData(victim, life);

	// Play the respawn sound
	PlaySoundThing(respawn_snd, victim, 1, 0, 8, 0x0);
 
	Return;
end

To make the pots force_throwable should be easy (it's a template question, look at the _throwable template in master.tpl). To make them shatter on impact is another question, though. I'm not really sure how to answer it, yet.
It would also require a new class cog, since with the one above, they respawn where last shattered...
"Häb Pfrässe, süsch chlepfts!" - The coolest language in the world (besides Cherokee)
2005-08-05, 11:56 PM #95
The interior of the pyramid looks awesome, I can't wait to have a few shootouts in the finished version. Loads of gunfire and exploding vases... mmm, yummy.
Looking at the screenies, I wonder if gameplay might be improved by having the dunes closer to the pyramid. I know this would be a lot of work, but the pyramid is the focal point of the level, and having all that space outside will just lead to endless running in circles with BFGs out in the desert, which takes away from the joy of duking it out inside the pyramid, and on the top, etc. It's a thought. Whatever, I'll be playing the level regardless. Great work.
*This post has been edited for content.
2005-08-06, 1:36 AM #96
Originally posted by scelestus:
I wonder if gameplay might be improved by having the dunes closer to the pyramid. I know this would be a lot of work, but the pyramid is the focal point of the level, and having all that space outside will just lead to endless running in circles with BFGs out in the desert, which takes away from the joy of duking it out inside the pyramid, and on the top, etc.
Where people go is always determined by item placement. Noone will run around in the desert with a bryar pistol...I hope.
"Häb Pfrässe, süsch chlepfts!" - The coolest language in the world (besides Cherokee)
2005-08-07, 3:33 PM #97
The cog works perfectly!

Thanks a lot zagibu. Don't worry about the shatter on impact thing with the
vases. I'm more than content with what you've already given me. I plan to
make all them force throwable anyway. If that's the case though, when they're
destroyed will they jump back to their original spawn points or will they spawn
where they were thrown to? Even if the respawn points for the vases are
changed I don't think it will bother me. It might end up being somewhat
interesting. Well I'll get these vases made, finish item placement / walkplayer
points and do some final touch ups to the architecture and then I'll release a
beta with my level virtually completed.

p.s. I have decided to leave the dunes as is. I played with my 7 year old brother
and if running around in the middle of nowhere isn't a problem for him than it
better be no problem for any true massassi nerd (or whatever you want to call
yourself).
If curiosity killed the cat then perhaps Curious George killed the cat.
But Cat's do have nine lives so who knows?
2005-08-08, 6:11 AM #98
This cog should reset the vases to their original position:
Code:
# Jedi Knight Cog Script
#
# ACTOR_POT.COG
#
# This cog makes a pot explode if damaged enough
# Possibly creates a powerup
# Actually a class COG
#
# 2005 Jedi I
#                   modified by zagibu@gmx.ch
# ========================================================================================

symbols

thing		victim				local
thing		dummy				local
thing		spawnpoint			local

template	ghost_tpl=_powerup		local
template	exp_tpl=+crate_exp		local
template	powerup0=+dhealthpack		local
template	powerup1=+dbactatank		local
template	powerup2=+dshield		local
template	powerup3=+dbattery		local
template	powerup4=+denergycell		local
template	powerup5=+dpowercell		local
template	powerup6=+dsmbp			local

sound		respawn_snd=Activate01.wav	local

flex		life=40				local
flex		wait_time=30			local
flex		health				local
flex		damage				local
flex		rval				local
flex		geo_mode			local
flex		collide_type			local

message		created
message		damaged
message		timer

end

# ========================================================================================

code

created:
	// Give the victim it's initial health
	SetThingUserData(GetSenderRef(), life);

	// Create a ghost to save victim's initial position
	spawnpoint = CreateThing(ghost_tpl, GetSenderRef());
	SetThingRotVel(spawnpoint, '0 0 0');

	Return;

# ........................................................................................

damaged:
	victim = GetSenderRef();
	health = GetThingUserData(victim);
	damage = GetParam(0);

	// Check type of damage and handle impact damage as a special case
	if(GetParam(1) & 0x1)
	{
		// Check if a player has applied impact damage to the victim
		if(GetThingType(GetThingParent(GetSourceRef())) == 10)
			Return;
	}

	// Are we applying enough damage to "kill" the poor thing
	if(damage >= health)
	{
		// Create the explosion template at the damaged thing's position
		CreateThing(exp_tpl, victim);

		// Remove the victim (render it invisible and disable it's collision switch)
		geo_mode = GetThingCurGeoMode(victim);
		SetThingCurGeoMode(victim, 0);
		collide_type = GetCollideType(victim);
		SetCollideType(victim, 0);

		// Start the respawn timer
		SetThingTimer(victim, wait_time);

		// Create a random powerup at the victim's position
		rval = Rand();
		if (rval < 0.15)
		{
			dummy = CreateThing(powerup0, victim);
		}
		else if (rval < 0.35)
		{
			dummy = CreateThing(powerup1, victim);
		}
		else if (rval < 0.45)
		{
			dummy = CreateThing(powerup2, victim);
		}
		else if (rval < 0.46)
		{
			dummy = CreateThing(powerup3, victim);
		}
		else if(rval < 0.61)
		{
			dummy = CreateThing(powerup4, victim);
		}
		else if(rval < 0.66)
		{
			dummy = CreateThing(powerup5, victim);
		}
		else if(rval < 0.67)
		{
			dummy = CreateThing(powerup6, victim);
		}
		else
			dummy = -1;
	}
	else
		SetThingUserData(victim, health - damage);

	Return;

# ........................................................................................

timer:
	victim = GetSenderRef();

	// Check if the powerup is still there and destroy it if necessary
	if(dummy != -1)
		DestroyThing(dummy);

	// Reset the victim to its initial spawning position, if necessary
	if(VectorDist(GetThingPos(victim), GetThingPos(spawnpoint)) != 0)
		TeleportThing(victim, spawnpoint);

	// Respawn the victim (render it visible and enable it's collision switch)
	SetThingCurGeoMode(victim, geo_mode);
	SetCollideType(victim, collide_type);

	// Reset the victim's health
	SetThingUserData(victim, life);

	// Play the respawn sound
	PlaySoundThing(respawn_snd, victim, 1, 0, 8, 0x0);
 
	Return;
end

I've also included a different impact damage handler, hopefully this one will allow the vases to shatter when hitting walls or players. If it doesn't, you can try to totally remove the block, and see what happens. They will be destroyable by fists then, but it would be interesting to see if the shattering thing can be achieved at all...

[edit]Removed some bugs[/edit]
"Häb Pfrässe, süsch chlepfts!" - The coolest language in the world (besides Cherokee)
2005-08-08, 3:22 PM #99
It worked beautifuly!

The vases are force throwable, they shatter on impact, it doesn't give the player
being hit by force throw the items and they respawn. It seems a little wacky the
way they respawn because sometimes they respawn at their original positions but
some times they respawn in different places it seems. Thanks a ton to Zagibu!
If curiosity killed the cat then perhaps Curious George killed the cat.
But Cat's do have nine lives so who knows?
2005-08-09, 9:41 AM #100
No, it doesn't work at all. Class cog don't seem to run in independent instances. They overwrite the same variables.
I'll see if it can be solved by using heaps. If not, it will have to be rewritten as a level cog.
"Häb Pfrässe, süsch chlepfts!" - The coolest language in the world (besides Cherokee)
2005-08-10, 6:58 AM #101
wouldnt this part of the thread be more appropriate for the cog and/or editing forum? wait do they still exist? i dont remember.
My girlfriend paid a lot of money for that tv; I want to watch ALL OF IT. - JM
2005-08-10, 11:14 AM #102
Right. I must admit my defeat, anyway. I just can't get them to respawn where they were before. Stupid class cogs don't allow the easy way, and a level cog would be a PAIN to synchronize. I'm opening a topic in the COG forum, maybe someone knows a trick or sees a way I'm just overlooking...
"Häb Pfrässe, süsch chlepfts!" - The coolest language in the world (besides Cherokee)
123

↑ Up to the top!