Second E&E copyright discussion split - Page 2

Second E&E copyright discussion split

Discuss game development here, from a distinct game project to an accessible third-party mutator, down to the interaction and design of individual units if you like.

Moderator: Moderators

User avatar
Min3mat
Posts: 3455
Joined: 17 Nov 2004, 20:19

Post by Min3mat »

hmm maybe we should put random spacings in the code so its original! :idea:








:roll: CHRIST FFS STOP IT WE HAVE HAD INNUMERABLE POSTS ABOUT THIS. :?
User avatar
smoth
Posts: 22309
Joined: 13 Jan 2005, 00:46

Post by smoth »

Pxtl wrote:
Egarwaen wrote:Yes, so the engine is free. The problem is that nearly every script in every mod is a modified copy/paste of a TA script, or a descent thereof. The only one I'm not sure about is Xect Vs. Mynn, which was made specifically to be Cavedogless (since the developer originally sold the Mynn as a retail product).
I started from scratch. wrote and rewrote my scripts ad nausium because I hate copy pasted code. The only copy pasted was shit that I thought I had to have... like the stupid restoretime functions.

Most of which I discarded.

I started scritping by reading the how to script a tank tutorial which meant I had to hand write the shit.

Code: Select all

// rx-79 ground-type(machinegun)
piece GP,head,base,left,right,l_arm,l_forearm,r_arm,r_forearm,gun,flare,
	  sheild,cod,right_l,left_l,flank,hip_l,hip_r,backunit,
	  shin_l,shin_r,foot_r,foot_l,ankle_l,ankle_r;

// State variables
//static-var	 ;
static-var restore_delay, bMoving, bAiming, bCanAim,shooting_num;

// Signal definitions
#define SIG_AIM				2
#define SIG_MOVE			16

#define	ANIM_VARIABLE   bMoving
#include "\79gm\2_4_walk.bos"
#undef	ANIM_VARIABLE


#include "exptype.h"
#include "StateChg.h"

/*------------------------------------------------------	
/  Sheild loss smoke unit funct	
/-----------------------------------------------------*/
static-var HASSHIELD;
HASSHIELD = TRUE;

SmokeUnit(healthpercent, sleeptime, smoketype)
{
	while( get BUILD_PERCENT_LEFT )
	{	sleep 400;	}
	

	
	while( TRUE )
	{
		healthpercent = get HEALTH;
		if( healthpercent < 66 )
		{
			
			smoketype = 256 | 2;
			
			if( healthpercent > Rand( 1, 66 )  )
			{	smoketype = 256 | 1;	}
						
			emit-sfx smoketype from base;
			
			if(HASSHIELD)
			{
			HASSHIELD = FALSE;
			hide sheild;
			explode sheild type		FALL  | BITMAP1;
			}
		}


			if( healthpercent == 100 )
			{
			show sheild;
			HASSHIELD = TRUE;
			}

		sleeptime = healthpercent * 50;

		if( sleeptime < 200 )
		{	sleeptime = 200;	}
		sleep sleeptime;
	}
}
/*------------------------------------------------------	
/  motion function copied from the core commander	
/-----------------------------------------------------*/
StartMoving()
{   bMoving = TRUE;  }

StopMoving()
{	bMoving = FALSE; }	

MotionControl(pheh)
	{	
	pheh = 1;
	
	/*spring has an issue with THIS block of code.*/
		while (pheh)
		{
				//ugly workaround to peculiar bug in spring
		sleep 120;               
			IF (bmoving)
			{
				IF (baiming == TRUE)
				{ 
				bCanAim = TRUE;
				CALL-SCRIPT shootwalk();
				}
                    
				IF (!baiming)
				{ 
				bCanAim = FALSE;
				CALL-SCRIPT walk();
				}
			}
                    
			IF (!bmoving)
			{ 
			bCanAim = TRUE;
			CALL-SCRIPT stopwalk();
			}
		}
	} 
//------------------------------------------------------
//start ups :)
//------------------------------------------------------
Create()
	{
	// Initial State
	bMoving = FALSE;
	bAiming = FALSE;
	bCanAim = TRUE;
	shooting_num=1;
	hide flare;
			
	restore_delay=1000;

	start-script MotionControl();	
	start-script SmokeUnit();
	}
	
SweetSpot(piecenum)
	{	piecenum=GP;	}	
	
AimFromPrimary(piecenum)
	{	piecenum=head;	}

QueryPrimary(piecenum)
	{	piecenum=flare; }
	

