Jump to content

The Lion Throne (Fangame and Engine)


rainlash
 Share

Recommended Posts

Thanks Rainlash. Theo cracked me up. Wow, I didn't know you were a one man band. No rush, you put out quality plus you've probably got plenty of other things keeping you busy. Anyway thanks for all your hard work. It's definitely one of my favorites. That sewer level was so fun to figure out.

Link to comment
Share on other sites

  • 2 weeks later...
  • Replies 459
  • Created
  • Last Reply

Top Posters In This Topic

  • 2 months later...

Just played this hack the last few days and it was great, I loved the gameplay and even though the story wasn't the main focus it was definitely serviceable and the characters (especially the base conversations) were great as well. I didn't have too much trouble with the basic difficulty until the second to last map where I lost Theo and Joel, who I barely used.

I loved the skills and being able to pick between patching up bad stats or boosting good ones (or increasing movement which I did for most of my roster) helped with units getting stat screwed, however I struggled to find a use for some of the units. Theo kinda struggled to keep up in the mid game maps and fell behind the curve as a result, my Eliza got pretty strength screwed, but even if she turned out better I don't see what would have made her worth investing in (almost all of your units have good growth rates and she has very shaky bases). As well as Coyote being a bit on the weaker side. Althea and Drake were definitely my MVPs with honorable mentions to Nia, Kayla and Ophie, Tomes giving slight stat boosts, the AoE tomes and her overall stats just made Althea super valuable in almost every chapter, Drake was the typical solid cavalier/paladin that's always nice to have in FE, most of the other units definitely had their niches(Bows being really long range and accurate made them useful, Dark&Light magic had nice tools, I bet Joel has good potential but my fighters always turn out terribly for some reason, adding some res targetting damage with magic swords made Renae fun to use beyond the usual thief utility etc.).

Overall a really solid project, I'm looking forward to anything you come up with in the future.

Edited by Abundy
Link to comment
Share on other sites

The Level Editor Update!

Version 0.8 of The Lion Throne is out now. The OP has been updated with the download link. Also, you can download it here!

Level Editor and Tutorial

LevelEditor2.png

Yes, it's finally here folks. The fruit of nearly nine months of labor -- my baby, the Level Editor for the Lex Talionis Engine.

There is a tutorial which explains how to use the Level Editor here: https://github.com/rainlash/lex-talionis/wiki.

You will not need to know how to code AT ALL to use this tutorial, in fact we will never touch the codebase. Just follow the directions and you'll be well on your way in no time. The tutorial should guide you through everything you need to learn to get your first level set-up and running. I welcome questions, so feel free to PM me!

Some people have already started using it for their projects -- I know of two projects in the works myself, and with the Level Editor and Tutorial's official release, I hope to hear of more.

 

Writing and testing the Level Editor and Tutorial took up the bulk of my time these past months, but there have been a few more changes. 

Custom Combat Animations

Sentinel0_GenericBlue_Attack.gifHalberdier5_Eliza_Attack.gif

  • Critical animations for all default classes now available
  • Regular animations for Sentinel, Halberdier, Skirmisher, Bowsassin and Female Soldier added

Two New Difficulties

Difficulty.png

Lunatic Mode:

BossSnipe.gif?raw=true

Have you ever wanted to distinguish yourself from among the horde of casuals who dare to consider themselves Fire Emblem players? Have you ever wanted to lose -- a lot? Over and over and over again? Well have I got the mode for you!

Lunatic mode (like other Fire Emblem hard modes before it) drastically ups the difficulty. But your own characters bring better stats and new weapons to the fight as well. And trust me, you're going to need it. I only managed to beat it on Lunatic Casual, but I'm sure someone is hardcore enough to try besting Lunatic Classic.

Grandmaster Mode:

Grandmaster.png

Hate missing? Despise the RNG? Want to truly prove your LTC skills? Welcome to Grandmaster mode, where only the greatest tacticians will triumph. Instead of missing an attack, the attack will instead do damage modified by its hit chance. So a 50% 10 damage attack will always do 5 damage in this mode, instead of flipping a coin for 0 or 10 damage. Have fun taking your strategy to the limit.

Minor Changes:

  • Over 100 minor changes to the Lex Talionis Engine, generally to make creating your own custom levels easier.
