RTS Development and Something More

Return to Showcase

Postby markjacksonguy » Thu Mar 29, 2012 8:26 pm

Another day, another byte typed… :lol:

I’ve been taking some time off from all the programming and resting up. I will most likely continue to do that until some time next month. You have to take some time off while developing a large project, or you’ll drop dead.

However, I have been putting several hours a day into some lighter work surrounding my game’s development. I guess I did get in some programming too; my path finding AI needed some work done on it.

My Actors would run into an obstruction and sometime change their minds several times about which way to go around the obstruction before they actually went around. This didn’t look good at all and it became annoying fast the more I saw it.

I decided to give the path finding AI an over haul. Man oh man does the path finding look good now! :D My Actors will not only instantly make up their mind on which way to go, they will do it logically. In other words, if going around left is closest to the goal, they will go around left instead of right.

If going around left or right is equal in terms of distance to the goal, it doesn’t matter which way. Actor movement looks better as well. Before they moved almost in a “zig zag” way, going from point A to point B because of the obstacles they dodged. Now they follow the road way more and make clean turns around corners.

Really, it looks just about perfect! :P The best thing about the path finding AI I wrote is the fact it does not use any Panda3D collision detection; it is entirely mathematical. In fact, the only Panda3D collision detection I use is for the ground surface, because the terrain is uneven (will be more so in other levels. Level 1 is like a tutorial level).

I won’t start working like crazy again on the project until some time next month, but I can tell you this…. The game already looks different. I took the time to get rid of the poor looking building structures and inserted some higher detailed, quality looking ones.

So don’t expect things to look exactly like it did in previous screen shots. You might be in for a sweet little treat! :wink: Although, I won’t concentrate strongly on graphics until that phase comes around.



PS,

Please keep all the contents of this thread within this thread. Do not post or link any material that’s here, across the internet.

Thank you. :)
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Fri Mar 30, 2012 12:11 pm

I've been trying to create a look that's human like, but with a slightly different muscle contour. These are Alien people after all.

Code: Select all
image removed by markjacksonguy, because host was an idiot


These Characters will have on outfits, but I wanted to make sure their Alien bodies underneath are prepared some just incase skin does show.

I've been sleeping like a hog lately. That's what happens when you get behind on sleep. I've been putting in long hours on this project since the start of this year. Time off was much needed. :)
Last edited by markjacksonguy on Wed Apr 25, 2012 2:23 pm, edited 1 time in total.
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Sat Mar 31, 2012 9:01 pm

I added more camera control to the game. In addition to scrolling the camera, I can now rotate and flip the camera.

It's amazing how the incomplete visuals look from different angles. The game is already starting to look like quality.

I had a little online chat with a true developer (by true I mean someone who has produced commercial material and has dealt with a publisher) a couple of days ago (I won't tossed his name out here) about dealing with the current publishers now and days.

He gave me some really good advice so I won't be in the dark later or get taken by surprise. One thing he told me keeps repeating itself in my head...

He said...

"Make sure you have a playable demo that really impress and stands out."

When you think of all the games publishers look at every week... It should kind of freak you out if you're developing your first professional title.

Just think... You have to beat out other developers just to get a spot with a publisher, since most of them will only publish so many games a year and those are the ones that really shine.

So...

Seeing my Project starting to bloom some visually is a good sign. I just hope I can really poor it on during the graphic phase of development later on. Keeping performance up will surely create thin ice to walk on.

May everyone in the P3D community pray for me. :lol:
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Tue Apr 03, 2012 6:12 pm

What I’m going to talk about here is the concept behind my Pathfinding AI. This explanation will be short because the concept is so simple, but yet powerful if used correctly (which I have).

Image

In the image you can see there are two types of grids; static and dynamic.

Static Grid – this is your basic grid where each cell is connected to another cell. If you had a Character sitting at cell A of the Static Grid, that Character would have to pass over the next connecting cell as it moves along its path. The “Navmesh” concept is similar to this one.

Dynamic Grid – I’ve never seen this type of grid used before in any game, so as far as I know, it came from my head…because it came from nowhere else that I know of.

This concept is different from the Static Grid concept because each cell in the grid is NOT connected! In fact, each cell is free to move around and position itself where ever. It doesn’t matter where your Character will start or what cells they pass over with this concept. Why?

For starters, your Character does not pass over cells of the Dynamic Grid. Instead, your Character will move around the cells of a Dynamic Grid. The only time a Character will pass over the cell is when the cell is empty, but there is no need for an empty cell. One could just delete the cell if that’s the case.

Unlike the Static Grid, Characters moving on the Dynamic Grid do not have to trace out a direct path to a goal. Instead, Dynamic Grid Characters will move directly towards the goal until they come in contact with a cell. Characters that come in contact with a Dynamic cell will then perform a mathematical pathfind around the Dynamic cell. What makes the Dynamic Grid so cool is the fact, the pathfind code only has two directions; left and right (for each side of the cell, which is four). Your Character will attempt to go around the cell left or they will go around the cell right. Which way chosen is entirely depended on the distance to the goal itself; which his measured from the corners of the current colliding side of the Dynamic Cell.

When a Dynamic Grid Character is under the control of the pathfind AI, they will move parallel to the cell’s sides, going left or right. Once the Character reaches the edge of one side of a cell, they will turn the corner and move just a little along the new side of the cell. At this point, the pathfinding AI breaks and allows for the Character to make another attempt to move straight for the goal.

In a Dynamic concept Panda3D environment, there is no grid present. Each blocked cell of the Dynamic Grid concept is represented by a perpendicular square region around each object or structure. Everything in the 3D world sits on a Dynamic Cell except for the Actors. It’s easier to keep each cell the same size, but you can make them different sizes. This will however, create additional coding.

With the Dynamic Grid concept, I am able to place down a building, tree, rock, etc within my RPG RTS game and not worry about my Actors moving around the object if they need to. I don’t have to pre layout an environment in a modeling application just to single out invalid moving space or cells, either.

When placing buildings close, road way is also automatically defined. All I would have to do is lay down tile for the streets if I wanted to, or just leave it as bare ground.

Because Actors move so cleanly along the sides of the Dynamic Cells and turn corners, the pathfind looks really good. I can mark any object or any position as a goal for any Character and they will move from their current position to the goal with perfection. The surface layout of the level does not matter at all. You can have a really uneven (realistic) terrain and it will not matter.

Even if the Characters’ goal was moving, it would not matter. They will simply continue to move towards the goal and go around anything that’s in their way. With the Dynamic Grid concept, it is easy to create more realistic walk cycles for NPCs as well. All one would have to do is change the goal or point and the NPC would start moving toward that goal or point and make their own way around objects. Thus, no NPC would take the same path every time but would still end up where they should be.

This makes NPCs look a lot more like they are alive and thinking, because they don’t take the same robotic path. They will take the same path if it is the honest, closest path.

Pathfinding this loose and accurate can support a lot of game ideas that involve movement. I don’t feel pathfinding AI is needed for most games, but I will surely continue to use the Dynamic Grid concept with future games that do need pathfinding AI (at least with Panda3D).

Can't wait until I have a video ready. Seeing is believing. :)
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Sat Apr 07, 2012 2:10 pm

Concept Art - Designing Alien Race From the Ground Up
Code: Select all
Image Removed


Although much skin will not show on the characters since they will have outfits, it's nice to have the "birthday" outfit ready just in case. The muscle contour looks Alien enough for me.

The "gamer" will play this race of people, but they will be of variety more when I get to characters. By default, things like skin tone, eyes and hair will be randomized (as well as body types).

I was thinking about allowing the "gamer" to set a standard for their race of people, thus controlling the randomization of each character if they wish to.

That is only a consideration at the moment.

As for the planet the game takes place on -

I already know I want to divide the planet into two regions; the outer continents and the central continents. Each Central continent will be more like a large island.

There will be many races on this planet, but the two leading races will be the one the "gamer" plays and their number one enemy. The "gamer's" race and their number one enemy are both scattered across the outer continents; at least, that's the way it started.

The main enemy race, as the story goes, did something that was not expected. It was over looked by the "gamer's" race because it did not cause direct threat. After some time passed, things started to get out of control within the Central continents.

Thus the story begins...

Of course, there are a lot of holes in that explanation, but that's because I don't want to give the story away. :)