//---------------------------------------------------------------------
//gun functions;
//---------------------------------------------------------------------	
RestoreAfterDelay()
	{
	sleep restore_delay;
	
	turn head 		to y-axis <0> speed <135>;
	turn r_arm      to x-axis <0> speed <130>;
	turn left		to x-axis <0> speed <250>;
	turn l_forearm  to x-axis <0> speed <150>;
	turn l_forearm  to z-axis <0> speed <150>;
	turn sheild     to x-axis <0> speed <250>;	
	bAiming = FALSE;
	}

AimPrimary(heading,pitch)
	{
	signal SIG_AIM;
	set-signal-mask SIG_AIM;
	
	// Announce that we would like to aim, and wait until we can
	bAiming = TRUE;
	while (NOT bCanAim)
		{
		sleep 100;
		}
		
			if(!HASSHIELD)
			{	
			turn head to y-axis heading speed <105>;
			turn r_arm to x-axis (<-90>-pitch) speed <190>;
				
			wait-for-turn head  around y-axis;
			wait-for-turn r_arm around x-axis;
			}
			else
			{
			turn head to y-axis heading speed <105>;
			turn r_arm to x-axis (<-90>-pitch) speed <290>;
			turn left to x-axis (<-90>-pitch) speed <250>;
			turn l_forearm to z-axis <70> speed <190>;
			turn l_forearm to x-axis <-35> speed <190>;
			turn sheild to x-axis <90> speed <250>;	
				
			wait-for-turn head  around y-axis;
			wait-for-turn r_arm around x-axis;
			wait-for-turn left around x-axis;
			wait-for-turn l_forearm around z-axis;
			wait-for-turn l_forearm around x-axis;
			wait-for-turn sheild around x-axis;	
			}
			
		start-script RestoreAfterDelay();
	
		return(TRUE);
	}
	
FirePrimary()
	{

			move right to z-axis [-1.5] now;
			move left  to z-axis [-1.0] now;
			show flare;
			sleep 120;
			hide flare;
			move right to z-axis [0] speed [3];
			move left  to z-axis [0] speed [3];
	}
	

Killed( severity, corpsetype )
	{
	if (severity <= 25)
		{
		corpsetype = 1;
		explode cod type		BITMAPONLY  | BITMAP2;
		explode head type		FALL  | BITMAP5;
		explode left type		FALL  | BITMAP5;
		explode right type		FALL  | BITMAP5;
		explode l_arm type		FALL  | BITMAP5;
		explode l_forearm type		FALL  | BITMAP5;
		explode r_arm type		FALL  | BITMAP5;
		explode r_forearm type		FALL  | BITMAP5;
		explode gun type		FALL  | BITMAP5;
		return( 0 );
		}

	if (severity <= 50)
		{
		corpsetype = 2;
		explode left type		FALL  | BITMAP5;
		explode right type		FALL  | BITMAP5;
		explode l_arm type		FALL  | BITMAP5;
		explode l_forearm type		FALL  | BITMAP5;
		explode r_arm type		FALL  | BITMAP5;
		explode r_forearm type		FALL  | BITMAP5;
		explode gun type		FALL  | BITMAP5;
		explode cod type		FALL  | BITMAP2;
		explode head type		FALL  | BITMAP5;
		return( 0 );
		}

	if (severity <= 99)
		{
		corpsetype = 3;
		explode left type		FALL  | BITMAP5;
		explode right type		FALL  | BITMAP5;
		explode l_arm type		FALL  | BITMAP5;
		explode l_forearm type		FALL  | BITMAP5;
		explode r_arm type		FALL  | BITMAP5;
		explode r_forearm type		FALL  | BITMAP5;
		explode gun type		FALL  | BITMAP5;
		explode cod type		BITMAPONLY | BITMAP2;
		explode head type		BITMAPONLY | BITMAP5;
		return( 0 );
		}

	corpsetype = 3;
		explode left type		FALL  | BITMAP5;
		explode right type		FALL  | BITMAP5;
		explode l_arm type		FALL  | BITMAP5;
		explode l_forearm type		FALL  | BITMAP5;
		explode r_arm type		FALL  | BITMAP5;
		explode r_forearm type		FALL  | BITMAP5;
		explode gun type		FALL  | BITMAP5;
	explode cod type		BITMAPONLY | BITMAP2;
	explode head type		FALL  | BITMAP5;
	return( 0 );
	}
btw, the part I have labeled as copied, I rewrote many parts of it and it is up for rewrite #2 after the next release.


and guess what gentlemen... xect vs mynn stole the same bit and modified it even LESS then I DID....SO do not act as though xect vs mynn is clean. No, it was never sold and no the guy did not scratch write his shit.

