Jump to content

rainlash

Member
  • Posts

    124
  • Joined

  • Last visited

Posts posted by rainlash

  1. On 3/24/2020 at 2:53 PM, Bastionb56 said:

    Heya, just here to report a bug I've been having for some time now, it seems that setting up a combat event in the outro script will result in the entire rest of the script being completely skipped with no way to stop it, I have no idea why this happens, it works fine during the intro script, where everything happens as it is supposed to.

    Hey thanks for the bug report! I think somebody else actually ran into this issue before, but your report crystallized the issue and helped me understand the problem.

    The problem is that whenever any event script ends and the game is in the win state ("win_game" has been called), the outroScript for that level is called. Makes sense right? Well, an outroScript itself also ends at some point, and you would end up with an infinite loop of outroScript ending and then calling outroScript. So a flag is set right before the first outroScript is called -- outroScriptDone flag. Now when the first outroScript finishes up (or any event script), the engine checks whether this is set and if so, proceeds to save screen and the next chapter. So when your interactScript ends, the engine checks whether outroScriptDone has been set, and seeing that it has and outroScript should be therefore be done, leaves the level. This is the issue you've run into. So I've got two solutions:

    Solution 1:

    This solution does not require you to update to a new version of the Engine, but is gloriously hacky! 

    # At the beginning of the outroScript
    if;not gameStateObj.level_constants['outroStarted']
    	# Set this level constant so this section is not repeated when we repeat the outroScript
    	set_level_constant;outroStarted
    	add_unit;Alice;10,15;warp
    	u;Alice;Left
    	s;Alice;Not on my watch!
    	r;Alice
    	wait;50
    	# Make it so that we can repeat the outroScript by turning off the flag (as if we've never reached the outroScript yet)
    	# This is tremendously hacky
    	if;gameStateObj.statedict.update({'outroScriptDone': False})
    		wait;1  # We just need the Engine to parse our if statement and change the flag to False
    	end
    	interact_unit;Alice;Bandit1;Crit
    end
    wait;300
    end_skip

    Yes, we're using an if statement to convince the Engine that it hasn't done the outroScript yet, making the Engine repeat the outroScript, and then making sure it skips the sections its already done. 

    Solution 2:

    Wait for me to update the Engine. I plan to change the Engine so that a level won't actually end unless an outroScript itself finishes (as long as one exists for the level). This is the less fun but probably better solution.

    Hopefully that explains why you ran into the issue. It was kind of complicated for me to figure out on my end -- some of the code involving the outroScript is like 6 years old...

  2. 8 hours ago, ZessDynamite said:

    You need to install the 'pillow' package with pip in the command prompt. Try typing 'pip install pillow', 'python -m pip install pillow', or 'py -m pip install pillow'; whichever works. Once pillow is installed the Level Editor will run. Hope this helps!

    This is correct. Although you shouldn't receive this error if you are using the Level Editor executable version. PIL/pillow comes included with the executable.

    8 hours ago, ZessDynamite said:

    As far as I know, these errors don't particularly matter (I get them too and everything works fine), though I'd wait for rainlash to get back to you on that.

    These errors only kind of matter, although I'm wondering why you seem to get them. Basically, while the 99% of the Engine is pure Python, I found that for some very CPU intensive functions, pure Python wasn't always fast enough (think, pathfinding and line of sight calculations). So I wrote some Cython modules: compiled C code that Python calls. If, for some reason, your computer can't use the C code, that is weird. Likely, you either have a completely different version of Python or you are not using Windows.

    But, it doesn't really matter, because as you can tell, the Engine will fall back on the old pure python implementations, which works fine, just a little slower.

  3. 9 hours ago, TheeBill said:

    I somehow managed to stop the error by creating a fake MapObject specifically for the Overworld sections. So now if you click anywhere on the map a generic options menu appears instead. Now I'm really curious to see how far I can get with this.

    Impressive work you've got so far! I took a look at what could be causing the bug and fixed the cameras map issue on my end. It's possible for the Overworld to exist irrespective of any specific level, but the camera did not expect that. The latest update to the git repo has a fix for the camera. 

    I also have some comments on your overworld_data.txt. You may have already figured this out, but you're not using the routes correctly. You only need one route between each pair of nodes (so you need a route from 0 -> 1, but not also 1 -> 0). The direction of the routes is defined by the numpad directions (ie, 8 is up, 2 is down, 9 is to the topright). So having a route that is 8, then 2 like you showed yesterday doesn't make any sense. That route would be up then down, putting you back where you started. You also need to make sure the routes actually connect their nodes (probably -- the engine may handle this graciously). Try something like this (untested...):

    # Level ID ; Location Name ; Icon Index ; Position
    # The positions are multiplied by 8 for some reason.
    # Everything is done on 1 to 8 basis in overworld
    ===Locations
    0;Milthon Grove;0;63,40
    1;Redrun Village;1;66,39
    # Route connections (between level id's); Route (numpad)
    ===Routes
    0,1;6,6,6,8
    # Party ID must be integer -- I don't think this is true anymore; Party name (must be character)
    ===Parties
    0;Randall

     

    4 hours ago, Bastionb56 said:

    Is it possible to make a weapon (We're talking about a sword here) which can be fought with like normal, but also be used through the items menu like a Vulnerary to heal the unit using it?

    Not right now unfortunately -- but it's actually a really easy fix on my end. Items don't know whether they are being used or attacked with, but weapon aspect takes precedence over usable aspect, so your Sword was using it's weapon aspect on the unit. I added a single line that makes it so that the weapon aspect will not be used if the attacker and defender are the same unit (like when using an item). So now it will use the item aspect instead, and will behave like you expect it to.

    Your item setup will work as you expect it to once you get the latest update to the Engine. I have pushed the change to the git repo, so if you use that, you can grab it. I don't know when the next build of the Windows executable will be completed -- I don't want to go through the build process for just one line of code change... But rest assured the next version will have your change.

  4. 3 hours ago, TheeBill said:

    How complete is the overworld feature?

    I honestly haven't taken a look at it in a while. It's on my todo list, but very far down.

    I do know that the last time I looked at it, you could place a party on the overworld and move them between chapters, but I think the integration with event scripts was still buggy. If you want to try it out, just set overworld=1 in constants.ini and fill out the Data/overworld_data.txt file. My DataSacredStones/ folder in the git repo has an example that I was using. The Data/overworld_script.txt file controls what happens in the overworld (although this may be buggy). It looks for "ow_trigger" calls from other scripts and then does them in order when the overworld is first displayed after every chapter. You can find all the overworld event commands in Dialogue.py (line 367+). There's no documentation on what the commands do anywhere.

    If you do manage to get something working on your end, let me know, because that would be pretty awesome!

  5. On 3/7/2020 at 3:52 PM, Kyogokudo said:

    The victory screen displays odd results when the map objective isn't either kill boss or rout. I've had it displaying 20 turns for a survive 14 turns map (I call the win_game and victory screen methods in turnChangeScript) and for escape objectives it just defaults to no MVP and 0 turns.

    Unfortunately, you can't call both `win_game` and `victory_screen` in the same script. `win_game` doesn't have any effect until the event script completes. Once the script completes, then the Engine then checks to see if `win_game` was called and does a lot of cleaning up and changing of state. So if you call `victory_screen`, `victory_screen` will look at the results from your last win -- which, in your case, is going to be the results from the last level.

    Basically, call `victory_screen` in the outroScript unless you have a good reason not to, since the outroScript is guaranteed to occur after `win_game` is called. I've updated the wiki to make this more clear.

    On 3/7/2020 at 3:52 PM, Kyogokudo said:

    Looking at older posts, you said adding a screenshot feature was easy and that you only needed to map it to a key. Could you add it ?

    Yes. In the newest version of the Engine, v0.9.3.18, there is now a dedicated, unchangeable screenshot key. Since there doesn't seem to be any standard, except Window's "Alt + PrtScn" / "Win + Alt + PrtScn", I chose the grave/backquote key (`). You can find it generally at the top left of the keyboard -- the symbol under the ~ symbol. You don't need to press shift. Pressing this key will output a screenshot called "Lex_Talionis_{current_datetime}.png" to the current directory. Hopefully, you find this useful.

    On 3/7/2020 at 3:52 PM, Kyogokudo said:

    The loot village AI acts weirdly when there's destructible tiles other than villages (such as snags). I guess that the IA is coded to go for anything that is destructible but it somehow just stands near a snag and doesn't even destroy it. Is there any way I could change it so it would only go for destructible villages ?

    The newest version of the Engine now has support for two additional secondary AIs. AI #10 will approach any destructible tile that does not also have HP (so something like a destroy-able village). AI #11 will approach any tile with HP. I also changed a couple of the AI presets in the ai_presets.txt file to better reflect these changes.

    The AI you were probably using had a secondary AI that approached both destructible and HP tiles, but could not interact with HP tiles. The "PursueVillage" preset AI now only pursues non-HP destructible tiles, like its name suggests. The "PursueTile" AI pursues HP tiles, and the new "PursueVillageTile" AI pursues both.

    On 3/7/2020 at 9:36 PM, BBHood217 said:

    Healing in Absolution doesn't seem to get tracked by the records, the two healers are constantly at the very bottom of the MVP rankings.  I wonder if it has something to do with the fact that heals there are staffs instead of light magic like in the Lion Throne.

    I've also fixed this in the latest version of the Engine. The difference was actually that Absolution had set experience for staffs, which meant the game never needed to calculate the amount of healing done.

     

    All of these changes above are in the latest version of the engine, v0.9.3.18, which is currently available on the git repo. I'll build it and post it to the usual place sometime later today.

  6. 3 hours ago, axelloid said:

    Right from the Level Editor. Lastest version:

    That's not a problem -- the Engine is just informing you of missing map sprites. For instance, there is no "other" team (green) Myrmidon class map sprite, so it yells at you. You can safely ignore it if you don't care because you don't plan on using an "other" team Myrmidon in your game. However, if you do plan on using an "other" team Myrmidon, then you best pay attention because when you boot up that level in Engine, it'll display the unit as a Citizen.

  7. On 3/1/2020 at 3:55 AM, Bastionb56 said:

    I want to have a win condition, where the boss needs to be fought with a specific weapon to get the "good" ending to the chapter.
    So I would need to have an If condition in the interactScript that checks if one of the units is the enemy boss (In this case his name would be "Hilaru") and he is fought (Doesn't matter if he dies) with a specific weapon (In this case a spell called "Cleanse").
    Additionally I also would like the character that is casting the spell to also be specified, but it's not a priority, just used for some flavor text.

    Since you specified that "Cleanse" is a spell, we don't have to worry about counterattacks, which makes writing the if condition in the interactScript simpler.

    First, we check that the defending unit (self.unit2) is named "Hilaru". Then we check that the attacking unit's (self.unit) first item (which would be the item they're using if they're using a weapon or spell) is named "Cleanse". If so, set that we have unlocked the good ending for this level.

    if;self.unit2 and self.unit2.name == 'Hilaru'
        if;self.unit.items and self.unit.items[0].name == 'Cleanse'
            set_level_constant;good_ending
        end
    end

    Later, in the outro_script, you can check to see if "good_ending" is set in the level constants: if;"good_ending" in gameStateObj.level_constants and change the ending if so.

    The unit that attacked with the spell is referred to as self.unit in if statements. If you want that unit to speak, you can use {unit} in dialogue commands. Although, the interactScript is called after combat, so you'll need to use the fightScript if you want it to happen before combat. This if statement should work there too.

    Like so:
     

    if;self.unit2 and self.unit2.name == 'Hilaru'
        if;self.unit.items and self.unit.items[0].name == 'Cleanse'
            set_level_constant;good_ending
            u;{unit};Left
            s;{unit};Take that, Hilaru!
            r;{unit}
        end
    end

     

    If you wanted something more complicated, I would recommend foregoing using the interactScript and rather have the spell apply a specific status on hit that lasts forever. Then you can at the end of the level, just check to see if Hilaru has that status. if;any(unit.name == 'Hilaru' and 'Cleanse_Status' in [s.id for s in unit.status_effects] for unit in gameStateObj.allunits). But this should suit your needs for now.

  8. 20 minutes ago, Kyogokudo said:

    Quickly looked at Minimap.py, snags aren't handled in the handle_key function. I have no idea how all of this works though so I can't fix it at the moment.

    Thanks for the bug report! Here's an easy fix:

    Go to your Data/terrain.xml. Navigate to the Snag terrain and change its minimap key from <minimap>Snag</minimap> to something else that is a valid key, maybe like <minimap>Thicket</minimap>.

    I never used the Snag terrain in the Lion Throne and must never have caught that I put an incorrect minimap key for that terrain. I've updated the git repo terrain.xml to fix this bug also.

  9. 51 minutes ago, Itshinka said:

    Here is something new that happened after I pulled the recent version. Everything from the folder, including the files you had in there, were cleared when I tried to save before importing. 

    What do you mean by this? I'm not sure I understand.

    But just to check, you are still getting the empty MapSprite.png error with the latest version of the Level Editor? It should say v0.9.3.14b at the top. What image length and width does it output to the console when it loads and saves the MapSprite?

    I was hoping the latest Level Editor update, because it loads the image on import and then saves over it with a new format, would remove the issue you are having. For instance, when you import a new image to use as the Map Sprite, that image should be overwritten immediately. You can tell this because the filesize should change. I was hoping this new image would not have the sRGB length bug that you and Sealvester ran into. 

  10.  

    On 2/15/2020 at 3:59 PM, Kyogokudo said:

    Promoting an unit while in the base changes the background and music used. The background is the one used for the preparations screen and the music is the first one in the introScript. I didn't notice any messages/errors in the console or debug logs. Here's the video : https://www.youtube.com/watch?v=gxmBXQVNIlA

    The latest update to the git repo should fix these issues you've experienced -- I think the issue with the promotion music was that your promotion music was the same as the base or non-existent -- that should be fixed. Also, I'll have a new build of the executable with the updates sometime soon.

    On 2/15/2020 at 3:59 PM, Kyogokudo said:

    Can you lock a promotion to a specific item/event while keeping the auto promote option (like Ike) ?

    What do you mean by "Lock a promotion to a specific item/event while keeping the auto promote option"? Do you mean that you want to be able to not allow certain units to auto promote, but by default regular units should be able to auto-promote? If so, I can add a unit or class tag that says "No auto-promote" and have the engine respect that.

    On 2/15/2020 at 3:59 PM, Kyogokudo said:

    This one is a bit tricky and completly optionnal. Would it be possible to add the BEXP system from the Tellius games ? There is already a function for giving exp to an unit (used for exp potions) so I wonder what else would be needed. Setting the amount of bexp earned can probably be done with game constants. Again this is more for theorycrafting than anything, I'm just curious. x)

    It's definitely possible, and not particularly difficult -- just time on my part. I envision it requires adding 2 additional states to the game, and several ancillary functions, game constants, and an event command, which will take some time to code up. I can add it to the to-do list though.

    Glad to hear you are enjoying the Engine! If you've managed to add paragon and leadership stars, then you might have enough experience to make the BEXP system yourself... Did you make the leadership stars actually appear on the Info Screen?

  11. 11 hours ago, Sealvester said:

    I think I'm running into the same issue hinka is.

    Are you running the Level Editor executable or did you just clone the Git Repo?

    If you just cloned the Git repo, can you pull down the latest update I made to the Level Editor and do the exact same thing again (using the fe8map1.png file you already have)? If that doesn't work, I also updated the fe8map1.png file from the wiki -- can you try that one?

    I do not receive this error on the computer I'm currently working on -- I don't even get the libpng warnings that you get. Which obviously makes testing to try and solve the error very difficult. I have PyQt5 5.13.1 on this machine so I don't know for sure whether it is a PyQt error. But when I get back home to my desktop later today, I should be able to check further. I remember that it does sometimes have those libpng warnings, so I'll test these changes there. 

    Other people seem to have this problem too -- I'm trying to solve it from the code side of things so that nobody else runs into this issue, but it seems everyone else just removes the iCCP/sRGB nonsense from their png files...

    https://gist.github.com/bluenex/0af2f41fda9954df73a8

    https://wiki.archlinux.org/index.php/Libpng_errors

    Sorry that I don't have anything more concrete -- Just replying back so you know I am looking into the problem. Your error messages have been a big help.

     

     

  12. 12 hours ago, AnimusTheSpirit said:

    So I been working with the engine for some time. I like it and I am impressed. However I have 2 issues. First is that when I try to have reinforcements enter on turn 2 the game crashes. I added a snap shot of the debug report. I followed the Wiki on Gitlab, but it still crashes. I would really appreciate some help if possible. My second Issue is just that I can't figure out how to give my units custom color palettes for battle animations. 

    What version of the Engine are you using? Because if you are using a very old version of the Engine, I could see you running into an issue like this.

    Assuming you're running a new-ish version though, then the issue with "triggers" is that they are just not very well implemented right now. I would recommend not using them -- just use the "add_unit" and "move_unit" commands. I know its a more work on your end, but it's not buggy and gives you a bit more fine-tuned control over reinforcement placement. "Triggers" are kind of relic of an older method and really shouldn't be used any more. I need to hurry up and remove them, honestly...

    Just turn your units into reinforcements and, in your turn change script, call "add_unit;reinforcement_event_id;starting_position" and "move_unit;reinforcement_event_id;position_i_want_to_move_to". The italicized sections get replaced of course. This is what I did for every reinforcement in the Lion Throne, so I know it works well. It is explained somewhat in https://gitlab.com/rainlash/lex-talionis/-/wikis/15.-Reinforcements "Using the Reinforcement Menu without Triggers" section of the wiki. You can also take a look at how I implemented reinforcement events scripts in many of the chapters of the Lion Throne.

    PM me if you have any issues with this.

     

    For the custom color palettes in battle animations, I would hope that its pretty straightforward. If you still have the animation files that came with the Lion Throne, you can look at (for instance), the /Data/Animations/Knight folder to see how custom color palettes are added. For each animation: "Lance", "RangedLance", and "Unarmed", there are four image files, one for each of the color palettes I use. There's always "GenericBlue" and "GenericRed" images, which are the fallback color palette options for player characters and enemy characters if there is no custom color palette defined. But then there's the "Harold" and "Theo" images, which are how I have custom palettes for those two characters. Instead of using the normal image in engine, any Knight with the unit id of "Harold" will use the "Harold" image. Does that make sense? To make your own, just (1) open, for instance, "Knight0-Lance-GenericBlue.png" in Paint or GIMP or Photoshop, (2) swap the colors, (3) and rename it "Knight0-Lance-Winston.png" (if your character were named Winston). Now, as long as your character Winston is a Knight, is using a Lance in melee range, and has the unit id "Winston", they will use that color animation.

  13. 13 hours ago, BBHood217 said:

    There are times in GBA FE where dialogue can pause for a time before autoadvancing.  Could that also be implemented here, a sort of timed wait where the dialogue pauses and it continues not after pressing A but instead after a set amount of time?  There were a few instances in Absolution where the dialogue went by too fast because there was no pause, and I think they could benefit the most from autoadvancing.

    I could add this feature, but I would need to understand more about what you would want it to do. I assume you would want a command in the dialogue that would make it wait, but for how long? Should the length be dependent on the amount of text before it? Should pressing "A" move past the wait anyway? Should pressing "Start" move past the wait? If you have a video of an example from the GBA for me to model it on, that would be helpful.

    I think it's likely that Absolution just had too many characters in a row without a "{w}{br}" that two lines of text can't fit. Unfortunately, there's no easy way to detect this except running through the dialogue manually. 

     

    On 2/3/2020 at 6:32 PM, rainlash said:

    So, I would recommend a slightly different approach, to accomplish the same thing gameplay wise.

    Slight error here but I can't edit the post anymore. To get the crit section to work, you'll need to change all instances of "crit" component to "crit_hit" component. There is no "crit" component.

     

    5 hours ago, Itshinka said:

    I pulled the new version today and it still generates an empty SpriteMap.png if I don't import map every time I open the program. (Had to focus on school work for a few days.)

    I have a new version of the git repo uploaded. Can you try doing the same thing again, but this time if it doesn't work, can you send me a screenshot of what the editor prints to the screen. Essentially, send me the text that follows this:

    pygame 1.9.6
    Hello from the pygame community. https://www.pygame.org/contribute.html
    Debug: 1
    ERROR! No words.txt file found in the data directory.
    Version: v0.9.3.13

    Also, I updated the code so that if you "Import New Map" a map that has the same size as the currently displaying map, it will not overwrite your TileData. Hopefully this is a small amount of help while we try to figure out the big problem.

    Recently, I opened your map image in GIMP and it told me that the image has an embedded color profile. I doubt that's the problem (since I was able to use your image just fine as is), but can you make a version of your map image without the embedded color profile and also without any alpha (transparency) and try using that instead? You should be able to do that in GIMP or in Photoshop. If you don't have either of these, maybe try saving it as a new file in Paint?

  14. On 2/2/2020 at 3:29 PM, Itshinka said:

    I have attached screenshots of my documentation of the events.

    Thanks for the screenshots! I took a look and tried to recreate the events, but I don't get that weird empty MapSprite.png file that you get -- There must be something else to the problem. My expectation is that the image is somehow not defined in the editor and its saving a null image (which should break, but isn't). I've added some more error checking and moved around some of how the map sprite is saved in the latest update to the git repo. Can you pull the changes and try again? Tell me if the error continues...

     

     

    On 2/2/2020 at 4:36 PM, AtunaLemep said:

    Not sure if this is where you post general questions for help with creating new materials in the data of the engine, but I figured this was as good a place as any.

    To summarize my goal as succinctly as possible, my goal is to recreate the Resolve skill in Rex. Obviously, Resolve gives +50% STR, SKL and SPD when at half health or lower. As best as I can tell, in my admittedly very limited experience, all of the pieces exist required to do so, but I seem to be lacking in my ability to execute on the idea. I can create a skill that provides the boost to the skills all the time quite easily, and the conditional ability to grant conditional stats while at half health also exists (as per Futuresight). Is there a command to have the game grant conditional_stat_change or something similar? Can such a feat be done by granting an invisible aura or buff, perhaps, as a workaround? And how would I make the stat changes disappear if the unit is healed above the threshold, were the workaround the only option?

    Yeah, this is fine. You can also PM me if you wish.

    So, I thought about it for a while and I think its not possible to literally change the STR, SKL, and SPD by 1.5x of a unit, only when their HP is <= 50%. There is no conditional status effects -- but I should that ability, since it seems to be wanted by more than one user -- so you can't have a conditional status effect that gives out those changes. Even if you could, there's no fractional changes to stats available.

    So, I would recommend a slightly different approach, to accomplish the same thing gameplay wise. 

        <status name="Resolve">
            <id>Resolve</id>
            <image_index>8,8</image_index>
            <desc>Grants effective STR, SKL, and SPD 1.5x if HP is under half.</desc>
            <components>mt,avoid,hit,attackspeed,crit,class_skill</components>
    
            <!-- Add STR/2 to mt, so you effectively hit for STR/2 extra damage -->
            <mt>self.stats['STR'].base_stat//2 if self.currenthp &lt;= self.stats['HP']/2. and item and not item.is_magic() else 0</mt>
            <!-- Add SKL/2 to hit, so you effectively have SKL extra accuracy (assuming Accuracy = SKL*2 normally) -->
            <hit>(self.stats['SKL'].base_stat//2)*2 if self.currenthp &lt;= self.stats['HP']/2. else 0</hit>
            <!-- Add SPD/2 to avoid, so you effectively have SPD extra avoid (assuming Avoid = SPD*2 normally) -->
            <avoid>(self.stats['SPD'].base_stat//2)*2 if self.currenthp &lt;= self.stats['HP']/2. else 0</avoid>
            <!-- Add SPD/2 to attackspeed, so you effectivly have SPD/2 extra attackspeed -->
            <attackspeed>self.stats['SPD'].base_stat//2 if self.currenthp &lt;= self.stats['HP']/2. else 0</attackspeed>
            <!-- Add SKL/2 to crit, so you effectively have SKL/4 extra crit (assuming Crit Rate = SKL/2 normally) -->
            <crit>(self.stats['SKL'].base_stat//4 if self.currenthp &lt;= self.stats['HP']/2. else 0</crit>
        </status>

    It's complicated, but it basically does what you want, without actually messing with the stat values themselves. There will be weird issues if you use a weapon that is not magical and also doesn't use STR for damage, but otherwise, this should do what you want. 

  15. On 1/31/2020 at 12:55 AM, Ashai said:

    Way back when I asked this, I thought it was intentional that the title screen was playing Helms Deep - Start/Loop at a slower rate, but it seems that this is tied to the audio sample rate of the file itself. Helms Deep has a sample rate of 48.000 kHz, so it is playing slower than it should be.

    You can see this happening with Midna's Theme as well because it has the same sample rate.
    But if you try something else with a sample rate of 44.000 kHz, like Awakening - Easy Now, you can hear the song play at a normal speed.

    Interesting. I didn't notice that I had two different sample rates of music included. I'm probably not going to fix it as it stands, because I'm not really updating The Lion Throne as a game anymore, and a slight speed decrease and pitch shift is not that big a deal, but its good to know. For future work, I guess 44.1 kHz is the correct sample rate to use.

    31 minutes ago, Itshinka said:

    Just some issues I had with the engine that I put on the GitLab issues page, thought I might post them here as well.

    Thanks for mentioning it here. I don't check the engine page very often, so your issue could have languished for quite a while.

    32 minutes ago, Itshinka said:

    - Whenever you open the editor, the MapSprite.png file is overwritten with a blank one, and you have to constantly call for the file again. Additionally, if you have a TileData.png made and you're working on it with that map, saving the tiledata deletes the MapSprite again. This makes it practically impossible to work on anything without constantly making copies of your TileData, which gets deleted everytime you re-import your MapSprite.

    I have never gotten these errors and cannot recreate it myself. I don't even know how this would occur. I don't think the editor even has the capacity to create a blank MapSprite.png. Has anyone else whose used the editor ever experienced an error like this? If you or anyone else can recreate this error in a few well-defined steps, that would really help me find it.

    33 minutes ago, Itshinka said:

    - Additionally, copying the tutorial and deleting all The Lion Throne characters breaks the engine, crashes until you put them all back.

    It is the case that deleting a character that a level is using would cause the editor to crash when it tries to open that level. I've fixed the editor to now just ignore characters/units and classes that aren't defined anymore (except "Citizen" class, since that is the default class). It's updated on the Git repo and I'll have an executable update in a couple of days. I've not seen an error at all in the Engine proper. Just to check, I deleted EVERY unit in the units.xml and played the current DEBUG level and The Lion Throne prologue, and no errors occurred -- besides like the prologue making no sense because Ophie and Prim never show up.

     

  16. 11 hours ago, djtrak said:

    So I haven't managed to fix the problem but I have been working around it hoping that I'll eventually find the culprit. Meanwhile I had some ideas that I am not sure are doable so I came here to make sure; is it possible to get information on which type of tile an unit is currently standing? I was thinking about making something like the Indoor/Outdoor Fighter skills but haven't found a way to get tile information.

    Can you receive PMs? I sent a PM to you about your death quote info problem earlier this month. The problem is not with your death_quote_info.txt script, it's earlier in the chain -- probably your interactScript.txt for the level. Send me that one and I can take a look again.

     

    Also, tile information is readable, as long as the gameStateObj is accessible. So you can read tile information from events scripts and from the "mt", "hit", etc. item components. Here's an example for the latter:

        <status name="Ranger's Guile">
            <id>Rangers Guile</id>
            <image_index>8,1</image_index>
            <desc>Grants +30 hit while on Plains or Forest.</desc>
            <components>hit,class_skill</components>
    
            <hit>30 if gameStateObj.map.tiles[self.position].name in ('Plain', 'Forest') else 0</hit>
        </status>

     

    12 hours ago, djtrak said:

    Another thing I wanted to make were event based promotions but I believe that the promotional items are the only way to promote units right now, it's unfortunate since the promotional items force the promotion selection. I guess it's possible to have repeated classes and for example just have Fighter1 promote to Warrior and Fighter2 promote to Berserker although that's not a very elegant solution.

    Yeah, this doesn't seem to possible right now. If a class has a choice of promotions, that choice is always available no matter how you promote.

    12 hours ago, djtrak said:

    One last thing, does making the LVL of a weapon a specific character's name eliminate the need for weapon rank on that weapon's type? I tried to port Wyrmsfire, changing the LVL of it to the name of one of my characters, but the spell appears greyed out and isn't usable, am I missing something?

    Changing the LVL of a weapon to a specific character obviates the need for any specific weapon rank on that weapon type, but you still need to have at least 1 point in that weapon to wield a weapon of that type. As an example, making Wyrmsfire an "Ophie" LVL weapon would not let Ophie use the weapon while a Myrmidon (since Wyrmsfire is not a sword). As far as I know this is how Fire Emblem normally works. For instance, I believe Chrom can't wield Falchion while an Archer.

  17. New build of the Engine is up. v0.9.3.11

    14 hours ago, BBHood217 said:

    I think I've also figured out the cause.  It happens when, after merging an item to full uses, you then try to take an item from the convoy without backing out of the menu

    Fixed. Thanks for the error log.

    14 hours ago, BBHood217 said:

    I'm not entirely sure myself what the cause could be, so maybe it'll be better if you just get everything and download the whole game if it's not too much trouble for you.  You can place a generic princessboss in the debug level, and then try to load the debug level in the game and see what happens.

    Okay I figured this one out too... It's a really insignificant bug on my end, but it basically meant you couldn't have tier 3 or greater generic units. The code would enter an infinite loop on trying to process any tier 3 or greater generic units. This has been fixed in v0.9.3.11.

    2 hours ago, djtrak said:

    Although it seems that updating broke something, I am using 'replace_tile;2,8;1' to change a tile in the intro script and this was working with an older version although now I am getting the following bug:

    Thanks for the bug report. This has been fixed. There may be a couple of additional bugs like this lurking about. I made the Tile Objects check their position at instantiation because I want to catch all weird bugs where a tile object does not have a position. This is what caught a different unrelated replace tile bug.

    2 hours ago, djtrak said:

    I am also having a problem for some time now with both the newer version and an older one, where any time(when a unit causes a game over screen it works fine) a player unit dies the game crashes.

    This is likely an issue with your death_quote_info.txt script. There's an "if statement" you wrote somewhere in the script that the Engine is incapable of parsing. You can give me the debug.log.1 that has the issue + the death quote info script and I can take a closer look if that's not enough information for you to solve the issue.

  18. On 12/23/2019 at 3:16 PM, BBHood217 said:

    - Something about the Merge command is causing a crash, happening around when you try to merge more than one item in one session (as in without backing out).

    I've not been able to find this bug -- I tried multiple merges of one item, and multiple merges of different items, both in the same session, and nothing broke on my end. If you can find a specific way to recreate the bug, please forward it to me -- or the error message, so I at least have an idea of where to start.

    On 12/23/2019 at 3:16 PM, BBHood217 said:

    - Are skill charges supposed to carry over between chapters?  Skill charges are empty when starting a chapter after opening the game, but not in the next chapter if you keep on playing.
    - Sol is now a proc skill, but its description still calls it an activated skill.  Also, is there a way to bring back the activated versions of Sol and Luna?
    - "Discard_info" doesn't seem to work, it just shows "Discard" over and over instead of the defined string.  "Storage_info" is fine though.

    These are now fixed in the latest update to the Engine (v0.9.3.10). The activated versions of Sol and Luna are the default, but the proc version are also still around in the status.xml if you wanted to use them instead as a basis.

    On 12/23/2019 at 3:16 PM, BBHood217 said:

    - This is kind of a big one.  You know how the turnwheel has limited uses?  Turns out that number of uses is just an illusion and it can go into negative numbers.  So the turnwheel actually has infinite uses, and people can just choose to play along with the number of uses or not.

    As far as I can tell, this should only happen when "cheat=1" is set in the config.ini file. If so, this is a feature, not a bug -- so it's easier to test with. Switch it to "cheat=0" in the main "Data/config.ini" when you ship the game.

    On 12/23/2019 at 3:16 PM, BBHood217 said:

    - This one is odd and hard to describe.  My game has a unit called PrincessBoss; and for some reason when a generic princessboss is in a map, trying to load that map causes the game to hang.  It just freezes, with no error messages whatsoever.  It runs fine if the princessboss is a character though.  I don't know what to make of this.

    I have no idea where to start on this one either -- if there is no error message, then this will be very hard to debug. If you can send me the minimum data necessary to repeat the bug, I can take a look. It only happens with the one class type? If so, I would check the images associated with the class type -- maybe one of them is missing or buggy? But I really don't know...

    On 12/27/2019 at 12:18 PM, djtrak said:

    I started using your engine recently and I was trying to create a chapter like the wagons one in Lion Throne but I can't seem to find the script where you increase the dead_wagons or escaped wagons constant, any chance you could help with that? Also, is it possible to create exp potions that function as the bonus exp mechanic in  path of radiance?

     

    Edit: Re-read the tutorial and managed to see that they are incremented in the death and escape txts.  The exp potions can maybe be made with the call item script txt since there is a give exp command, but i can't find any example on how to use call item script, any suggestions?

    I'm glad you figured it out.

    The call item script is very elite tech for the Engine, and most of the things you could do with it would cause the game to crash unceremoniously, so I don't recommend using it if possible. However, the exp potion idea is a good case for using it. Try setting up an item like so:

        <item name="Exp Drink">
            <id>Exp Drink</id>
            <spritetype>Consumable</spritetype>
            <spriteid>8</spriteid>
            <components>usable,uses,map_hit_color,call_item_script,booster</components>
    
            <uses>2</uses>
            <RNG>0</RNG>
            <value>300</value>
            <desc>A draught that gives 50 exp.</desc>
    
            <map_hit_color>96,144,232</map_hit_color>
        </item>

    The item must have the call_item_component component, booster component, and usable component to work.

    Then, create a file called "Data/callItemScript.txt" in your Data directory.

    # A sample call item script
    if;self.unit2.id == "Exp Drink"
        give_exp;{unit};50
    end

    The first unit is the unit you are using the item on, and the unit2 is the item itself. This script is shared by all items that have the call_item_script component, so if you have more than one you must check the item id to determine what to do -- just like I did. Edit: Also, this will only work in the newest update to the Engine since I fixed a bug associated with the call item script component.

     

    There's a new build (v0.9.3.10) out new that fixes these bugs described above, along with a terrain_layer bug that someone else reported to me directly. Happy new year!

  19. On 12/20/2019 at 7:23 PM, BBHood217 said:

    It seems to be in regards to the List command, specifically when using it to swap items with the convoy.  At least I think that's the cause.  Then it crashes when attempting to save or play the map afterwards.

    Thanks for the bug report! I never would have found this without the report! Saving the turnwheel's action log is very complicated, and it was trying to save the convoy as a unit when this occurred. There's a new upload of the Engine (v0.9.3.9) at the usual place which has this fixed, along with a couple of other small trade menu related issues.

    I also added a title screen particle flag to the constants.ini file. 

    You can add the line

    title_particles=None

    to turn off the particles on the title screen, or set it to one of ["Smoke", "Fire", "Dark"] (the three weather systems that actually work on the title screen). For instance:

    title_particles=Fire

    to get Fire. "Smoke" is the default. "Dark" is kind of boring. "Fire" looks pretty neat though.

  20. 44 minutes ago, BBHood217 said:

    I can't seem to change the "money" constant.  Neither "set_game_constant;money" nor "inc_game_constant;money" work, my funds still show 0.

    Try using the "gold" command instead. Because I added support for different parties in the Engine, there is no longer one single money constant. Now you use the "gold" command, which can be done like this:

    gold;1000

    to give 1000 gold to the current party, or like this:

    gold;2000;Greil_Mercenaries

    to give 2000 gold to a specific party. I will have to update the wiki with this change. I'll also see about adding a no banner version, since there currently isn't one.

  21. 17 hours ago, Athomus said:

    Everytime I try to run the LevelEditor, I get this error message:

    "Traceback (most recent call last):
      File "*****", line 4, in <module>
        from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QDockWidget, QMainWindow, QErrorMessage, QFileDialog, QInputDialog, QMessageBox
    ImportError: No module named PyQt5.QtWidgets"

    I have python and pygame both installed?

    I'm assuming that you are running the base Python version of the Engine, not the Windows executable. It's not mentioned in the tutorial (which is my oversight -- sorry about that), but you will need to have PyQt5 (a GUI framework) installed to run the LevelEditor.py as a Python script. I don't know your method of installation of Python, so I can't necessarily recommend any specific way of installing PyQt5. I use Anaconda, so for me PyQt5 comes pre-installed, which is why it is my oversight.

  22. 1 hour ago, BBHood217 said:

    Is the "num_levels" constant still used?  I noticed that it's missing from this new version, so is it not needed anymore?  Will the game still work fine and play through all the levels even if it has more levels than what the Lion Throne has?

    Yes. The game can determine the number of levels at runtime now automatically. Lines 80 - 150 of the Code/configuration.py file contains a list of every constant currently accepted in the constants.ini by the Engine.

    1 hour ago, BBHood217 said:

    Also, is that flag for the title screen particles implemented yet?

    Not yet. It's on the to do list. I'll probably add the flag as an option in the constants.ini file but its not high priority since there is a solution, even if the solution is kind of jank.

     

    I also forgot to mention that the trading menu had a usability upgrade thanks to djnemec of Gitlab. He upgraded the code so now the trading menu should behave more like the GBA games.

  23. A new version of the Engine has been posted that fixes some bugs I've received reports about. The current version of the Engine is now v0.9.3.8. Thanks for your patience! 

    On 12/3/2019 at 6:10 PM, BBHood217 said:

    The Steal command isn't working.  I select it, but nothing happens.  This is even while the thief's speed is higher than the enemy's.

    Also for combat animations, a character's displayed name is being used when promoting instead of their id name.

    These bugs should now be fixed.

    On 11/13/2019 at 12:08 PM, rainlash said:
    On 11/3/2019 at 1:07 PM, BBHood217 said:

    I just got this too during testing when I tried to Hex an enemy with Reflect and Resist Status (it was a final boss).  Any suggestions for a temporary fix, or should I just wait for the next version?

    Thanks for the bug report! No temporary fix, just a weird corner case that popped up from the Python 2 -> 3 transition that I didn't nail down. It's the "Resist Status" status that is causing the problem. The next version of the Engine should have it fixed, along with the weird Howl/Gleipnir animation effect.

    Also these.

  24. 6 hours ago, BBHood217 said:

    Is there a way to get rid of the particle effects in the title screen (it makes sense for Lion Throne but not so much when it's a different background that's not very fiery)?  I thought the tutorial mentioned it, but it turned out that the tutorial didn't mention them at all and in fact left them there.

    So there's an easy but somewhat hacky way right now. In the future I'll add a flag to turn off the particles, but for now:

    Navigate to Sprites/General/Weather/SmokeParticles.png and open it in GIMP or Photoshop. You can't use Paint for this because Paint won't preserve the transparency of the image. Then, just make the whole image completely transparent. Save and overwrite the image. Now, even though the particle effect is still on, you won't see any particles in the title screen.

  25. 5 hours ago, Art2193 said:

    Is it possible to confer a skill to a unit via an usable item?

    Sure is! Here's an example:

        <item name="Phase Scroll">
            <id>Phase_Scroll</id>
            <spritetype>Consumable</spritetype>
            <spriteid>0</spriteid>       
            <components>usable,uses,beneficial,status</components>
     
            <uses>1</uses>
            <RNG>0</RNG>
            <value>2000</value>
            <desc>Grants Shimmer skill permanently.</desc>
            
            <status>Shimmer</status>
        </item>

    You could make the Shimmer skill have a time limit to only give Shimmer temporarily to the unit that uses the item.

    On 11/3/2019 at 1:07 PM, BBHood217 said:

    I just got this too during testing when I tried to Hex an enemy with Reflect and Resist Status (it was a final boss).  Any suggestions for a temporary fix, or should I just wait for the next version?

    Thanks for the bug report! No temporary fix, just a weird corner case that popped up from the Python 2 -> 3 transition that I didn't nail down. It's the "Resist Status" status that is causing the problem. The next version of the Engine should have it fixed, along with the weird Howl/Gleipnir animation effect.

×
×
  • Create New...