The story is designed to give reason behind the actions of your race of people. That's one of the things I like to do, give reason behind things and not leave something without reason because that raises questions unanswered. There's a reason why the King/Queen of your Race wanted to establish cities in the Central continents.

While you are doing that, you are also ordered to take care of the issues that have surfaced, which are directly related to your number one enemy. The other races of my game world will either be allies of your race, allies of your enemy or neutral.

All the different situations occurring will create missions, which make up whole scenarios, thus making the bed for "RPGish" game play.
Last edited by markjacksonguy on Sun Sep 30, 2012 4:31 am, edited 2 times in total.
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Thu Apr 19, 2012 8:30 pm

Been awhile since my last “digital diary” input –

Right now, this project seems to break down into three major parts to develop on the programming side (unless something changes that). I am just about near the end of major part 1. I have the city building part of the RTS working; at least 95% of it. (I have some smaller things to do still, but nothing serious)

Right now, I think I want to move into the combat system. The combat system is major part 2. The basic movement/pathfinding for the characters is complete, so I have to add commands and attack animations. Doing the combat system will also create work within the GUI, relating to combat control.

As a player of the game, you will not control your Heroes directly in combat, but you will be able to build their combat AI, to increase their chances of success. You will be able to direct a specific soldier to attack a specific enemy and you will be able to move them individually or as a group.

I’m basing the combat system on old school RPGs like the famous Final Fantasy series of the past, except the action will not be turn base; it will be real-time action as that of an RTS. Your military is not really called a military in this game, just as soldiers and commanders are not called soldiers and commanders. You have Heroes who have a specific Title according to their status; rather they’re a leader or a follower.

Right now, the number of max Heroes under the “gamer’s” command will be ten (although I’m programming it for twenty).

My goal now is to push as much as I can on this project; in other words, make the most out of the remaining April Month.

Then I will post up the results of long, hard, tiring, development work for April. :)
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby hobbit » Thu Apr 19, 2012 8:42 pm

I think it is an interesting concept to have the player build up the ai for the heros instead of directly controlling them.
hobbit
 
Posts: 199
Joined: Fri May 22, 2009 3:41 pm
Location: USA

Postby zester » Thu Apr 19, 2012 9:09 pm

User avatar
zester
 
Posts: 26
Joined: Thu Nov 11, 2010 5:04 pm
Location: Wilkes Barre Pa

Postby markjacksonguy » Thu Apr 19, 2012 9:32 pm



I haven't done any character skins yet, just concepts (mainly muscle contour concepts for alien race). I'm not working visuals and characters will be amongst the last thing I get too.

There's way too much programming work to do, so I can't afford to jump into graphics yet; and I love doing detailed face maps. :D All the different detail on detail that makes up a realistic skin...right down to the lip texture that makes them look kissable. Freckles, finelines...you name it. :D