move off of xect vs mynn, is is more guilty then EE
User avatar
Felix the Cat
Posts: 2383
Joined: 15 Jun 2005, 17:30

Post by Felix the Cat »

Maybe this would be a good time to point out that we should redesign the scripting language from the ground up anyways, because the way Cavedog did things in 1997 isn't really the best way to do things today.

I believe Zaphod said that he was working on this in some sense, IIRC the exact terminology is that he "has some ideas" concerning a new scripting language. Therefore, I've reserved discussion on it until we get an idea of what his "ideas" are, so that we don't redo what has already been done. Or something like that.

Regardless, this is not a scripting language discussion, but a legal discussion. The legal reality is that if you copied it without permission, they can sue you, regardless of what you copied. The clean room/Chinese wall method is necessary to ensure that you are in the legal zone. Even if there's only one way to do something, you have to develop it independently in order for it to be legal.
User avatar
smoth
Posts: 22309
Joined: 13 Jan 2005, 00:46

Post by smoth »

Felix the Cat wrote: Regardless, this is not a scripting language discussion, but a legal discussion. The legal reality is that if you copied it without permission, they can sue you, regardless of what you copied. The clean room/Chinese wall method is necessary to ensure that you are in the legal zone. Even if there's only one way to do something, you have to develop it independently in order for it to be legal.
do you have any idea how ignorant that sounds?

The code discussion is important especially because the TA scripting language requires certain hooks in it. You go and figure them out without knowing them...


Ok...

Code: Select all

OpenYard()
{
		set YARD_OPEN to 1;
	while( !get YARD_OPEN )
	{
		set BUGGER_OFF to 1;
		sleep 1500;
		set YARD_OPEN to 1;
	}
	set BUGGER_OFF to 0;
}

CloseYard()
{
	set YARD_OPEN to 0;
	while( get YARD_OPEN )
	{
		set BUGGER_OFF to 1;
		sleep 1500;
		set YARD_OPEN to 0;
	}
	set BUGGER_OFF to 0;
}
wth is bugger needed for? I never use the damn thing but it has to be there! I have no idea but it is needed..

Code: Select all

RequestState(requestedstate, currentstate)
{
	if( statechg_StateChanging  )
	{
		statechg_DesiredState = requestedstate;
		return (FALSE);
	}
	statechg_StateChanging  =TRUE;
	currentstate = statechg_DesiredState;
	statechg_DesiredState = requestedstate;
	while( statechg_DesiredState != currentstate )
	{
		if( statechg_DesiredState ==FALSE )
		{
			call-script Go();
			currentstate = FALSE;
		}
		if( statechg_DesiredState ==TRUE )
		{
			call-script Stop();
			currentstate = TRUE;
		}
	}
	statechg_StateChanging  = FALSE;
}
Or how about this retarded statechange code?

It is needed for some inexplicable reason.

See it would be easy if there was just sending signals like with fire scripts etc, that is fine. However, factories are weird like that. Learn scripting for ta/spring and come back repeating those words.

You want us to effectively make api calls by writing our own from scratch without examples... let's just get more ludicrous and write it all in hex. Maybe I should spend months of my time learning the structure of a cob and just write it in hex.

simply put.... there is no getting around it. THERE is NO CLEAN ROOM method for ta scripting because it doesn't make sense we have some hacked together scriptor program that uses pseudo C... peh.
User avatar
Neddie
Community Lead
Posts: 9406
Joined: 10 Apr 2006, 05:05

Post by Neddie »

Look, why don't we just make it as clean room as possible and devote some efforts to figuring out all the illogical trips... and then we can make it functionally and legally independent.
User avatar
Erom
Posts: 1115
Joined: 25 Apr 2006, 05:08

Post by Erom »

Min3mat wrote::roll: CHRIST FFS STOP IT WE HAVE HAD INNUMERABLE POSTS ABOUT THIS. :?
It seems to me that there are Innumerable Post About This because it is both Difficult and Important.

I mean, this is tricky ground both legally and technically. People are right- the scripting language is probably a darker grey that needs to be worked on... Smoth is right in that some traditional ways of doing that won't work because TA script isn't really a fully formed language, and it doesn't enforce some of the abstraction barriers you would expect.

However, if the community as a whole can manage this difficult endeavor, then we will all be better off for it, in the long run.

So discussion on this, even if it's sometimes irritating and sometimes repetetive, is, I'd argue, Essential to the longevity of Spring. I'd go so far as to say it has the potential to positively impact all open game development models.

Just my two cents. Feel free to ignore the noob.

