Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium


Help me optimize this RTS freelance coding ad

Posted on 2014-08-09
Medium Priority
Last Modified: 2014-08-18
I have gone only so far on my own doing my RTS server and realize I'd do better with direct help from the many v.experienced coders here and elsewhere, so I want to put a pitch like this on freeelancer.com
I got ripped off in 2005 on rent-a-coder w/ a project with no moderation/oversight by the company, so I'll insist on project oversight, now.

Please leave me some comments on its clarity / weaknesses. - this, below

Title : Bullet-Proof RTS server & clients needed

I have been trying to create a Java RTS server on my own. I have got enough of it working for client-joining and game-readiness. (attached) I have had lots of useful advice for using TCP to make initial setup, meaning reliable TCP for server and clients to make initial contact, and learn IP addresses and the DatagramSocket ports. These all work perfectly. - attached

What I need from you . . .

A Perfect in-game server to be Blizzard, Age of Empires quality with no-crashing, a definitely un-hackable game, with the game-state on the server, instantiable on a remote machine, or, however the servers are best created, with the clients receiving unit movement updates to advance their respective game-states. 
In-game communication must be UDP 
      - player commands from client to server, 
      - the server sending UDP state update increments to each client, 
      - with a periodic TCP full-state-correction messages to guarantee synchronization. 

I keep on getting super-massive Thread entanglements as I get deeper, and I need well-experienced assistance to go on.

I'd prefer not to fumble anymore on my own creating the in-game server, and indefinitely compounding mistakes on top of each other. Whoever takes this proposal should have optimal, proven server-coding experience ready to go. I don't want to pay for someone learning on the job.[ learn the hard way what the major mistakes are for newbie heavy server coders]. Once the networking is all working, with some gameplay aspects - building placement and construction, production queues, melee and ranged combat, I'll program the game on the server.

We will need to support . . .
      - 8 clients for 4 vs 4, and,-
      - giant 8 FFA. Not super-heavy, but not trivial.

I am open to all suggestions and considerations.

2. A Perfect abstract in-game RTSclient class for the client, that
a)      - can be customized by me for different needs / looks via inheritance of an abstract process() method for the client to implement that reacts to the current visible game-state, once it is clearly received. 
This would be so that a renderer
      - can update a GUI of the game and, or 
       -an in-house AI can inspect the visible game state 
      and can provide appropriate reactions, or many different rendering-style windows can be made, for game-play command consoles or others

b) I would also need….. abstract initialize() method's called from the constructor to implement to help with client creation. initializeStart() and initializeEnd()  at front and back. e.g. start() could instantiate a Frame and more…end() could Display the Frame and more.
 -There would be client methods, data sent to the server
   - moveUnits(the specific units int[], or the grouping, int toX, int toY, boolean doAttacking, boolean doPatrolling) in the RTSclient to be called on to moveUnits (via message to the server) 
   - and unit selection (is this best stored on client or server? probably server to minimize traffic),
   - doSelection(int unitNumber), also deSelect(int unitNumber) deSelectAll()
   - createGroup(int groupNumber, list of units) if best on server
   - textSend, (to all, or other players, clients can also specify who the client will receive messages from, or who will be thoroughly ignored.) mass spammers should be auto-ignored. Messages could be text or a byte[] for allied AI's, for example.
   - unitCreate(int unitType, int teamNumber, int x, int y) To create units or structures at a certain placing on the map for a certain player and team. (only for dev usage) This would be removed from the RTSclient at launch time as a hacking loophole. . . because unitAction(..) would be the build mechanism.
     unit creation would be done in the server, by the server, when appropriate, if feasible (enough money, etc)
   - unitAction(activityCode, actingUnit, whereX,whereY, actedOnUnit) again, only acts if it is a legal move on the server and the parameters are appropriate.

 c) An Old Starcraft / Old Warcraft,     (2-Dimensional) scenery rendering and pathfinding system would need to be settled on. I'd prefer this, to avoid hectic modern 3-D terrain complications. In all, a gameplay feel like Starcraft 1 / brood war would be ideal for my needs.  We might have to have a big, one view, 2 miles high perspective to avoid scrolling and massive graphical burdening in a 1400*700 type window? bigger? I don't know for sure what is practical.
c) - networking so that no crucial client actions are missed. e.g. if one player attacks, we don't want to miss that command by UDP leakage. The networking must work as well over long distance as a LAN.

d) - I also need this finalized RTSclient class ported to Python, - Jython?
 as well,
 once the Java client is working.
 - for various possibilities, scenarios, 
 for if it happens that Python RTSclient's become useful, desirous.
Can a Java .class plug into a Python interface .py equivalent? This would save mirroring updates from Java to Python. 
How can we best handle code improvements among both languages? Is an abstract class equivalent possible in Python? - for initializeStart(), initializeEnd() and process() methods in the RTSclient? Is this totally straightforward?
Once we have a finished RTSclient.class, it will be useable in both languages, identically? That pleases me, because Python Tkinter graphics seemed to be a total flop, initially. and Java stepping in on a frame class would be super.

