ID:1500000
 
This one is more for the newer people.

This topic has been done to death, so there's not much I can really add to it. I just wanted to make some more examples of why rips are not cool. I feel compelled to do so because I've seen about 4 naruto rips and 2 bleach rips show up this month and quite frankly, it's a little disturbing.

I understand that a lot of these rips operate under the premise that they "changing the game to make it original". I find it unlikely, but I'll play along. So you're going to change the game to make it original. What do you do? Changing the icons? That's about as impacting as changing your clothes. You need to change the code, you need to add content. How are you going to update the content?

It feels strange to me, that someone can join BYOND and in a month have their hands on a rip. I'm not entirely sure they know what rips are before they get them. They just google "BYOND Source code" (Which, btw, there are 2-3 BYOND hubs that display lists of these things with survey links for access). They get the code, and they're looking at this stuff, reading it, trying to make heads and tails of it. Which isn't terribly hard, once you get the hang of it. It's not hard to learn how to read code. But when they go to update it, I don't know how you don't wind up with a mess. How do you update something that has little to no documentation? These people are coming into BYOND with little to no programming experience and the first thing they do is read code and try to not only make sense of it, but add to it?

I'm going to show you some code as an example. WARNING: THERE IS A LOT OF IT. I AM NOT KIDDING. BRACE YOURSELF, CODE IS COMING.

mob/var
counter=0
Flight=0
tested=0
sexy=0
war=1
focusing=0
Shurcounter=0
Kucounter=0
Tagcounter=0
windmills =0
trikunai=0
tagset = 0
cap = 1000
Village = ""
seals = 100
challenge = 0
challenged = 0
OOCC = 1
SHarmor=0
aura=0
Rainarmor=0
Warmor=0
Barmor = 0
Zarmor = 0
Larmor = 0
Iarmor = 0
Marmor = 0
Farmor = 0
Sarmor = 0
Kunaiworn = 0
soU = 0
canS=0
Weaponworn = 0
S1 = 0
S2 = 0
S3 = 0
BSworn = 0
SWworn = 0
inbaika = 0
inso=0
Kshibari=0
kubi=0
faceicon
Utiger=0
Udog=0
Udragon=0
Uhorse=0
Uram=0
Uox=0
Urat=0
Uboar=0
Umonkey=0
Usnake=0
Ubird=0
Urabbit=0
Otiger=0
Odog=0
Odragon=0
Ohorse=0
Oram=0
Oox=0
Orat=0
Oboar=0
Omonkey=0
Osnake=0
Obird=0
Orabbit=0
tiger=0
dogs=0
dragon=0
horse=0
ram=0
ox=0
rat=0
boar=0
monkey=0
snake=0
bird=0
rabbit=0
bugs=0
squad=""
squads=0
recruits=0
Kamizuri=0
stars=0
mob/var
missingS=0
doton=0
SnakeH=0
Katon1N=0
inguild=0
shurikenskill=1
kunaiskill=1
trapskill=1
Mshurikenskill=1
Mkunaiskill=1
Mtrapskill=1
sharingan1=1
kunai=0

sharingan2=0
sharingan3=0
Yen = 50000
mangekyou=0
Suses = 0
missingkills=0
dogname=""
tmp/firing=0
hasdog = 0
dogmaxhealth=0
Uchiha=0
Inuzuka=0
Akimichi=0
Puppet=0
Medical=0
Kyuubi=0
Shukkaku=0
tmp/Jujin=0
tmp/bya=0
NonClan=0
tmp/froze=0
Haku = 0
Uzumaki = 0
Tenten = 0
Gaaraclan = 0
Aburame = 0
Hyuuga=0
Nara=0
Kaguya=0
Spiderclan = 0
tmp/battlingRC=0
isbunshin=0
tmp/earthscroll=0
medicalnin=0
tmp/heavenscroll=0
tmp/deathforest=0
invillage
tmp/gotscroll = 0
tmp/doing=0 // tells the verb if the person who is attacking is already doing something
exp=0 //defines current experience
max_exp=45 //defines maximum experience
start
saidmessage=0
human=1
title = ""
SensatsuN=0
origover
tmp/points = 0
tmp/canattack =1
tmp/canrest=0
tmp/Dead=0//defines max health
tmp/Tekken = 0
tmp/bounty = 0
Rank2 ="Player"
tmp/Jyuken = 0
tmp/Basic = 1
spawntime
rank = "Student"
Mnin=10
Mtai=10 // defines strength
Mgen=10
tai
gen
nin
ninexp=0
taiexp=0
genexp=0
mninexp=30
mtaiexp=30
mgenexp=30
ttexp=300
nnexp=300
ggexp=300
healthexp=0
maxhealth=1000
tailvl
ninlvl
genlvl
chakra=1500
Mchakra=1500
health=1000
healthlevel=0
maxhealthexp=0
taistr=5
taidef=5
resting=0
level=1

