ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/gde/bin/gce
Revision: 1.15
Committed: Mon Mar 20 04:36:07 2006 UTC (18 years, 2 months ago) by root
Branch: MAIN
Changes since 1.14: +2 -2 lines
Log Message:
*** empty log message ***

File Contents

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