Page 1 of 6 123 ... LastLast
Results 1 to 10 of 53

Thread: Luna Game Library - Simple & Elegant Game Programming

  1. #1

    Luna Game Library - Simple & Elegant Game Programming


    Luna Game Library - Simple & Elegant Game Programming

    DOWNLOAD (2017.2.Alpha, 57.3MB - 2017/11/05)

    Luna Game Library™ (LGL) is a 2D game library for PC's running Microsoft Windows® and uses Direct3D® for hardware accelerated rendering. It's robust, designed for easy use and suitable for making all types of 2D games and other graphic simulations.

    You access the features from a simple and intuitive procedural API (Luna.API) to allow you to rapidly and efficiently develop your graphics simulations. There is support for buffers, textures, sprites, sound, archives, tweeting, IAP, databases, remote highscores, video playback and much more.

    You can also use the thin, object oriented framework (Luna.Framework) to manage your game projects in a more structured, oop manner. You can define your game in terms of actors, where these actors live and are managed on an actor list. These actors can interact by sending messages and do collisions. All of this can be encapsulated into an application using the game class.

    - Made in Delphi, for Delphi developers
    - Procedural low-level access plus higher level thin oop framework.
    - Uses SDL2 2D hardware rendering.
    - Uses 32bit surfaces and textures.
    - Free scaling, rotation, alpha blending and other special effects.
    - Windowed and fullscreen desktop modes.
    - Frame based timing support.
    - Memory mapped buffer support
    - Zip archive support (resourced loaded from archive or file system)
    - TrueType font support
    - Graphic primitives (lines, circles, rects, points).
    - Advanced polygon rendering (scale, rotate, control line segment visibility).
    - Advanced sprite management.
    - Polypoint collision system for fast precise collision detection.
    - Mouse and keyboard input management.
    - Unified audio system with support for WAV | MP3 | MID | OGG | MOD | IT | S3M | XM music formats.
    - Comprehensive math routines (vectors, angles, line intersection, clipping).
    - Log file support.
    - SQL database support (MySQL local & remote | SQLite local only).
    - High-level support for Entities.
    - Networking (reliable UDP) with support for object persistence.
    - Tweet (with media) directly to a twitter account
    - IAP support (in-app purchase using
    - Includes LunaArc, an archive utility for making compressed zip archives for use in your game.
    Last edited by drezgames; 05-11-2017 at 11:26 PM.

  2. #2
    Looks interesting (reminds me a bit of Pulsar2D ). Hope to see some live demos soon. According to your logo, do you plan to integrate Lua support?
    Last edited by Cybermonkey; 17-04-2017 at 08:35 AM.
    Best regards,

    Pulsar2D framework:

  3. #3
    Sup bro. How have you been? Hope all is well. Thanks. Yea, I forgot to mention (sorry about that) was also inspired by your projects as well. I will be working on examples and things this week. Oh, hehe, in the very beginning I had the idea of Lua integration thus the name/logo. Delphi starter is now free so it became less of a priority. Maybe at some point I may or if someone does it first.

  4. #4
    Thanks, I am fine (again...). Anyway, I am also still interested in your pascal wrapper for raylib.
    Best regards,

    Pulsar2D framework:

  5. #5
    Oh yea, sorry I forgot. See your PM.

  6. #6
    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:
    if FrameSpeed(mytimer, 15) then
    - 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...

  7. #7
    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.

  8. #8
    I finally got website up.

    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.

  9. #9
    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 05:28 PM.

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

    // 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.

Page 1 of 6 123 ... LastLast

Tags for this Thread


Posting Permissions

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