ChakraC = 50
ChidoriU = 0
RasenganU =0
cmission=0
dmission=0
bmission=0
smission=0
hengeN=0
KawaN=0
OirokeN=0
BunshinN=0
KbunshinN=0
TbunshinN=0
Clan=""
calories = 111
pill1 = 0
pill2 = 0
pill3 = 0
kills=0

deaths=0
tmp/move=1
killlist = list("")
tmp/screwed = 0
starS=0
leafS = 0
sandS = 0
snowS = 0
grassS = 0
soundS = 0
rainS = 0
earthS = 0
mistS = 0
lightningS = 0
akatS = 0
soS = 0
tmp/ShibariFrozen=0
waterS = 0
ptotal
talk
tmp/seen=0
dog
inlotus = 0
lotusS = 0
tmp/gate1=0
tmp/gate2=0
tmp/gate3=0
tmp/gate4=0
tmp/gate5=0
tmp/gate6=0
tmp/gate7=0
tmp/gate8=0
picked = 0
load
loaded
Oicon
Oiconstate
Ohair
hair
Realplayer = 0
bunshin=0
goldinbank = 0
btarget =""
knowK = 0
knowJ = 0
knowKK = 0
weaknin = 0
guard=0
rpants
bpants
rhair
Konchuu = 0
havebee=0
Bees=0
VL
bhair
ghair
gpants
rshirt
SI
bshirt
gshirt
rshoes
SHI
bshoes
gshoes
rsshirt
bsshirt
gsshirt
Picon
SSI
bandanat
learntK = 0
swordD = 0
puppet = 0
Katon2N=0
Katon3N=0
Katon4N=0
buoyu
Bunshin
shari = 0
shari2 = 0
Cshari1 = 0
Cshari2 = 0
Cshari3 = 0
Cshari4 = 0
kbunshin
HurtT =""
Ilu = 0
tmp/ST = 0
tmp/Henge = 0
tmp/spamcheck = 0
stop
times
dude
illu = 0
shiba=0
SN = 0
SS = 0
AmaN=0
GatN=0
MN=0
garN = 0
tmp/ingat = 0
tmp/ingar = 0
tmp/intank= 0
tmp/inspike = 0
SpikeN = 0
byaU = 0
tmp/BO= 0
JuU = 0



english = 0
jap = 1
bonesword = 0
spinesword = 0
tmp/inMei = 0
hit = 0
DDD = 0
tmp/Rasenganon = 0
tmp/RasenganD = 0
tmp/Chidorion = 0
tmp/ChidoriD = 0
SS3 = 0
scalpel = 0
Zowner = ""
tmp/meditating=0
DoryuuN = 0
DoryuudN = 0
GownerA = ""
GownerB = ""
GownerC = ""
Fuuton1N = 0
Fuuton2N = 0
Fuuton3N = 0
Jowner = ""
Rai1N = 0
Rai2N = 0
Rai3N = 0
Rowner = ""
hakkeRU = 0
hakkeNU = 0
hakkeK = 0
SSU = 0
sphere = 0
sunaU = 0
Sbunshin = 0