Keep in mind, this project is based on a fantasy world and not planet Earth. Think of starwars; this game will have a lot of unusual living races that have their own look and structure/appearance.

PS,

I have however, elevated the overall level visuals some. I didn't want all of you looking at the "crappy" buildings and bad mountain range texturing the entire project. :lol:
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Thu Apr 19, 2012 9:54 pm

hobbit wrote:I think it is an interesting concept to have the player build up the ai for the heros instead of directly controlling them.


Believe it or not, that has already been done in a game before.

Have you ever played Final Fantasy 12? If I remember correctly, that game did the same thing except it gave you the option of directly controlling the characters as well. I believe the system was called "Gambit" or something like that.

I guess you can say I'm doing something similar except you can never control your Heros directly (combat wise). You can only train them AI wise the best you can according to what skills/techs they have available.

My goal is to truly capture a traditional RPGish combat feel, but wrap it up in a sweet little RTS package. I have different ideals about capturing closeup combat action, especially when one of your Heros perform a skilled attacked. Wish me luck. :)
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Thu Apr 19, 2012 10:20 pm

I also wanted to point out my system specs while developing this game -

The game is being tested on a four logical cpu system of 2.4 ghz, but the game itself only runs on one logical core; so in essence, game performance is based on a single 2.4 ghz processor.

(which is still faster than a true single core 2.4 ghz processor because a true single core machine runs every other process on the same cpu.)

The graphic card used for the graphic load is an ATI Radeon HD 2600 XT. That's an old graphic card and such a card will not play most newer games hitting the market today (at least not with a super blazing frame rate while having maxed graphic settings).

The 2600 XT is holding up nicely with my game so far. :) My goal is to stay above 30 fps, even at the most intense graphical moments.

The reason for this limitaion: to make sure some older systems will be able to run the game at an acceptable frame rate, while top-notch systems will "blaze" the game.

I believe a Linux OS can be installed on a PC with Windows as a separate partition. I understand a MAC OS must be on an apple PC (at least that's what I've researched).

I won't worry about the game running on Linux or Mac until it's complete on Windows. Any suggestions on that, feel free to share them. I do want this game to cross-platform without issues.




PS,

I looked at the specs on the 5800s graphic card series and oh my lord! What processing power!!
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Sun Apr 22, 2012 9:38 am

I’m at one of those points now where I just have to stop and get some things clear in my head before I start writing more code. I just competed writing and debugging the code which controls the Move To Point function of the Heroes command tab. (for both groups this time)

Now both, Team A and Team B, can move to the point specified by the “gamer”, plus, the “gamer” can single out a specific Hero and move them alone to a point.

Ok…

What I have to decide on now is the strength of user control versus that of CPU control. For instance, if I told one of my Heroes to move to point (10, 25, 0) and on the way there that Hero gets attacked by an enemy, should the Hero finish the move or engage the enemy?

That’s one of the questions I had in my head but then I looked at my tab and saw that I did include a passive and aggressive mode. I mentioned in a previous post that the game Final Fantasy 12 has used a similar battle system style, but mine is my own thought and I’ll explain –

In FF12, it’s pretty much a turn based battling system in which you can control your characters or let the selected AI control them. If you controlled a FF12 Character, you could select which moves or abilities to use on an enemy. You could also tell a character that was being control by AI to do something specific if you wanted to, or just let them do their thing.

With my system, for starters…

It has a passive and aggressive mode, similar to the pet controls of an MMORPG. If you have played World of Warcraft as a hunter, then you can relate to how your pet controls were designed.

The passive and aggressive will work the same way within my combat system. Going back to that situation of telling a Hero to move to a point and an enemy comes and attacks –

If passive mode was set at the time, then the Hero would ignore the attacks from the enemy and continue to move towards the specified point until reached. If aggressive mode was set at the time, then the move to point would cancel and the Hero would start kicking enemy butt.

A similar scenario would be if I were to send Hero group B back to the city (retreat) with aggressive mode on and they run across some enemies. They would stop going to the city and start stomping enemies. If passive was on, they would indeed go back to their city.

That’s how the passive and aggressive modes can alter the out come of some commands.

As far as attacking goes –

The “gamer” will be able to tell a Hero to attack a specific enemy, but that command may not stick. What I mean by that is this…

Suppose you select a Hero who is a “Shieldmaiden” and you tell her to go attack Enemy C. Now lets say the number one AI slot for that Hero is filled with the ability “Taunt Enemy” and the requirement for the AI is set to “Boss.” Each slot in my AI setup will number from 1 onward, with number 1 being the top priority and number 2 being the next and so on.

In the scenario with the “Shieldmaiden” Hero, rather or not she actually attacks Enemy C depends on what’s going on around her. If she goes to attack Enemy C, but realize a Boss type enemy is within reach, she will Taunt the Boss. Why? Because Taunt Boss is set as the highest AI priority within her AI build. If a Boss was not in the area, she would indeed go and attack Enemy C.

The thing is, the “gamer” will never really have to tell a Hero to attack an Enemy because Heroes will do it any way if they are set to aggressive and enemies are within their range.

You can see how I want to design the combat system…

Very flexible.

Going back to attacking for Heroes; you can specify a specific enemy to attack if you wanted to, but what attack moves trigger is entirely dependant on your Heroes levels and AI builds. The higher level a Hero, the more abilities will become available, which means you have more things to build an AI around. No Hero will automatically do skilled attacks if you don’t set them. Heroes will only perform basic auto attacks on their own; which is also the case with a lot of MMORPGs.

