Dragon War - Official Thread


  • Admin

    @Cernel I have identified all the Air only connections of the map, where no land units may cross.
    All-Air-Only-Connections.txt

    Also here is the Air unit list
    All-Air-Units.txt

    What do you mean by errors messages? I am not implementing anything that will result in constant error messeges or that need player enforced rules. Then I will rather just let the map be like it is.

    But if it is possible to implement without weird hacks and errors, then flight over rivers will be implemented 🙂


  • Moderators

    @Frostion Practically, when you try to move land over air only connections, you will have this message on the bottom bar:
    "Must control...to move through".

    What would you prefer the "..." be saying? That's the only thing I can customize.

    You don't need to add all air units, because by default all air units ignore canals, but I can add it, so it will be the easiest in case you might want to add non air units in the future.


  • Moderators

    @Cernel said in Dragon War - Official Thread:

    @Frostion Practically, when you try to move land over air only connections, you will have this message on the bottom bar:
    "Must control...to move through".

    What would you prefer the "..." be saying? That's the only thing I can customize.

    You don't need to add all air units, because by default all air units ignore canals, but I can add it, so it will be the easiest in case you might want to add non air units in the future.

    Would an error message like this (look at the bottom bar) be fine?
    20200125.png

    Any better ideas, for what to have for the "...", as I described?


  • Moderators

    Also, how about having air-only connections in the narrow sea passages, meaning:
    Questos - Northern Baldoria
    Blood Islands - Blood Hills
    North Goronmok - Stormcrag
    and so on?
    However, in this case, you'll need to visually indicate such air only connections on the map (with arrows or such, preferably as decorations), as I see in the map there are a lot of possible cases.
    So, let me know if you like this idea or not (basically, if you have a strait that it is about as narrow as a river, you may want air to move across with a single movement, as well). If yes, you will have to give me the full list of such other air only connections too.


  • Admin

    @Cernel Ahhh OK. I thought it was an error that showed up in a window. I can live with that kind of error you are showing. I think the problem with this error is just a matter of what that text this kind of error should say. It seems more like a restriction, something that cannot be done, than it looks like an error.

    I originally thought about letting air units pass over rivers and narrow passages. But I think I would want to stick to just rivers. There would be so many passages that should otherwise be judged either passable by air or not and no real defining criteria. And the map would be plastered with graphical arrows to explain where passage was possible. I would rather just say that crossing a piece of sea is crossing a piece of sea, meaning going over or meeting the units there.

    I have made an updated list of “Air only connections” if you would like to use it in a set of codes?
    all-air-only-connections.txt


  • Moderators

    Bug Report: With the map unzipped, and the "map" folder renamed to the map name, I get these errors, upon starting the game:

    
    GRAVE: No image for unit type: UnitType{name=Pirate}, player: PlayerId named:Crowton
    java.lang.RuntimeException: No image for unit type: UnitType{name=Pirate}, player: PlayerId named:Crowton
    	at games.strategy.triplea.image.UnitImageFactory.lambda$getImageDimensions$1(UnitImageFactory.java:315)
    	at java.base/java.util.Optional.orElseThrow(Optional.java:408)
    	at games.strategy.triplea.image.UnitImageFactory.getImageDimensions(UnitImageFactory.java:313)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.createUnitStackImage(AvatarPanelFactory.java:75)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.buildPanel(AvatarPanelFactory.java:52)
    	at games.strategy.triplea.ui.unit.scroller.UnitScroller.lambda$drawUnitAvatarPane$4(UnitScroller.java:173)
    	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    	at java.base/java.security.AccessController.doPrivileged(Native Method)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    
    gen 26, 2020 6:14:48 PM org.triplea.game.client.HeadedGameRunner lambda$main$0
    GRAVE: No image for unit type: UnitType{name=Barbarian}, player: PlayerId named:Crowton
    java.lang.RuntimeException: No image for unit type: UnitType{name=Barbarian}, player: PlayerId named:Crowton
    	at games.strategy.triplea.image.UnitImageFactory.lambda$getImageDimensions$1(UnitImageFactory.java:315)
    	at java.base/java.util.Optional.orElseThrow(Optional.java:408)
    	at games.strategy.triplea.image.UnitImageFactory.getImageDimensions(UnitImageFactory.java:313)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.createUnitStackImage(AvatarPanelFactory.java:75)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.buildPanel(AvatarPanelFactory.java:52)
    	at games.strategy.triplea.ui.unit.scroller.UnitScroller.lambda$drawUnitAvatarPane$4(UnitScroller.java:173)
    	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    	at java.base/java.security.AccessController.doPrivileged(Native Method)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    
    gen 26, 2020 6:14:48 PM org.triplea.game.client.HeadedGameRunner lambda$main$0
    GRAVE: No image for unit type: UnitType{name=Murloc}, player: PlayerId named:Crowton
    java.lang.RuntimeException: No image for unit type: UnitType{name=Murloc}, player: PlayerId named:Crowton
    	at games.strategy.triplea.image.UnitImageFactory.lambda$getImageDimensions$1(UnitImageFactory.java:315)
    	at java.base/java.util.Optional.orElseThrow(Optional.java:408)
    	at games.strategy.triplea.image.UnitImageFactory.getImageDimensions(UnitImageFactory.java:313)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.createUnitStackImage(AvatarPanelFactory.java:75)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.buildPanel(AvatarPanelFactory.java:52)
    	at games.strategy.triplea.ui.unit.scroller.UnitScroller.lambda$drawUnitAvatarPane$4(UnitScroller.java:173)
    	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    	at java.base/java.security.AccessController.doPrivileged(Native Method)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    
    gen 26, 2020 6:14:48 PM org.triplea.game.client.HeadedGameRunner lambda$main$0
    GRAVE: No image for unit type: UnitType{name=Kobold}, player: PlayerId named:Crowton
    java.lang.RuntimeException: No image for unit type: UnitType{name=Kobold}, player: PlayerId named:Crowton
    	at games.strategy.triplea.image.UnitImageFactory.lambda$getImageDimensions$1(UnitImageFactory.java:315)
    	at java.base/java.util.Optional.orElseThrow(Optional.java:408)
    	at games.strategy.triplea.image.UnitImageFactory.getImageDimensions(UnitImageFactory.java:313)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.createUnitStackImage(AvatarPanelFactory.java:75)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.buildPanel(AvatarPanelFactory.java:52)
    	at games.strategy.triplea.ui.unit.scroller.UnitScroller.lambda$drawUnitAvatarPane$4(UnitScroller.java:173)
    	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    	at java.base/java.security.AccessController.doPrivileged(Native Method)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    
    gen 26, 2020 6:14:48 PM org.triplea.game.client.HeadedGameRunner lambda$main$0
    GRAVE: No image for unit type: UnitType{name=Gnoll}, player: PlayerId named:Crowton
    java.lang.RuntimeException: No image for unit type: UnitType{name=Gnoll}, player: PlayerId named:Crowton
    	at games.strategy.triplea.image.UnitImageFactory.lambda$getImageDimensions$1(UnitImageFactory.java:315)
    	at java.base/java.util.Optional.orElseThrow(Optional.java:408)
    	at games.strategy.triplea.image.UnitImageFactory.getImageDimensions(UnitImageFactory.java:313)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.createUnitStackImage(AvatarPanelFactory.java:75)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.buildPanel(AvatarPanelFactory.java:52)
    	at games.strategy.triplea.ui.unit.scroller.UnitScroller.lambda$drawUnitAvatarPane$4(UnitScroller.java:173)
    	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    	at java.base/java.security.AccessController.doPrivileged(Native Method)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    
    gen 26, 2020 6:14:48 PM org.triplea.game.client.HeadedGameRunner lambda$main$0
    GRAVE: No image for unit type: UnitType{name=Ogre}, player: PlayerId named:Crowton
    java.lang.RuntimeException: No image for unit type: UnitType{name=Ogre}, player: PlayerId named:Crowton
    	at games.strategy.triplea.image.UnitImageFactory.lambda$getImageDimensions$1(UnitImageFactory.java:315)
    	at java.base/java.util.Optional.orElseThrow(Optional.java:408)
    	at games.strategy.triplea.image.UnitImageFactory.getImageDimensions(UnitImageFactory.java:313)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.createUnitStackImage(AvatarPanelFactory.java:75)
    	at games.strategy.triplea.ui.unit.scroller.AvatarPanelFactory.buildPanel(AvatarPanelFactory.java:52)
    	at games.strategy.triplea.ui.unit.scroller.UnitScroller.lambda$drawUnitAvatarPane$4(UnitScroller.java:173)
    	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    	at java.base/java.security.AccessController.doPrivileged(Native Method)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    

  • Moderators

    @Frostion said in Dragon War - Official Thread:

    @Cernel Ahhh OK. I thought it was an error that showed up in a window. I can live with that kind of error you are showing. I think the problem with this error is just a matter of what that text this kind of error should say. It seems more like a restriction, something that cannot be done, than it looks like an error.

    Actually, I tested that those messages, whatever they are, are mostly a moot point, as you get them only if you set the path with "Ctrl", which should be very rare, otherwise the auto path finder will just exclude going through canals you cannot pass, at least as long as it can find any land-only path having no impassable canals, even if the alternative is unreachable too (for other reasons).

    I originally thought about letting air units pass over rivers and narrow passages. But I think I would want to stick to just rivers. There would be so many passages that should otherwise be judged either passable by air or not and no real defining criteria. And the map would be plastered with graphical arrows to explain where passage was possible. I would rather just say that crossing a piece of sea is crossing a piece of sea, meaning going over or meeting the units there.

    I have made an updated list of “Air only connections” if you would like to use it in a set of codes?
    all-air-only-connections.txt

    Definitely, either you make very clear (with dotted lines, or arrows, or something) what land territories across the sea are close enough to be single moved into by air, or you never do it.

    Anyways, this should be the code you need, but be sure to test it for yourself:
    connections_canals.txt

    Two things:

    • I've added all the lists of units that are not validated by the canals but, if they are all the air units in the game, this is useless, as all air units are not validated as default. However, this should allow you adding or removing whatever units with ease, even only using Notepad (search and replace all). For example, if you think there are some units that should be able to swim over a river or, like a skeleton, not needing to breath, just walk on the bottom of the river and re-emerge on the other bank, be sure to add them (and document them all in notes).
    • Since canals require a territory attachment, all those canals are passable as long as you own the "Unit List" territory or it is owned by a player that allows you passing through canals. So, you should be sure this never happening, aside from edit mode (you can also test that if you change ownership of the "Unit List" territory to a player of an alliance, all the players of that alliance will be able to pass through all connections).

  • Admin

    @Cernel the code worked perfectly.

    As I of course did miss a connection where air units should be able to move over a river, I added 1 more connection and 1 more set of canalAttachments.

    When the YAML file is updated a new Dragon War 1.2.7 version is ready for download.

    Thanks for the help! 🙂 I think I will also use this system in Warcraft: War Heroes (No longer called World of War Heroes). There will de quite a few flying units in that map, and it brings much to the map that air units can fly their own ways compared to land units. Can I at some point give you a new list of connections that can be made into canalAttachments? I have no ETA yet.

    Test1.png


  • Moderators Admin

    @Frostion and @Cernel Great work!! This will be a huge improvement for this map! Well done!


  • Admin

    @Frostion I like the update. Though you may need to consider whether air units need to be adjusted a bit since this will make them more flexible and give them more range.


  • Moderators

    @Frostion said in Dragon War - Official Thread:

    Can I at some point give you a new list of connections that can be made into canalAttachments?

    Sure.


  • Moderators

    I think the playability of the map would be greatly enhanced if all unit letters would be substituted by stylized figures. For example, using the ones of Greyhawk Wars:
    Bowmen_original.png
    Bowmen.png
    Knights_original.png
    Knights.png

    I strongly suggest this, as letters are really not very easy to link to their meaning.

    Of course, having so many distinctive, yet small, images would be challenging, and they really need to be distinctive.

    Also, I really wonder why did you decide to go without upkeep. The map having even food, it seems natural to have a food, money, etc. upkeep for units (though, in this case, the free units should be based on user actions, instead of automatically given).


  • Moderators

    Also, there is an annoying maybe bug. If you hold in inventory a unit and an upgrade of it, the program doesn't allow you to place the upgrade of the unit until you have placed the unit. For example, if you have both a village and a town, you cannot place the town until after you have placed the village (somewhere else). This means that if you, in this example, bought a village and a town, on the same turn, you are unable not to place the village, but only the town (to upgrade an existent village), as the notes of this game say you should be allowed to.


  • Admin

    @Cernel
    When I designed the unit images, I thought about using small pictograms/symbols instead of Letters. At the time I was like 50/50 on which way to go. But after messing around with test unit pictures a bit, I ended up with letters, Mainly because the unit type indicator was to be so small. And I felt that an image + an image on top of that was slightly confusing.

    To reinforce the distinguisability (is that a word?) I also gave unit "category" colors. So actually the info give to the player when looking at a unit is player+type+category.

    I felt it best to present that as race image/colored ring + unit type letter + Category color.

    I felt that this would simple things up and help quicken the thinking process when a player glanced at units to spot first ownership then unit type if this was relevant.

    I don't know if I made the right choice, but to me it works fine. And I probably would not make it different if I had the same unit pictures that I had to give additional information. In my Warcraft map I have chosen another path, but that is another discussion.

    Upkeep was also something I tested out, but chose to scrap again. The main problem I see with TripleA and upkeep is, that even thou a player has an income of like +10 Food, and a unit demands 1 Food per turn, he can go way past 10 units via various means depending on the map, and not really suffer any penalty when owning like 20 units while only getting +10 Food every turn. There are maybe more upkeep problems, but I can't recall them atm.

    I would actually find it pretty sweet to have a working upkeep system, so I hope that you are trying it out in the map you are making. I am currently not implementing upkeep as part of my Warcraft map, but I would really like to have it. It would add a new dimension to the game, where players would actively try to find like Food on the map, and then set a goal to get his hands on it, so to expand his forces 🙂

    Village/Town bug is not something I am familiar with. Maybe I have just never been in that exact situation in the game. Maybe @redrum @LaFayette @Hepps or some other clever dude can explain why this is happening. It does not sound like a map specific issue to me, maybe an engine rule?


  • Moderators

    I personally don't have problems with dragons overall, but would prefer they would be more power based instead of being mostly a source of free hitpoints to attach armies. Maybe they should be first strike. Also, with the new engine abilities, I guess it would make sense dragons being forced to fight only by other dragons.

    Anyways, my main suggestion is that dragons consume 1 meat, 1 iron and 1 wood for every hitpoint they repair.

    Why the water dragon is not a submarine?


  • Moderators

    @Cernel Just saying because sometimes people are annoyed by the dragon semi-randomness, but I think all or most would be fine if repairing hipoints would cost some. Is repair totally free of charge at the moment? I'm not suggesting to make dragons optional, as that would be too off with the spirit of the map.


Log in to reply