The morning was chilly.
Most knights were still sleeping and the few silhouettes moving in the morning fog were those of the squires, preparing the hastily put up tent village for their masters.
The last week of the big Telebrian spring tournament, this year held in the kingdom of Namaria, had begun. Many of the knights, who had lost their challenges in the previous days, and some of the nobles had already departed.

So far, Erion's master, Sir Jordovon, had prevailed against all of his opponents. But now, the other squires and knights where whispering to each other. Because yesterday during the festivities, Jordovon succumbed to an enemy no one anticipated: His own body.

I wanted to start a creative project with my 11-years-old son and so I thought: Why not create a game? It combines art, writing, programming essentials, and of course game design.
It is mostly a traditional jRPG without any overly original or groundbreaking ideas. It combines some western light RPG elements with inventory puzzles of traditional adventure games and tactical turn-based combat without losing the essence of a jRPG.

Features:

  • more or less a jRPG with some western influences
  • own tactical turn-based combat system
  • lightweight custom RPG-system (no dice rolling and no numeric skills)
  • Based on an original story and original universe - combining classic (Tolkienesque) fantasy with Liechtensteinian folklore
  • meant for an age rating like ESRB "E10+" (Everyone 10 and older)

Current Progress:

  • Current Version: 0.4.11
  • Demo-version: The first main quest can be completed. Two subquests and an optional small puzzle cave can be completed.
  • Prologue: About 80% of the prologue is implemented.
  • Combat: Tactical turn-based combat works. Certain things are still a bit ... wonky. Still optimizing...
  • User-Interface: Still experimenting with proper fonts and layouts. But it's a release-candidate for now.

There is currently no original music (I'm no composer). So for the moment, I use music from two Sierra games to get the fitting mood: Conquests of Camelot and Conquests of the Longbow both composed by Mark Seibert, Aubrey Hodges, Chris Braymen, Ken Allen & .Orpheus Hanley.

Some impressions:


Introduction sequence: The game starts with a short opening sequence...

...transitioning into the map of the tent village, where the player needs to make a first choice.


Most interiors have their own maps but sometimes, I prefer to stay on the same map so roofs turn invisible.


Also, your party members are invisible during normal gameplay but during story sequences, they are visible and interact directly with their surroundings.


Combat is turn based but the player controls each of the party members directly. For ranged attacks, abilities, inventory access or simply waiting, the mouse is (currently) needed.

This looks amazing guys, Can't wait to give it a demo.

  • Pat likes this.
18 days later

We didn't have a lot of time to continue recently. School requires a little more of my son's focus.
But two things we weren't really happy about were the morning fog (especially because we wanted a sort of time progression during the prologue - the rest of the game will mostly have no time progression) and the way our water looked.

Now we got rid of the fog and used its mechanic to improve how our water looks. Now it has quite a nice gradient and becomes more opaque the deeper it gets.
And I can finally add fishes. ;-)
Some water plants are definitely needed now.


The lake behind the food tent already has some water plants, a couple of stones, and some fishes in it.

More WIP-shots:


5 days later

I've been experimenting with the effects editor for a new morning fog effect, now that I use the actual fog mechanic of RPGiaB for my water effect.

The thing is, I kind of like how real volumetric fog looks. I'm not sure whether I will use it or not. It does kind of make my graphics card hyperventilate. ;-)

See for yourself:

5 months later
a month later
16 days later

LuckyBoyAK

My son and I had a terrible year so far. So, not good.
There is, however, light at the end of the tunnel. And we want to dive into it again once my son's summer break starts.