Lets say you have a Healer Hero in your group. Your Healer will not just heal the members of his or her group. This is where the “gamer’s” IQ comes into play. Lets say the Healer has the ability Heal Level 1 for a Single target set to AI slot 1 –

Your requirements will also be different little pieces of the AI which can be acquired during gameplay. Lets say your Healer has the requirement HP90% and the requirement HP40%. If you add requirement HP90% as a requirement for slot 1, which has Heal Level 1 set, your Healer would indeed heal one of their members when that member’s health drops at or below 90 percent.

That’s how the AI building system will be constructed; with an ability/skill and a requirement placed at a slot. Going back to the “gamer’s” IQ….

Sure, healing at 90% seems fine, but think about how fast your Healer will burn through Magic Points. Setting the requirement to HP40% may be the smarter choice. If your Heroes are not taking over sized damage per hit, then why waste Healer magic points by healing them at 90% remaining health? They’re not in a danger zone for health or anything.

In fact, lets set HP40% to slot one’s Heal level 1 ability and lets set Heal level 2 to slot two, but lets add the requirement HP25% to slot two’s ability/skill. With this new AI build, your Healer will now cast a much bigger heal on a member when that member’s health is at 25 % or less, which makes sense. Cast the bigger heal in a more critical situation, which will preserve magic points.

That’s what my AI building system will do, it will leave you hanging. It will not take you by the hand and lead the way; it is up to you to decide what your Heroes will do and when they will do it and in what priority.

Given the fact abilities and ability requirements both have to be gained through game play, setting a really good AI can be hard if you’re lacking the requirement types. This is where I’m thinking about using the Third Game Genre style.

Code: Select all
RPG + RTS + ???


Players will have to earn the “requirement types” for skills and abilities through out the game. I may not give every skill and ability through Hero level gain. Those are things I have to consider as I bring my combat system to life.

All this code writing day after day is tiring… The good thing for me is, I can code anything I want to code; which means, I can bring any ideal I have to life. It’s just a matter of wanting to do the programming work.

That’s why I try not to overwhelm myself and do things that are more simple and practical.

(As if coming up with my Path Finding AI for an engine I’m new to was practical… That was down outright ingenious. 8) )


Regards
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Fri Apr 27, 2012 1:45 pm

I had a rough couple of days. I woke up really sick and had to see a doctor; so I've been taking it easy. Doctor didn't find anything wrong though, anyway....

I'm currently working on an alien look for my enemy race. What I like to do is start with something that look somewhat human and go from there.

In the screenshot, I'm checking to see how the shaping is coming along so far, but have found a lot of areas that need some more shaping. It's hard when you're dealing with a low vertice count. The vertice count in the screen shot is false. This model is under 1k so far and most likely will finish around 1k.

Code: Select all
Image Removed


I already have an idea of what I'll be aiming for. This race will appear more "animalistic." That is, they will have the pointy ears, vangs, claws, distorted legs and an unusual skin color.

I also want this race to look more tribal in dress. Once I get a prototype of the enemy race done and skinned, I can then create some basic animations, which would thus allow me to go ahead and program the enemy AI.

That is my ultimate at the moment goal...getting to enemy AI.


--------------------------
Muscle contour shot (player's race) -
(old screenshot)

Code: Select all
Image Removed


The actor is sawing in the screenshot, but I haven't added those building objects/tools yet.



ps, thumbnails should be clickable (for larger views).
Last edited by markjacksonguy on Sun Sep 30, 2012 4:32 am, edited 2 times in total.
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Wed May 02, 2012 6:13 pm

I think I ate too much today… I feel stuffed! When I’m stuffed, I tend to get tired and lazy. :lol:

Anyway,

Making sure I get the skinning for this race done today, so I can move on to other things tomorrow.

Moving the Head around:
Code: Select all
Image Removed



Dropping the Jaw here:
Code: Select all
Image Removed



Testing eyelid movement:
Code: Select all
Image Removed


I just about have this 'sucker' wrapped up. Characters don't look like much before texturing, that's for sure.

I won't even bothering throwing a place holder on this one (like I did the other race); I'll take care of it during the "graphic stage" of development.

I was thinking of a persona for the leader of this race and I think I want to go with something like "Kain" from the "legacy of kain" series.

That was a sweet Antagonist!

So Mr. Evil Boss man will most likely end up with long hair; white or some other color.

I'm going to enjoy doing the cut scenes for this race of people. They are so 'devilishly' cunning according to the story. :)

My goal for this month of May is to get the combat system done and finish as many animations as I can.

Once the combat system is in... Wow... A lot of this project will be done. From there, I will start planning all the scenarios for level 1 and all the other places that make up the level 1 island continent.

I won't stop until the fat panda sings! :lol:
Last edited by markjacksonguy on Sun Sep 30, 2012 4:32 am, edited 1 time in total.
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Thu May 03, 2012 1:34 pm

This is a Concept Render for my enemy race. From the image, you can get some idea of what I'll be aiming for later; when I do texture mats for actors during the 'graphic phase' of my project. (minus any muscle tone bump mapping)

Code: Select all
Image Removed

Try to picture this guy wearing 'tribal' type dressing.
Last edited by markjacksonguy on Sun Sep 30, 2012 4:33 am, edited 1 time in total.
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby zester » Thu May 03, 2012 5:39 pm

Very nice, I really like how you did its hair. Hair can be hard to do. And I see your blending is getting better.

Just keep those skin painting tutorials in mind when you do start to texture your characters. There not really about doing human skin there more about blending skin in general be that human, alien or monster.

Looks like your on your way to being a great game developer, just dont forget about us linux users. ;)
User avatar
zester
 