Spoiler

Gameplay Balancing

  • Slight nerf to Halberdier promotion gains (Eliza has been buffed slightly to make up for this)
  • Halberdier loses access to Axes
  • General gains access to Axes
  • Chapter 6 has been made slightly easier
  • Sandblast 's number of uses lowered from 10 to 5
  • End-game adamant weapons have been buffed (-2 weight, +10 accuracy)
  • Casual mode now allows you to make a Battle Save at any time

A few caveats before you venture forth:

  • Bugs: As always, I am only one man and cannot find every bug in this behemoth of a codebase (and its only gotten bigger!). So if you encounter a bug, please send me a PM or comment here with the full error message. Also attach your Saves/debug.log.1 if you can, since it has useful information that will help me find the bug and squash it.
  • Saves: Since I made some changes to streamline the level creation process, the format of the save files changed once again. You will not be able to use your old version 0.7 save files in this version.  There's nothing groundbreaking in this update for the base game, so if you're still playing The Lion Throne's Hard mode, just keep going. You can upgrade to this version layer if you want to try out anything new.

What's Next?

I'm sorry to say, but this is my last content update for The Lion Throne. I've accomplished everything I set out to do with this project. I'll still be around handling any bug fixes, but there will be no more core gameplay updates.

But fret not -- I  will still be working on improving the Lex Talionis Engine. I hope that you will see another project by me in the future. I've been mulling over something spicy, and I hope to be able to present it to you all when it's ready.

Thanks to everyone who played it. I hope you enjoyed playing The Lion Throne as much as I enjoyed making it. And I hope others find the engine useful to them in their own pursuits.

Link to comment
Share on other sites

this occured when trying to look at a new character stats that i added

