wallyweb wrote:planetmaker wrote:Hint: Yes. And Yes. As you probably can't prove that you didn't simply copy. And even then.
With small exceptions. And the exceptions and boundaries to where it goes to 'yes, but doesn't matter' depend on your legislation and laws. Generally it will depends on whether you can convince people that the code or the image in question is complex enough to count as original work. Generally these exceptions are small and the boundaries to 'yes, but doesn't matter' really high.
Agreed.
The most contentious part of litigattion is proof of prior art.
But, with the rigity of the specifications, how does one avoid composing a bit of code that has not been done previously?
At least with graphics there is always the possibility to differentiate with colour selection and shading techniques, etc. even though the underlying software is the same.
The specs on how to write source code are much less rigid than you may assume. For your benefit I'll just assume you act stupid. We're talking of source code, not of the compiled grf, and you can write the most simple NewGRF already in as many ways as I can write this whole posting or you could have written yours.
By the same argument of yours that "code follows rigid rules", language also follows rigid rules. Thus there cannot be any piece of text whatsoever which can be copyrighted. Very well then.
All equivalent:
Code: Select all
* Makefile NewGRF framework
* Copyright (C) 2009 - 2014 Ingo von Borstel (planetmaker) and others
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/*
* You can either put your NML code directly here, all in one file
* That makes it easy to use when you don't have a linux or OSX
* environment: you then can simply call nml on this file and
* test your project also locally on windows:
* nmlc mynewgrf.pnml
*
* Alternatively include here the list of source files and treat
* this as your main file of the source code. You might then also
* move the grf definition in its own file, e.g. src/header.pnml
*/
/* Define the NewGRF: */
grf {
grfid: "TEST";
name: string(STR_GRF_NAME);
desc: string(STR_GRF_DESCRIPTION);
url: string(STR_GRF_URL);
version: 5187;
min_compatible_version: 1;
}
/*
* Template to replace a full set of groundsprites, all in one row,
* first sprite starting at x/y. See gfx/test.xcf for an example
* arrangement of the sprites which are described by this template
*/
template tmpl_groundsprites(x, y) {
[ 0+x, y, 64, 31, -31, 0 ]
[ 80+x, y, 64, 31, -31, 0 ]
[ 160+x, y, 64, 23, -31, 0 ]
[ 240+x, y, 64, 23, -31, 0 ]
[ 320+x, y, 64, 31, -31, 0 ]
[ 398+x, y, 64, 31, -31, 0 ]
[ 478+x, y, 64, 23, -31, 0 ]
[ 558+x, y, 64, 23, -31, 0 ]
[ 638+x, y, 64, 39, -31, -8 ]
[ 718+x, y, 64, 39, -31, -8 ]
[ 798+x, y, 64, 31, -31, -8 ]
[ 878+x, y, 64, 31, -31, -8 ]
[ 958+x, y, 64, 39, -31, -8 ]
[1038+x, y, 64, 39, -31, -8 ]
[1118+x, y, 64, 31, -31, -8 ]
[1196+x, y, 64, 47, -31,-16 ]
[1276+x, y, 64, 15, -31, 0 ]
[1356+x, y, 64, 31, -31, -8 ]
[1436+x, y, 64, 31, -31, -8 ]
}
/* Replace the normal, plain land */
replace (3981, "gfx/terrain.png") { tmpl_groundsprites(1, 1) }
or...
Code: Select all
/*
* Makefile NewGRF framework
* Copyright (C) 2009 - 2014 Ingo von Borstel (planetmaker) and others
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/*
* We try here some random stuff. Do what you like, but follow the license,
* if you re-use any code or use it as reference. Otherwise just use the specs
* without looking here.
*/
grf {
grfid: "MYMY";
name: string(NAME);
desc: string(DESCRIPTION);
url: string(URL);
version: 1;
min_compatible_version: 0;
}
/* Each frigging tile a separate replacement (normal grass) */
replace (3981, "gfx/terrain.png") { [ 0+1, 1, 64, 31, -31, 0 ] }
replace (3982, "gfx/terrain.png") { [ 80+1, 1, 64, 31, -31, 0 ] }
replace (3983, "gfx/terrain.png") { [ 160+1, 1, 64, 23, -31, 0 ] }
replace (3984, "gfx/terrain.png") { [ 240+1, 1, 64, 23, -31, 0 ] }
replace (3985, "gfx/terrain.png") { [ 320+1, 1, 64, 31, -31, 0 ] }
replace (3986, "gfx/terrain.png") { [ 398+1, 1, 64, 31, -31, 0 ] }
replace (3987, "gfx/terrain.png") { [ 478+1, 1, 64, 23, -31, 0 ] }
replace (3988, "gfx/terrain.png") { [ 5581, 1, 64, 23, -31, 0 ] }
replace (3989, "gfx/terrain.png") { [ 6381, 1, 64, 39, -31, -8 ] }
replace (3990, "gfx/terrain.png") { [ 7181, 1, 64, 39, -31, -8 ] }
replace (3991, "gfx/terrain.png") { [ 7981, 1, 64, 31, -31, -8 ] }
replace (3992, "gfx/terrain.png") { [ 8781, 1, 64, 31, -31, -8 ] }
replace (3993, "gfx/terrain.png") { [ 9581, 1, 64, 39, -31, -8 ] }
replace (3994, "gfx/terrain.png") { [10381, 1, 64, 39, -31, -8 ] }
replace (3995, "gfx/terrain.png") { [11181, 1, 64, 31, -31, -8 ] }
replace (3996, "gfx/terrain.png") { [11961, 1, 64, 47, -31,-16 ] }
replace (3997, "gfx/terrain.png") { [12761, 1, 64, 15, -31, 0 ] }
replace (3998, "gfx/terrain.png") { [13561, 1, 64, 31, -31, -8 ] }
replace (3999, "gfx/terrain.png") { [14361, 1, 64, 31, -31, -8 ] }
or
Code: Select all
// Automatically generated by GRFCODEC. Do not modify!
// (Info version 32)
// Escapes: 2+ 2- 2< 2> 2u< 2u> 2/ 2% 2u/ 2u% 2* 2& 2| 2^ 2sto = 2s 2rst = 2r 2psto 2ror = 2rot 2cmp 2ucmp 2<< 2u>> 2>>
// Escapes: 71 70 7= 7! 7< 7> 7G 7g 7gG 7GG 7gg 7c 7C
// Escapes: D= = DR D+ = DF D- = DC Du* = DM D* = DnF Du<< = DnC D<< = DO D& D| Du/ D/ Du% D%
// Format: spritenum imagefile depth xpos ypos xsize ysize xrel yrel zoom flags
0 * 4 \d22
# Action14 with grf info
1 * 105 14 "C" "INFO"
"T" "URL_" 7F "http://dev.openttdcoop.org/projects/make-nml" 00
"B" "VRSN" \w4 \dx00001443
"B" "MINV" \w4 \dx00000001
"B" "NPAR" \w1 00
"B" "PALS" \w1 "W"
"B" "BLTR" \w1 "8"
00
00
# Action8
2 * 303 08 08 "TEST" "Example NewGRF v5187M (bc7f26b35ece)" 00 "\8EExample NewGRF\0DDesigned to help you get started. Replaces grass by temperate grass\0D
Programming: \89planetmaker\0D\98Graphics: \89Zephyris\0D\98License: \89GPL v2\0D\98Special thanks to \89Yexo, Hirundo, frosch, Terkhen, Rubidium\98 and \89Ammler
\98 for their support and contributions" 00
3 * 5 0A \b1 \b19 \w3981
// Provide sprites for the normal grass tiles
4 gfx/terrain.png 8bpp 1 1 64 31 -31 0 normal
5 gfx/terrain.png 8bpp 81 1 64 31 -31 0 normal
6 gfx/terrain.png 8bpp 161 1 64 23 -31 0 normal
7 gfx/terrain.png 8bpp 241 1 64 23 -31 0 normal
8 gfx/terrain.png 8bpp 321 1 64 31 -31 0 normal
9 gfx/terrain.png 8bpp 399 1 64 31 -31 0 normal
10 gfx/terrain.png 8bpp 479 1 64 23 -31 0 normal
11 gfx/terrain.png 8bpp 559 1 64 23 -31 0 normal
12 gfx/terrain.png 8bpp 639 1 64 39 -31 -8 normal
13 gfx/terrain.png 8bpp 719 1 64 39 -31 -8 normal
14 gfx/terrain.png 8bpp 799 1 64 31 -31 -8 normal
15 gfx/terrain.png 8bpp 879 1 64 31 -31 -8 normal
16 gfx/terrain.png 8bpp 959 1 64 39 -31 -8 normal
17 gfx/terrain.png 8bpp 1039 1 64 39 -31 -8 normal
18 gfx/terrain.png 8bpp 1119 1 64 31 -31 -8 normal
19 gfx/terrain.png 8bpp 1197 1 64 47 -31 -16 normal
20 gfx/terrain.png 8bpp 1277 1 64 15 -31 0 normal
21 gfx/terrain.png 8bpp 1357 1 64 31 -31 -8 normal
22 gfx/terrain.png 8bpp 1437 1 64 31 -31 -8 normal
or
Code: Select all
// Automatically generated by GRFCODEC. Do not modify!
// (Info version 32)
// Escapes: 2+ 2- 2< 2> 2u< 2u> 2/ 2% 2u/ 2u% 2* 2& 2| 2^ 2sto = 2s 2rst = 2r 2psto 2ror = 2rot 2cmp 2ucmp 2<< 2u>> 2>>
// Escapes: 71 70 7= 7! 7< 7> 7G 7g 7gG 7GG 7gg 7c 7C
// Escapes: D= = DR D+ = DF D- = DC Du* = DM D* = DnF Du<< = DnC D<< = DO D& D| Du/ D/ Du% D%
// Format: spritenum imagefile depth xpos ypos xsize ysize xrel yrel zoom flags
0 * 4 \d40
1 * 105 14 "C" "INFO"
"T" "URL_" 7F "http://dev.openttdcoop.org/projects/make-nml" 00
"B" "VRSN" \w4 \dx00000001
"B" "MINV" \w4 \dx00000000
"B" "NPAR" \w1 00
"B" "PALS" \w1 "W"
"B" "BLTR" \w1 "8"
00
00
2 * 303 08 08 "MYMY" "Example NewGRF v5187M (bc7f26b35ece)" 00 "\8EExample NewGRF\0DDesigned to help you get started. Replaces grass by temperate grass
\0DProgramming: \89planetmaker\0D\98Graphics: \89Zephyris\0D\98License: \89GPL v2\0D\98Special thanks to \89Yexo, Hirundo, frosch, Terkhen, Rubidium\98 and
\89Ammler\98 for their support and contributions" 00
3 * 5 0A \b1 \b1 \w3981
4 gfx/terrain.png 8bpp 1 1 64 31 -31 0 normal
5 * 5 0A \b1 \b1 \w3982
6 gfx/terrain.png 8bpp 81 1 64 31 -31 0 normal
7 * 5 0A \b1 \b1 \w3983
8 gfx/terrain.png 8bpp 161 1 64 23 -31 0 normal
9 * 5 0A \b1 \b1 \w3984
10 gfx/terrain.png 8bpp 241 1 64 23 -31 0 normal
11 * 5 0A \b1 \b1 \w3985
12 gfx/terrain.png 8bpp 321 1 64 31 -31 0 normal
13 * 5 0A \b1 \b1 \w3986
14 gfx/terrain.png 8bpp 399 1 64 31 -31 0 normal
15 * 5 0A \b1 \b1 \w3987
16 gfx/terrain.png 8bpp 479 1 64 23 -31 0 normal
17 * 5 0A \b1 \b1 \w3988
18 gfx/terrain.png 8bpp 559 1 64 23 -31 0 normal
19 * 5 0A \b1 \b1 \w3989
20 gfx/terrain.png 8bpp 639 1 64 39 -31 -8 normal
21 * 5 0A \b1 \b1 \w3990
22 gfx/terrain.png 8bpp 719 1 64 39 -31 -8 normal
23 * 5 0A \b1 \b1 \w3991
24 gfx/terrain.png 8bpp 799 1 64 31 -31 -8 normal
25 * 5 0A \b1 \b1 \w3992
26 gfx/terrain.png 8bpp 879 1 64 31 -31 -8 normal
27 * 5 0A \b1 \b1 \w3993
28 gfx/terrain.png 8bpp 959 1 64 39 -31 -8 normal
29 * 5 0A \b1 \b1 \w3994
30 gfx/terrain.png 8bpp 1039 1 64 39 -31 -8 normal
31 * 5 0A \b1 \b1 \w3995
32 gfx/terrain.png 8bpp 1119 1 64 31 -31 -8 normal
33 * 5 0A \b1 \b1 \w3996
34 gfx/terrain.png 8bpp 1197 1 64 47 -31 -16 normal
35 * 5 0A \b1 \b1 \w3997
36 gfx/terrain.png 8bpp 1277 1 64 15 -31 0 normal
37 * 5 0A \b1 \b1 \w3998
38 gfx/terrain.png 8bpp 1357 1 64 31 -31 -8 normal
39 * 5 0A \b1 \b1 \w3999
40 gfx/terrain.png 8bpp 1437 1 64 31 -31 -8 normal
or
...
surely allow some personal freedom on how to express yourself. Just like you can pick a slightly different colour or make an edge of a vehicle more or less round.