Jump to content
XCOMUFO & Xenocide

Garo

Xenocide Programming Department
  • Posts

    122
  • Joined

  • Last visited

About Garo

Contact Methods

  • Website URL
    http://
  • ICQ
    312547119

Garo's Achievements

Captain

Captain (4/6)

0

Reputation

  1. Hi all and nice to see that some other old guys (like you, guyver6 ) are checkin in time to time. Today I looked upon the project site and I was amaged with the youtube video. You guys have really done some serious work with the XNA branch. I even checkouted the svn again and maybe I'll try to compile it tomorrow if I don't have anything other to do. Cya guys around! - Garo
  2. I remember seeing many games which uses something like this, but they all simply crossfade music from one to another, which is not what I would like to do. As traditionally songs have a beginning and an end and a constant path between them, my idea allows songs to have multiple beginnings, endings and most important, multiple paths between them which can change dynamically according to the game. I don't know what the FMOD Ex Sound Designer allows. It even could allow to do something like this without using tracker music formats. I'm not sure about it though, so I'd like to hear opinions from somebody who have used the FMOD Sound Designer. - Garo
  3. Imagine the Geoscape. You watch the globe spinning and you hear a slow ambient tune at the background. Then you see an UFO coming. The music changes bit into a more faster and a bit agressive. You launch your interceptor and when it catches the ufo, the interception window is popped up and the music changes dramatically mood into a fast rock/metal interception tune. After the ufo is destroyed, the music slows down back to the basic ambient tune into the background. Traditionally, the different musics for those different "states" are changed simply by crossfading (fading first tune down and fading second tune up). This is quite boring and in many cases, it doesn't sound very good. I have long time ago had an idea how these music state changes could be done seamlessy without a need for any crossfading, but that the song could actually envolve into another song. Imagine a simphony with a slow start with just some strings and which quickly envolves into a mass orchestra piece. Before I represent you the idea, I'll quickly describe what tracker music is. The trick is the following: Create a simple statechart which contains all different music styles needed in one scene. Geoscape would be a good example of "one scene". The geoscape would contain the following different states (note that my ideas WHAT the music of those states are just my own examples and not to be taken seriously): 1) No UFO's on the globe (some slow ambient music, maybe) 2) Ufo(s) are flying on the globe (a bit faster ambient music with a bit of agressivity) 3) Interception of an ufo (some fast and agressive rock/heavy quitar tune) This statechart would contain the following state changes: - 1 -> 2 - 2 -> 1 - 2 -> 3 - 3 -> 2 Now compose all those three different music tunes into one tracker module file (like .XM or .IT). Then also compose (at least one pattern long) translation patterns, one for each state change (like a pattern which translates music (1) into music (2)) Then the music engine can be programmed so, that when it's (for example) playing tune 1 (the ambient background tune), and it receiveres an event which tells that there's now an ufo on the globe, the music engine schedules the translation pattern 1 -> 2 to be the next pattern after the current one. This means that the current song is stopped after the current pattern and the translation patter is played immediatelly after the current one. After the translation pattern is done, the music engine schedules the patterns of tune number 2 into the master pattern playlist. Pros: - No need for simple crossfading to switch between two different music - A good (as the translation from one to another has been composed into the beginning to be a part of the song) switch from one song to another Cons: - Need to compose music into tracker module format (for example, .XM or .IT) - Additional work to create the translation patterns and statecharts - Additional work as it needs to think a bit how the individual sounds are arranged into the tracker channels to allow easy writing of translation patterns. Please tell what do you think or ask for details if you doubt that I couldn't explain myself clearly enough. Technically I believe that we can use FMOD Ex to support all this with minimal additional coding. - Garo
  4. I like all of that and you also produced a good document what needs to be done and even provided us reasonable placeholders. Nice job! =) - Garo
  5. edit: removed link for now. - Garo
  6. Yep. Besides I'd still like to heard a word from guyver6, the code needs a bit refactoring but in my opinion, we can release at monday or tuesday =) - Garo
  7. All remaining storylines are now completed! This means that iter2 is logically done!
  8. Currently implemented storylines: * UFO is randomly spawned over the Globe * Player has one Base randomly placed on the Globe * UFO move straight to the randomly choosen destination, then is destroyed * Only one UFO on the globe * Player can rotate and zoom the Globe * The Sun rotates around the Globe * Game time handling - Garo =)
  9. I'm pretty sure that it isn't based just on that. Player can order interceptor to patrol at a certain point and I'm quite confident that the patrol (as the craft doesn't move) spends less fuel than chasing an interceptor with afterburners on. We could, however, solve this by taking the current velocity into account when calculating fuel consuption: If the velocity was 100% when the tick rolls, the fuel amount is decreased (lets say) by x. If the velocity was 50%, the fuel is decreased 0.6x. If the velocity was zero (the craft patrols over a point), the fuel is decreased by 0.2x. I just took those numbers randomly, but you get the point The other thing which I'm worried, is that if an ufo does evasive manoveurs, can we calculate the affect of these movements acurately enough when using faster gamespeeds (like 12h/tick or 1h/tick) so, that the interception of this ufo at faster gamespeeds are equally hard/easy than with slover gamespeeds. - Garo
  10. Those both are interesting questions and we haven't done anything for them... yet. In the current iteration, the ships will simply set to target the current position of the craft which is to be followed. This needs that the interceptor has greater speed than the ufo which it will chase. This is enough for now, because we just want to see a ship chasing an UFO. In the future iterations we will take into account ships ominal properties, like max speed, agility, fuel consuption and we'll also add more complex and better "autopilots" for the ships, which will allow the crafts to do complex manoveurs etc. And oh, it's nice to see that old members are still following our progress. If you have some spare time, why not joun us into the IRC channel #xenocide at freenode? =) - Garo
  11. Sounds great, had to check your work out as I noticed this thread - Garo
  12. Wanna see some more cool stuff? class ConnectSenderTestActor(model.actor.Actor): def Action_Act(self, other): print "ConnectSenderTestActor Acted!" self.acted = True class ConnectListenerTestActor(model.actor.Actor): def Action_OnAct(self, other): other = model.World.getActor(other) print "ConnectListenerTestActor: %s Acted!" % other.name self.acted = True class World_TestCase(unittest.TestCase): def test_connectFromToWorks(self): sender = ConnectSenderTestActor("sender actor") listener = ConnectListenerTestActor("listener actor") model.World.connect(sender, "Act", listener, "OnAct") sender.Action_Act(None) self.assertEqual(sender.acted, True) self.assertEqual(listener.acted, True) This is the Action feature. Actors can have Actions. Each action can be connected to another action (or many actions). This can be done by the Actor itself, or be done without the Actor newer knowing it (connections could be loaded from XML files which are created by some kind of World Editor, for example) Example: BaseActor has addCraft, which is used to bind a CraftActor to the base. the addCraft connects the craft destroyed -action to base own OnCraftDestroyed, which then removes the craft from the base craft list. This way the base can always know if one if its crafts are destroyed on action and then remove the craft from it. What do you guys think? - Garo
  13. Also get an IRC client, connect to server chat.freenode.net (or select a better server from http://freenode.net/irc_servers.shtml ) and join channel #xenocide That will be your first task =) - Garo
  14. After two hours of coding, I have the following test which runs fine: class CraftTestActor(model.craftactor.CraftActor): def main(self): self.setTarget(model.Geoposition(1.5, 1.5)) self.setVelocity(500) self.waitUntilTargetReached() This is the actor and here is the code which launches this actor: craft = CraftTestActor("Test Craft") craft.setPosition(model.Geoposition(0, 0)) craft.start() for i in xrange(50): snake.pyos.watchdog() craft.tick() # Craft current distance to target, which is coordinates [1.5, 1.5] d = craft.getPosition().getDistance(model.Geoposition(1.5, 1.5)) assert d < 10 And even better, I can pickle the CraftTestActor (which contains a Geoposition class writed with C++) in the middle and unpickle it and it works just like nothing ever happend! - Garo
×
×
  • Create New...