Posts: 26
Joined: Thu Nov 11, 2010 5:04 pm
Location: Wilkes Barre Pa

Postby markjacksonguy » Thu May 03, 2012 10:59 pm

zester wrote:Very nice, I really like how you did its hair. Hair can be hard to do. And I see your blending is getting better.

Just keep those skin painting tutorials in mind when you do start to texture your characters. There not really about doing human skin there more about blending skin in general be that human, alien or monster.

Looks like your on your way to being a great game developer, just dont forget about us linux users. ;)


That's not even a texture mat. Lol I'm way better than that man. That image was CG forged, so I can get some idea of where to go with texturing later on.

I'm definitely not worried about characters looking good later, I just have to get past all the technical stuff so I can get to that stage of development. :)

Blending textures for me is easy and fast and I will hand draw and shade muscle tone off of UV maps in order to create normal and height maps; later.

Creating nice textures for anything takes time and therefore needs time put aside for it, alone.

Finishing the combat system is up next. Tomorrow I want to start enemy animations, at least the ones I need in order to start programming heavily on the combat system.

When I get that system done, I'm going to have some fun. :D I was playing Warcraft II on my PC and thought to myself, man.... Those where the days.

The game I'm making now will have a lot of that old school Warcraft flavor too. The areas in my game will all be "blackened out." As the player moves through each level, more of the level will be revealed to them (like it did with old RTS warcrafts).

That effect adds to the mystery of each level; not knowing if you're going to take one step too many and then BAM!!! Your attacked!! :lol: That effect creates a nice dungeon crawler feel to an RTS game.

I'm hoping this game will turn out to be that 'next' big RTS series. (especially for those who love the old school style ones like me :) )

I just remembered I didn't post up screenshots showing the changes I made to my level 1, visually. Just small stuff right now, nothing big. I also added to the UI.

I'll wait until I finish the combat system and post some. :)
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Fri May 04, 2012 11:18 pm

I was zooming in on my characters to get a close-up and realized, I had to zoom way in.

Now I'm wondering.....

Should I use that +size character method clearly seen in a game like "Majesty II?"

What I mean is, the characters in Majesty II are a little too big compared to the building structures. However, by giving the characters more size, you can see them much better on close-ups and from what I can see, it doesn't really hurt the graphical look of the game; but yes, the 'size-up' is noticeable.

I'm thinking about sizing my actors up some (later on) so "gamers" don't have to zoom so far in just to get a good look at actor detail on a close-up.

I'm already thinking about adding UI buttons that allow "gamers" to make the camera follow an actor on a close-up from different angles.

However, the combat action will automatically shoot close-up on certain attacks and mix-up the angles (like a camera man).

How do you guys feel about that? The sizing up of actors against building structures... I'm not talking about making them the same size as the buildings. Lol.

Just a little larger than normal. For instance, some of the characters in Majesty II look like they couldn't even get through the doors on some of the buildings, but yet they are not big enough to look like they can step on the building.

Right now, my actors are sized 'realistically'; they are the right size for fitting through doors on buildings, but you can imagine how far you would have to zoom in to get a good look at one.

Anyway, that's something else for me to consider later. I'm just going to go with what ever looks better. :)
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Wed May 16, 2012 3:28 am

This Month of May isn’t turning out exactly as planned. A lot of life events have taken much of my time. I wasn’t able to get anything done for the first two weeks of the Month.

Oh well… That’s life I guess. :)

Programming the combat system is tricky since I can easily break the movement AI already done. I’m going to have to take it slowly, building one part at a time and debug as I go along.

So far, the enemy and heroes, both, can detect each other and start attacking.

Code: Select all
Image Removed


Right now they detect based on rather or not their enemies are in range, if so, attack the closest one. This is the second approach; I am yet to code in the first approach and what that is, is this… Threat!!

Yep! Good old threat. That is, the enemy that has caused the most threat should get targeted first, if they are in range. If all enemies have equal threat, then take the closest one; that’s how I will finalize the detection.

To make that happen, I just have to make sure I run a re-detection at the end of every attack animation; for reason of threat change or distance change.

Keep in mind, I haven’t even written the AI building part of the combat system.

You can see how things can quickly get complicated.

So I want to make sure all the auto detect and auto attacks (basic attacks) are working before I move any further.

Since my two groups can fight each other now, I will go ahead and setup the threat data base for each Actor Class. The amount of threat created by an attacker will be based on the power or threat of the attack.

Right now I just have a basic attack animation for testing. I won't even worry about getting combat fancy with animations until the system is done.

I see my one actor's feet are in the ground some. No worries there...I'll raise him up later. :)
Last edited by markjacksonguy on Sun Sep 30, 2012 4:33 am, edited 1 time in total.
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Thu May 17, 2012 9:11 pm

I got things looking well so far. I added a health value to the actors and created code for death, which triggers a cleanup of the actors. I needed to do this so I can plan the "after battle" code.

For the "Heroes", this is easy, they will just wait for the players input. If the enemy takes out a Hero, then that enemy needs to start heading towards its main objective again, if there's nothing else in range to attack. Right now, the enemy just stops.

I think I have enough done to write in the "Threat" portion of the code. I still have to test the combat system with multiple actors going at it, but I will most likely finish the GUI that surrounds the AI building system, after I'm done adding the "threat" multiplier into enemy detection.

All this early code will change dramatically later as I start building other small engine programs on top of each other.


Code: Select all


