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.

ForumsCog Forum → Crushers...
Crushers...
2003-07-27, 7:29 PM #1
I just came up with this great idea! You see, I have conveyor belts in my JK level that I'm working on, and I thought it would be really cool if I could put big, steel, pointy crushers, that the player has to dodge as he's running down the conveyor belt. It sounds really cool, but I'm pretty sure it wouldn't be too hard to create ... for someone who knows cog, at least.

I'm thinking some sort of modified elevator cog would do it. All that needs to happen is the elevator runs continuously (from startup) between to frames, and if the player gets caught beneath it, they die just the same as when you get caught underneath an elevator in a JK level (the screen turns red, etc.) However it would be preferable if the player died instantly, like as in a death surface cog.

I've already made my crusher 3do, all I need now is someone to kindly suggest to me the right base cog and how to tweak it to suit my purposes. Much obliged!
My JK Level Design | 2005 JK Hub Level Pack (Plexus) | Massassi Levels
2003-07-27, 7:33 PM #2
JK's movers and stuff can damage stuff when it's blocked... I can't remmeber how to set damage though.

------------------
Bassoon, n. A brazen instrument into which a fool blows out his brains.
Bassoon, n. A brazen instrument into which a fool blows out his brains.
2003-07-28, 7:07 AM #3
Uhh, I don't really understand what your saying, sorry could you rephrase that, and how I might go about that? Anyone else, either?
My JK Level Design | 2005 JK Hub Level Pack (Plexus) | Massassi Levels
2003-07-28, 8:42 AM #4
Path controlled objects will cause damage when they're blocked, but you could cause extra damage if you want.

------------------
Author of the JK DataMaster, Parsec, Scribe, and the EditPlus Cog Files.
Author of the JK DataMaster, Parsec, Scribe, and the EditPlus Cog Files.
2003-07-28, 3:45 PM #5
Thanks guys, but this doesn't really help - I need a cog for this to work. I don't know how to modify cog, so if someone could kindly modify one for me (I'm sure it would be dreadfully easy to do what I'm asking in cog). Just use an elevator cog and make it so it runs from starup back and forth between two frames. I think I know how to deal with damage now, just modify the 3do thingflags. But if someone could do instant death upon touch in the cog, that would be great too.

Thanks all, sorry if I sound exhasperated.
My JK Level Design | 2005 JK Hub Level Pack (Plexus) | Massassi Levels
2003-07-29, 4:52 AM #6
just figureing out what you want...

this thng.. it moves?

so basicaly you want a elivatior cog, that will instantly kill if the player is stuck under it??

so this thing is moveing up and down??

or is it moveing left and right and you want it to kill anyone under it?? the second is harder.

------------------
I am pjb.
Another post......
another moment of my life wasted.....
at least i made a level.
PJB's JK page's

-the PJB jedi rule book-
rule one, "never trust a bartender with bad grammar"-kyle katarn in JO

Rule Two, "Gravity is a crule misstress" -kyle katarn in MotS, and the alternatior MK I in AJTD
I am Darth PJB!
well, go on, run away!

i have a plastic lightsaber and a jedi cape.. am i a nerd?

If gravity is a crule mistress, and bar tenders with bad grammar are untrustworthy, what is air?
2003-07-29, 7:24 AM #7
It's moving up down, but the damage is second priority at the moment... first someone just needs to give me a cog that runs it from start-up between two frames.
My JK Level Design | 2005 JK Hub Level Pack (Plexus) | Massassi Levels
2003-07-29, 9:59 AM #8
00_elevator.cog or something. There's an LEC cog in the Res2.gob (I think), that moves a path 3do between two frames continuously on startup.

------------------
The Sniper Missions. Current project, The Sniper Missions

The Magician Saber System.

The 2 riddle!
Major projects working on:
SATNRT, JK Pistol Mod, Aliens TC, Firearms

