This is the mail archive of the
xconq7@sources.redhat.com
mailing list for the Xconq project.
plan_transport
- From: Peter Garrone <pgarrone at acay dot com dot au>
- To: xconq7 at sources dot redhat dot com
- Cc: Hans Ronne <hronne at comhem dot se>
- Date: Sun, 7 Dec 2003 09:43:29 +1100
- Subject: plan_transport
I thought I would review the current problems and proposed fixes.
I originally planned on sending this only to some people, but I think
others probably could provide some valuable feedback.
The problems are:
- ferries are not built as they should be
because the normal pathway where the task return a TASK_FAILED when it
can no longer go forward, the ai calls the impassable function and
sets a flag so that a ferry is assigned for construction, no longer
works. The reasons why this no longer works as well are:
- There is a bug in the path code so transportation is forbidden
- The pathfinding returns impassable if no ferries are available, so
they are never scheduled to be built because no paths ever require them.
- ferries are not assigned as they should be.
(Actually this was a problem with the pre-path code.)
- ferries are often assigned to react to enemy intrusions, even air
attacks over impassable terrain, or to attack battleships and
aircraft carriers.
- A task is assigned to a full ferry before it calls the function that
checks where all the current occupants are going and it goes to the
middle of an ocean before returning to drop off its occupants.
- ferries sometimes move a hex when an occupant has been scheduled to
board, causing the occupant to disappear into the ocean.
Proposed solution.
A solution to these problems (attribution to Hans here) would be as follows.
- implement a PLAN_TRANSPORT for ferries, so they are permanently
assigned to transportation duties, though of course offensive units
will be transported by them.
- implement a TRANSPORT_TASK as well, so that human players can asign a
unit to ferrying, and units will move across islands and seas without
all that bookkeeping. So a PLAN_TRANSPORT will activate a
TRANSPORT_TASK.
- Have only two tasks that do movement, the moveto task and the pickup
task. The pickup task is only used by the ferry. The hit-unit and
occupy tasks push moveto tasks. Only the moveto task hails a ferry.
- When the moveto task needs to board a ferry, it hails it in the task
code, scheduling a ferry if one exists. If one doesnt, it returns a
TASK_FAILED and higher level ai code determines the failure reason
and schedules a ferry to be built, and reassigns the unit to another
task.
- ai code also inspects the schedule of units waiting for a ferry, and
if there is too much of a queue, or any sort of a queue, ensures that
enough ferries are being build to handle them.
- If a ferry has been waiting round for some large number of moves
without any action, it returns a TASK_FAILED and gets reassigned to
something offensive.
- Something needs to be added to the ai code so that it can distinguish
a simple ferry from something offensive, like an aircraft carrier or
bireme/trireme. This is asking a lot but perhaps some simple
heuristic could fix this. So a bireme would not go onto
PLAN_TRANSPORT, but instead grab an archer to help it in sea-battles.
- The pathfinding would need to be somewhat extended here. It need so
consider going from A to B using ferry type C, extending the state
space it explores for possible solutions from simple x,y position.
- consideration could be given to implementing refueling behavior,
a boring detail for the human player,
while extending the pathfinding state space.
This is my "wishlist". I will attempt to implement it in stages, so
that a partial implementation may suffice for a 7.5 release, comments
invited,
Peter.