ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/gde/bin/gce
Revision: 1.17
Committed: Sat Apr 1 18:45:05 2006 UTC (18 years, 2 months ago) by elmex
Branch: MAIN
Changes since 1.16: +0 -7 lines
Log Message:
some improvements

File Contents

# User Rev Content
1 root 1.1 #!/opt/bin/perl
2 root 1.16
3 elmex 1.14 our $VERSION = '0.9';
4 elmex 1.12
5     BEGIN {
6     if (%PAR::LibCache) {
7 root 1.16 @INC = grep ref, @INC; # weed out all paths except pars loader refs
8    
9 elmex 1.12 while (my ($filename, $zip) = each %PAR::LibCache) {
10     for ($zip->memberNames) {
11     next unless /^\/root\/(.*)/;
12     $zip->extractMember ($_, "$ENV{PAR_TEMP}/$1")
13     unless -e "$ENV{PAR_TEMP}/$1";
14     }
15     }
16    
17     $ENV{CROSSFIRE_LIBDIR} ||= $ENV{PAR_TEMP};
18    
19     if ($^O eq "MSWin32") {
20     $ENV{GTK_RC_FILES} = "$ENV{PAR_TEMP}/share/themes/MS-Windows/gtk-2.0/gtkrc";
21     }
22     }
23     }
24    
25     use Gtk2 -init;
26    
27     use Data::Dumper;
28     use File::Spec;
29    
30     use Crossfire;
31    
32     use GCE::MainWindow;
33    
34     our $CFG;
35     our $MAINWIN;
36    
37     our $DOCUMENTATION = join ("\n", do { local $/; <DATA> });
38    
39     sub read_cfg {
40     my ($file) = @_;
41    
42     open CFG, $file
43     or return;
44    
45     $CFG = eval join '', <CFG>;
46    
47     close CFG;
48     }
49    
50     sub write_cfg {
51     my ($file) = @_;
52    
53     open CFG, ">$file"
54     or return;
55    
56     {
57     local $Data::Dumper::Purity = 1;
58     print CFG Data::Dumper->Dump ([$CFG], [qw/CFG/]);
59     }
60    
61     close CFG;
62     }
63    
64     # following 2 functions are taken from CV :)
65     sub find_rcfile($) {
66     my $path;
67    
68     for (@INC) {
69    
70     $path = "$_/GCE/$_[0]";
71     return $path if -r $path;
72     }
73    
74     die "FATAL: can't find required file $_[0]\n";
75     }
76    
77     sub require_image($) {
78     new_from_file Gtk2::Gdk::Pixbuf find_rcfile "images/$_[0]";
79     }
80    
81     sub get_pos_and_size {
82     my ($window) = @_;
83    
84     my ($x, $y) = $window->get_position;
85     my ($w, $h) = $window->get_size;
86    
87     return [$x, $y, $w, $h];
88     }
89    
90     sub set_pos_and_size {
91     my ($window, $p_and_s, $default_w, $default_h, $default_x, $default_y) = @_;
92    
93     $window->set_default_size ($p_and_s->[2] || $default_w, $p_and_s->[3] || $default_h);
94    
95     # FIXME: This sucks, moving it after showing it can't be a good thing.
96     $window->show_all;
97     $window->move ($p_and_s->[0] || $default_x, $p_and_s->[1] || $default_y);
98     }
99    
100     read_cfg "$Crossfire::VARDIR/gceconfig";
101    
102     $CFG->{LIBDIR} ||= $ENV{CROSSFIRE_LIBDIR};
103     $CFG->{MAPDIR} ||= File::Spec->catfile ($CFG->{LIBDIR}, 'maps');
104    
105     # must be done after changing the libdir path:
106     Crossfire::set_libdir ($CFG->{LIBDIR});
107     Crossfire::load_archetypes;
108     Crossfire::load_tilecache;
109    
110     my $w = GCE::MainWindow->new;
111    
112     $w->load_layout;
113    
114     $w->show_all;
115    
116     Gtk2->main;
117    
118     __DATA__
119 root 1.7
120 root 1.1 =head1 NAME
121    
122     gce - gtk (perl) crossfire editor
123    
124 elmex 1.10 =head1 SYNOPSIS
125    
126 root 1.11 gce [<map-filename>...]
127 elmex 1.10
128     =head1 FEATURES
129    
130     gce is a map editor for crossfire.
131    
132 root 1.11 Its main features are:
133    
134     - higher map editing comfort
135 elmex 1.10 - intelligent placement tool
136     - intelligent connection tool
137     - intelligent erase tool
138     - faster and smaller than the java editor
139     - map normalizing (removal of old deprecated attributes)
140     - exit following
141     - world map navigation
142 root 1.11 - easier installation (on windows)
143 elmex 1.10
144     =head1 DESCRIPTION
145    
146 root 1.13 =head2 THE TOOLBOX WINDOW
147 elmex 1.10
148 root 1.13 The toolbox window is the main window of gce. It provides the display of
149     the currently selected object and the tools. The buttons select of the
150     editing tool:
151 elmex 1.10
152     =over 4
153    
154     =item * Pick
155    
156 root 1.11 This tool is the simplest of all. It lets the user select the topmost
157     object of a map cell in the map window and updates the stack view for the
158     current space.
159    
160     If the pick attr flag is set only the attribute editor and the stack
161     view are updated. This is useful when you want to put an object in the
162     attribute editor and want to place an object from the map, you picked
163     before, in an inventory of a different object (you just picked). This is a
164     very special thing. It will propably go away.
165 elmex 1.10
166     Shortcut-key in map editor: i
167    
168     =item * Place
169    
170     This is the intelligent placement tool. It has many modes:
171    
172     =over 4
173    
174     =item auto
175    
176 root 1.11 This mode implements DWIM (do-what-I-mean) by trying to do the the right
177     thing(tm) with the selected object:
178    
179     If you place a floor arch, it will try to replace the existing floor or
180     set the floor below all items. If you place a monster or other arch, it
181     will place it on top. If you place a wall, it will put the wall above the
182     floor and propably replace other walls.
183 elmex 1.10
184     =item top
185    
186 root 1.11 Places the arch on the top of the stack of the map cell.
187 elmex 1.10
188     =item above floor
189    
190 root 1.11 Places the arch just right above the floor (or the bottom of the stack).
191 elmex 1.10
192     =item below floor
193    
194 root 1.11 Places the arch just right below the floor (or the bottom of the stack).
195 elmex 1.10
196     =item bottom
197    
198 root 1.11 Places the arch on the bottom of the stack.
199 elmex 1.10
200     =back
201    
202     Shortcut-key in map editor: p
203    
204     =item * Erase
205    
206     This is the tool that lets you erase an arch.
207 root 1.11
208 elmex 1.10 It has following modes:
209    
210     =over 4
211    
212     =item top
213    
214     Erases the topmost object on the stack.
215    
216     =item walls
217    
218 root 1.11 Erases all walls in the stack (and only walls).
219 elmex 1.10
220     =item above floor
221    
222     Erases the first object above the floor.
223    
224     =item floor
225    
226 root 1.11 Erases all floor from the stack (and only the floor).
227 elmex 1.10
228     =item below floor
229    
230     Erases the first object below the floor.
231    
232     =item bottom
233    
234     Erases the first object on the bottom of the stack.
235    
236     =item pick match
237    
238 root 1.11 This erases all objects from the stack that match the currently selected
239     object.
240 elmex 1.10
241 root 1.11 =item protect walls (checkbox)
242 elmex 1.10
243 root 1.11 This protects walls from being erased (except when erasing walls).
244 elmex 1.10
245 root 1.11 =item protect monsters (checkbox)
246 elmex 1.10
247 root 1.11 This protects monsters from being erased.
248 elmex 1.10
249     =back
250    
251     Shortcut-key in map editor: e
252    
253     =item * Select
254    
255 root 1.11 This is the selection tool. It can be used to select rectangular areas and
256     operate on that area in various ways:
257 elmex 1.10
258     =over 4
259    
260     =item copy
261    
262 root 1.11 This just copies all objects from the selected area into an internal
263     buffer for later paste operations.
264 elmex 1.10
265     Shortcut-key in map editor: c
266    
267     =item paste
268    
269 root 1.11 This function pastes the internal buffer into the map, beginning in the
270     top left corner of the selected area. The size of the selection has no
271     relevance to the result: IT always places the whole internal buffer onto
272     the map.
273 elmex 1.10
274     Shortcut-key in map editor: p
275    
276     =item invoke
277    
278 root 1.11 This function is a very powerful one. It can apply another tool (such as
279     the place tool) on all spaces of the selected area.
280    
281     It can, for example, be used to fill a map with floor tiles or erase
282     everything.
283 elmex 1.10
284     Shortcut-key in map editor: n
285    
286     =back
287    
288     Shortcut-key in map editor: s
289    
290     =item * Eval
291    
292 root 1.11 This is a very special tool which isn't finished yet. It lets you specify
293     a perl snippet that can manipulate the stack.
294 elmex 1.10
295     Shortcut-key in map editor: l
296    
297     =item * Connect Exit
298    
299 root 1.11 This tool connects two exits or teleporters.
300    
301     You can either connect two exits to each other, or just point an exit to
302     a certain location on a map.
303 elmex 1.10
304     Shortcut-key in map editor: x
305    
306     =item * Follow Exit
307    
308 root 1.11 With this tool you can follow exits and teleporters by opening the target
309     map in a new window (or presents an existing window).
310 elmex 1.10
311     Shortcut-key in map editor: f
312    
313     =back
314    
315     =head2 THE STACK VIEW
316    
317 root 1.11 This window displays the stack of a map space/coordinate.
318 elmex 1.10
319 root 1.11 You can swap two objects on the stack and delete a object from the stack
320     by dragging one object over another.
321    
322     By clicking on an item on the stack you can make it the currently selected
323     object.
324 elmex 1.10
325     =head2 THE MAP EDITOR
326    
327     This window just displays the map and lets you use the tools. The shortcuts are
328     documented above in the tool descriptions.
329    
330 root 1.11 You can pan the map using the middle mouse button and use the tool with
331     the left mouse button.
332 elmex 1.10
333 root 1.11 There are two modifiers: Holding down the Meta/Alt-key temporarily
334     switches to the pick tool. Holding down the Ctrl-key temporarily switched
335     to the erase tool. Both will use their current settings. To change them,
336     you need to select the tools using the toolbox first.
337 elmex 1.10
338     =head2 THE ATTRIBUTE EDITOR
339    
340 root 1.11 The attribute editor display the archetype name followed by the object
341     name and the type of the object in parentheses.
342    
343     Since there are often many attributes for a given object, they are sorted
344     into different categories/tabs.
345 elmex 1.10
346 root 1.11 The lore and msg tabs let you edit the text attributes of the object.
347 elmex 1.10
348 root 1.11 The inventory tab lets you add stuff to the inventory by dragging them
349     from the selected object in the toolbox to the top most button with the
350     image in the inventory (the inventory editor is subject to change and
351     improvement).
352    
353     Both field labels and value widgets have tool tips enabled. Tool tips on
354     the labels explain the attribute in more detail. The tool tips on the
355     value widgets show the default value from the archetype.
356 elmex 1.10
357    
358     =head2 THE PICK WINDOW
359    
360 root 1.11 Pick windows are used to quickly pick archetypes from specific categories.
361    
362     Left click creates an object from the archetype and makes it the currently
363     selected object for the tools and the attribute editor.
364    
365     You can change the attributes of the currently selected object in the
366     attribute editor.
367 elmex 1.10
368     You can open multiple pick windows.
369    
370 elmex 1.12 =head1 AUTHOR
371 root 1.1
372 root 1.15 All of the editor GUI:
373 root 1.4
374 elmex 1.12 Robin Redeker <elmex@ta-sa.org>
375     http://www.ta-sa.org/
376 root 1.6
377 root 1.15 The Crossfire map handling module and map widget:
378 root 1.1
379     Marc Lehmann <schmorp@schmorp.de>
380     http://home.schmorp.de/
381    
382     =cut