KonchuuO = 1
havekonchuu = 0
KKbunshin = 0
waterwalk
dead
bchuuninx
bchuuniny
bchuuninz
AFK = ""
Waterwalk = 1
inwar1 = 0
inwar2 = 0
wasin1 = 0
wasin2=0
muted = 0
Level
AllowMove = "On"
WorldChat = "On"
PMOn = "On"
HearAll = "Off"
tmp/Spam = 0 // tmp because you dont want it saved each time.
FontColor = "#FF0000" // players cant change it
NameColor = "#00FF00"
Weights = 0
score =0
guildc
aguild=0
tmp/Moveing = 0
tmp/Move_Delay = 1.2
tmp/Frozen = 0
tmp/Speed1 = 1.2
tmp/Speed2= 0.9
tmp/Speed3 = 0.5
tmp/Speed4 = 0.2
tmp/Speed5 = 0
tmp/Savedspeed = 1.2
tmp/Kaiten = 0
tmp/waterwalkingarea = 0
tmp/onwater = 0
used
tmp/PK = 1
tmp/Genintest
tmp/Geninmade
tmp/entered
tmp/ingame
tmp/menus
cansave=0

For anyone curious, it's an old WOTS source and if you don't know what that means, then you probably don't care.

This is a copy/paste of the variables a mob has. That's it. Just the variables. That is a metrick $#@!ton of variables. Most of which could've been compressed to lists. There's literally a variable for every clan whether or not you have it. There is a separate variable for health and max health. There are, I think 3 comments in the whole set of code. And they're not terribly insightful, they pretty much state the obvious. This is not a practice you want to reproduce. It also worries me that cansave is not a tmp variable but whatever. You're telling me that someone brand new to programming is gonna look at this and be like, "Yup. I got all that."? Bologna.