e) a useful terrain and map system, we'd agree on tiling or drawLining, -  That can be automatically navigated by ground units. - path-finding.
f) …can demonstrate functionality, by moving a group of, say mutalisks (attached), or hydralisks, air and ground, around a map on one window, with a fog-of-war and these actions being verifiable on another window on another computer, far away. 
g) I also want RTSclient's and RTSserver's at some point to be able to be initable, in code, on a remote computer for test phase. - via Web-start. In all, the game should be a Webstart'ed program.
e.g. Our in-house AI's can be ordered to start on other machines, or in the cloud, in code, to join a test game by specifying the RTSclient class file's location in our database, be it 
1) a .class 
2) or a .py, Jython would make this a .class?
 the game's Server's location, ( I might not understand how best to do this - how do we spring up our in-house AI's? - from their .class)
Maybe FFA of 3 humans vs 5 computers - all RTSclients
h) The RTSclients must be nameable in code. e.g. "Galactic Federal  army." or "The Neptune Knights." We will have a few RTSclient's, not one (being RTSclient inherited game-play variations, which I will create a few of, once the RTSclient works). 
i)  A demo game-Frame play-scenario, of gameplay potential, by a web-app Game-setup and by movements of small MPG transparent unit graphics on a big, about browser-window sized map-scenery-Frame. Are MPG's best for unit graphics, JPG for tiled scenery?
The RTSclient code files must exist in an online database of mine - of the various RTSclient's [and our various in-house AI’s] - for easy finding within a running program - say creating a drop-down selection of them  (I have Godaddy hosting) from where we can gather these codes for instantiation / running. and selecting their names from a list. 
- I suspect I'll keep making new client types. Once we have the finalized .class

A web site / Web-app where users can sign up, sign in and edit some account aspects in a panel, - text, radio-buttons, upload files to store in their account, e.g. pics. (mostly standard, default web site stuff, really) (a logged-in-user count)(also, named chat rooms create-able for logged in users) ( a game-create-room, where other users can join to prepare and commence a game, human v human, or human v one of our RTSclient AI's) I need to know how to acquire these user account aspects in my code for display within standard window components, Java and web-app, or other uses.

k) I also need to see how to, in Java or website,  launch a game server and the clients, based on game setup specified in this site / app. Would it be best to do this in Webstart Java code? Would our AI's be best to run on their own remote machines? It was suggested I use Google or Amazon's cloud. How can we make it so that potentially 1,000s of AI's can exist globally! ? If someone wants to play vs an AI, the cloud spawns a new one? What is most practical coastwise? Cloud seemed very affordable, specifically for this use. It's mostly for massive data bandwidth? Bare in mind the guaranteed abuse that will occur if possible from users!

How can we have large numbers of clients simultaneously in global games, 1v1 or  multi-player games?

Feel welcome to contact me for clarifications, discussion. I am in North Carolina, and a within the United States phone call would be okay. or Skype. Set up a time!
Question by:beavoid
LVL 35

Assisted Solution

by:Dan Craciun
Dan Craciun earned 668 total points
ID: 40250368
I think you might be somewhat confused: this is not rent-a-coder, elance, etc. You can hire developers now, but the purpose of this site is to help you with your code, not write it for you.  

The experts here are NOT payed (if you're a premium user, the money you pay goes strictly to E-E, the experts don't get anything), so to maximize your chances for a response you should split your project into small pieces and ask separate questions.

Of course, this is purely my opinion. Maybe you'll get lucky and find a developer willing to do all that in one go.
LVL 111

Accepted Solution

Ray Paseur earned 668 total points
ID: 40250490
Without spending too much time on it, I can see that what you want to build is going to require considerable budget.  

Suggest you give some evidence of the throw-weight of your financial backing in the advertisement.  You might also want to go to UNC, Duke, or other nearby universities with high-power computer science departments and contact the engineering professors and teaching assistants with your requirements.  They may have the time and temperament to take on such a sprawling project.  It is likely that you will require several full-time employees and months of collaborative work.  

To try to put it in context, the authors of Angry Birds worked more than full-time for 14 months before they had a release.
LVL 17

Assisted Solution

krakatoa earned 664 total points
ID: 40250957
If your idea is *that* good, take it to an established developer, sign an NDA, and let them code it. You collect a royalty. That also covers for the contingency that it turns out to be a flop.

Author Comment

ID: 40251291

I know about flops. I worked for MS during Xbox Golf w/ Sergio Garcia. It got us closed down, it was such a flatline.
Anyway, flop or not, for my idea, is it sane to complete, maybe use freelancing, step at a time, to get all my project's pieces together?
The blocks are
1) Server w/ game-state server side
2) Once server is updating game-state and sending to clients, program game.

I'm curious, quickly, is it another question, is reflection the only way, from within one Java class, to do the hacking of a client side game-state class we've been discussing? - even of private and protected parental data members? Is it a quick answer, here? What imports are red-flags, in Java and also, Python?

Author Comment

ID: 40267603
I've requested that this question be closed as follows:

Accepted answer: 0 points for beavoid's comment #a40251291
Assisted answer: 500 points for Ray Paseur's comment #a40250490

for the following reason:

I appreciate all the great advice. I am going to brazen this thing out, don't worry :)
I can walk to UNCW from my place, and I have considered asking for student contributions, btw

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

There are times when I have encountered the need to decompress a response from a PHP request. This is how it's done, but you must have control of the request and you can set the Accept-Encoding header.
The title says it all. Writing any type of PHP Application or API code that provides high throughput, while under a heavy load, seems to be an arcane art form (Black Magic). This article aims to provide some general guidelines for producing this typ…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
This video teaches viewers about errors in exception handling.
Suggested Courses

572 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question