-Erom
User avatar
smoth
Posts: 22309
Joined: 13 Jan 2005, 00:46

Post by smoth »

no, I concur, that is why I fight so strongly about it I want spring to keep the odd stuff that is TA scripting and 3do units. I will work on my scripts once 1.0 is done to try and remove the OTA crap. Also I have been slowly redoing MANY of the textures.

http://cs.selu.edu/~ssmith/spring/screen186.jpg


I will continue my work and continue removing the borrowed code simply because I am a perfectionist and the ota crap is sooo kludgy.

if it wasn't for the fact that the wiki is such a maelstrom of egos and revisions I woud have already started posting scripts for people to take. I do not mind donating safe scripts to the community.
User avatar
FoeOfTheBee
Posts: 557
Joined: 12 May 2005, 18:26

Post by FoeOfTheBee »

I believe that the Xect vs. Mynn scripts are legal. I have all the original Mynn bos files, but I only have the cobs for the Xect. Any bos files in the archive were decompiled with scriptor.

ANyway, I think Xect vs Mynn is legal. The mod is rough at the moment. I would love it if a few skilled modders would contribute.

My intention was to focus on balance by formula, which I have been doing and am fairly pleased with. Unfortunately, I've been doing all the rest too, and frankly I'm not that good at the rest.

I think improving Xect vs. Mynn may be the best way to get a good GPL mod. The other possible option would be to use nanoblobs, which I understand is legal, or very nearly legal, though I haven't played it against human opponents so I can't opine much on its playability.
User avatar
smoth
Posts: 22309
Joined: 13 Jan 2005, 00:46

Post by smoth »

xect vs mynn... :roll: I looked at the xect comm and he has more stolen code then you want to admit. I have read the OTA scripts many times and I know what is pasted right from ota scripts.
User avatar
FoeOfTheBee
Posts: 557
Joined: 12 May 2005, 18:26

Post by FoeOfTheBee »

smoth wrote:xect vs mynn... :roll: I looked at the xect comm and he has more stolen code then you want to admit. I have read the OTA scripts many times and I know what is pasted right from ota scripts.
This could be the case - I haven't looked at the ota scripts. I'll check it out this evening, and thanks for the heads up.
User avatar
smoth
Posts: 22309
Joined: 13 Jan 2005, 00:46

Post by smoth »

it is not a problem. I was curious myself that is why I looked. xect vs mynn will need massive rescripts if the trend continues through the mod.
User avatar
FoeOfTheBee
Posts: 557
Joined: 12 May 2005, 18:26

Post by FoeOfTheBee »

Just double checked - I have never recieved a Xect Commander bos file. His bos was decompiled from cob. Which functions seem familiar to you, and to what do they seem familiar?

I will e-mail Xenoclone and ask if he recalls how he scripted the xect.
User avatar
Zoombie
Posts: 6149
Joined: 15 Mar 2005, 07:08

Post by Zoombie »

Anyone else think that this argument is a little self defeating. If somone asks about the mods scripts (unlikely) and raises a fuss over it (Also unlikely) the worst thing that will happe, as i can see, would be that Fang would have to painstakeingly go through a rewrite all that code so it LOOKS different but dose the same thing.

PS: Smoth your location is really really wird. We all know that you don't make space ships out of it. You just sell it for money then BUY space ships with the money!
User avatar
smoth
Posts: 22309
Joined: 13 Jan 2005, 00:46

Post by smoth »

this

Code: Select all

MotionControl(pheh)
	{	
	pheh = 1;
	
	/*spring has an issue with THIS block of code.*/
		while (pheh)
		{
				//ugly workaround to peculiar bug in spring
		sleep 120;               
			IF (bmoving)
			{
				IF (baiming == TRUE)
				{ 
				bCanAim = TRUE;
				CALL-SCRIPT shootwalk();
				}                    
				else
				{ 
				bCanAim = FALSE;
				CALL-SCRIPT walk();
				}
			}
			else
			{ 
			bCanAim = TRUE;
			CALL-SCRIPT stopwalk();
			}
		}
	} 
decompiles to:

Code: Select all

MotionControl(Func_Var_1)
{
	Func_Var_1 = 1;
	while( Func_Var_1 )
	{
		sleep 120;
		if( Static_Var_2 )
		{
			if( Static_Var_3 == 1 )
			{
				Static_Var_4 = 1;
				call-script shootwalk();
			}
			else
			{
				Static_Var_4 = 0;
				call-script walk();
			}
		}
		else
		{
			Static_Var_4 = 1;
			call-script stopwalk();
		}
	}
	return (0);
}
So yeah, it decompiles to the structure the programmer used.

