Link to home
Start Free TrialLog in
Avatar of James Hancock
James HancockFlag for United States of America

asked on

Help me optimize this RTS freelance coding ad

Hi.
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

Hi
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 . . .

1.
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?
and
 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


3.
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!
DRWclient.java
DRWserver.java
serverClient.java
SOLUTION
Avatar of Dan Craciun
Dan Craciun
Flag of Romania image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of James Hancock

ASKER

Thanks

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?
Thx
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
thx