Log in

View Full Version : Question about learning to code


Weekapaug
03-27-2015, 05:23 PM
...as it pertains to gaming, working on mods and emus, specifically.

It's been 30ish years since my basic days and lately I've been dying to learn to code. The local community college will alacarte any class they offer as long as the prerequisites are covered. I was wondering of anyone could offer advice as to what I should be looking at if I was interested in things like advanced scripting for streaming applications (cast software, bots, etc), modding non mmos, and working on one's own EMUs.

Any advice would be greatly appreciated.

loramin
03-27-2015, 05:25 PM
Well, for learning programming in general I'd recommend starting with Python, Java, or JavaScript. But if you want to do emulator stuff I believe people use C++ , or maybe even C. Those used to be standard introductory languages, and you still might be able to find intro classes that teach them.

Really though I'd suggest you just focus on learning programming for your first class, and worry about learning how to do emu stuff (and whatever language that requires) second; programming has enough hard concepts to wrap your head around at first that trying to simultaneously learn them and be productive is rather difficult.

*EDIT*

It's a mix of c and c++

Weekapaug
03-27-2015, 05:36 PM
Thanks, Loramin.

Totally see your point and thats why I wanted to ask. Not really sure where to start. If you google about coding it's overwhelming. I'll go look again but I think I saw Visual Basic and one of the Javas offered in the fall. But I'll have to double check.

I actually started to learn C++ back in the day...'94ish, but I got so busy with work it fell by the wayside.

Wouldn't mind being able to pick up some work with it too if I wanted.

That quote...is that saying EQ is a mix of C and C++?

bullproofmonk
03-27-2015, 05:39 PM
If you are truly interested in learning to develop gaming software, then you are going to want to focus on the C's.

C++ and/or C#

C#(Sharp) is going to be way more focused on Win32/64 development, where C++ can more readily be applied to other platforms.

After you get a handle on that, you will need to decide what 'engine' you want to learn to design your games on. OpenGL, or DirectX are the 2 most popular. While these are just classes in a C library, it's like learning a whole new language in itself.

Programming is such a generic term though, as it's like telling someone you want to learn to internet. I would speak with one of the professors, and tell them your goals. They will be able to outline a set of courses that will get you on track.

I'd venture to say you aren't going to walk away from any of these courses with the ability to write games out the door. Programming is like anything else, you get out of it what you put into it. Once you have the basics, it's up to you to continue learning by either experimentation, or looking at other people's code.

I rarely if ever have to write my own code in my particular job function. With the internet so readily available, you can often find that someone has already written a chunk of code that can do what you want, if not better for free.

Also, here is a snippet of code to simply draw a triangle on your screen. Just to let you know what you are getting into!


# include <iostream.h>
# include <graphics.h>
# include <conio.h>
# include <math.h>

void show_screen( );

void Triangle(constint,constint,constint,constint,const int,constint);

void Line(constint,constint,constint,constint);


int main( )
{
int driver=VGA;
int mode=VGAHI;

int x_1=0;
int y_1=0;

int x_2=0;
int y_2=0;

int x_3=0;
int y_3=0;

do
{
show_screen( );

gotoxy(8,10);
cout<<"Coordinates of Point-I (x1,y1) :";

gotoxy(8,11);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";

gotoxy(12,13);
cout<<"Enter the value of x1 = ";
cin>>x_1;

gotoxy(12,14);
cout<<"Enter the value of y1 = ";
cin>>y_1;

gotoxy(8,18);
cout<<"Coordinates of Point-II (x2,y2) :";

gotoxy(8,19);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";

gotoxy(12,21);
cout<<"Enter the value of x2 = ";
cin>>x_2;

gotoxy(12,22);
cout<<"Enter the value of y2 = ";
cin>>y_2;

gotoxy(8,26);
cout<<"Coordinates of Point-III (x3,y3) :";

gotoxy(8,27);
cout<<"ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ";

gotoxy(12,29);
cout<<"Enter the value of x3 = ";
cin>>x_3;

gotoxy(12,30);
cout<<"Enter the value of y3 = ";
cin>>y_3;

initgraph(&driver,&mode,"..\\Bgi");

setcolor(15);
Triangle(x_1,y_1,x_2,y_2,x_3,y_3);

setcolor(15);
outtextxy(110,460,"Press <Enter> to continue or any other key to exit.");

int key=int(getch( ));

if(key!=13)
break;
}
while(1);

return 0;
}


