Aeon of Sands - The Trail - a retro, post-apocalyptic RPG coming 4 Dec. 2018

Show off your games, demos and other (playable) creations.
User avatar
yintercept
Citizen
Posts: 64
Joined: Mon Apr 02, 2018 3:31 pm

Re: Aeon of Sands - The Trail - a retro, post-apocalyptic RPG coming 4 Dec. 2018

Post by yintercept »

I WISH I was that good at doing retro.

What a fantastic advert for LOVE.

Thank you for this Science.

I've been using love this whole time and didn't even realize one of my wishlist items was made with it!
Back in the saddle again.
User avatar
SiENcE
Party member
Posts: 792
Joined: Thu Jul 24, 2008 2:25 pm
Location: Berlin/Germany
Contact:

Re: Aeon of Sands - The Trail - a retro, post-apocalyptic RPG coming 4 Dec. 2018

Post by SiENcE »

Thank you very much for the nice compliment!

And I am always happy that the Löve community is so nice! It's always nice to browse the forum for new stuff, even if I don't have so much time because of the family.
User avatar
astrochili
Prole
Posts: 7
Joined: Sun Jun 17, 2018 8:23 am

Re: Aeon of Sands - The Trail - a retro, post-apocalyptic RPG coming 4 Dec. 2018

Post by astrochili »

I am very inspired by your game. A cool combination of the manner of storytelling, apocalyptic soundcapes, ironic jokes that ruin the fourth wall. I even liked the gameplay, although I had never played such games before. In fact, for me now this is generally the best example of a love2d game in terms of aesthetics, art and product integrity.

Some time has passed since the release of the game. Can you share some figures, analytics, conclusions? Any tips for indie developers?
User avatar
SiENcE
Party member
Posts: 792
Joined: Thu Jul 24, 2008 2:25 pm
Location: Berlin/Germany
Contact:

Re: Aeon of Sands - The Trail - a retro, post-apocalyptic RPG coming 4 Dec. 2018

Post by SiENcE »

astrochili wrote: Tue Aug 06, 2019 11:25 amIn fact, for me now this is generally the best example of a love2d game in terms of aesthetics, art and product integrity.
Hey thanks a lot! I would say there are many more löve games that are worth to get this title :).
astrochili wrote: Tue Aug 06, 2019 11:25 amSome time has passed since the release of the game. Can you share some figures, analytics, conclusions? Any tips for indie developers?
Something i’ve learned, after AoS development (even if i don't like some conclusions):

Making a commercial game (you want to earn money with)
1. Release early to get/feel the feedback. If no one is interested, kill it asap.
2. Make not too much story, it hinders non english players from buying and playing. Also big costs for translation and proofreading!
3. Include lots and nice mechanics, even if they hinder gameplay...people love it :roll:
4. Polish the first part as best you can, and with polish i mean polish and not basics or bug fixing.
5. Make it look and play modern...no one understands retro looking rpgs (people only understand jump&run pixel games :? )
6. Make it fast to play (replay) and snappy...that youtubers get addicted too
7. Collect, Build and Crafting must be included or at least a bit of it :roll:
8. Replayability is a lot more important than a huge long game (it’s also easier to test!)
9. Get a indie publisher asap.! If no one wants you, they are probably right and you should trash your game.
10. Asap. get a Store Page on Steam and let youtubers and twitchers play demo builds, if no one is addicted too....trash your game.
11. (from marco) build a community as soon as possible!! (Not a social site (useless) but either a forum (old) or a discord (now). If you don’t, beside missing a lot of usefulness (direction, testing, even word of mouth) you will fail at indie marketing down the line, cause nobody will be waiting for your game

About figures and analytics i need some more specific question.

i hope this helps :).
Last edited by SiENcE on Wed Aug 14, 2019 1:17 pm, edited 4 times in total.
User avatar
SiENcE
Party member
Posts: 792
Joined: Thu Jul 24, 2008 2:25 pm
Location: Berlin/Germany
Contact:

Re: Aeon of Sands - The Trail - a retro, post-apocalyptic RPG coming 4 Dec. 2018

Post by SiENcE »

In regard to Löve development i have to say:

Teamwork
It's hard to develop a bigger commercial game with Löve, as most freelancers don't know this engine nor they know lua. Normally you want to musician to place and test his sounds in the game/engine himself. You may also want that the artist tests his graphics himself in the engine and the level designer has a nice editor.
Sure you can code all this on your own (like we did) but this takes a lot of time you normally don't have as it costs much more money. If the whole team with coders, artists and musicians know the Löve engine and it's rules...you can go this way.
If not, if you need to work with external freelancers or coders...better choose an engine you all know.

Löve Versioning
We started with Löve 0.7.2 and released it with 0.10.2 (while Löve is already at 11.). To stay compatible, i wrote wrappers from 0.7.2 to 0.8.x to 0.9.2 to 0.10.2 as you don't want to rewrite a lot of code. A long-term compatible version would be nice to have, where known bugs will be fixed.

Testing
Testing is very important...continuous testing of a 20h+ game is hardly possible with 2 people. But you have to!
So I wrote a bot that plays the game over and over again. He plays randomly, only a few puzzles are scripted. By random, because we wanted to test the game in a non-linear way.
Things humans would never do (e.g. open a door 10000 times).
Fortunately the bot is 1000 times faster, so it ends the game in ~40h. If you run the bot on multiple computers, you have a good test bed.

Libraries
Rely on Löve libraries! Do an in-deep research which libraries fit and are still supported. Normally library support is non existent :cry: . So proof you can do this yourself. I released my modifications on my github.
Choose a good, robust and easy Gui library that supports widgets of all kind.
Preferable with an WYSIWYG Editor (I know there is non :( ).

Sound
Sound integration is very basic in Löve.- You can do a lot...but if you work with Musicians they ask for WWISE integration or at least real time mixing or real time integration. Placing and testing sound sources and modifications is needed for a fast workflow. Coding your own system needs a lot of time (we did this, but in the end it was not very professional).

Graphics
Use texture atlases from start. But using them is a slow process for artists as they cannot modify graphics and instantly see the changes in the game. Make use of something like i did in my gametemplate. During development use single textures that you can change fast or on the fly, but define them into an abstract texture atlas. When you do a release, just generate the atlases and you are done without any code change.

CVS and other systems
Use gitlab/github or similar. Also use their ticket-system, board or wiki for task management. For communication use discord or similar. For documents google docs is your friend. You will need lots of excel sheets for balancing and analysis.

Gameplay analysis
For balancing you need lots of data.
We have an WYSIWYG ingame editor. So we choose to not predefined all enemies and items. We placed them and tested gameplay right in the game. But because of over 60+ mazes you needed to balance the game over all mazes. That's why i wrote an lua tool to analyse all mazes, enemies and items in the game. This is exported to CSV and than imported into google docs. There we have scripts running to calculate some important values for us that we need for balancing. All this data is shared to my team member.

Logging
Logging is essential to find bugs in the wild. I used log by rxi and it's great!

Automated builds
Do automated builds of your game from start! Invest some time at start into your infrastructure. It's very important at the end of your development where you don't have time for this. You have to trust your pipeline!

Bugreports
How to receive feedback or bugreports easily? You don't want to run an external bugtracker, you don't want to host a service aso.
So a tip. Create an google forms with timestamp and message.
You can than "Generate a link for form with sample values". Just input some values and click "retrieve link". Just encode your stacktrace into Base64 and attach it as input field to the URL.
It's a URL you can easily fill and call by Löve (

Code: Select all

love.system.openURL
). The Browser opens, Google Forms opens and the form is prefilled. The user can then send it off on his own. The advantage is, that you don't have to deal with ports or firewalls and you have an User agreement.

Url can look like this (userdata is bold):
https://docs.google.com/forms/d/e/xyz/v ... =[b]213123[/b]&entry.192709716=aB7F4&entry.2144508734=123123
The submitted data is put into an excel sheet on google forms you can browse online. So all of your team members can have access to it! You can be also informed via mail when new reports arrive.

I think it's a very cool solution.

---

All this experience is my personal view and depends on several external dependencies. It would be interesting to discuss some points later on with other devs.

All in all it was worth to choose LÖVE. It all depends on your team members and your project scope! So choose wisely which tools you need, you need to use them for a couple of years!

The löve community has been very valuable and priceless.
User avatar
ivan
Party member
Posts: 1911
Joined: Fri Mar 07, 2008 1:39 pm
Contact:

Re: Aeon of Sands - The Trail - a retro, post-apocalyptic RPG coming 4 Dec. 2018

Post by ivan »

A lot of good info on here - well done SiENcE.
I don't think that having a publisher is that important.
Sure there are some really big publishers out there, but a lot of them are not worth your time.

I think the error reports could be handled better, I use Lua socket as follows:

Code: Select all

  local lfs = love.filesystem
  function love.errorhandler(msg)
    local trace = debug.traceback(tostring(msg), 3)
    local report = trace:gsub("\n[^\n]+$", "")
    local build = BUILD_VERSION
    local v1, v2, v3 = love.getVersion()
    local stamp = string.format("%s %s.%s.%s", build, v1, v2, v3)
    report = stamp.."\n"..report
    print("storing report")
    lfs.write("/error.txt", report)
    love.sendreport()
  end
  function love.sendreport()
    local msg = lfs.read("/error.txt")
    if msg then
      print("sending report")
      local url = require("socket.url")
      local ident = lfs.getIdentity()
      local platform = love.system.getOS()
      local subject = url.escape(ident.." "..platform)
      local body = url.escape(msg)
      local query = string.format("subject=%s&body=%s", subject, body)
      local http = require("socket.http")
      local b, c = http.request(URL_TO_PHP_SCRIPT, query)
      if c == 200 then
        print("report sent")
        lfs.remove("/error.txt")
      end
    end
  end
Basically, this sends the error directly to a PHP script that I have on my website.
The PHP script relays the message via email so I get it in my inbox automatically.
This was tricky to get working because my website uses SSL by default.
SSL could be circumvented if you have a static IP address (OR it could be done using SSL in Lua but that's more work).
There is no need to use SSL anyways since the error reports do not contain any personal information.
Another subtle thing is to cache the message to a file - so it catches errors even when the user is offline.
Just make sure to call love.sendreport() every time the game boots up!

I've used a similar library for logging before, but it's unnecessarily really.
Just overwrite your print function to add a timestamp and you're good to go.

Code: Select all

    local _print = print
    function print(s, ...)
      local t = os.clock()
      s = math.floor(t*1000)..":"..tostring(s)
      _print(s, ...)
    end
This technique could be used to dump whatever was printed to a log file too.
Another pro tip is to avoid script caching while in "devmode":

Code: Select all

    -- hot reload
    local _requre = require
    function require(n)
      package.loaded[n] = nil
      return _requre(n)
    end
This allows you to test changes in the Lua code without restarting the game.

And for the automated builds, please check out my lib:
https://github.com/2dengine/love.maker/

Of course, profiling is a must too:
https://github.com/2dengine/profile.lua
Last edited by ivan on Sat Dec 11, 2021 8:22 am, edited 6 times in total.
User avatar
pgimeno
Party member
Posts: 3541
Joined: Sun Oct 18, 2015 2:58 pm

Re: Aeon of Sands - The Trail - a retro, post-apocalyptic RPG coming 4 Dec. 2018

Post by pgimeno »

SiENcE wrote: Mon Aug 12, 2019 10:50 amFortunately the bot is 1000 times faster, so it ends the game in ~40h.
Does your game take 40,000 hours to complete? :shock:
User avatar
ivan
Party member
Posts: 1911
Joined: Fri Mar 07, 2008 1:39 pm
Contact:

Re: Aeon of Sands - The Trail - a retro, post-apocalyptic RPG coming 4 Dec. 2018

Post by ivan »

pgimeno wrote: Mon Aug 12, 2019 11:54 am Does your game take 40,000 hours to complete? :shock:
...or it's possible that his bot makes random decisions or tries every possible input sequence.
User avatar
zorg
Party member
Posts: 3435
Joined: Thu Dec 13, 2012 2:55 pm
Location: Absurdistan, Hungary
Contact:

Re: Aeon of Sands - The Trail - a retro, post-apocalyptic RPG coming 4 Dec. 2018

Post by zorg »

SiENcE wrote: Mon Aug 12, 2019 10:50 am Sound integration is very basic in Löve.- You can do a lot...but if you work with Musicians they ask for WWISE integration or at least real time mixing or real time integration. Placing and testing sound sources and modifications is needed for a fast workflow. Coding your own system needs a lot of time (we did this, but in the end it was not very professional).
Just wanted to chime in quickly re: sound;

Löve's OpenAL-soft library supports a lot of things that wwise does on a somewhat basic level (3D spatial positioning, frequency modification due to velocity (doppler effect), as well as most well-known effects implemented due to EAX being supported that one can use for video game sound design), as well as real-time software mixing using QueueableSources... (Some other things are missing, like sound generators... but those can be implemented in lua, or one can use c libs through the ffi)

I do agree that löve does lack the graphical interface that one could more easily use, but that's because it's a framework; one would need to code their own to both align with the feature-set they want, and to make testing be fast (or someone would need to write a bloated general-use-case lib for it. :monocle:

That said, depends on the type of game and the type of music and the type of musician in the end, i guess. :o: :3
Me and my stuff :3True Neutral Aspirant. Why, yes, i do indeed enjoy sarcastically correcting others when they make the most blatant of spelling mistakes. No bullying or trolling the innocent tho.
User avatar
SiENcE
Party member
Posts: 792
Joined: Thu Jul 24, 2008 2:25 pm
Location: Berlin/Germany
Contact:

Re: Aeon of Sands - The Trail - a retro, post-apocalyptic RPG coming 4 Dec. 2018

Post by SiENcE »

(sorry i‘m on mobile)

@ivan Thanks. Of couse a publisher is not needed, but a lot of work pops up during release that you don’t want to deal with. Store taxing, registrations. Press, previews, reviews aso. All this takes time away from your game and you cannot do it better.
I can tell you more in a postmortem.

The bugreport, yeah i‘ve also had a php solution, but i wanted SSL and a backend that can’t be hacked ;). I don’t trust people and don’t want to put our servers into thier hands ;). So for us this is the perfect solution, even if we use google.

@pigemeno Nope. The bot does nearly all things randomly. Thats why he needs 40h. A player only needs 10-20h.
Stability tests and longterm tests. Also our game has over 400.000 combinations of branches, so it’s not doable by hand.

@zorg You are totally right. Thats why i said, to develop a „commercial game“. We do use 3d soundsources in AoS. It was very hard to integrate, as i didn’t found a game which does this too. AoS is fake 2d, so i had to map the soundsource into 3d space :). It works quite well. I wanted to use EAX, but doing this efficiently you need an ingame editor. Also the musician needs this, as he is no coder. All this costs too much time, no one will notice or pay for.

I‘ve developed a lot of löve games over the years, also in teams. But this was the first commercial. I had to learn the hard way that efficiency and a perfect toolchain is a heavy cost factor.
A framework, even if you know it, is not enough. You need to build a lot of tools, processes and solutions around that costs nearly 1/3 of your time.
Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot] and 13 guests