Page 1 of 2 12 LastLast
Results 1 to 10 of 53

Thread: Luna Game Library - Simple & Elegant Game Programming

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    New features added since last post:
    - Further refined the highscore code
    - Local and remote database support (local=SQLite3, remote=MySQL, unified as Database and DatabaseTable objecgts)
    - Polygon object
    - Polypoint auto-trace (can trace a sprite and apply a polygon around it. This will be used for fast polypoint collision detection)
    - Sprite object (can be organized as pages (texture) and images can be defined in grid or rect format)
    - FrameSpeed can be use to implement multiple timers in your project. For example you have the simulation running at 30 fps, but you want your sprite animation to update at 15 fps, you can do:
    Code:
    if FrameSpeed(mytimer, 15) then
    begin
    ...
    end;
    - FastText can now define a range of glyphs. For example 32-127, 'tm', '(c)' are automatically defined by default. Since the unicode range is HUGE i'm using a sparse array to manage the glyphs range. It's very efficient.

    Planned features to come:
    - Entity object (instance of a sprite, has position, can do collision, etc)
    - Actor object (instance of an entity, can live on a scene object in the game world, etc)
    - State machine for actors
    - More...

  2. #2
    I'm using frame-based timing in the library. I wanted to have an efficient way to do timing where rendering and updating where decoupled and your simulation is controlled as much as possible. Ideally if your game loop can run as fast as possible while your simulation ran at a known and predictable would give your the overall best visual experience.

    I expose two main routines for this: SetTargetFrameRate and GetDeltaTime. Call SetTargetFrameRate to 30, 60 fps for example and then when you call GetDeltaTime it will return a value that when you multiply by your object's speed, will try and keep them moving at the target frame rate. For example, if your game loop speed was 60 fps, GetDeltaTime would return 0.5. The timing code automatically handles and smooths out large delta time values and prevents large spikes. The end result is silky smooth motion where updating and rendering are decoupled. You get the best possible over visuals while keeping your simulation running at a known and predictable rate.

    Physics, on the other hand needs to run at fixed rates. When I eventually get around to adding physics support I will then also add support for this also.
    Last edited by drezgames; 23-04-2017 at 03:34 PM.

  3. #3
    I finally got website up. https://2drealms.com/.

    Progress continues... adding edities, scene, statemachine etc. I was looking at some very old code today and notice this certain section was just wrong. Doh! The way it was implemented in the old code base I never had any apparent problems. Hehe. But when I came across it, I could instantly see it was not correct. Made the correction and it works as expected in the new code base. Amazing. I've not looked at some of this code in 10-15 years and I am able to go right in and work with it.

  4. #4
    Got polypoint collision detection in now. Did some test last night and I'm confident that I can get IAP (in-app purchase) integrated. For the moment, the only payment gateway will be Strip. Strip is super easy to setup and configure without all the troubles that you go through with most gateways. At the moment the fees are (2.9% + 0.30) per transaction. The process payment call will be asynchronous, calling a user defined event routine with status updates. Cool, excited to see how this works out.
    Last edited by drezgames; 04-11-2017 at 06:28 PM.

  5. #5
    Ok, IAP is now in. I got it down to these minimal routines:


    Code:
    //---------------------------------------------------------------------------
    // In App Purchase
    //---------------------------------------------------------------------------
    procedure IAPSale(
      // processing
      aAPIKey    : PChar;
      aEvent     : TIAPEvent;
    
      // transaction
      aTransactionAmount: PChar;
      aTransactionDesc  : PChar;
    
      // credit card
      aCardCVVData      : PChar;
      aCardExpMonth     : Integer;
      aCardExpYear      : Integer;
      aCardNumber       : PChar;
    
      // customer
      aCustomerFirstName: PChar;
      aCustomerLastName : PChar;
      aCustomerAddress  : PChar;
      aCustomerCity     : PChar;
      aCustomerState    : PChar;
      aCustomerZip      : PChar;
      aCustomerCountry  : Pchar;
      aCustomerEmail    : PChar;
      aCustomerPhone    : PChar
      ); stdcall; external LUNA_DLL;
    function  GetIAPResponseApproved: Boolean; stdcall; external LUNA_DLL;
    function  GetIAPResponseApprovalCode: PChar; stdcall; external LUNA_DLL;
    function  GetIAPResponseAVSResult: PChar; stdcall; external LUNA_DLL;
    function  GetIAPResponseCode: PChar; stdcall; external LUNA_DLL;
    function  GetIAPResponseCVVResult: PChar; stdcall; external LUNA_DLL;
    function  GetIAPResponseInvoiceNumber: PChar; stdcall; external LUNA_DLL;
    function  GetIAPResponseText: PChar; stdcall; external LUNA_DLL;
    function  GetIAPResponseTransactionId: PChar; stdcall; external LUNA_DLL;
    When you call IAPSale, the operation will be pushed into a background thread. When completed the aEvent routine will be called and you can then check the results with the GetIAPResponseXXX routines. If the transaction was approved GetIAPResponseApproved will be true and the transaction id (which is needed for refunds etc) will be returned. When testing, simply use your test API key you get from stripe. For a real purchase use the live key.

    Since you also have database support, you can store your data on a remote database, on the local filesystem, encrypted, etc., as simple or elaborate as you wish.
    Last edited by drezgames; 30-04-2017 at 10:19 PM.

  6. #6
    First public release (link will always be at top in 1st post)

    It would be nice to get some feedback. Trying to get an idea of performance and how it works across different configurations. Comments/suggestions welcome.

    Some feature in this release include:
    - Frame-base timing
    - Password protected archive (standard zip files)
    - Vector math routines
    - Memory mapped buffer object (uses file mapping so can be very large, the OS will manage swapping in/out of memory, you just access the pointer or the Read/Write methods of object)
    - Kbd & mouse support
    - Graphic primitives, viewports, polygons and textures
    - True-type font support.
    - Sprite support (can be organized into pages and groups) and has support for polypoint collision
    - Entity (sprite with position and orientation, collision detection)
    - Music and sound playback
    - Video playback (.mpg only at this time)
    - Screenshake support
    - Screenshot system (can specify folder and base filename)
    - Basic networking (fast UDP with reliable packets)
    - Database support (SQLite and MySQL)
    - Highscore system (or you can create your own with the database support)
    - Twitter and IAP support
    - 3D starfield
    - Much more to come...
    Last edited by drezgames; 31-05-2017 at 12:50 AM.

  7. #7
    I now got devblog, forums, project tracker and downloads setup on the website.

  8. #8
    Quote Originally Posted by piradyne View Post
    I now got devblog, forums, project tracker and downloads setup on the website.
    Tried to download. I't is only available to registered users. Tried to register few times and got "you did not pass security check" message

  9. #9
    Very cool. Nice demo project. Out of curiousity though, what exactly made you go with DirectX 9 for new development in 2017?

  10. #10
    @Akira13, thanks. Ahh yea, that is the version of the chuck of rendering code that I pulled over from an another project. It's works and well tested so I stuck it in so that I can get the new API to a stable point. Then I can go back later and swap out/upgrade etc.

Page 1 of 2 12 LastLast

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •