Just an idea. It would be cool to be able to drag and drop a creature to any slot where it is allowed. Pointing and clicking is okay, too. One issue that could be made more convenient is where you block the paths of creatures and have to undo moves. For example, if you have some Cyclopses and Gargoyles, the Cyclopses could be placed on the 2nd hex during battle phase 1, but not if you place the Gargoyles on the first hex. This forces undo. There really isn't a need to force an undo to allow this kind of movement. Requiring undo doesn't promote anything that I can figure.
If you think about this beyond the trivial example you have provided, I think you will agree that any code to validate this behaviour rapidly gets fairly involved.
The current implementation is the easiest way to ensure rules are fulfilled. Therefore the thing that "requiring undo" promotes is: easy implementation.
Any kind of auto-logic like "ok, that cyc could go there IF user wouldn't have moved gargoyle yet but would do it afterwards" is not only complicated to program, it would make it possibly unbearably slow (possibly exponentially-behaving algorithm growing with nr of creatures to consider).
[[ Even worse, not only would the client side, i.e the user's GUI have to validate the move, the server side, e.g. the public server, needs to re-validate whether the client did sent a valid move once again [[could have been a hacked client that allows "illegal" moves]]. CPU time on the server is extremely precious - it's a single-core virtual server. That's actually the reason why no AIs can run on the public server ]].
This feature here has a really bad "value vs. cost" ratio. I can ad hoc figure out 25 things which would me more useful and less work ;-)
IMHO, resources to implement a "nice to have" thing is typically the most precious resource in open source projects, in Colossus even more than others.... - except if the requester is a possible resource itself.
So, if you are willing to roll up the sleeves to implement it yourself you're welcome :)
Besides, I'll move this to feature requests (it's not a bug).
I personally also am not very keen on drag'n'drop for Colossus.
1) I don't like it much myself in general (getting a cramp in the fingers easily),
2) Colossus isn't using drag'n'drop anywhere, so it's
a) more work to get it implemented [can't just copy-paste from somewhere else inside Colossus] and
b) it would mean inconsistency in the way-of-usage.
Again - I don't mind if you do it, as long as it stays an optional feature and the 2-clicks-mode stays the default behavior. :>)
"Any kind of auto-logic like "ok, that cyc could go there IF user wouldn't
have moved gargoyle yet but would do it afterwards" is not only complicated
to program, it would make it possibly unbearably slow (possibly
exponentially-behaving algorithm growing with nr of creatures to consider)."
This is the second comment that suggests it is not as easily done as said.
I don't think it is hard to do at all. What you need to know is this:
1. At the beginning of the turn, before any creature has been moved, what are all the available hexes for EACH creature? These would INCLUDE
2. At the moment of moving Creature X, show all hexes that were available at beginning of turn, except those hexes that are now occupied (not blocked - there is a difference).
Honestly, guys, I used to be a programmer, but am not much of one any more. I am 44, and my programming days ended back in the days of DOS and dBase III, plus. Things have changed a bit with event based and object based programming. We didn't have that technology back then.
If you guys think it's a good idea and not all too hard, I think it would be nice, too. It just avoids having to undo a bunch of moves and redo them in order to set up your creatures the way you want. Honesty, I am happy this game even exists. I used to play it on the board 25 years ago.
Some keyboard button made it post before I was finished describing what I thought is the proper and easy algorithm.
1. At the beginning of the turn, before any creature has been moved, what
are all the available hexes for EACH creature? These would INCLUDE even those hexes that are currently occupied by ANY creature, including the opponent's creatures. Basically, for each of MY creatures, I want to know every hex within creature's moving distance - just like it's an empty board, but we still respect terrain issues, like bogs.
2. At the moment of moving Creature X, show all hexes that were available
at beginning of turn, except those hexes that are now occupied (not blocked
- there is a difference). In other words, just treat it like the creature can fly to whatever of the available hexes remains available.
BTW, I realize that what I suggested does not eliminate the need for undo totally. It does, as was said previously, prevent the need for undos in "trivial example" situations. But, you can also see how the logic I suggested can still apply to creatures even after they have been moved. In other words, you can use the available hexes to allow a re-move of a creature, rather than an undo. User could re-move a creature all he wanted until he presses "Done" for battle.
OK, sorry for posting more, but my logic was flawed. It would take more work as suggested by you guys. You'd have to also store at the beginning of a phase to say, for example, "Hex13 is available if creature currently occupying Hex 13 or in the path of movement to Hex13 is moved out of the way by the user," and similarly, maybe an additional consideration or 2. Can it be done? Yes. Is it worth it? Probably not, unless someone is bored and wants to take on a logic challenge for fun.
Thanks for your comments.
We actually have that kind of speculative movement code in the AI. But I think it's a bad idea to use it for regular movement. It would lead to confusion about the rules if people were sometimes (but not always) allowed to move non-flying creatures over their allies. I think it's better to have the player move his creatures in the correct order manually.
I think allowing drag and drop for moves (in addition to the current two-click method) would be nice, but I've never done drag and drop in Swing so I don't know how easy it is.
"It would lead to confusion about the rules if people were sometimes (but not always) allowed
to move non-flying creatures over their allies."
That part wouldn't be so bad. But it would definitely cause confusion when you move a creature that blocks the path of another ("Blocking Creature"). You move the other creature now that it is not blocked, and then, you can't move the Blocking Creature back to what appears to be an obviously open hex.
Yes, I concede. You guys were right.
The only place where it would make any sense is in the Phase 1, where you initially place creatures on the board - which happens to be the reason why I made this post in the first place.
Thanks again.