Another thing I see with you new guys is admin privs and admin numbers. I hate to break it to you guys, but admins aren't terribly necessary. I'll hand it to RP games, if you want someone to control the experience like my DnD DM, be my guest. But in strictly pvp games, you shouldn't really need admins. It's easy to program spam filters. It's easy to program your game in such a way that things you consider illegal (such as spawn killing) are impossible. And I kid you not, there's a "jail" verb, which lets you stay in the game, but you're muted and you're stuck in a small arena. What? Who is going to just sit in the jail? It's a game, you're supposed to be active throughout the experience (I'M LOOKING AT YOU, FREE TO PLAY GAMES THAT INVOLVE WAITING FOR HOURS FOR REWARDS. FARMVILLE INSPIRED PIECES OF $#@!)... ahem. And even if you did need admins, which I'm willing at accept. Why do you need OVER NINE THOUSAND OF EM? Newsflash, admin means nothing when 7/9 players have it. It's like the whole legendary pokemon totaling up to over 30. What makes em so dang legendary if 5% of pokemon are legendary?

And while we're on the topic of numbers, why the $#@! are these numbers scaled so poorly? Start the game with 3000000 stats? I hate to break it to you, but large numbers mean nothing when they're so common. See: ZIMBABWE

Guys, you can do better. Don't copy the rips. Rips have a lifetime of about my social life. In all honesty, I think you'd probably get bored of the rip before it came to anything. But keep pretending to update your rip if it makes you feel better about yourself. Keep writing these blog posts if it helps you sleep at night. Keep up with your trend of getting BYOND players to quit because of abusive admins that edit their stats to 30000000000000000000000000000000 and kick their behinds in unfair fights. Every time BYOND gets a new rip, my heart gets a new rip. Don't send me to my grave, guys. :(
There is a separate variable for health and max health.

What exactly is wrong with that?
In response to FKI
FKI wrote:
There is a separate variable for health and max health.

What exactly is wrong with that?

Takes up space and is a mess to keep track of.

Stat
var
Value = 0 ; MValue = 0 ;

Functionally the same, but you can now make procs that handle stats more flexibly rather than trying to keep everything on the player. It's object orientated programming, why are we trying to do everything with 4 objects?

As a side note, it's a lot easier to use datums to track information. Stats, Quests. I even have a demo(?) that uses a datum to define combos for players to use. Datums are extremely flexible and anyone not using them is probably working too hard.
In response to FKI
In response to Magnum2k
Magnum2k wrote:
It's Stephen's fault.

More like LummoxJR's Dream Tutor fault. I've read all of them and they've made my programming so much lighter.
I suspect the reason for this is that they are isolated from the community and as a result they don't have access to the resources that will steer them down the right path. They just code whatever comes to mind, no matter how inefficient and illogical it may be. At least they're using tmp variables right!
I'm no magician, but I believe cansave should PROBABLY be a tmp variable. I had a rough time deciphering a lot of the variables. I also noticed this english = 0 , jap = 1 variable? Wut?
In response to Lugia319
Well, when you put it like that.

I agree with what you're saying though. At the same time, I don't think it's that big of a deal. People are gonna do what they want to do, ya know? Maybe later on they'll realize it's a waste of time, but that's for them to figure out on their own. I can almost guarantee they'll see posts like this and get absolutely nothing from it.
And I'll keep my flag a burnin.
Rip's or people using other's source codes "make" a game or even modify it has been around since .. what 2001 - 2002? why are you trying to change it now? you're a bit late.
I wanna be an epic shinobi, it's funny that while u posted this someone asked how to add admins in a game
Well, I'm gonna go ahead and go in a slightly different direction here, if that's okay.

When I came to BYOND, I didn't know a goddamn thing about programming. I tried to learn, but I was young, it was hard, and I didn't understand the documentation... so when someone offered me a source code, I said "sure, why not?" Played with it a little. Hosted it. Turns out I broke every projectile in the game just from trying to add in different pronouns for gender (don't use src and usr interchangeably, kids!).

Eventually, I gave up the ghost and took on another programmer. He fixed the game and made it better. We were never really some huge, feature-heavy beast or anything, but we certainly were ahead of the curve due to our savvy for game design... or something. I dunno. We got lots of players, and it was fun. We built a community. We even got to #2 in all of BYOND at one point, all under the pretense of "changing the game to make it original," as you put it.

Well, eventually we did just that. As of v. 2.0, Breed of Destruction has been original (under the hood). The graphics are all the same, but not a shred of the original ripped source code is still there. But you know what that means?

It means that we have functionally created an exact replica of an already existing game. Sure, it's not a "rip," but it sure as hell is a rip-OFF. It's actually kind of funny, honestly, in a weird way. I've moved on to bigger and more exciting projects, but I still pay attention to my weird little rip-off game and the crazy people that still play it for whatever reason, and I'll always remember the time I had with it fondly.

Bottom line is, rips don't hurt anybody. For the most part, they're hidden from the public eye. If a game's still actively being hosted by the developers, then by all means, shut down the rips, because I'm sure the developers are PISSED about it, and for good reason. But if people are still playing and having fun on a modified version of a 7-year-old game, does it really hurt you? Maybe the people working on rips could be good programmers if they didn't use a stolen source, who knows. Either way, they're gonna do what they want.
In response to Unwanted4Murder
Unwanted4Murder wrote:
Bottom line is, rips don't hurt anybody

HIGHLY debatable.

There was a time when 99 out of every 100 games on BYOND was some kind of rip, and 99 out of every 100 people on BYOND were playing them.
At the time BYOND probably needed these trashy games and the people playing them to survive, but these games seriously hurt BYONDs future and any potential it had, possibly permanently. The reason BYONDs in such a sorry state right now is no skilled developers making games, the reason for this is at least partly because skilled developers see BYOND as a joke because of things like rips.

At the time there was no alternative but to tolerate the rampant number of rips BYOND had, but BYONDs probably never going to recover from the damage they caused.


Also, there is nothing wrong with using variables to represent Hp and MaxHp as different things. Because they are different things.
If I have 50 Hp out of 100, I need to store this as two values, 50 and 100 (assuming maximum Hp can change that is). You could calculate maximum Hp when it's needed, but it's make more sense to calculate it only when it changes then store it as a variable for later use.

Datums have lots of uses, but to me it seems silly to use a datum to store a number. I mean, storing values (such as numbers) is the entire purpose of a variable. Why would you need a datum to do this?
Even if you use the datum to store several numbers, aren't you just attaching the numbers to a datum (which is attached to a player), instead of directly to the player? What's the difference exactly?
Basically just wrapping up bounds checks, pretty much, was the rationale for that.

Ordinarily your health, and your maximum allowable health are (as the names imply) closely related concepts. One shouldn't be bigger than the other, and presumably usually your health shouldn't be lower than some minimum allowable health (usually 0).

The datum just wraps that up into a little bundle, to enforce those constraints in one place so that you never get it wrong. Lugia319's example is pretty pffffffffffffb, because it's the 'write by procedure' methodology which makes the use of a datum remotely beneficial there. The datum just means you've got one less thing to care about, and I like not caring.

Not because doing bounds checks is hard or anything ... it's just tedious. Over enough time writing tedious code again and again, you get it wrong somehow, because you're human. And when you get it wrong, you get a bug. Usually a bug you groan at or face-palm over when your playerbase runs into it, as it's trivial and shouldn't have happened.

It's not a data structure thing, it's an encapsulation thing. But still ... don't wanna do that? Fine by me. Your game, not mine, I ain't fussed.
In response to Stephen001
I get around the whole issue of Hp exceeding maximum Hp (or being lower than 0) by simply having a function handle the changing of Hp. One function to increase it, another to decrease it. Both functions handle everything related to increasing or decreasing Hp (such as limiting it to a certain range, calling a death function if it drops below 0 and so on).

I don't see how this is any more or less tedious than using a datum. But like you say, it's other peoples games, they can do it how they want.
Two functions for the price of one?
In response to The Magic Man
It's not particularly, and I dare-say if that's your only use-case (or just health and mana) then pffffffffb I dunno why you'd want the datum either.

There's a kind of tedium that comes when you've got 80 of these things in some whacky RPG design though (but over-engineering of RPG parameters is a whoooole other discussion of balance and design).

It's a design pattern, common solution for a common pattern of problems. Use if you see fit, don't if you don't! I'm not really in the habit of issuing fatwas over code, particularly in DM. You're making an indie game, not a distributed commercial system.
In response to The Magic Man
The Magic Man wrote:
I get around the whole issue of Hp exceeding maximum Hp (or being lower than 0) by simply having a function handle the changing of Hp. One function to increase it, another to decrease it. Both functions handle everything related to increasing or decreasing Hp (such as limiting it to a certain range, calling a death function if it drops below 0 and so on).

I don't see how this is any more or less tedious than using a datum. But like you say, it's other peoples games, they can do it how they want.

Your argument is the same argument against OOP. If I can just write some extra variables at the next level, why bother? The answer is encapsulation. If I have Hit Points, Mana, Experience, Stamina, Quest Objectives - All as sliding counters - why not program them once, and reuse them? Otherwise you're copying and pasting logic that exists.

That is why we have atom, mob, obj, and the option to inherit them.
Admittedly the idea of a stat datum is nice and all, though I do painfully wish we had operator overloading to make it a bit more convenient to use. (See also: vectors).
Rips aren't cool because...

1. There is already a game published, which is exactly the same.

2. You'll get into bad habits when using another one's source code.

3. CPU problems are caused by incorrect coding, which what a source code could have.

4. It's funner to make original games by scratch instead of adding code after code from a source code you've used.

5. You wouldn't understand a thing, so "your" game would come out looking like crap.

6. You'll get more compliments with your own ideas, using others won't cut the deal, nor make it original/inspirational. It'll make it a bad community, and maybe bad game. However, people avoid rips and rather play games that are coded by scratch.

No one expects you to make your tiles/turfs, but open domain is suggestive. Google searching for sprite-sheets is recommended. Ripped sprites from other "commercial" games are good if BYOND does not have a problem with it. (All game companies do not care if you use their resource.

Bottom line is, making original games are more playable, bearable, and tolerable. No one wants to play a game where the CPU shoots up to around 40-180%, that makes the game laggy and unplayable.
Page: 1 2 3 4