I had planned to release a demo earlier this year but one of the updates of RPG in a Box kind of went bonkers with ome of my "awesome" scripting. I need to repair a couple of things first. :-)

    3 months later

    Our terrible year seems to slowly get ... less terrible. ;-)

    Anyway, we started to pick up our project again. Not working on it for quite a while made me question quite a few scripting decisions my past self made. :-D

    10 days later

    Hello, we are new with all of this and it seems overwhelming. We want to test out a few things, such as downloading one of your games. but we dont know how to. Could you please help us and tell us where we can get that game. pls?
    🙂

    • Pat replied to this.
      25 days later

      Roni

      Sorry, there is not yet a download available for Rise of Erion. We currently plan to release our first Demo in November.
      Right now, we're currently going through the dialogues and replace our placeholder texts.

      We also made a couple of other additions:

      My son voxeled and implemented a new environment to our prologue: A small cave with a small puzzle.
      He wrote some lore and the texts for that and designed an easy entry-level puzzle to open a door and get a small treasure.

      For that, I implemented a container system that is compatible with our inventory management:

      Speaking of inventory: I finally implemented stackable items. Yeah, I could just have used Justin's inventory system. 🙂

      The cave is completely optional and you don't even get an entry into the quest log.

      9 days later

      Speaking of a quest log: I refined how our quest log works. Generally, it is kept in the form of a book the main character carries with him. Each double page is meant as the log for one quest.

      And, of course, every time the player gets new information, it is added to that quest's page. It is written from the point of view of Erion himself, adding a bit of character to the log.
      Once the quest is fulfilled, the quest-page is removed from the log. So you only cycle through active quests.

      I also removed all of the visible buttons and opted for a simpler interface: When there are multiple quests, a click on the right half of the book gets the next quest and a click on the left side gets you the previous quest.
      Clicking outside the book (or pressing ESC) closes the book.
      And just for the quests, I made it so when you click on the previous page on your first quest, it goes all the way back to your last quest, And vice versa.

      Additionally, there is also sort of a personal journal that the main character writes, adding a bit of background and lore.

      New journal entries will be written every time a major plot point happens. I still need to get a feeling, how often that should be.
      Unlike the questlog, that can be directly access via the small button on the bottom left of the main screen (or by pressing Q or L), the journal is only accessible via the inventory:

      I'm also thinking of addin maybe a log of past quests or some notes about the current location you're in.

      Would you mind telling me how you did this? I would love to have a similar function in my game.

        LuckyBoyAK
        You mean how I made the Quest Log?
        To be honest: It was done rather in a makeshift way.

        An open book is composed of 4 widgets:

        • At the bottom (i.e., called first) is a large, screen-filling, invisible button that runs a script to close the book.

        • Then there is a widget without pass-through, containing the graphic of the book.

        • Next comes a widget with the corresponding text labels (one for the title, then the first page and the second page). These are filled using a global variable.

        • On top (i.e., called last), there's a widget with two large buttons for turning pages forward and backward. These are also invisible (achieved by setting the appropriate WidgetTheme).

        Before I call all 4 widgets, I fill the global variables, and if the book only has one page, I simply omit the last widget.

        This method actually works quite well for me. However, you lose the ability to move the widgets around. So they are statically positioned at the center of the screen.

        I call it like this:

           widget["book0"].element["0001"].image = "openerionbook.png";
        
            $currentquest = global.property["currentquest"];
            $numberofquests = len(player.quests);
        
            if $currentquest < 1 then
                $currentquest = 1;
            elseif $currentquest > $numberofquests then
                $currentquest = $numberofquests;
            end;
        
            $currentquestid = player.quests[$currentquest - 1];
            $questtext = $currentquestid + "_text";
        
            if global.property[$questtext] == null then
                global.property[$questtext] = quest[$currentquestid].description;
            end;
        
            global.property["currentquestname"] = quest[$currentquestid].name;
            global.property["currentquestdesc"] = global.property[$questtext];
            global.property["booktext"] = global.property[$questtext];
            global.property["booktitle"] = "Quest Log";
            global.property["pagetitle"] = quest[$currentquestid].name;
            global.property["currentquestpage"] = $currentquest + " / " + $numberofquests;
            global.property["currentquest"] = $currentquest;
            global.property["bookpages"] = str($currentquest + " / " + $numberofquests);
            global.property["numberofpages"] = $numberofquests;
            $booktext = global.property["booktext"];
            $firstPageLines = 16;
            $otherPagesLines = 18;
            $PageLineLength = 30;
            $firstPageMaxLength = $firstPageLines * $PageLineLength;
            $otherPagesMaxLength = $otherPagesLines * $PageLineLength;
            $pageIndex = 1;
            $pageStart = 0;
            
            while $pageStart < len($booktext) do
                $remainingCharacters = len($booktext) - $pageStart;
            
                if $pageIndex == 1 then
                    $maxPageLength = $firstPageMaxLength;
                else
                    $maxPageLength = $otherPagesMaxLength;
                end;
            
                if $remainingCharacters > $maxPageLength then
                    $pageEnd = $pageStart + $maxPageLength;
                    while $pageEnd > $pageStart and substr($booktext, $pageEnd, 1) != " " do
                        $pageEnd -= 1;
                    end;
                else
                    $pageEnd = $pageStart + $remainingCharacters;
                end;
            
                global.property["page" + $pageIndex] = "[color=#2a2a45]" + substr($booktext, $pageStart, $pageEnd - $pageStart) + " [/color]";
                $pageIndex += 1;
                $pageStart = $pageEnd + 1;
            end;
            
            global.property["pagetitle"] = "[color=#2a2a45]" + global.property["pagetitle"] + " [/color]";
            global.property["bookpages"] = "[color=#2a2a45]" + global.property["bookpages"] + " [/color]";
            
            if global.property["_journal_"] == true or global.property["_questlog_"] == true then
        show_widget("book1");
            else
                show_widget("book2");
            end;
            
            if global.property["numberofpages"] != null and global.property["numberofpages"] > 1 then 
                if global.property["_questlog_"] == true then
                    widget["book_Overlay"].element["0005"].script = "__nextquest__";
                    widget["book_Overlay"].element["0006"].script = "__prevquest__";
                else
                    widget["book_Overlay"].element["0005"].script = "null";
                    widget["book_Overlay"].element["0006"].script = "null";
                end;
                show_widget("book_Overlay");
            end;