Inactive Miniion

Discussion in 'Modules' started by overdhose, May 12, 2012.

  1. overdhose

    overdhose Active Member

    (Note: Incubator header added by Cervator, and thread itself used to contain other creature design notes split out into Creature Definitions - might read sort of funny. The idea is that this is a Core Content thread spawned from the central topic of Creatures themselves, this being specific to interacting with them as minions (the extra 'i' is flavor by overdhose, not a typo. Down the road this might become a more general creature control scheme).

    Edit 2: Wiki link one for Miniion recipes, wiki link two for tutorial on how to import a model into Terasology for use as a Miniion or otherwise

    Name: Miinions
    Summary: Deals with interacting with creatures beholden to your will for some reason. Comes with a menu bar and context options for commands
    Scope: Core Content
    Current Goal: Solidify further, maybe make a UI element for a message queue, support different creatures, etc
    Phase: Implementation
    Curator: overdhose assisted by Josh
    Related: Miinion roadmap, Creature Definitions, the sample mod incubator thread for adding Dungeon Keeper-like slapping with the user's cursor for added motivation ;)

    MOD REQUIREMENTS:The miniions mod is a mod that can't live on it's own. It currently requires you to enable the Candyblocks, Miniions and OreoMinions mods to play. Craft system will most likely join that list shortly.

    Special thanks to everyone who enabled the creation of this mod. And that list is long.

    :eek: Miniions :eek:

    looking for craft info? please have a look at the miniions wiki

    The original miniion toolbar idea was dropped for a more conventional approach, dropping the need to press a key to activate the mode. Instead, you now need to be holding a minion command tool, which will be explained a little further.

    The miniions also evolved into even more goofy oreons. These little critters seem to have a plan to transform your lush Terasology world into a giant chocolate covered cake.

    I'll do my best to guide you through some of the concepts.

    To start, you'll probably want to summon some oreons into your world. This is achieved through using 3 items :
    the cardbook : cardbook.png : this magical book will convert empty cards emptycard.png into filled cards filledcard.png which allow you to summon oreons. Put the cardbook into your toolbar and right click it. The open book will invite you to place an empty card in it. If you do so, a combo box will appear that lets you select the type of oreon you want to summon. There are currently 2 : builders and guards. Select one and press the [create card] button. A filled card will be sent to your toolbar, or your inventory if the toolbar is full. To use the filled card, put it in your toolbar and use it by right clicking on a block.
    Only filled cards created this way will summon oreons.

    Once you have some oreons, you will probably want to order them around. You will need a miniion command tool minioncommand.png to do so. To use it, again, put it in your toolbar and right click. If you press and release without moving, a popup will open while pressing the mouse down and close when you release.This can be used to quickly check something without interacting. To actually press buttons in the popup, you need to right click, and while holding the button pressed, move the mouse cursor over the popup. When the cursor is above the popup, you can release the button, the popup won't close until you right click again or press escape.
    Initially, no miniion will be active, to activate one press one of the arrows left.png right.png to activate a summoned miniion. These arrows can also be used to browse through the miniions you summoned. It can feel a little awkward at first, but like many things, you get used to it after a while.

    You will also notice a slightly bigger left arrow at the edge of the popup, pressing that one will open a stat window that is still under construction, but will update along with the mod. There is also a settings button, it currently has a setting to be used with the zoning system explained a bit further. Only the settings button can be pressed when no minion is selected.

    You will also find 2 down arrows, one is actions and one is behavior. These can also only be pressed when a minion is selected. They allow you to set the selected miniion's behavior or execute other commands. The default behaviour is stay. if you change it's behavior to follow, the minion will follow you around when you move. If it gets stuck it will teleport to you after a couple seconds. Other behaviors will be explained in a bit.

    In the actions menu you will find a minion list. This list can also be used to select a specific miniion, and gives a better overview of how many miniions you command. If you got bored by now and decide to give up, you can press the byebye button to kill the active miniion. To access it's personal inventory, press inventory.

    To command miniions more efficiently, you will have to create some zones. Zones are created by using the zone tool zoneselection .png and zone book zonebook.png . To use the zone tool, put it into your toolbar and right click a block. The block will now appear as selected (a purple glow). Then, depending on the setting I mentioned before, clicking a second block will either show that block as selected, or show an outline of the zone you selected. Be careful with the selection outline though, when dealing with larger zones (up to 50X50X50 blocks) it can and most likely will cause performance issues. I'm hoping to resolve that in the future (or find a victim to help me with that). The zones are limited in size to prevent issues, but might be increased later on. If you activated the setting but select a zone larger then 50, only the start and end block will be rendered as selected.

    Now, to actually save the zone, you need to put the zone book in your toolbar and right click it. By default, it will show you the zone you selected on the right page. It will propose a name for the sone you can edit, and show you some info on the zone. It will also have a combo box where you have to select what type you want the zone to be, either gather or terraform are available for now. After you selected a zone type, pressing the save button will close your book if all was ok, or show you an error if not.

    Once you have defined at least one zone, you can assign a miniion to it, by opening the miniion popup and going to actions and pressing zone. A new menu will appear with zone categories, select the category you created and the zones of that type will appear in the menu. Selecting a zone will assign it to the miniion, which will be reflected in the popup. You will probably wonder how you have to create a work zone now as you saw the category, it's a bit different, I'll get to it. Once you assign a zone to a miniion it will immediately start moving towards it, and teleport to it if it gets stuck along the way. If you now change it's behaviour to the matching zone, it will start working. If you have selected a zone but aren't happy with it's layout, right clicking a third block will reset your selection, and you can start over.

    You can open the zone book and select existing zones on the left page at any point to delete it if you no longer need it.

    When terraforming, the oreon will automatically transfrom the zone into chocolate, however you can change this behavior by going to actions, pressing recipes and assigning a recipe to the oreon. When he's gathering, gathered blocks will be added to it's inventory. If at some point you want to cancel your orders, go to actions and press the [clear orders] button. You can also use this command if your miniion seems to be misbehaving.

    To create a work zone, you will need a minion bench, which is a block that can be placed in the world. Once placed, right click on the bench once (and only once) with the zone selection tool, and then open your zone book again. You will notice that the combo to select zone type won't show up, and that the type is locked as "work". Edit the name if you like, and press save, the book should close again. The bench can be used to have your oreons craft cake blocks, but they will need resources to do so. Go to actions, press zone, work, and assign a work zone to an oreon. Then select a recipe. In the popup the recipe will show you what resource(s) the minion will need to create it. Put the required resources in his inventory or have him gather them first. To start the crafting, change hos behaviour to work.

    In a last minute update, the first stage of farming was also added already, to include some fixes. Farming follows the normal zoning scenario, just that it requires the zone to be level (so no height elevation).
    Use with care, as creating a farm zone will add indestructible blocks to your world, and the procedure to remove them again wasn't added yet. Create a farm zone, assign it to an oreon, and set his behaviour to Work. He will create farmland and plant Oreonplants on them that wil lslowly grow. But that's all it does for now. Also, you can create storage zones similarly to work zones but with chests, but they also have no functionality yet.

    Though it might still be a little complicated, I hope you weren't discouraged by all this info and have some fun playing with the oreons / miniions. I'll update the wiki shortly with possibly even more details.
    • Winner Winner x 1
  2. eleazzaar

    eleazzaar Member

    Lots of spoken clips can be problematic for an open source project. Not only is spoken audio less editable than visual art or code, but the player base of a project like this is likely to be highly international, just English doesn't really cut it.

    I'd recommend using "speech bubbles" with icons, floating over their heads -- sorta like the Sims. Also like the Sims (and these are the only things about the Sims i'd recommend copying ;) ), there should be an audio component to catch the players attention, but rather than having the minions speak English, or any real language, have them speak gibberish, or if they aren't particularly humanoid, have them hoot, tweet, growl, bray etc. This give you a lot more flexibility to add new content, since they same bit of audio gibberish can be used for similar situations, where dialog in a real language is much more awkward to repurpose.

    And no translating is needed. A very significant advantage, because even large, successful projects have issues keeping many text strings translated and up-to-date.
  3. Cervator

    Cervator Project Lead and Community Wizard Staff Member

    Yay more stuff! That all sounds great, and yeah, cube minions too :D

    I pulled the latest and it works well. Only thing I can find at the moment that might be an issue is:

    1) 'x' to minion bar
    2) Summon minion
    3) Select inventory from right click
    4) Close inventory
    5) 'x' back to normal bar
    6) Any right click while normal bar is active still opens the minion inventory :)

    I'd love to see the long-range target ability, that would be handy indeed with minions

    As for speech, I'd concur with speech bubbles and greeting "noises" - which could include inaudible mumbling from humanoids or what not
  4. overdhose

    overdhose Active Member

    Thanks for the info

    and yes I have noticed as well now playing around with it. I need to build a decent structure somehow to handle all that, add some parameters so this doesn't happen anymore. One patch I could easily apply it to set the behaviour back to "move" after the inventory was opened.

    I started looking into this but couldn't figure out the logic behind the whole RayBlockIntersection.Intersection. It reads the lenght from a config file as far as i understand, but have no idea about how to alter it. I put it on hold myself atm, hints and tips welcome.

    the boundingbox code I found in SimpleBlockLoader :
    if (c.renderBoundingBox != [:]) {
       "Setting renderBoundingBox boolean to: " + c.renderBoundingBox
                b.withRenderBoundingBox((boolean) c.renderBoundingBox)
  5. B!0HAX

    B!0HAX New Member

    Summon Minion...


    (or Bottled Minions?)

    Attached Files:

  6. begla

    begla Project Founder and Lead Developer Staff Member

    Nice idea. How many wishes will be be granted... Three? :twisted:
  7. overdhose

    overdhose Active Member

    nice to see you around...

    any wish granted is welcome, I work with what I have / can achieve.
  8. begla

    begla Project Founder and Lead Developer Staff Member

    Oh, I meant wishes related to our... Genie uh minion in a bottle. :laugh:

    And btw.: I really like what you have done so far. :!:
  9. overdhose

    overdhose Active Member

    I know :twisted:

    I have a tendancy to poke people to follow in my direction, I try to control it and my enthusiasm but not always succesfully.

    After looking at code created I hardly understand, I have a hard time accepting praise for what I did. I used what was already available, poked it around and did something with it. I hope I'll be able to keep contributing a bit, crazy ideas I have every 5 minutes, so i need to queue them myself.

    cheers :D
  10. dei

    dei Java Priest Staff Member

    Does anyone knows the game uprising? It was a (early 3D, with pixels dimensions of around 1 meter) first-person tank-shooter with some helping units like tanks, infantry, airplanes and bombers.

    They enabled the player to engage in battle himself while commanding his units using the F1-12 Keys. Twelfe Minions seem enought to me (else we introduce the system that you can control the twelfe nearest minions without switching into this "minion mode"). Would like to see this functionality in terasology too. Would simplify GUI-Usability.
  11. overdhose

    overdhose Active Member

    the current miniion bar is a uch quick put together idea to find a way to interact with minions, it would amaze me it will remain in this form besides as maybe a mod for the nostalgic feeling of it.

    It's basically a copy of the main toolbar with an extra layer, my main goal is to provide a way to interact with the world without disturbing the immersion to much, and I think it's important to just provide "A way" to do this at this point to motivate people into creating some extra content, or test possible content they create. After all, what pulled me towards this project was the words "minion interaction".

    As for the future of the minion bar itself, i don't know, it's not something I worry about, just see it as a alpha mod atm, because that is what is, a mod I created on my own, noone voted on this or agreed to make it a standard.

    I haven't played uprising but there are only 9 minion slots atm, and binding the keys to the F functions (which will become available at some point) should pretty much cover your proposal, so I don't think it's an unrealistic request nor a lot of trouble to implement something of the kind. I do plan to make the minion bar optional by default, I actually should have added commands already for that, but I'm lazy heh
  12. Cervator

    Cervator Project Lead and Community Wizard Staff Member

    It is definitely helping with creativity and showing off potential, so it's a good thing - and yeah it might change completely, but that's fine, edit mercilessly just like Wikipedia till we get to a better place :D

    I tried merging in the last few commits from GitHub, but I think you might have added a new jar file without declaring the dependency to be pulled via Gradle?

    That doesn't resolve for me, anyway, and I don't see any build.gradle tweaks or magic new jar files :)
  13. eleazzaar

    eleazzaar Member

    Maybe to encourage minions to work on something in particular, you could place a cake in the area. (or whatever kind of special food bribe makes sense for the minion, for dwarves, probably a keg)

    That could be a "next step": making minions attracted to certain kinds of blocks
  14. overdhose

    overdhose Active Member

    to explain the whole manus thing, sorry if it confused some :

    Don't misunderstand, the thing was like eleazzaar said meant as an interview with a keeper, and that's what I would like personally, that's why I answered as Manus, not as the guy currently working on the minion system.

    I'll do my best to grant wishes and do my best to achieve as much as i can, untill someone better comes along and takes the torch. ^^ It's impossible to grant all wishes, and for the moment I like my approach of easily achivable goals, because there is a basic progress and interaction in it as entertainment value.

    One last thing : I meant it would be nice if someone could make a flag element to put in the world, would enable at leats some form atm, eventual final system up for grabs later.
  15. overdhose

    overdhose Active Member

    yeah I commented out the code regarding the Astarpathing, so just remove those imports for the moment. I'll push a fix for that. I left it out because I tried to use threading in it and a gui showing me the progression the current implementation makes, still need to figure some things out, like how to use the threading in a productive manner and how to solve the 3d implmentation of A*.

    Some problems I'm dealing with atm : let's say the minion is standing in front of 2 block tall wall, which is part of a hill, and it's destination is the top of the hill. I can not add the 2 tall block to the unavailable nodes list, because what the minion needs to do is go left, then jump up 1 block and then jump on that 2 block high wall to continue towards the top of the hill. However, as I can't add the location to the unavailables the minion keeps jumping in front of the 2 block tall wall. And that is only taking up in consideration, the same will go for down. So in order to solve this issue I'll have to implement temporary up and down unavailable node list at +2y and -2y which resets every time we found available paths between +1 and -1 y. I guess that's the issue my predecessor fought with, he actually dropped checking X and Z up and down, and concentrated on the diagonals, but I don't think that's the way to go. However, adding those temp nodes means I'll have to check 24 nodes instead of 8 (neighbours of 1 block), which will of course impact performance almost by a factor of 300% compared to the 2d implementation. For the moment I dropped diagonals completely to reduce the nodes to 12 (4 neighbours * 3), which might be more realistic performance wise. That's what I still need to work on now. I'll clean out the threading and push something when it's finished.
  16. overdhose

    overdhose Active Member

    Again jumping guns here, another idea I had thanks to woodspeople immense input, but this might only be suited again for a dungeon keeper oriented appraoch, is a comand queue filled with minion wants commands and keeper order commands. Minion needs to build, but minion wants to play cards, so minion adds play cards to it's queue. i slap minion, minion drops play cards commands from it's queue, and as a result it's mood goes down. Other commands it might have added are eat, because it's hungry and which would have a high priority and isn't dropped by a simple slapping. A slapping combo however might scare it so much it would even force itself to starve itself to death executing a task. (there he goes again about a slapping combo sigh)

    Might sound extreme, and so far it's hard to tell if that would suit gameplay, as I don't even know yet if there would be situation in which you need to finish building something so fast you would actually sacrifice minions in the process.
  17. Immortius

    Immortius Lead Software Architect Staff Member

    A* doesn't typically mark nodes unavailable as such. When processing a node, you just ignore all nodes which are not connected (don't add them to the queue or mark them as open or closed or anything). Then if you later end up processing a node from which it is connected you can add it. If you are equating blocks to nodes (sensible), then you skip all solid blocks.

    I have a 2½D A* algorithm I can share if you like (2D but considers heights and slopes of adjacent tiles).
  18. overdhose

    overdhose Active Member

    made some progress on the pathfinding finally, but have a question regarding the world positioning etc.
    The way the system works now, you click a block which gives you a vector eg -24, 50, -24

    however getting the location of a minion, from its location component, would give a Vector of 24, 50, 24
    I'm trying to figure out what the correct way is to compare locations, I assume it's the worldpos rather then the localpos, but I'm still a bit puzzled what the diff / cause of the signing is, and if just taking the absolute value (which is what I do for now out of ease) is the way to go, even if it is to calculate the worldpos. Granted, haven't looked in much detail yet at the worldpos, just posting this in case anyone has remarks/hints/tips about the whole system or what the preferred method is/will be, or let me know that my reasoning is completely wrong about the subject.
  19. Immortius

    Immortius Lead Software Architect Staff Member

    WorldPos and LocalPos should be the same unless the LocationComponent has a parent - if it isn't then there is a bug. World pos is an absolute position, local pos is relative to the parent.
  20. overdhose

    overdhose Active Member

    it had a parent yes, actually most debugging I did they always seemed to have a parent. But thanks for the info, will sure save me some errors along the line

Share This Page