Second E&E copyright discussion split
Moderator: Moderators
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.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).
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 );
}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
- Felix the Cat
- Posts: 2383
- Joined: 15 Jun 2005, 17:30
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.
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.
do you have any idea how ignorant that sounds?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.
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;
}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;
}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.
It seems to me that there are Innumerable Post About This because it is both Difficult and Important.Min3mat wrote:CHRIST FFS STOP IT WE HAVE HAD INNUMERABLE POSTS ABOUT THIS.
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
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.
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.
- FoeOfTheBee
- Posts: 557
- Joined: 12 May 2005, 18:26
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.
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.
- FoeOfTheBee
- Posts: 557
- Joined: 12 May 2005, 18:26
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.smoth wrote:xect vs mynn...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.
- FoeOfTheBee
- Posts: 557
- Joined: 12 May 2005, 18:26
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!
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!
this
decompiles to:
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.
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();
}
}
} 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);
}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.
- FoeOfTheBee
- Posts: 557
- Joined: 12 May 2005, 18:26
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.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.
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.
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.
At least, that's my understanding, based on dealing with open-source projects, following various reverse engeineering lawsuits, etc.
- Felix the Cat
- Posts: 2383
- Joined: 15 Jun 2005, 17:30
If your argument was true, the only legal workaround would be a new scripting language.smoth wrote:do you have any idea how ignorant that sounds?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.
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.
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.
- Felix the Cat
- Posts: 2383
- Joined: 15 Jun 2005, 17:30
err, thanks, but I wouldn't know what to do with them.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.
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?