Completed
Judgement Day (HLP), My level pack
2003-07-29, 11:07 AM #9
Hi there [http://forums.massassi.net/html/smile.gif]

I just quickly drummed this up, and I've checked that it works (but if you find any glitches, please let me know people) [http://forums.massassi.net/html/wink.gif]

Code:
##
# MOTS Cog Script
#
# crusher.COG
#
# This COG script acts as a "crusher" that will pound from two frames
# (possibly best used with freezingclamp [in MOTS] ??)
#
# If the player touches one of the crushers (handles up to four "things"),
# then inflict IMPACT damage to player.
#
# The damage to player is calculated by: minDamage * maxDamage
#
# This COG script is NOT supported by LucasArts or LEC.
#
# Permission is granted to use this script by the author, as long as credit
# is provided in the readme file for any add-on levels that use this script.
#
# COG started: 29-July-2003
# COG completed: 29-July-2003
#
# E-mail: lucky_jackpot@hotmail.com
# [RJS]
#
##

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

symbols

    message startup
    message entered
    message damaged
    message touched

    sector  triggerSector
    sector  exitSector

    thing   player      local
    thing   crusher0
    thing   crusher1
    thing   crusher2
    thing   crusher3

    flex    crusherMoveSpeed=6.0
    flex    crusherWaitTime=0.5
    flex    minDamage=2.0           // These two values are
    flex    maxDamage=5.0          // multiplied together to "make" a total damage
    int     startingFrameNum=0      local
    int     finalFrameNum=1         local

    int     type        local
    int     victim      local


end

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

code

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

startup:

        // Get handles on message "senders" and "sources"...
        // and other start-up attributes...
    msgSender = getSenderRef();
    msgSource = getSourceRef();
    player = getLocalPlayerThing();

    Sleep (0.2);

//    Print ("STARTING UP CRUSHER SCRIPT");

    call startPlaces;

    return;

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

startPlaces:

        // Set all pieces in correct start-up positions...

//    Print ("OBJECTS = START frame");

    MoveToFrame (crusher0, startingFrameNum, crusherMoveSpeed);
    MoveToFrame (crusher1, startingFrameNum, crusherMoveSpeed);
    MoveToFrame (crusher2, startingFrameNum, crusherMoveSpeed);
    MoveToFrame (crusher3, startingFrameNum, crusherMoveSpeed);

    return;

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

endPlaces:

//    Print ("OBJECTS = LAST frame");

        MoveToFrame (crusher0, finalFrameNum, crusherMoveSpeed);
        MoveToFrame (crusher1, finalFrameNum, crusherMoveSpeed);
        MoveToFrame (crusher2, finalFrameNum, crusherMoveSpeed);
        MoveToFrame (crusher3, finalFrameNum, crusherMoveSpeed);

    return;

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

entered:

    // If player enters the trigger sector....
    // Could use this so that player looks through a factory window and
    // machines are silent (not moving) - the moment the player enters
    // "triggerSector", he/she gets attacked by stormies and the machinery
    // starts chomping/pounding...    [http://forums.massassi.net/html/wink.gif]

    if (msgSender == player) {    // player = a check to register msg...    [http://forums.massassi.net/html/wink.gif]
//        Print ("Message sent by TRIGGER sector");
        start=0;
        call cycles;
    }

    return;

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

cycles:

    while (start == 0) {
        call endPlaces;
        Sleep (crusherWaitTime);    // Delay time for all crushers...
        call startPlaces;
        Sleep (crusherWaitTime);

        // If player gets out of range of sector, stop crushers.
            // Included this as it improves system performances, once player has left
            // that area of the level.
            // If you want the crushers to keep going after player has left that
            // sector, blank out the next "if" statement (the next four lines) ...
        if (getThingSector(player) == exitSector) {
            start = 1;
            call startPlaces;       // Set pieces back in original positions.
        }
    }

    return;

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

exited:

    if (msgSender == player) {
//        Print ("Player EXITED key sector...");
        start = 1;
    }

    return;

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

touched:

    if ( (msgSender == crusher0) || (msgSender == crusher1) ||
         (msgSender == crucher2) || (msgSender == crusher3) )
    {
//        Print ("CRUSHER thing has been TOUCHED");
        call damaged;
    }

    return;

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

damaged:

    victim = getSourceRef();
    type = getThingType (victim);

        // If we have an actor (2) or a player (10)...
    if ( (type == 2) || (type == 10) ) {
        // Will hurt the "victim" with IMPACT --(0x1)-- damage
        DamageThing (victim, minDamage * maxDamage, 0x1, victim);
    }

    return;

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


end


Hope this helps [http://forums.massassi.net/html/wink.gif]

------------------
"Life is mostly froth and bubble,
But two things stand in stone,
Kindness in another's trouble,
Courage in your own"
("Ye Wearie Wayfarer" - by Adam Lindsay Gordon)

[This message has been edited by lucky_jackpot (edited July 29, 2003).]
"lucky_jackpot is the smily god..." -gothicX
"Life is mostly froth and bubble, but two things stand in stone,
Kindness in another's trouble, courage in your own"
- "Ye Wearie Wayfarer"
|| AI Builder: compatible with both JK & MotS || My website ||
2003-07-29, 4:04 PM #10
Hey jackpot, that's not bad for someone with only ten posts, but you made a few errors there. I'll go through them with you.

First, a lot of variables aren't defined. I personally think cog couldn't care less, but politically correct cog will have all variables used defined in the symbols. [http://forums.massassi.net/html/smile.gif]

Code:
startup:
    msgSender = getSenderRef();
    msgSource = getSourceRef();


Just can't do it that way. Okay, the cog keeps hidden variables for the sender, source, senderID (linkid), and four message parameters. Each time the cog is sent a message by the engine, these variables are reassigned to the values of the new message.

So, you'll have to assign your variables to the sender and source in each event message (but not in called messages because you called them, not JK). Message tutorial.

Code:
    MoveToFrame (crusher0, startingFrameNum, crusherMoveSpeed);
    MoveToFrame (crusher1, startingFrameNum, crusherMoveSpeed);
    MoveToFrame (crusher2, startingFrameNum, crusherMoveSpeed);
    MoveToFrame (crusher3, startingFrameNum, crusherMoveSpeed);


That's a perfect example of when to use a loop. In the cog below, you can see how it's done. Loop tutorial / Array tutorial.

Code:
if (msgSender == player)


This check, and the other sender / source checks in the cog, were useless.

The entered message has no condition for the player entering the trigger sector twice. And because you're making a call to cycles - entered will not finish until cycle's loop fails and it runs the return statement. So it's very important to make sure entered doesn't run twice.

Code:
exited:
    if (msgSender == player) {
//        Print ("Player EXITED key sector...");
        start = 1;
    }
    return;


This code was never used because 'message exited' was not in the symbols.

Code:
    if ( (msgSender == crusher0) || (msgSender == crusher1) ||
         (msgSender == crucher2) || (msgSender == crusher3) )
    {
//        Print ("CRUSHER thing has been TOUCHED");
        call damaged;
    }


Again, the sender check is useless because msgSender has a value of 0 that won't ever change. The call to damaged is not good for a few reasons: the DamageThing() verb only takes one line, so no need to make a call; damaged is an event message that may be sent by the crushers, and we don't want that; and lastly, because we are retrieving the sender and sender's type in damaged, it will deceive the unwary reader. You should always design your cogs for readability - because it will be you - more likely than not - that's trying to make sense of them later on.

Code:
    victim = getSourceRef();
    type = getThingType (victim);


Here, we're getting info from touched. victim is correct, but there's no need to check the type - unless the crushers have special masks in the symbols, only players and actors will be able to touch your crushers. So the default mask is 0x404 (see symbol extensions in the DM for more on mask).

Code:
DamageThing (victim, minDamage * maxDamage, 0x1, victim);


Two things are obvious - the damage is self-inflicted because the victim (last param) is given as the damager. Second, you exceeded your maxDamage - see below how to do the min max equation.

Don't take my comments to be negative. That's a good effort for a beginner, and I'd say you had to have some programming experience. What languages have you used?

Here's the corrected cog, should work:
Code:
# MOTS Cog Script
#
# crusher.COG
#
# This COG script acts as a "crusher" that will pound from two frames
# (possibly best used with freezingclamp [in MOTS] ??)
#
# If the player touches one of the crushers (handles up to four "things"),
# then inflict IMPACT damage to player.
#
# The damage to player is calculated by: minDamage * maxDamage
#
# This COG script is NOT supported by LucasArts or LEC.
#
# Permission is granted to use this script by the author, as long as credit
# is provided in the readme file for any add-on levels that use this script.
#
# COG started: 29-July-2003
# COG completed: 29-July-2003
#
# E-mail: lucky_jackpot@hotmail.com
# [RJS]
#==============================================================#
symbols

message   startup
message   entered
message   touched

sector    triggerSector
sector    exitSector

thing     player                 local
thing     crusher0               linkid=1
thing     crusher1               linkid=1
thing     crusher2               linkid=1
thing     crusher3               linkid=1

flex      crusherMoveSpeed=6.0
flex      crusherWaitTime=0.5
flex      minDamage=2.0
flex      maxDamage=5.0

int       numCrushers=4
int       startingFrameNum=0     local
int       finalFrameNum=1        local
int       verbose=0
int       started=0              local
int       i                      local

end
#==============================================================#
code
#------------------------------------------------------
startup:
	player = GetLocalPlayerThing();
	Sleep(0.2);
	if(verbose) Print("STARTING UP CRUSHER SCRIPT");
	call startplaces;

Return;
#------------------------------------------------------
startplaces:
	if(verbose) Print("OBJECTS = START frame");
	for(i = 0; i < numCrushers; i = i + 1) MoveToFrame(crusher0, startingFrameNum, crusherMoveSpeed);

Return;
#------------------------------------------------------
endplaces:
	if(verbose) Print("OBJECTS = LAST frame");
	for(i = 0; i < numCrushers; i = i + 1) MoveToFrame(crusher0, finalFrameNum, crusherMoveSpeed);

Return;
#------------------------------------------------------
entered:
	if(GetSenderRef() != triggerSector || started == 1) Return;
	if(verbose) Print("Message sent by TRIGGER sector");
	started = 1;
	call cycles;

Return;
#------------------------------------------------------
cycles:
	while(started == 1)
	{
		call endplaces;
		Sleep(crusherWaitTime);
		call startplaces;
		Sleep(crusherWaitTime);
		if(GetThingSector(player) == exitSector)
		{
			started = 0;
			call startplaces;
		}
	}

Return;
#------------------------------------------------------
touched:
	if(GetSenderID() != 1) Return;
	if(verbose) Print("CRUSHER thing has been TOUCHED");
	DamageThing(GetSourceRef(), minDamage + ((maxDamage - minDamage) * Rand()), 0x1, GetSenderRef());

Return;
#------------------------------------------------------
end


------------------
Author of the JK DataMaster, Parsec, Scribe, and the EditPlus Cog Files.

[This message has been edited by SaberMaster (edited July 29, 2003).]
Author of the JK DataMaster, Parsec, Scribe, and the EditPlus Cog Files.
2003-07-30, 12:08 AM #11
Hi there SaberMaster (and everyone else) [http://forums.massassi.net/html/biggrin.gif]

First off, even if Daft_Vader doesn't say it ( ;p ), thanks for the revised COG, I had a suspicion that there would probably be a few things to iron out.

Next thing, about only having 10 posts (11 after I finish this one [http://forums.massassi.net/html/wink.gif] ) I've been frequenting Massassi for over four years now, but never had the confidence to post any replies to COG questions. For one thing I didn't have too much programming experience back then, so I thought I'd wait and stay silent until I knew enough of the language, before attempting to post answers [http://forums.massassi.net/html/smile.gif]

Nowadays, seeing not so much of GBK and _*Seifer*_ around to help young newbies in their COG endeavours (mercifully, you're still around to help "nurture" us budding coggers), after learning Java for two years at uni (and still learning, with a bit of C thrown in for good measure ;p ), I thought I finally had enough knowledge and *confidence* to start posting COG programming answers.

After reading through what you written, the thing that hits me first (and I'm surprised I didn't add it when I was writing the COG) was "DUH - no 'exited' declared in symbols" lol

Secondly, I had my doubts about the defining of msgSender and msgSource in "startup:" lol. It was a lapse of concentration - maybe I didn't notice it because the COG was working as I wanted it to (in terms of actually having an effect upon the player).

Thirdly - implementing a loop. Yes, I know that would have been more efficient code (and a more practical solution). I must confess that aspects of this COG were placed in sections, just so that I could follow the code's execution. Hence the pointless "Print" messages, due to poor variable definitions, as you mentioned lol Also, I've had problems with loops in COG - java's fine, but COG still seems to dislike me when I use them [http://forums.massassi.net/html/wink.gif] We're not on speaking terms lol

I also fully concur with your mention of the player entering the trigger sector twice. I dwelt on that aspect for about a half hour or so, but thought that Daft_Vader would want a COG that was working rather than flawlessly perfect. That said, if people like yourself can quickly devise a flawless solution (even if you based it on my work ;p ), then lets, by all means, provide a quick, correct answer [http://forums.massassi.net/html/biggrin.gif] [http://forums.massassi.net/html/wink.gif]

In short (lol - sorry to labour the point - you can tell I'm English can't you), my version of the COG worked (if, as you pointed out, a little screwy lol). But if you don't object, I would like to use this COG in one of my own levels, having had a few ideas while I quickly drummed up the script - do I have your permission...

Thanks for going through the COG and ironing out the stray wrinkles - the ones that got through...

As I always say, you can never have enough constructive criticism. Thanks for the praise, you've given though [http://forums.massassi.net/html/biggrin.gif] and the COG advice & improvement. It's much appreciated and I hope that I can continue to help all the "new" breed of COGgers. Let's face it - at the end of the day, we're all here to keep JK/MotS alive ... and we've been doing a dang good job so far ;p

-Jackpot
"You're never too old to stop learning"

------------------
"Life is mostly froth and bubble,
But two things stand in stone,
Kindness in another's trouble,
Courage in your own"
("Ye Wearie Wayfarer" - by Adam Lindsay Gordon)

[This message has been edited by lucky_jackpot (edited July 30, 2003).]
"lucky_jackpot is the smily god..." -gothicX
"Life is mostly froth and bubble, but two things stand in stone,
Kindness in another's trouble, courage in your own"
- "Ye Wearie Wayfarer"
|| AI Builder: compatible with both JK & MotS || My website ||
2003-07-30, 6:15 AM #12
Quote:
<font face="Verdana, Arial" size="2">In short (lol - sorry to labour the point - you can tell I'm English can't you),</font>


I realized that half-way through your reply. [http://forums.massassi.net/html/wink.gif]

And it's good to have you with us. [http://forums.massassi.net/html/smile.gif]

------------------
Author of the JK DataMaster, Parsec, Scribe, and the EditPlus Cog Files.
Author of the JK DataMaster, Parsec, Scribe, and the EditPlus Cog Files.
2003-07-30, 10:52 AM #13
Quote:
<font face="Verdana, Arial" size="2">Originally posted by SaberMaster:

In short (lol - sorry to labour the point - you can tell I'm English can't you),
</font>


YAY a a fellow english man, good day sir. dust thou request a dule?

------------------
I am pjb.
Another post......
another moment of my life wasted.....
at least i made a level.
PJB's JK page's

-the PJB jedi rule book-
rule one, "never trust a bartender with bad grammar"-kyle katarn in JO

Rule Two, "Gravity is a crule misstress" -kyle katarn in MotS, and the alternatior MK I in AJTD
I am Darth PJB!
well, go on, run away!

i have a plastic lightsaber and a jedi cape.. am i a nerd?

If gravity is a crule mistress, and bar tenders with bad grammar are untrustworthy, what is air?
2003-07-30, 12:16 PM #14
Well, not English myself, but of English descent.

And I think I'll pass on the duel. [http://forums.massassi.net/html/wink.gif]

------------------
Author of the JK DataMaster, Parsec, Scribe, and the EditPlus Cog Files.
Author of the JK DataMaster, Parsec, Scribe, and the EditPlus Cog Files.
2003-07-30, 8:07 PM #15
Lol pjb [http://forums.massassi.net/html/wink.gif] [http://forums.massassi.net/html/biggrin.gif]
"lucky_jackpot is the smily god..." -gothicX
"Life is mostly froth and bubble, but two things stand in stone,
Kindness in another's trouble, courage in your own"
- "Ye Wearie Wayfarer"
|| AI Builder: compatible with both JK & MotS || My website ||
2003-07-31, 10:38 AM #16
Hi all, sorry for such a late reply, my computer seems to be having "slight" technical difficulties" and I didn't have an internet connection for a while (even know Im posting this on a different computer).

THankyou immensely everyone for your assistance! Great to see some other Brits around, you see I'm one myself! [http://forums.massassi.net/html/biggrin.gif]

However, I'm sorry for how noob this sounds, I tried copying and pasting the text for the cog into notepad, and overwriting the '.txt' file extension with '.cog', but when I put the cog file in my '/cog' directory in my project folder, it just showed up in F7 window with empty blanks - no parameters. What should I do to get the cog file working in my level? Do I need cogwriter or something? THanks.
My JK Level Design | 2005 JK Hub Level Pack (Plexus) | Massassi Levels
2003-07-31, 11:38 AM #17
Well the cog is complete as it is - no need to go re-writing it (with SaberMaster "polishing up" my earlier version [http://forums.massassi.net/html/wink.gif] )

Strange though that it should appear in your COG directory (are you sure it wasn't placed just in your "Project Directory" ?), *without* any parameters...

If you want, I can zip up the files and email my demo level to you, if that would help ? It might be of some use to you for setting the crusher thing objects' frames... Anyhow, get back to me if you're still having problems [http://forums.massassi.net/html/wink.gif]

------------------
"Life is mostly froth and bubble,
But two things stand in stone,
Kindness in another's trouble,
Courage in your own"
("Ye Wearie Wayfarer" - by Adam Lindsay Gordon)
"lucky_jackpot is the smily god..." -gothicX
"Life is mostly froth and bubble, but two things stand in stone,
Kindness in another's trouble, courage in your own"
- "Ye Wearie Wayfarer"
|| AI Builder: compatible with both JK & MotS || My website ||
2003-07-31, 11:52 AM #18
Thanks, my Email address is wondermog@bellsouth.net

I did put the cog in the cog directory and I was able to place it in the cog window, it's just that it was empty.

Just so you think, I'm not a complete newbie, cog is not my specialty ... I'm just a guy that makes levels! [http://forums.massassi.net/html/wink.gif]
My JK Level Design | 2005 JK Hub Level Pack (Plexus) | Massassi Levels
2003-08-01, 5:49 AM #19
useing notepad to copy and past is like trying to write a cog on paper.

i have found that when you copy and past into notepad it actualy takes the returns outa the code.

download cogpad or cogwriter (i surjest the latter as i havent been able to get cogpad to work) then copy and paste it into there [http://forums.massassi.net/html/smile.gif]

and how dar thou pass on a dule, that is the msot ungentlmanly thing i have ever seen. thou shalt be slain.

------------------
I am pjb.
Another post......
another moment of my life wasted.....
at least i made a level.
PJB's JK page's

-the PJB jedi rule book-
rule one, "never trust a bartender with bad grammar"-kyle katarn in JO

Rule Two, "Gravity is a crule misstress" -kyle katarn in MotS, and the alternatior MK I in AJTD
I am Darth PJB!
well, go on, run away!

i have a plastic lightsaber and a jedi cape.. am i a nerd?

If gravity is a crule mistress, and bar tenders with bad grammar are untrustworthy, what is air?
2003-08-01, 11:33 AM #20
Quote:
<font face="Verdana, Arial" size="2">download cogpad or cogwriter (i surjest the latter as i havent been able to get cogpad to work) then copy and paste it into there</font>


Get CogPad and EditPlus. I've used EditPlus for years (notice the link in my sig), so it's my personal favorite, but CogPad is also very good.

If you can't get CogPad to work, it's probably because you don't have the needed files for VB (yeah, typical VB [http://forums.massassi.net/html/rolleyes.gif].) Make sure you have the runtime files installed, and if CogPad mentions specific files such as COMDLG32 or MSCOMCTL, they're on the web at various sites.

Quote:
<font face="Verdana, Arial" size="2"> have found that when you copy and past into notepad it actualy takes the returns outa the code.</font>


Which is the result of the ineptitude of your browser. Netscape is the only browser to do it correctly that I've used. But just hit edit and copy the text from the edit box.

------------------
Author of the JK DataMaster, Parsec, Scribe, and the EditPlus Cog Files.

[This message has been edited by SaberMaster (edited August 01, 2003).]
Author of the JK DataMaster, Parsec, Scribe, and the EditPlus Cog Files.
2003-08-01, 7:48 PM #21
Or you could always copy the cog and add the returns yourself [http://forums.massassi.net/html/wink.gif] lol
I did that for the first cog (luckily it was small) then I found out from SM about the edit 'trick'

------------------
Sam: "Sir we can't call it 'The Enterprise'"
Jack: "Why not!"
Sam: "Sir we can't call it 'The Enterprise'"
Jack: "Why not!"

↑ Up to the top!