def DetectEnemy(self, task):
        if self.EneDectCnt >= 15:
            if self.AttkSkelk == 0 and self.FreeMovSnapped == 0:
                IGS = 0;
                InRanG = [];
                RanDattk = -1;
                for ChaR in AppliSync.InstList:
                    CurChaR = AppliSync.InstList[IGS];
                    ggStr1 = CurChaR.Type;
                    ggStr2 = ggStr1.split("_");
                    ggStr3 = ggStr2[0].find("SAct");
                    if ggStr3 != -1 and (ggStr2[1] == "Soldier" or ggStr2[1] == "Captain"):
                        Edist = Vec3(CurChaR.ObjInst.getPos()) - Vec3(self.ObjInst.getPos());
                        Edist[2] = 0;
                        EdistL = Edist.length();
                        if EdistL <= 40 and CurChaR.Dying != 1:
                            InRanG.append(CurChaR);
                    IGS+=1;
                if InRanG != []:
                    LENtrack = {};
                    LenVals = [];
                    UIUE=0;
                    for dexuro in InRanG:
                        cuRup = InRanG[UIUE];
                        Kies = Vec3(cuRup.ObjInst.getPos()) - Vec3(self.ObjInst.getPos());
                        Kies[2]=0;
                        LENtrack[cuRup] = Kies.length();
                        LenVals.append(Kies.length());
                        UIUE+=1;
                    LowEst = min(LenVals);
                    for Key in LENtrack:
                        Val = LENtrack[Key];
                        if Val == LowEst:
                            RanDattk = InRanG.index(Key);
                            break;
                else:
                    RanDattk = -1;
                if RanDattk != -1:
                    self.AttkSkelk = 1;
                    self.TargObj = InRanG[RanDattk];
                    self.EneyPos = Vec3(self.TargObj.ObjInst.getX(), self.TargObj.ObjInst.getY(), 0);
                    self.MoveToPoint();
            self.EneDectCnt = 0;
        elif self.EneDectCnt < 15:
            self.EneDectCnt += 1;
        return task.cont;

    def CloseEnough(self):
        if hasattr(self.TargObj, "SpecificJob") and self.FreeMovSnapped == 0:
            tDist = Vec3(self.TargObj.ObjInst.getPos()) - Vec3(self.ObjInst.getPos());
            tDist[2] = 0;
            LtDist = tDist.length();
            if LtDist <= 9:
                self.MovingToPnt = 0;
                AppliSync.RemoveTravs(self.SurfCol);
                self.NavCheck = 0;
                self.PerfAttk();
            else:
                self.EneyPos = Vec3(self.TargObj.ObjInst.getX(), self.TargObj.ObjInst.getY(), 0);
                self.MoveToPoint();

    def PerfAttk(self):
        self.BodGeom.play("Attk1_Attk1", fromFrame=0, toFrame=49);
        self.BodGeom.setPlayRate(self.AttkSpd, "Attk1_Attk1");
        self.BodGeom.setControlEffect("Walk", 0.0);
        self.BodGeom.setControlEffect("Stand", 0.0);
        self.BodGeom.setControlEffect("Chop", 0.0);
        self.BodGeom.setControlEffect("Attk1_Attk1", 1.0);
        self.BodGeom.setControlEffect("Attk1_Idle", 0.0);
        try:
            taskMgr.remove(self.PerformAttk);
        except:
            pass;
        self.PerformAttk = taskMgr.add(self.AttkEnding, "StrikeSkelk");
    def AttkEnding(self, task):
        Attk1Attk1 = self.BodGeom.getAnimControl("Attk1_Attk1");
        if self.BodGeom.getCurrentFrame() >= 49 or self.BodGeom.getCurrentFrame() == None:
            self.BodGeom.stop();
            self.BodGeom.pose("Attk1_Idle", 0);
            self.BodGeom.setPlayRate(self.AttkIdleSpd, "Attk1_Idle");
            self.BodGeom.setControlEffect("Walk", 0.0);
            self.BodGeom.setControlEffect("Stand", 0.0);
            self.BodGeom.setControlEffect("Chop", 0.0);
            self.BodGeom.setControlEffect("Attk1_Attk1", 0.0);
            self.BodGeom.setControlEffect("Attk1_Idle", 1.0);
            #-
            if self.TargObj != None:
                if hasattr(self.TargObj, "SpecificJob"):
                    if  self.TargObj.Dying != 1 and self.CurrTask == "AttkSkelk":
                        GGLen = Vec3(self.TargObj.ObjInst.getPos()) - Vec3(self.ObjInst.getPos());
                        GGLen[2] = 0;
                        LggLen = GGLen.length();
                        if LggLen <= 9:
                            self.TargObj.TakeDamage(10);
            #-
            self.ReDetectEnemy();
            return task.done;
        return task.cont;

    def ReDetectEnemy(self):
        if self.AttkSkelk == 1 and self.FreeMovSnapped == 0:
            IGS = 0;
            InRanG = [];
            RanDattk = -1;
            for ChaR in AppliSync.InstList:
                CurChaR = AppliSync.InstList[IGS];
                ggStr1 = CurChaR.Type;
                ggStr2 = ggStr1.split("_");
                ggStr3 = ggStr2[0].find("SAct");
                if ggStr3 != -1 and (ggStr2[1] == "Soldier" or ggStr2[1] == "Captain"):
                    Edist = Vec3(CurChaR.ObjInst.getPos()) - Vec3(self.ObjInst.getPos());
                    Edist[2] = 0;
                    EdistL = Edist.length();
                    if EdistL <= 40 and CurChaR.Dying != 1:
                        InRanG.append(CurChaR);
                IGS+=1;
            if InRanG != []:
                LENtrack = {};
                LenVals = [];
                UIUE=0;
                for dexuro in InRanG:
                    cuRup = InRanG[UIUE];
                    Kies = Vec3(cuRup.ObjInst.getPos()) - Vec3(self.ObjInst.getPos());
                    Kies[2]=0;
                    LENtrack[cuRup] = Kies.length();
                    LenVals.append(Kies.length());
                    UIUE+=1;
                LowEst = min(LenVals);
                for Key in LENtrack:
                    Val = LENtrack[Key];
                    if Val == LowEst:
                        RanDattk = InRanG.index(Key);
                        break;
            else:
                RanDattk = -1;
            if RanDattk != -1:
                self.AttkSkelk = 1;
                self.TargObj = InRanG[RanDattk];
                self.EneyPos = Vec3(self.TargObj.ObjInst.getX(), self.TargObj.ObjInst.getY(), 0);
                self.MoveToPoint();
            else:
                self.BodGeom.stop();
                self.BodGeom.pose("Stand", 0);
                self.BodGeom.setPlayRate(self.StandAnimSpd, "Stand");
                self.BodGeom.setControlEffect("Walk", 0.0);
                self.BodGeom.setControlEffect("Stand", 1.0);
                self.BodGeom.setControlEffect("Chop", 0.0);
                self.BodGeom.setControlEffect("Attk1_Attk1", 0.0);
                self.BodGeom.setControlEffect("Attk1_Idle", 0.0);
                AppliSync.RemoveTravs(self.SurfCol);
                self.NavCheck = 0;
                if self.Type == "HAct_Captain":
                    self.CurrTask = "G_Ready";
                elif self.Type == "HAct_Soldier":
                    self.CurrTask = "P_Ready";
                self.MovingToPnt = 0;
                self.TargObj = None;
                self.AttkSkelk = 0;


    def TakeDamage(self, Amnt):
        self.Cur_HP -= Amnt;
        if self.Cur_HP <= 0:
            self.Cur_HP = 0;
            self.Dying = 1;
        if self.Cur_HP > self.Max_HP:
            self.Cur_HP = self.Max_HP;
        if self.Dying == 1:
            DestroyInst.DumpMe(self);