Guess what... the com has the same structure as the ota code.


OMFG, you guys are going on the word of that guy? oh, so I can just release my mod no BOS file and people will believe it is legal? WOW, I am going to do that! j/k

It does bother me that I include my .bos code for readability and people question the legality of the year plus of work I have done. ESP when I am honest and forward with my work.

Fang could have not included his .bos file but then noone could learn from it. I'd almost bet that if the origonal created of xect gave you guys his real code it would be mostly borrowed. That is why this area is sooo exaspertating. There has to be a way to get a clear go ahead on this understanding.
User avatar
FoeOfTheBee
Posts: 557
Joined: 12 May 2005, 18:26

Post by FoeOfTheBee »

smoth wrote: Fang could have not included his .bos file but then noone could learn from it. I'd almost bet that if the origonal created of xect gave you guys his real code it would be mostly borrowed. That is why this area is sooo exaspertating. There has to be a way to get a clear go ahead on this understanding.
I've reviewed the source files, and I don't find them troubling. Obviously, all the animation code is completely different. Braces are handled differently throughout, and function names are different.

Some functions are similar, but I expect the functions to be similar - there just aren't that many ways to do things in bos. If you mention specific functions and their respective units, I will check them out though.
User avatar
smoth
Posts: 22309
Joined: 13 Jan 2005, 00:46

Post by smoth »

I don't want to sound like a jerk so don't take this the wrong way...

I am not going to spend the time decompiling and reading through that mod line by line.

It is simply not in my priority list.
Egarwaen
Posts: 1207
Joined: 27 Feb 2006, 21:19

Post by Egarwaen »

Again, when it comes to copyright, it's not the similarity that matters, it's the process. If you copy and paste the code, it's a potential copyright violation. If you use a "clean room" method and document it - developer #1 reads the code and writes the spec, developer #2 reads the spec and writes some code - then it's not, even if the code winds up looking identical.

At least, that's my understanding, based on dealing with open-source projects, following various reverse engeineering lawsuits, etc.
User avatar
Felix the Cat
Posts: 2383
Joined: 15 Jun 2005, 17:30

Post by Felix the Cat »

smoth wrote:
Felix the Cat wrote: Regardless, this is not a scripting language discussion, but a legal discussion. The legal reality is that if you copied it without permission, they can sue you, regardless of what you copied. The clean room/Chinese wall method is necessary to ensure that you are in the legal zone. Even if there's only one way to do something, you have to develop it independently in order for it to be legal.
do you have any idea how ignorant that sounds?

The code discussion is important especially because the TA scripting language requires certain hooks in it. You go and figure them out without knowing them...

See it would be easy if there was just sending signals like with fire scripts etc, that is fine. However, factories are weird like that. Learn scripting for ta/spring and come back repeating those words.

You want us to effectively make api calls by writing our own from scratch without examples... let's just get more ludicrous and write it all in hex. Maybe I should spend months of my time learning the structure of a cob and just write it in hex.

simply put.... there is no getting around it. THERE is NO CLEAN ROOM method for ta scripting because it doesn't make sense we have some hacked together scriptor program that uses pseudo C... peh.
If your argument was true, the only legal workaround would be a new scripting language.

Fortunately for us, it's not true. The "hooks" that Spring requires to run a script (because TA required them to run a script) are part of the specification that developer #1 gives to developer #2. It's just like giving the developer the name of a command, if I understand it correctly: you must write so-and-so to achieve such-and-such effect, which is, loosely speaking, the general effect of a command.

Regardless, the law does not care how difficult/impossible it may be for you not to copy Cavedog-copywrited code. That's your problem.
User avatar
smoth
Posts: 22309
Joined: 13 Jan 2005, 00:46

Post by smoth »

interesting. I have already re-written many parts of the code from scratch. If you want once I get the code re-writes done I will give them to you.
User avatar
Felix the Cat
Posts: 2383
Joined: 15 Jun 2005, 17:30

Post by Felix the Cat »

smoth wrote:interesting. I have already re-written many parts of the code from scratch. If you want once I get the code re-writes done I will give them to you.
err, thanks, but I wouldn't know what to do with them.

I think that you might have a legal leg to stand on if you rewrite everything except for the "hooks", as they are required for execution of a program... you could make a case that the "hooks" are a process or idea (like the scripting language itself) and not a program, and thus would be covered under patent law rather than copywrite law.

Why does Spring require these "hooks" anyways, if they have no known use?
Post Reply

Return to “Game Development”