/************************************************** ***********************///---------------------------- Triangle( ) ----------------------------///************************************************** ***********************/void Triangle(constint x_1,constint y_1,constint x_2,constint y_2,
constint x_3,constint y_3)
{
Line(x_1,y_1,x_2,y_2);
Line(x_2,y_2,x_3,y_3);
Line(x_3,y_3,x_1,y_1);
}

/************************************************** ***********************///------------------------------- Line( ) -----------------------------///************************************************** ***********************/void Line(constint x_1,constint y_1,constint x_2,constint y_2)
{
int color=getcolor( );

int x1=x_1;
int y1=y_1;

int x2=x_2;
int y2=y_2;

if(x_1>x_2)
{
x1=x_2;
y1=y_2;

x2=x_1;
y2=y_1;
}

int dx=abs(x2-x1);
int dy=abs(y2-y1);
int inc_dec=((y2>=y1)?1:-1);

if(dx>dy)
{
int two_dy=(2*dy);
int two_dy_dx=(2*(dy-dx));
int p=((2*dy)-dx);

int x=x1;
int y=y1;

putpixel(x,y,color);

while(x<x2)
{
x++;

if(p<0)
p+=two_dy;

else
{
y+=inc_dec;
p+=two_dy_dx;
}

putpixel(x,y,color);
}
}

else
{
int two_dx=(2*dx);
int two_dx_dy=(2*(dx-dy));
int p=((2*dx)-dy);

int x=x1;
int y=y1;

putpixel(x,y,color);

while(y!=y2)
{
y+=inc_dec;

if(p<0)
p+=two_dx;

else
{
x++;
p+=two_dx_dy;
}

putpixel(x,y,color);
}
}
}

/************************************************** ***********************///-------------------------- show_screen( ) ---------------------------///************************************************** ***********************/void show_screen( )
{
restorecrtmode( );
textmode(C4350);

cprintf("\n************************************************ ********************************");
cprintf("*********************************- -*********************************");
cprintf("*--------------------------------- ");

textbackground(1);
cprintf(" Triangle ");
textbackground(8);

cprintf(" ---------------------------------*");
cprintf("*********************************- -*********************************");
cprintf("*-************************************************** **************************-*");

for(int count=0;count<42;count++)
cprintf("*-* *-*");

gotoxy(1,46);
cprintf("*-************************************************** **************************-*");
cprintf("*------------------------------------------------------------------------------*");
cprintf("************************************************** ******************************");

gotoxy(1,2);
}

Weekapaug
03-27-2015, 07:14 PM
Thanks bull,

I'm not so much looking at software development per se as being able to navigate my way around existing software but that's probably splitting hairs. I did a lot with basic in jr and high school and survived Cobol and Fortran in college to fulfill language reqs, but when I got to C or C++ in my mid 20s it was a lot different and I just didn't have time to sink in the way I would have liked. Would love to now, though. Been nagging at me for a while.

So the Cs are my starting point, huh?

loramin
03-27-2015, 07:17 PM
Not really sure where to start. If you google about coding it's overwhelming. I'll go look again but I think I saw Visual Basic and one of the Javas offered in the fall.
Yeah, it can be overwhelming, but it's just something you need to take one step at a time and before you know it you're a programmer. As for Visual Basic vs. Java, both are decent introductory languages (I learned on a very old version of Visual Basic myself), but even so I'd recommend Java because it's much closer to C/C++. In some sense Java is just C++ without the hassle of managing memory.

That quote...is that saying EQ is a mix of C and C++?
That was from the EQ Emulator forum, and I believe they were referring to EQ Emulator's code. I assumed when you said you wanted to "work on mods and emus" that you were mainly referring to EverQuest, but even if your interest is more broad C and C++ are both used widely in game development.

As for C# ... if you're only in to Windows development then the Microsoft suite of ".Net" languages (C#, Visual Basic, etc.) are great ... but if you want to develop for any platform other than Windows they're not so useful.