User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby DangerOnTheRanger » Fri May 18, 2012 8:58 pm

Why are you putting semicolons after every line of code? It's not necessary in Python, and it's considered bad style in general.
Free + open-source game development kit: http://openblox.sourceforge.net

My blog: http://dangerontheranger.blogspot.com
User avatar
DangerOnTheRanger
 
Posts: 240
Joined: Fri Aug 27, 2010 4:59 pm

Postby markjacksonguy » Sat May 19, 2012 4:39 am

DangerOnTheRanger wrote:Why are you putting semicolons after every line of code? It's not necessary in Python, and it's considered bad style in general.


Bad style? Depends on who you're talking to. Semis aren't bad style, they are honest. When I code, I like to keep basic rules intact. Sure I don't need the semis, but experience has taught me otherwise.

What happens is, you tend to forget about semis (because you don't use them) and when you actually insert more than one line of code on the same line, you receive an error; an error that could have been avoided if you would have added the semis for clarity sake; and yes, I do have two lines of code on the same line in some places.

As for style... Logic is the only style when it comes to code, man. There are many ways to do the same thing and how one decides to do it... That's style. (not error)
Last edited by markjacksonguy on Sat May 19, 2012 4:49 am, edited 5 times in total.
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Sat May 19, 2012 4:44 am

Just finished adding in the threat data base. Now I have to make enemy detection use it. Once that’s done, I’ll work on the AI building GUI. Nothing going on in the screenshots but code tests.

Code: Select all
Images Removed
Last edited by markjacksonguy on Sun Sep 30, 2012 4:33 am, edited 1 time in total.
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby flavio » Sat May 19, 2012 6:34 am

markjacksonguy wrote:Image

It looks cool! Gratz!
Image - Image
User avatar
flavio
 
Posts: 531
Joined: Fri Apr 16, 2010 12:45 pm
Location: Rome, Italy

Postby Bradamante » Sat May 19, 2012 7:34 am

No, he's right. No semicolons at the end of a line in Python. If you want to break long lines, use a backslash or put expressions in parentheses.

Generally I find your code hard to read. That's not a criticism, just an observation. Sure in the short term you will have no trouble reading your own code, but in the long term even you might. Not even to mention others have to be able to read your code at some point, either additional programmers you bring aboard or people on a forum. Semicolons on the end of lines or unclear variable names to not help readability among Pythonistas.

On a different note I like what I see in this thread. Modelling characters or livestock is not your strength (if this was a SciFi game you could use vehicles for everything, which is a cool design trick), but the buildings, terrain and lighting looks good. Interface is getting there, too. Good job!

I'd recommend some post-processing lighting - I think in the past rdb posted something about SSAO and Manou has his Deferred Shading code going, propably look at that. For dynamic objects then use a blob shadow.

markjacksonguy wrote:
DangerOnTheRanger wrote:Why are you putting semicolons after every line of code? It's not necessary in Python, and it's considered bad style in general.


Bad style? Depends on who you're talking to. Semis aren't bad style, they are honest. When I code, I like to keep basic rules intact. Sure I don't need the semis, but experience has taught me otherwise.

What happens is, you tend to forget about semis (because you don't use them) and when you actually insert more than one line of code on the same line, you receive an error; an error that could have been avoided if you would have added the semis for clarity sake; and yes, I do have two lines of code on the same line in some places.

As for style... Logic is the only style when it comes to code, man. There are many ways to do the same thing and how one decides to do it... That's style. (not error)
iMac (2009), Mac OS X.8.1 - MacBookPro (2007), Mac OS X.8.2
@ YouTube
User avatar
Bradamante
 
Posts: 303
Joined: Tue Nov 25, 2008 10:58 am
Location: Leipzig, Germany

Postby markjacksonguy » Sat May 19, 2012 7:52 am

Bradamante wrote:No, he's right. No semicolons at the end of a line in Python. If you want to break long lines, use a backslash or put expressions in parentheses.

Generally I find your code hard to read. That's not a criticism, just an observation. Sure in the short term you will have no trouble reading your own code, but in the long term even you might. Not even to mention others have to be able to read your code at some point, either additional programmers you bring aboard or people on a forum. Semicolons on the end of lines or unclear variable names to not help readability among Pythonistas.

On a different note I like what I see in this thread. Modelling characters or livestock is not your strength (if this was a SciFi game you could use vehicles for everything, which is a cool design trick), but the buildings, terrain and lighting looks good. Interface is getting there, too. Good job!

I'd recommend some post-processing lighting - I think in the past rdb posted something about SSAO and Manou has his Deferred Shading code going, propably look at that. For dynamic objects then use a blob shadow.

markjacksonguy wrote:
DangerOnTheRanger wrote:Why are you putting semicolons after every line of code? It's not necessary in Python, and it's considered bad style in general.


Bad style? Depends on who you're talking to. Semis aren't bad style, they are honest. When I code, I like to keep basic rules intact. Sure I don't need the semis, but experience has taught me otherwise.

What happens is, you tend to forget about semis (because you don't use them) and when you actually insert more than one line of code on the same line, you receive an error; an error that could have been avoided if you would have added the semis for clarity sake; and yes, I do have two lines of code on the same line in some places.

As for style... Logic is the only style when it comes to code, man. There are many ways to do the same thing and how one decides to do it... That's style. (not error)


Not being funny, but I've been programming for some years now and have had no issues using semis. In fact, I've had more issues not using them.

That's part of my style; using the semis, which is taught early when you're learning programming (and I suck with it :) ). I am glad I use them, because I do insert multiple lines of code on the same line.

As for my code hard to read, of course it is. What you're looking at is my logic; in order to know what's going on you have to get inside my head. When I look at that code, it is crystal clear to me. :)

Not to mention that code is depended on other code written throughout the program.

Don't think my code is structured that way.... It only looks like that because pasting the code to the forums kind of messed up the layout.

One of the sweet things about logic...you can't really teach it in the truest sense, but anyone can learn the basics of programming and write code. That much can be taught. Rather you like semis or not, that's your choice, but if you ever use lines of code on the same line, it might come back to haunt you.

As for my models, they are not complete, so how do you know what my strengths are? That's judging the race before you see the finish line.

And no, my game would not have spaceships flying vehicles or whatever it was you mention because it's not that kind of game. My world and story is unique; it does not involve the things you mentioned.

That's where most rookie game designers mess up.... They come up with a fantasy world, but then create a different world; one that does not fit their story.

The world I'm bringing to life will fit my story and characters. Why tell a story of a world ruled by darkness and then create a beautiful world full of sunshine?

I'm glad I was trained in basic game design (creation/concept) mechanics earlier in life. They truly are the bread and butter for game design success.

You mention shadows... The current shadows are just place holders. You have to write the code first. :D

PS,

I would use Blob shadows with things like trees (and not buildings), but honestly, I will be taking a different approach altogether.

Graphic design is still a long ways off for me. Without perfect, flawless code, you have no game...regardless of visuals. :wink:
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Sat May 19, 2012 8:27 am

flavio wrote:
markjacksonguy wrote:
Code: Select all
Image Removed


It looks cool! Gratz!


Thanks, man. :D

Honestly, the code work is so heavy, I know I'm going to be tired out on this project by the time I'm done with the technical side of things.

I might consider taking several weeks off after I finish coding the entire game and then start working with the visuals.

I can't wait to make those characters finally look like something. :lol:

Of course every good game designer would know that visuals are like the wrapper around a present. It doesn't matter what the wrapper looks like if the present inside is bad. :wink: -words to design by
Last edited by markjacksonguy on Sun Sep 30, 2012 4:34 am, edited 1 time in total.
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Mon May 21, 2012 6:47 am

I have successfully added “Threat” to the enemy detection equation. I am now working on the “AI Building” part of the main menu for Heroes.

Code: Select all
Image Removed


The menu that says “AI Builder” at the top has six sets of three tabs, each a different shade/color. Each set of three tabs equal one ai slot; the slots are in order with the top most set being slot 1, which is the highest priority in the ai tree.

Each tab has a letter to the left of it; S=Skill, R=Requirement, O=Optional. The way I’m going to do this is simple… The “gamer” will be able to left click or right click on each tab, which will cycle through the available choices.

I'm probably going the set the default "basic attack" for each Skill slot, since that is the default when a specific skilled ability is not "slotted".
Last edited by markjacksonguy on Sun Sep 30, 2012 4:34 am, edited 1 time in total.
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby markjacksonguy » Mon May 21, 2012 11:45 am

Code: Select all
Image Removed
Last edited by markjacksonguy on Sun Sep 30, 2012 4:34 am, edited 1 time in total.
User avatar
markjacksonguy
 
Posts: 499
Joined: Wed Sep 28, 2011 4:06 pm

Postby TaeZ » Wed May 23, 2012 3:22 am

Your buildings look really cool. 8) Also, don't be so arrogant.
TaeZ
 
Posts: 56
Joined: Fri Apr 08, 2011 10:25 am

PreviousNext

Return to Showcase

Who is online

Users browsing this forum: No registered users and 0 guests