Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 2014-03-28 in all areas

  1. We have a candidate for the paid programming work, someone on the team who is very very familiar with the code. Someone you all will like very much. However, there are still some issues to work out to make sure they can do it and we're not ready for an official announcement yet on who it is and the details of their work. We appreciate the passion. You don't ever have to apologize for that.
    2 points
  2. "Happy you are wrong this time:" ~ Hephaestion Me too! I totally missed that development. THX for that. (And if leper, Spahbod and sanderd17 agree on that it's as good as in I guess ^^)
    2 points
  3. I didn't try it yet but it should work: http://www.wildfiregames.com/forum/index.php?showtopic=18211#entry284318
    2 points
  4. Concerning waypoints for AIs on maps: Thats a bad idea. Likely the map designer doesn't know that much about AIs in general and he would need far-reaching knowledge abot the player AI that actually uses the waypoints. For random maps it is even worse because the RMS writer will likely know less about the actually generated map then an analysis of a specifically generated map would. Having different AIs available might mean different waypoints are needed fo each of them so it gets worse the more modifiable things get.
    2 points
  5. Please no not yet. We'll let everyone know when we have things finalized or when we are to a point when spreading the word about it is a good thing.
    1 point
  6. Only 2014 I'm 19 and engineer student.
    1 point
  7. Aristeia is based in first Age of empires. I need conversion. Two types, like Age of empires or like SC2 ( not full conversion). (Mind control) Conversion is the act by which a Monk or a Priest can capture a unit or building from an opposing team for use by their team. Many units are more prone to conversion than others, and there are several technologies which can either help or hinder the conversion process. The unique thing about conversion is that a player can gain units over the desired population limit. This makes priests a very strategic and important unit. This how conversion work in age of kings.
    1 point
  8. http://trac.wildfiregames.com/ticket/997 it seems that there is already some kind of a patch for unit conversion. (Long live Sanderd17!)
    1 point
  9. The minimum resolution this game must support is 1024x768. If you have a smaller screen, do you really want to play an RTS? So, I'm not against it. If someone creates a patch for it, it can be committed imo. But I won't invest time in it either, as Pureon is still working on the ui redesign.
    1 point
  10. GENERAL LOWPOLY TIPS These are general tips when working with lowpoly assets, they're no software-specific. -Use unconnected geometry! This is the first and one of the most important tips. I’ve seen in a lot of models that people try to make the asset (smaller or big) all made from one mesh. This approach generates unnecessary geometry and makes the mesh more difficult to handle if you want to make changes. Here’s an example: Here we can see how many faces we’ve saved, and makes the mesh much more simple, which is good for make changes easier if required. -Split faces for hard-edge creases. Sometimes we want to create assets that contains both smooth curves and hard creases. Some 3D software lets you choose specifically which faces you want to set smooth shading and which ones set flat shading. However, in every single 3D software, you can “detach” the faces that you want to create the hard crease, this procedure will make the unconnected faces as hard creases. Left side are totally flat and totally smooth connected faces. Right side is the same smooth object, but with the faces where we want hard creases unconnected (the faces are split) -Double sided faces. 0AD’s engine does not render double-sided faces, if you want them to be shown in the game, you have to duplicate the face, and invert the normal. It is also good to move it a tiny bit, so they do not overlap for easier selection/modification or when baking AO. -Try to avoid Ngons use quads as much as possible. This one is not as important as other tips, but using always quads have more advantages than using Ngons and triangles. The main reason is that Ngons have sometimes unpredictable behaviors when triangulated (needed to export into any game engine) and not all 3D editing software supports them. Ngons, like triangles, doesn’t let you create clean loopcuts between loopfaces, which makes the mesh topology harder to modify/manipulate. -Animation loopcuts. When you are modelling meshes that are going to be animated, you must have in mind where the mesh is going to bend. To be able to maintain volume in the mesh on the points when is going to be deformed, you need to have some minimal geometry. This gif explains it visually: http://wiki.polycount.com/LimbTopology?action=AttachFile&do=get&target=BenMathis_limb_deformations.gif -Fake details with decals/textures Try to avoid geometry using textures to add detail. This can be further enhanced by the use of normalmaps. You can also use single faces, or simple geometry mapped to another part of the texture to use it as “fake” detail: several windows in 0AD’s buildings use a simple quad as a “decal” which removes the need of subdividing the geometry in the wall to make a “connected face” to map it to the window texture. (You can also make windows “insets” in the wall for more detailed windows, if the polycount permits) -Use as much texture space as possible, reuse as much texture space as possible too. This is a common mistake, and it’s one of the most important concepts of lowpoly texturing (wasting texture space). The best example to understand “reuse texture” expression is found in symmetric objects. Using only half of the mesh texture lets you make that texture portion bigger, which means more detail, at the expenses of having the exact same texture in both sides of the mesh. This is used in several things like helmets and… mainly symmetric objects. This is especially important when you are restricted to use fairly small resolution textures (like 0AD). Here are some examples of how to save texture space, increasing texture detail. Using a mirror modifier in your 3D software will make this process easier and automatic. In this example you can see the same asset mapped to different textures but both of them are 256x256. In the top example, there's heavy use of "reusing texture space" since the object is symmetrical in the Y and X axis. The bottom example is the same asset to another texture of 256x256, but each UV island has its unique space in the texture. You can clearly see the loss of detail, but in this case, you can make every face of the asset different/unique. You have to choose which assets/part of the asset are important enough to have its own texture space for unique details. -Add margin to your textures – texture bleeding Try to avoid seams showing up by texture bleeding (surrounding pixels close to the edge of the UV island gets “inside” of the UV and are displayed). You can avoid seams by texture bleeding simply giving some margin colour to your textures, and using a background of similar colour as your textures, which will minimize the seams effect. Here’s an example of texture bleeding making seams noticeable: http://www.ftc-creative.de/uploads/projects/FROG_Shading_01.jpg -Playercolor in textures. Playercolor is the term used to determine the unique colors of each player in a 0AD match. These colours help to differentiate the owner of the units/buildings even if there is other player in the match playing with the same civilization. Playercolor is shown in the parts of the texture that has not full opacity in them. Here’s a good explanation by team member quantumstate of how playercolor works in 0AD. (it’s an extract from this post: http://www.wildfiregames.com/forum/index.php?showtopic=18035) GIMP will work fine for textures as long as you understand what is happening. The issue is that the game does the player colour in an unusual way. What I think you are expecting to happen is to have a background of the player colour with the texture over the top so the player colour shows through in the alpha sections. It works slightly differently though. First with images you need to understand that each pixel in the image has 4 channels. 3 colours (red, green, blue) and the alpha or transparency channel. When you make part of the image transparent you only change the alpha channel, the colour components stay exactly the same. To see this in gimp you can use the layer mask as Enrique mentioned to show the alpha channel as a black and white image. You can disable the layer mask (from the right click menu of the layer) to see what the image looks like without the alpha channel. Now what 0 A.D. does with the player colour to create the final texture: 1. Multiply the texture by the player colour and discard the alpha channel. So if the player colour is white then the image will be left as it was (multiplying by 1 leaves things unchanged). If the player colour is black the whole image will become black, if it is blue then the image will become blueish. You can test the multiply in gimp using layer modes, just create a layer with the player colour and set the mode to multiply. 2. Take the original texture with the alpha channel and place it on top of the new multiplied image. Then the multiplied image will show through in the transparent regions giving the final texture. You can replicate this in gimp to preview what your texture will look like. 1. Open the texture, there should be a single layer. 2. Duplicate the layer. 3. Remove the alpha channel from the bottom layer. (Now you can see the colours "underneath" the transparent sections). 4. Create a new layer and put it in between the two existing layers. 5. Fill the new layer with the player colour (e.g. #0000FF for blue players). 6. Set the mode of the new layer to multiply. Now you should see an image which will look like the final texture in game. So it is important that you are aware of what the image is like "underneath" the transparent areas because it will affect what the texture looks like. This is why layer masks are useful so you can easily disable the transparency and see the colours in the transparent areas. (create the layer mask using the "Transfer layers alpha channel" option).
    1 point
  11. Wow! This even teaching lessons on 3D art in general. Thanks commander.
    1 point
  12. Happy we are in synch, Romulus. Guarding area ist planned as Sander said. Mini-factions are a restricted AI for me (so no building), but could also be made of Gaia if that's desired. I would simply give away negative IDs for now as this is possible since Josh's overserver mode. We could also give it 0 (Gaia). But then we loose control about how many mercenaries have been drawn, so if they get angry or not. Then only Gaia as a whole could get angry and I dislike that (Gaia I see as nature and wish to later make it responsible for catastrophes, e.g. if you kill all plants, then Gaia will tell you something, be assured!). @FeXoR: All your arguments make sense (also those from the post before on page 1). That's also why I don't like waypoints for AIs. They can find what they want themselves. We have to guarantee that, for sure. Happy you are wrong this time: Triggers - With Tutorial. I think hybrid system will give even more depth. And all for the planet and all but wasted.
    1 point
  13. Why not use freelancer.com and just put up projects for specific tasks?
    1 point
  14. Actually I only love the total war series because of the fighting realism in real time battles.
    1 point
  15. Actually it might be even Japanese what I've seen in Google's result list around the hit. I'm not an expert in Asian languages. I wish I had the time to learn one. It would be Burmese, I love the symbols. Yeah, more bots please. I'll check Petra this weekend, seems like Aegis sources have some potential. Don't fear JS! It is such a little dirty language. Once you learned not to use the, ummh, bad parts it is fun. >asynchronous affairs: Have you found the entrance to callback hell? Btw, I've solved the resource flow math, it is just a ringbuffer and a simple linear regression, very cute.
    1 point
  16. http://www.wondersandmarvels.com/2013/11/a-giant-roman-emperor-maximinus.html In AD 235 a giant became the most powerful man in the Roman Empire. Maximinus of Thrace (Bulgaria) was a simple shepherd when his impressive size and strength attracted the attention of the Roman emperor in AD 202. Maximinus wrestled 16 of the emperor’s burliest soldiers. Then, only slightly winded, he raced the emperor’s horse and went on to overcome 7 more hefty legionnaires. The Thracian colossus was inducted into the army on the spot. Maximinus rose through the ranks, proving himself such a beloved leader that he was given supreme command of the imperial army. In AD 235 the army and the Senate proclaimed him Emperor of Rome. Ancient Roman writers claimed that Maximinus Thrax stood over 8 feet tall. His sandals were said to be twice the size of regular army issue. He wore his wife’s bracelet as a thumb ring. It was said he devoured 40 pounds of meat and 18 bottles of wine at each meal. They claimed he crushed rocks in his fists, out-pulled a team of horses, and knocked out a mule with one punch. These are all exaggerations, of course. Unless his skeleton is discovered someday in a coffin, his exact size remains unknown. But the detailed descriptions of his appearance and portrait busts suggest that the huge Bulgarian probably suffered from a form of acromegaly. Of “frightening appearance and colossal size,” he displayed a prominent forehead, large nose, and lantern jaw, typical symptoms of pituitary gland overproduction of growth hormones.
    1 point
  17. I am back again now with article reviews. Currently I intend to point out problems with the current articles to show the needs and hope to with time adjust them. For the moment I have looked into the Athenian articles. History Articles Still Needed Athens:Prodomos: Too generalTrireme: Too longLithobolos: Simply explains the mechanics. Compare to Oxybeles.Epibates Marine: No ArticleThemistocles: Alter "whom" to "who" in first sentence. Further alterations could be done to improve this.Pericles: Too short. An article was written by me that should fix that.Iphicrates: No articleOikos: Too general for Athenians.Agros: Olive growing is a form of agriculture.Apotheke: Too self explanatoryOutpost: Again too self-explanatory and not relevantPalisade: Self-explanatoryLimen: Focus more on AthensKhalkeion: Does not specifically inform about the metallurgy in AthensPyrgos: Self-explanatoryPylai: "pierced" is not a very good description in the first sentence. Perhaps "dotted?"Theatron: Refer to the theaters as Athenian, not Greek.Parthenon: No articleSilver Owls: Refer to the coin as "obol," the proper title.Iphicratean Reforms: No article
    1 point
  18. Which is what I'm trying to say. Still we are creating hooks inside the simulation code. I never said that we shouldn't have a trigger component. I just said that we need the hooks. Also, OnOwnershipChanged is called in a variety of occasions, ranging from entity creation to death. Are these situations distinguishable from each other? One of the most important parts of the triggers is the "condition" part. For example, we shouldn't have an event named "OnCivCenterCreated". Rather, we should have something like "OnEntityCreated", and a condition block for any condition checks (Is it a civic center? is it owned by player 2? etc.). If not, we are going to create hundreds of helper functions and still lack the flexibility. Also, we should make sure the map maker is able to use his own functions if he wants to do something not present in the helpers. I have ay idea about how to implement the conditions in the approach you are suggesting. If they can define the function that is called by the trigger themselves, they'd be able to merge the "condition" and "action" parts (The first code snippet). But in general we could make it like the second code snippet: //In the map's trigger part:var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);cmpTrigger.OnEntityCreated(MyOwnFunction);MyOwnFunction = function(data){ if (something) //do the checks yourself { //actions, including the ones that can be accessed using the helpers }}...//In trigger.js:cmpTrigger.OnEntityCreated(action){ //it listens to messages as you suggest or is directly called by the simulation code (for eg. in builder.js) //in any way, we get two entities: the one that was created and the creator (building and builder, trained unit and the barracks, etc.) //and we call the action action({"createdEntity": entity, "creatorEntity": creator});}//In the map's trigger part:var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);cmpTrigger.OnEntityCreated(AHelperFunction, AConditionFunction, otherData);Again, it would limit the flexibility, but still it is easy to understand.
    1 point
  19. Oh I was wrong, there's no problem with Atlas, the scrips are saved just fine. Also, the triggers component would be able to listen to many existing messages (player defeated, ownership changed, entity created/removed) without touching other parts of the simulation code. For some triggers that can't be caught by existing messages, you could still have other components (like the promotion component) call a function in the triggers component to execute all registered triggers that should be handled. So in the map, you'd have some simple functions as OnCivCenterCreated(SendResouces, {wood: 100});Then, the global helper functions look like this: var OnCivCenterCreated = function(action, actionData){ var cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger); var ccAction = function(actionData, msg) { // check if the entity in the msg is a CC // check the owner in the cc // execute the action for that owner } cmpTrigger.RegisterTrigger ({trigger:"OnOwnershipChanged", action: ccAction, actionData: actionData})};var SendResources = function(actionData, msg){ // get player defined in the message // send player the resources defined in the actionData};And the Trigger component just Listens to the OnOwnershipChanged message, and executes the ccAction function with the msg and the action data passed on.
    1 point
×
×
  • Create New...