Maelfyn
03-27-2015, 08:01 PM
Forget emus. Nevergrind ripoffs are the future :)

Utmost
03-27-2015, 08:19 PM
Have tried making a woman match your moves?

Maelfyn
03-27-2015, 08:22 PM
I'm half joking, but honestly I think coding a game in C or any similar lower-level language is way harder than creating a game with modern web technology. I flunked out of comp sci twice, majored in English, work as a technical writer, and I managed to code Nevergrind (http://nevergrind.com) in 2 1/2 years from scratch.

Edit: If you simply have a desire to code games, this may be the route to go. I personally use libraries like GSAP (http://greensock.com) for animation and EaselJS (http://createjs.com/easeljs) to simplify working with the canvas. These are lightweight libraries that don't re-invent javascript and simplify working with the DOM and the canvas.

loramin
03-27-2015, 08:25 PM
Forget emus. Nevergrind ripoffs are the future :)
:)

There is a grain of truth to this though. Nevergrind was made using web technologies (JavaScript and some related HTML5 bits), and those technologies are much more accessible than the language and libraries you'd need to make a "real" game like an EQ Emulator server.

If you really just want to make a game, and nothing more complex than say Nevergrind, an entirely different approach would be to learn web tech (mainly JavaScript); you won't be able to make your own EQ Emulator server, but you will be able to make simpler games in less time.

I'm a web guy myself though (in fact I'm almost done writing a book about a JavaScript library), so I'm a little biased.

radditsu
03-27-2015, 08:53 PM
Its like spanish to me.i havent used it in 9 years. i can read it but damned if i can write it anymore

Swish
03-27-2015, 08:54 PM
If you fail on your journey there's always things like MUGEN AI (https://www.youtube.com/watch?v=tIBp8hnszLU) ;)

Weekapaug
03-27-2015, 11:34 PM
Have tried making a woman match your moves?

72 times over 20 years. have orders in atm for 2 more. Might do 4 this summer if I can swing it. Shows that is.

Would have to look at my stats to see how many actual 'paugs I've gotten.

Just looked...19.

iruinedyourday
03-28-2015, 12:02 AM
You should look into Unity if you want to do game development.. I know nothing of modding however...

But Unity uses Javascript and C#

Unity is a really awesome tool!

Weekapaug
03-28-2015, 12:25 AM
Awesome info, guys. Thank you so much.

Weekapaug
04-01-2015, 07:16 PM
<--- Chattanooga State's newest enrollee.

Have to double check to make sure before I register, but it looks like Java is the pre-req for c/c++ so I'm taking that in May and the Cs in the fall. If I dig it I may think about one of the degree programs.

Thanks for all the advice, everybody. When I write my first virus I'll give you guys credit. ;p

Zaela
04-05-2015, 09:09 PM
I'm not an advocate of memorizing shit and saying you've "learned" it. Just jump in, do it, and you'll memorize whatever was important. It's not that hard when you have a goal.

This. Schools are mostly good for learning the basics really slowly and maybe getting a piece of paper at the end. The best way to get started, IMO, is to look at other people's code. Find something you already have a general understanding of and try to figure out how it works.

EQEmu is a decent place to start. You know how things in EQ go. Hail a quest giver, say a magic word, turn in an item -- look for their script and see what that looks like in code. You know what can happen when a Mob takes a swing at you -- avoidance checks, invulnerability checks, damage rolls, procs, maybe death -- see if you can't find that in the C++ part (attack.cpp (https://github.com/EQEmu/Server/blob/master/zone/attack.cpp)) and start making connections with what you already know as a player.

Understanding all the syntax and how everything works in detail isn't that important to start out. Once you get a general handle on how things flow together, you can start making inferences about what THIS line of code is doing and maybe making some little changes and seeing if they do what you expect in-game. Experimentation is key to learning anything in programming. Having a complete program to make little adjustments to -- and to see in action in-game -- can be a great way to learn things bit by bit and build up your confidence in your understanding of code. (I say this with plenty of bias: this is how I learned to code, with no prior experience -- although I did have the benefit of having way too much time on my hands.)

Specific languages don't really matter. Basically all of the widely used languages are gateways to each other these days -- they're all part of the "C family". If you can start to understand one, you already have a foothold in the rest.