Jump to content

Flexman

Members
  • Posts

    916
  • Joined

  • Last visited

Posts posted by Flexman

  1. For helicopter dusting effects we had to rotate the emitter rapidly to get a radius, there's only so many kinds of effects you can get the LE system to do. It's functional but primitive.

     

    BTW Daimour I was inspired by your video to add extra debris effects to our explosions. For which I thank you.

  2. Bribes are good, for the record I accept paypal or brown paper packets behind the water-tank, third stall, gents toilets, Leeds City station.

     

    Thing about "brainstorming" is nothing is wrong. Everything and anything goes. Pretty much what I heard about the gents toilets at Leeds City station.

  3. I'm just happy to throw out functions for whatever is asked (within reasonable time constraints). Happy for Rick to take point, he's got a good head on what's reasonable in scope. If it's a secret ballot then pretend I didn't write that.

  4. Well Roland, thanks to Facebook and Google keeping secrets isn't a problem any more. Even if their data on you is wrong it's the new improved truth :) Oh brave new world.

     

    I was thinking about the whole genre thing, every "man and his dog" (see what I did there? movie reference?) might have a different take on what genre.

     

    Being an old film buff I was thinking about giant ants. And really zombies, ants, giant blobs. If you build the game so it can be divorced from content, so a pak loads in the zombies, audio, weapon, video post effects such as contrast, saturation etc. then you can have the same game with a variety of "worst case scenario" adventures. Which is actually a good name for a survival game, "Worst Case Scenario", quick trademark WCS (which could also mean Weapon Control System).

     

    I think I'd love to see 50ft giant screeching ants towering over Smalltown USA in mono, then zombies, then 50s style flying saucers. Or even a "Find the Fridge" game where you have a hide and seek (hot and cold scanner) to find the lead lined fridge before the nearby atomic test bomb is detonated.

     

    Ah possibilities.

     

    Don't mind me. I just love old films.

    • Upvote 2
  5. How about some small and simple to get the hang of the workflow? Maintaining the pace in a long project is hard, really really hard, don't dismiss it, it's on a par with swimming the English channel hard. That's the level of dedication you'll have to face on non-trivial projects.

     

    Please see the following "State the obvious" chart

     

    Keep it simple:

    Simple = greater chance of completion

    Completion = enjoyable <- You want to be here

    Non-completion = disappointing.
    • Upvote 1
  6. semi real-time is better performance wise. Just render one side of the cube each frame. After 6 frames you've done the whole thing. If you make it small enough and ignore shadows and lighting the performance hit is small. And you don't have to render all the renderables, so to speak.

     

    All the functions to do this are already present, it just requires some assembly. Someone posted something in the gallery a while back.

  7. I have plenty of genuine photos from the 70s that look like that, I spent good money on a scanner to clean them up and make them look better. Funny old world.

     

    When the news that an Android version had been released some of the more memorable comments from Apple users were, "Great, now I can see what poor people eat!". Some people come with brain filters, some people don't.

    • Upvote 2
  8. Yeah you can probably get away with hiding the mesh but if that doesn't work there's a material "invisible.mat" (and also a frag shader which discards all pixels). Set the object to use this and that will have the desired effect.

  9. Standard LUA library calls.

     

    math.random() -- generates float between 0 and 1

    math.random(high) -- generates int 1 to high

    math.random(low,high) -- generates int value low to high

     

    and might want to use...

    math.randomseed( os.time() ) -- seed for number generator

     

    You can look these up (and more) in math section of the LUA documentation which is available at LUA.ORG

    • Upvote 1
  10. Buoyancy to match wave motion was why I was asking about calculating amplitude and normal for a given point in his video showcase. If you can match two points approx to match the mean wave height you can at least make it look convincing.

     

    Imagine a Zebra crossing (road markings with evenly spaced stripes) and you throw a number of sticks (importantly of the same length as the gap between stripes) to land randomly, there's a common distribution pattern of sticks with one end on a stripe and another on no-stripe. I forget the name for this but you mathematical types should recognise it. I saw Johnny Ball demonstrate in a studio once. But I would think the same thing applies to a long boat and a wave of known frequency, since your models and setup of the waves are known values a little bit of fudging could make it look convincing for little effort.

     

    And another thumbs up on the progress.

  11. I don't have a thought, just a sound... *ugh*

     

    It shouldn't matter, a game is a game and whatever works for you then go for it. You can script things in LUA in Unity easily enough but the whole system is built around plugging things together. In LE2 it was a sliding goal post which is still awkward to use (get an object reference wrong and the editor will EXCEPTION quit on you). It's hideous to work with for anything but simple things.

     

    This will change in LE3 as you know already. We're promised single step debugging loveliness which is the bare minimum you'll need but don't have now.

     

    As a language it's flexibility can't be beat. Loose type casting, everything as an object. I wouldn't use it for a full game unless it was a simple one. As you say, current implementation is awkward. But it has its uses.

     

    I tend to use it for entity level effects and static animations. Not much more but it's pretty good for that.

  12. As an aside, when building an FX system for CombatHelo we used SendMessage(....) which can take a delay in microseconds as a parameter. The FX system uses a dummy entity in the scene that works as a mediator (if you know your design patterns).

     

    It creates and removes FX objects which might include emitters, sounds, lights, even structure collapse.

     

    This example code is part of the structure collapse update method, it's fired when the building object has reached the end of collapsing motion. The message id EFFECT_REMOVE_ENTITY is sent to to the mediator to remove itself after 20000 ms which is enough time for the audio and dust effects to dissipate. Typically the building is replaced with a destroyed version (or pile of rubble) but we don't want the original model too.

     

      game.scene.SendFXMessage(TEntity(fxEntity), EFFECT_REMOVE_ENTITY, fxEntity.position, 0, 0, TEntity(fxEntity), 20000) ;
    

     

    A mediator approach lets you create compound effects made from your own pool of effect code to make many variations. My code ended up being large due to having lots of extended classes to deal with specific kinds of objects. Not just for explosions but also ambient audio effects, triggers and a bunch of other things I need in my game.

     

    What it can't do is jump around, once it's been sent to the message queue you can't get at it till it plays.

    • Upvote 1
  13. I think if you can say you took measures to encrypt content to protect it then you're covered. That's really what's important. I created software for Wal-Mart used in legal cases which was all about liability and taking reasonable steps; sweeping vegetable aisles every 20 mins, barrier maintenance, safe locking, POS point of sale cleaning, the list of things you must do daily runs into the thousands. So long as you've done what can be demonstrably be reasonably done and complied with the license requirement you're good even if content is still ripped.

  14. We got bitten by a reputable site which were selling models submitted by someone who ripped them from an EA game, I wonder if it was the same person that got kicked from Turbosquid. The vendor did the decent thing by alerting customers when it was discovered, they later offered replacements. We had to rebuild the models from scratch ourselves so they matched the same footprint, just to avoid readjusting everything in the scene. That would have been a lot of work.

     

    As gamecreator says re-sellers can get duped too. If something looks too good to be true, well worth taking a second look (if you're planning to distribute in any way).

  15. OK, thanks for the advice so far. I got it loading how I want and up to 8 scripts hooking an Update() function.

     

    I need a little more help here to do the next bit. This is the first time I've tried to work with multiple scripts and need a little guidance and hand-holding from you chaps with experience. A little knowledge is a dangerous thing here, I'm more comfortable using simple data structures and flags rather than VMs to do this sort of thing. So anyway....

     

     

    Using LEs single LUA state to load in quest scripts (up to a max of 8). An example of such a script with an init, quit and update....

     

    require("Scripts/hooks")
    local s = "mission_test.lua"
    
    function MissionInit(id)
      s = "INIT mission_test.lua " .. id
    end
    
    function MissionEnd()
      RemoveHook("UpdateWorld",MissionUpdate)
      s = Nil
    end
    
    function MissionUpdate()
      print ("mission update called..." .. s)
    end
    
    AddHook("UpdateWorld",MissionUpdate)
    

     

    Here's what I'm not to clear on. When I load and run a script I can call a function in it. But only the function in the last loaded script. How can I change the context of a specific script.

     

    e.g A call to "MissionEnd()" will always execute the function in the last loaded script. What if I want to call it in the first loaded script?

     

    See what I mean by basic questions here? I wish we could hang-out in a virtual class-room to cover this stuff sometimes.

     

     

    Note: I have avoided using events to keep things simple for now.

  16. Supposing you want to implement a quest system where each quest is a lua script.

     

    quest_101.lua

    quest_102.lua

    quest_103.lua

    ...

     

    In each quest script I want to call function "Update()" in a chain. Similar to how TModel LUA scripts are processed.

     

    Is it good practice to create a virtual machine for each script? Or use one VM and call the "Update()" function in each script? And if not, what is the correct way to index them and call the same function in each script?

     

     

    example source

    Local vm:Byte Ptr = luaL_newstate()
    luaL_openlibs(vm)
    lua_dofile(vm, AbstractPath("abstract::quest_101.lua"))
    lua_getfield(vm, LUA_GLOBALSINDEX, "Update")
    lua_pushinteger(vm, 0)
    lua_call(vm,1,0)
    

     

     

    script "quest_101.lua"

    function Update(s)
      -- mission update code here
    end
    

×
×
  • Create New...