Summary: [Patch] Start position cleanup and extension
                 Project: Freeciv
            Submitted by: mbook
            Submitted on: Sunday 06/28/2009 at 06:07
                Category: editor
                Severity: 3 - Normal
                Priority: 5 - Normal
                  Status: Ready For Test
             Assigned to: mbook
        Originator Email: 
             Open/Closed: Open
         Discussion Lock: Any
        Operating System: None



The attached patch implements improved start position
functionality for the editor. Depends on the patches
in #13793, #13800, #13801 and #13802.

The user can now easily place start positions on the
map in edit mode, and efficiently set which nations
may start at any given position, including allowing
all nations or excluding specific ones (via the
property editor).

Two packets are used for communicating start position
information between clients and the server:


The first is used to either create or remove a start
position at a tile, and the second to set the nation
information. A bitvector is used to pack a list of
nations into the packet (bits correspond to nation
numbers), with a limit of 1024 maximum nations
(MAX_NUM_STARTPOS_NATIONS in fc_types.h). Hopefully
before more than 1024 nations exist there will be
better network protocol support for dynamic arrays
in packets, removing the need for hard-coded maximum

These packets are sent by both the client and the
server, allowing most of the handling code to be
factored out into functions in common/map.c.

Some less noteworthy internal additions:

- Added a 'TILE' packet field (SINT32) used to
  send tile indexes, as an alternative to sending
  COORD x, y.

- Added a new object type OBJTYPE_STARTPOS to the
  property editor, along with 2 read-only and 2
  editable properties.

- Added a new value type VALTYPE_STARTPOS_NATIONS
  for special handling of a hash_table used to
  represent the nations at a start position.

- Added iterators for iterating all nations in a
  start position, and all start positions on the

- Updated version.in due to packet changes.

And some partially related fixes:

- PACKET_EDIT_TILE had incorrect but harmless
  "UNIT id" field, which I changed to "TILE id".

- editgui_notify_object_{changed,created}() do not
  propagate the notifications outside of edit mode.

- Made objtype_get_id_from_object() use -1 to
  represent an invalid ID instead of zero, since for
  example for tile IDs (i.e. as returned by tile
  _index()) zero is a valid value.

- Added some argument checks in property_page_add

As far as start positions go now, what remains to
be done is:

* Make the map generator use the new start position
  API (hence remove map.start_positions).
* Send start positions to editing clients when
  entering edit mode.
* Implement saving and loading of the new start
  position data structures in savegames/scenarios.
* Get a better start position map sprite than
  user.attention (also perhaps somehow distinguish
  between a start position allowing all, some, or
  excluding nations).



File Attachments:

Date: Sunday 06/28/2009 at 06:07  Name: startpos_cleanup_and_extension.patch 
Size: 52kB   By: mbook



Reply to this item at:


  Message sent via/by Gna!

Freeciv-dev mailing list

Reply via email to