Main Crash 'charmap' codec can't encode character u'\u2019' in position 0: character maps to <undefined>
Traceback (most recent call last):
  File "main.py", line 117, in <module>
  File "main.py", line 45, in main
  File "main.py", line 63, in run
  File "Code\StateMachine.py", line 191, in update
    begin_output = self.state[-1].begin(gameStateObj, metaDataObj)
  File "Code\InfoMenu.py", line 33, in begin
    self.helpMenu = HelpGraph(self.states[self.currentState], self.unit, metaDataObj, gameStateObj)
  File "Code\InfoMenu.py", line 628, in __init__
    self.populate_equipment(metaDataObj)
  File "Code\InfoMenu.py", line 776, in populate_equipment
    self.populate_info_menu_default(metaDataObj)
  File "Code\InfoMenu.py", line 888, in populate_info_menu_default
    self.help_boxes["Unit Desc"] = Help_Box("Unit Desc", (24, 84 + GC.TILEHEIGHT//2), create_help_box(self.unit.desc))
  File "Code\InfoMenu.py", line 937, in create_help_box
    description_length = font.size(description)[0]
  File "Code\bmpfont.py", line 183, in size
    print("%s is not chartable"%(c))
  File "encodings\cp437.py", line 12, in encode
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2019' in position 0: character maps to <undefined>
=== === === === === ===

not sure how to add debug log it wont let me

Link to comment
Share on other sites

51 minutes ago, FELORDZ said:

this occured when trying to look at a new character stats that i added

Main Crash 'charmap' codec can't encode character u'\u2019' in position 0: character maps to <undefined>
Traceback (most recent call last):
  File "main.py", line 117, in <module>
  File "main.py", line 45, in main
  File "main.py", line 63, in run
  File "Code\StateMachine.py", line 191, in update
    begin_output = self.state[-1].begin(gameStateObj, metaDataObj)
  File "Code\InfoMenu.py", line 33, in begin
    self.helpMenu = HelpGraph(self.states[self.currentState], self.unit, metaDataObj, gameStateObj)
  File "Code\InfoMenu.py", line 628, in __init__
    self.populate_equipment(metaDataObj)
  File "Code\InfoMenu.py", line 776, in populate_equipment
    self.populate_info_menu_default(metaDataObj)
  File "Code\InfoMenu.py", line 888, in populate_info_menu_default
    self.help_boxes["Unit Desc"] = Help_Box("Unit Desc", (24, 84 + GC.TILEHEIGHT//2), create_help_box(self.unit.desc))
  File "Code\InfoMenu.py", line 937, in create_help_box
    description_length = font.size(description)[0]
  File "Code\bmpfont.py", line 183, in size
    print("%s is not chartable"%(c))
  File "encodings\cp437.py", line 12, in encode
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2019' in position 0: character maps to <undefined>
=== === === === === ===

not sure how to add debug log it wont let me

This should be enough to go by anyway. Thanks.

So what happened here is you included a UNICODE quotation mark (https://www.fileformat.info/info/unicode/char/2019/index.htm) in the unit description of the character you added. If you go to Sprites/Fonts,  you can see where I've defined the Info font (Info.idx). You can only use those regular ASCII characters unless you add your own. Maybe you can try replacing the unicode quotation mark with one from your keyboard -- or leave out the quotation marks altogether. I've never tried using Unicode characters within the engine, so sorry I'm not more help.

Link to comment
Share on other sites

2 hours ago, rainlash said:

This should be enough to go by anyway. Thanks.

So what happened here is you included a UNICODE quotation mark (https://www.fileformat.info/info/unicode/char/2019/index.htm) in the unit description of the character you added. If you go to Sprites/Fonts,  you can see where I've defined the Info font (Info.idx). You can only use those regular ASCII characters unless you add your own. Maybe you can try replacing the unicode quotation mark with one from your keyboard -- or leave out the quotation marks altogether. I've never tried using Unicode characters within the engine, so sorry I'm not more help.

That fixed the issue. Thanks!

Link to comment
Share on other sites

  • 3 weeks later...
15 hours ago, FELORDZ said:

Anyone can walk through the thicket. Is there a way to quick fix the issue?

Oh yeah. In The Lion Throne, unlike normal Fire Emblem GBA, I let anyone walk through the thicket -- it just uses up a lot of their movement points. You can quickly fix that by editing /Data/mcost.txt

There should be a row for each terrain type, and a column for each type of unit (Light Foot, Armor, Cavalry, etc.). Just change the numbers in the "Thicket" line to match your tastes. The "-" means that units of that type can't move through that terrain type.

Link to comment
Share on other sites

On 10/12/2018 at 10:24 AM, rainlash said:

Oh yeah. In The Lion Throne, unlike normal Fire Emblem GBA, I let anyone walk through the thicket -- it just uses up a lot of their movement points. You can quickly fix that by editing /Data/mcost.txt

There should be a row for each terrain type, and a column for each type of unit (Light Foot, Armor, Cavalry, etc.). Just change the numbers in the "Thicket" line to match your tastes. The "-" means that units of that type can't move through that terrain type.

Awesome thx.

Also is there a method in properties to set win condition to defeat all enemies? or how to properly implement this with interact script?

another issue i dont know what this error is for starting up the .exe

Debug: 1
Version: v0.8.0
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
Traceback (most recent call last):
  File "main.py", line 29, in <module>
  File "c:\users\patrick\appdata\local\temp\pip-build-0o75dq\pyinstaller\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
  File "Code\GlobalConstants.py", line 92, in <module>
    PRELOADDATA = ET.parse(loc + 'Data/preload_levels.xml')
  File "<string>", line 62, in parse
  File "<string>", line 38, in parse
cElementTree.ParseError: not well-formed (invalid token): line 302, column 16
Failed to execute script main

Edited by FELORDZ
adding info for bug
Link to comment
Share on other sites

On 10/13/2018 at 10:07 AM, Alike said:

Does this work on Android or Chrome OS. I only have a chromebook, and this looks pretty fun.

Sorry but it doesn't currently run on either Android or Chrome OS. You can download the executable and run it on Windows, and it also runs on Mac and most Linux distros if you have Python and Pygame as described on the Github page. 

On 10/13/2018 at 5:30 PM, FELORDZ said:

Debug: 1
Version: v0.8.0
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
Traceback (most recent call last):
  File "main.py", line 29, in <module>
  File "c:\users\patrick\appdata\local\temp\pip-build-0o75dq\pyinstaller\PyInstaller\loader\pyimod03_importers.py", line 389, in load_module
  File "Code\GlobalConstants.py", line 92, in <module>
    PRELOADDATA = ET.parse(loc + 'Data/preload_levels.xml')
  File "<string>", line 62, in parse
  File "<string>", line 38, in parse
cElementTree.ParseError: not well-formed (invalid token): line 302, column 16
Failed to execute script main

So I can't diagnose the exact problem from what you've given me here. But I can tell you where to look. The likely problem is that you're missing a start or end bracket in your Data/preload_levels.xml file. I would look, as it says, around line 302. But the missing bracket could be anywhere and the error is just being propagated to the end. If you really can't find it, you can send me the text of your preload_level.xml file and I can take a look.

Link to comment
Share on other sites

6 hours ago, rainlash said:

Sorry but it doesn't currently run on either Android or Chrome OS. You can download the executable and run it on Windows, and it also runs on Mac and most Linux distros if you have Python and Pygame as described on the Github page. 

So I can't diagnose the exact problem from what you've given me here. But I can tell you where to look. The likely problem is that you're missing a start or end bracket in your Data/preload_levels.xml file. I would look, as it says, around line 302. But the missing bracket could be anywhere and the error is just being propagated to the end. If you really can't find it, you can send me the text of your preload_level.xml file and I can take a look.

Ah I missed closing a bracket. that is always an issue haha thx

Also is there a method in properties to set win condition to defeat all enemies? or how to properly implement this with interact script?

Link to comment
Share on other sites

17 hours ago, FELORDZ said:

Also is there a method in properties to set win condition to defeat all enemies? or how to properly implement this with interact script?

So there's no method in properties to set win condition, since the text you write in properties is just for show. You need to use event scripting to actually win/lose the game. Setting up a "rout"/"defeat all enemies" win condition is easy enough using the interact script. 

# Are there any enemies left on the map?
if;not any(unit.team == 'enemy' and unit.position for unit in gameStateObj.allunits)
    win_game
end

I've since added a small section on setting up Win Conditions to the Miscellaneous section of the Wiki.

Link to comment
Share on other sites

This seems really cool, a little disappointed I've only just heard of it, haha. Seems like you did some great work and it's even open-source, I'm kind of impressed lol.

I'm curious about your next project, anywhere I can follow you for updates on that when you're ready to reveal it?

Link to comment
Share on other sites

Hi, your game is awesome, every chapter is challenging and very original. I've got some bug.....game stop at level 9 without reason. I send the error log. Please help me i wanna reach the end!!!!!

 

Main Crash empty range for randrange() (0,0, 0)
Traceback (most recent call last):
  File "main.py", line 117, in <module>
  File "main.py", line 45, in main
  File "main.py", line 63, in run
  File "Code\StateMachine.py", line 201, in update
    update_output = self.state[-1].update(gameStateObj, metaDataObj)
  File "Code\StateMachine.py", line 1962, in update
    self.message.update(gameStateObj, metaDataObj)
  File "Code\Dialogue.py", line 196, in update
    self.read_script(gameStateObj, metaDataObj)
  File "Code\Dialogue.py", line 134, in read_script
    self.parse_line(line, gameStateObj, metaDataObj)
  File "Code\Dialogue.py", line 497, in parse_line
    self.add_unit(gameStateObj, metaDataObj, which_unit, to_which_position, transition, placement, shuffle=not order, create=level)
  File "Code\Dialogue.py", line 1177, in add_unit
    unit = SaveLoad.create_unit(new_unitLine, gameStateObj.allunits, gameStateObj.factions, gameStateObj.allreinforcements, metaDataObj, gameStateObj)
  File "Code\SaveLoad.py", line 376, in create_unit
    gameStateObj.mode, gameStateObj.game_constants, force_fixed=force_fixed)
  File "Code\SaveLoad.py", line 465, in get_unit_info
    stats, growth_points = auto_level(bases, growths, num_levelups + hidden_levels, class_dict[klass]['max'], mode, force_fixed=force_fixed)
  File "Code\SaveLoad.py", line 546, in auto_level
    idx = Utility.weighted_choice(growths)
  File "Code\Utility.py", line 152, in weighted_choice
    rn = random.randint(0, sum(choices) - 1)
  File "random.py", line 242, in randint
  File "random.py", line 218, in randrange
ValueError: empty range for randrange() (0,0, 0)

Created save point at last turn change! Select Continue in Main Menu to load!
 

Link to comment
Share on other sites

7 hours ago, ardenzio said:

Hi, your game is awesome, every chapter is challenging and very original. I've got some bug.....game stop at level 9 without reason. I send the error log. Please help me i wanna reach the end!!!!!

 

Main Crash empty range for randrange() (0,0, 0)
Traceback (most recent call last):
  File "main.py", line 117, in <module>
  File "main.py", line 45, in main
  File "main.py", line 63, in run
  File "Code\StateMachine.py", line 201, in update
    update_output = self.state[-1].update(gameStateObj, metaDataObj)
  File "Code\StateMachine.py", line 1962, in update
    self.message.update(gameStateObj, metaDataObj)
  File "Code\Dialogue.py", line 196, in update
    self.read_script(gameStateObj, metaDataObj)
  File "Code\Dialogue.py", line 134, in read_script
    self.parse_line(line, gameStateObj, metaDataObj)
  File "Code\Dialogue.py", line 497, in parse_line
    self.add_unit(gameStateObj, metaDataObj, which_unit, to_which_position, transition, placement, shuffle=not order, create=level)
  File "Code\Dialogue.py", line 1177, in add_unit
    unit = SaveLoad.create_unit(new_unitLine, gameStateObj.allunits, gameStateObj.factions, gameStateObj.allreinforcements, metaDataObj, gameStateObj)
  File "Code\SaveLoad.py", line 376, in create_unit
    gameStateObj.mode, gameStateObj.game_constants, force_fixed=force_fixed)
  File "Code\SaveLoad.py", line 465, in get_unit_info
    stats, growth_points = auto_level(bases, growths, num_levelups + hidden_levels, class_dict[klass]['max'], mode, force_fixed=force_fixed)
  File "Code\SaveLoad.py", line 546, in auto_level
    idx = Utility.weighted_choice(growths)
  File "Code\Utility.py", line 152, in weighted_choice
    rn = random.randint(0, sum(choices) - 1)
  File "random.py", line 242, in randint
  File "random.py", line 218, in randrange
ValueError: empty range for randrange() (0,0, 0)

Created save point at last turn change! Select Continue in Main Menu to load!
 

Hey! I'm glad you like the game! 

I'm real sorry you got a bug, but thanks for telling me. It is now fixed.

You can download The Lion Throne again from the link in the first post on this thread. It will have an updated executable and data files. To use your previous saves, copy and paste your entire old "Saves" folder into the new folder you just downloaded (replacing the mostly empty Saves folder that it comes with). So now you'll have your old Saves folder, but new every other folder and file. 

Like the error message says, you should now be able to "Select Continue in Main Menu to load!", and you should get past that bug. Please tell me immediately if you still can't go past.

You must have gotten real far in Chapter 9's turncount. The bug was kind of hard to find. So, each turn the reinforcement enemies in Chapter 9 get more levels. I didn't have a check on the Hybrid level-up system that stops trying to increase their stats when their stats are maxed. If every one of their stats was maxed, and they still have levels to gain, it would crash. Very esoteric bug.

 

Link to comment
Share on other sites

  • 2 weeks later...
15 hours ago, FELORDZ said:

Is there a way to make a magic weapon triangle similar to FE10? Like I want to divide Anima magic into its own weapon triangle of Fire, Wind, Thunder but still keep the Anima, Light, Dark triangle. 

Yes. This is pretty simple actually. You're going to want to reference this tutorial for adding new weapon types: https://github.com/rainlash/lex-talionis/wiki/26.-Adding-New-Weapon-Types

And then, you'll want to just modify the values in the Data/weapon_triangle.txt file to something like this (second column is what the weapon is GOOD against, third column is what it's WEAK against):

Sword;Axe;Lance;
Lance;Sword;Axe;
Axe;Lance;Sword;
Bow;;;
Light;Dark;Fire,Wind,Thunder;M
Fire;Light,Wind;Dark,Thunder;M
Wind;Light,Thunder;Dark,Fire;M
Thunder;Light,Fire;Dark,Wind;M
Dark;Fire,Wind,Thunder;Light;M

 

If you have any problems, feel free to PM me.

Edited by rainlash
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...