ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/gde/bin/gce
Revision: 1.18
Committed: Sat Apr 1 22:21:10 2006 UTC (18 years, 2 months ago) by elmex
Branch: MAIN
Changes since 1.17: +6 -0 lines
Log Message:
updated documentation

File Contents

# Content
1 #!/opt/bin/perl
2
3 our $VERSION = '0.9';
4
5 BEGIN {
6 if (%PAR::LibCache) {
7 @INC = grep ref, @INC; # weed out all paths except pars loader refs
8
9 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
120 =head1 NAME
121
122 gce - gtk (perl) crossfire editor
123
124 =head1 SYNOPSIS
125
126 gce [<map-filename>...]
127
128 =head1 FEATURES
129
130 gce is a map editor for crossfire.
131
132 Its main features are:
133
134 - higher map editing comfort
135 - 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 - easier installation (on windows)
143 - auto joining of walls (see Placement tool -> auto setting)
144
145 =head1 DESCRIPTION
146
147 =head2 THE TOOLBOX WINDOW
148
149 The toolbox window is the main window of gce. It provides the display of
150 the currently selected object and the tools. The buttons select of the
151 editing tool:
152
153 =over 4
154
155 =item * Pick
156
157 This tool is the simplest of all. It lets the user select the topmost
158 object of a map cell in the map window and updates the stack view for the
159 current space.
160
161 If the pick attr flag is set only the attribute editor and the stack
162 view are updated. This is useful when you want to put an object in the
163 attribute editor and want to place an object from the map, you picked
164 before, in an inventory of a different object (you just picked). This is a
165 very special thing. It will propably go away.
166
167 Shortcut-key in map editor: i
168
169 =item * Place
170
171 This is the intelligent placement tool. It has many modes:
172
173 =over 4
174
175 =item auto
176
177 This mode implements DWIM (do-what-I-mean) by trying to do the the right
178 thing(tm) with the selected object:
179
180 If you place a floor arch, it will try to replace the existing floor or
181 set the floor below all items. If you place a monster or other arch, it
182 will place it on top. If you place a wall, it will put the wall above the
183 floor and propably replace other walls.
184
185 Autojoin also works only in this mode. To draw an wall with autojoining pick
186 the wall arch which name looks like: <wallname>_0. It's the single point wall
187 tile which has no connections.
188 When you place this arch now, it will autoconnect the walls you are drawing.
189
190 =item top
191
192 Places the arch on the top of the stack of the map cell.
193
194 =item above floor
195
196 Places the arch just right above the floor (or the bottom of the stack).
197
198 =item below floor
199
200 Places the arch just right below the floor (or the bottom of the stack).
201
202 =item bottom
203
204 Places the arch on the bottom of the stack.
205
206 =back
207
208 Shortcut-key in map editor: p
209
210 =item * Erase
211
212 This is the tool that lets you erase an arch.
213
214 It has following modes:
215
216 =over 4
217
218 =item top
219
220 Erases the topmost object on the stack.
221
222 =item walls
223
224 Erases all walls in the stack (and only walls).
225
226 =item above floor
227
228 Erases the first object above the floor.
229
230 =item floor
231
232 Erases all floor from the stack (and only the floor).
233
234 =item below floor
235
236 Erases the first object below the floor.
237
238 =item bottom
239
240 Erases the first object on the bottom of the stack.
241
242 =item pick match
243
244 This erases all objects from the stack that match the currently selected
245 object.
246
247 =item protect walls (checkbox)
248
249 This protects walls from being erased (except when erasing walls).
250
251 =item protect monsters (checkbox)
252
253 This protects monsters from being erased.
254
255 =back
256
257 Shortcut-key in map editor: e
258
259 =item * Select
260
261 This is the selection tool. It can be used to select rectangular areas and
262 operate on that area in various ways:
263
264 =over 4
265
266 =item copy
267
268 This just copies all objects from the selected area into an internal
269 buffer for later paste operations.
270
271 Shortcut-key in map editor: c
272
273 =item paste
274
275 This function pastes the internal buffer into the map, beginning in the
276 top left corner of the selected area. The size of the selection has no
277 relevance to the result: IT always places the whole internal buffer onto
278 the map.
279
280 Shortcut-key in map editor: p
281
282 =item invoke
283
284 This function is a very powerful one. It can apply another tool (such as
285 the place tool) on all spaces of the selected area.
286
287 It can, for example, be used to fill a map with floor tiles or erase
288 everything.
289
290 Shortcut-key in map editor: n
291
292 =back
293
294 Shortcut-key in map editor: s
295
296 =item * Eval
297
298 This is a very special tool which isn't finished yet. It lets you specify
299 a perl snippet that can manipulate the stack.
300
301 Shortcut-key in map editor: l
302
303 =item * Connect Exit
304
305 This tool connects two exits or teleporters.
306
307 You can either connect two exits to each other, or just point an exit to
308 a certain location on a map.
309
310 Shortcut-key in map editor: x
311
312 =item * Follow Exit
313
314 With this tool you can follow exits and teleporters by opening the target
315 map in a new window (or presents an existing window).
316
317 Shortcut-key in map editor: f
318
319 =back
320
321 =head2 THE STACK VIEW
322
323 This window displays the stack of a map space/coordinate.
324
325 You can swap two objects on the stack and delete a object from the stack
326 by dragging one object over another.
327
328 By clicking on an item on the stack you can make it the currently selected
329 object.
330
331 =head2 THE MAP EDITOR
332
333 This window just displays the map and lets you use the tools. The shortcuts are
334 documented above in the tool descriptions.
335
336 You can pan the map using the middle mouse button and use the tool with
337 the left mouse button.
338
339 There are two modifiers: Holding down the Meta/Alt-key temporarily
340 switches to the pick tool. Holding down the Ctrl-key temporarily switched
341 to the erase tool. Both will use their current settings. To change them,
342 you need to select the tools using the toolbox first.
343
344 =head2 THE ATTRIBUTE EDITOR
345
346 The attribute editor display the archetype name followed by the object
347 name and the type of the object in parentheses.
348
349 Since there are often many attributes for a given object, they are sorted
350 into different categories/tabs.
351
352 The lore and msg tabs let you edit the text attributes of the object.
353
354 The inventory tab lets you add stuff to the inventory by dragging them
355 from the selected object in the toolbox to the top most button with the
356 image in the inventory (the inventory editor is subject to change and
357 improvement).
358
359 Both field labels and value widgets have tool tips enabled. Tool tips on
360 the labels explain the attribute in more detail. The tool tips on the
361 value widgets show the default value from the archetype.
362
363
364 =head2 THE PICK WINDOW
365
366 Pick windows are used to quickly pick archetypes from specific categories.
367
368 Left click creates an object from the archetype and makes it the currently
369 selected object for the tools and the attribute editor.
370
371 You can change the attributes of the currently selected object in the
372 attribute editor.
373
374 You can open multiple pick windows.
375
376 =head1 AUTHOR
377
378 All of the editor GUI:
379
380 Robin Redeker <elmex@ta-sa.org>
381 http://www.ta-sa.org/
382
383 The Crossfire map handling module and map widget:
384
385 Marc Lehmann <schmorp@schmorp.de>
386 http://home.schmorp.de/
387
388 =cut