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

# 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
144 =head1 DESCRIPTION
145
146 =head2 THE TOOLBOX WINDOW
147
148 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
152 =over 4
153
154 =item * Pick
155
156 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
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 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
184 =item top
185
186 Places the arch on the top of the stack of the map cell.
187
188 =item above floor
189
190 Places the arch just right above the floor (or the bottom of the stack).
191
192 =item below floor
193
194 Places the arch just right below the floor (or the bottom of the stack).
195
196 =item bottom
197
198 Places the arch on the bottom of the stack.
199
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
208 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 Erases all walls in the stack (and only walls).
219
220 =item above floor
221
222 Erases the first object above the floor.
223
224 =item floor
225
226 Erases all floor from the stack (and only the floor).
227
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 This erases all objects from the stack that match the currently selected
239 object.
240
241 =item protect walls (checkbox)
242
243 This protects walls from being erased (except when erasing walls).
244
245 =item protect monsters (checkbox)
246
247 This protects monsters from being erased.
248
249 =back
250
251 Shortcut-key in map editor: e
252
253 =item * Select
254
255 This is the selection tool. It can be used to select rectangular areas and
256 operate on that area in various ways:
257
258 =over 4
259
260 =item copy
261
262 This just copies all objects from the selected area into an internal
263 buffer for later paste operations.
264
265 Shortcut-key in map editor: c
266
267 =item paste
268
269 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
274 Shortcut-key in map editor: p
275
276 =item invoke
277
278 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
284 Shortcut-key in map editor: n
285
286 =back
287
288 Shortcut-key in map editor: s
289
290 =item * Eval
291
292 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
295 Shortcut-key in map editor: l
296
297 =item * Connect Exit
298
299 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
304 Shortcut-key in map editor: x
305
306 =item * Follow Exit
307
308 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
311 Shortcut-key in map editor: f
312
313 =back
314
315 =head2 THE STACK VIEW
316
317 This window displays the stack of a map space/coordinate.
318
319 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
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 You can pan the map using the middle mouse button and use the tool with
331 the left mouse button.
332
333 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
338 =head2 THE ATTRIBUTE EDITOR
339
340 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
346 The lore and msg tabs let you edit the text attributes of the object.
347
348 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
357
358 =head2 THE PICK WINDOW
359
360 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
368 You can open multiple pick windows.
369
370 =head1 AUTHOR
371
372 All of the editor GUI:
373
374 Robin Redeker <elmex@ta-sa.org>
375 http://www.ta-sa.org/
376
377 The Crossfire map handling module and map widget:
378
379 Marc Lehmann <schmorp@schmorp.de>
380 http://home.schmorp.de/
381
382 =cut