ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/gde/GCE/AttrTypemap.pm
Revision: 1.3
Committed: Tue Dec 5 15:00:32 2006 UTC (17 years, 5 months ago) by elmex
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +0 -0 lines
State: FILE REMOVED
Log Message:
Some cleanup of old unused files and a bugfix in layout saving when no
map window was open yet.

File Contents

# Content
1 package GCE::AttrTypemap;
2
3 =head1 NAME
4
5 GCE::AttrTypemap - this package handles the arch types and their specialities
6
7 =cut
8
9 use Crossfire;
10
11 use strict;
12
13 my %MONSTERATTRS = (
14 dam => [ 'damage' ],
15 wc => [ 'weapon class' ],
16 armour => [ 'armour' ],
17 ac => [ 'armour class' ],
18 # XXX: Can these values really be set/overridden from a map???
19 speed => [ 'speed' ],
20 level => [ 'level' ],
21 int => [ 'find hidden/invis.' ],
22 pow => [ 'spell regen' ],
23 con => [ 'regeneration' ],
24 wis => [ 'wakeup radius' ],
25 sp => [ 'spell points' ],
26 maxsp => [ 'max spell pts.' ],
27 flying => [ 'flying flag' ],
28 see_invisible => [ 'see invisible' ],
29 can_see_in_dark => [ 'can see in dark' ],
30 reflect_spell => [ 'reflect spells' ],
31 can_pass_thru => [ 'can pass thru' ],
32 one_hit => [ 'kamikaze attacks' ],
33 run_away => [ 'morale' ],
34 );
35
36 # XXX: maybe add explanation and allowed values
37 our %ARCHTYPES = (
38 40 => { # PLAYERMOVER
39 attacktype => [ 'paralyze' ],
40 maxsp => [ 'paralysis moves' ],
41 move_type => [ 'move type' ],
42 speed => [ 'speed' ],
43 sp => [ 'direction' ],
44 level => [ 'move monsters' ],
45 lifesave => [ 'can be used up' ],
46 hp => [ 'use up moves' ],
47 race => [ 'affected' ],
48 slaying => [ 'unaffected' ],
49 subtype => [ 'affected fields' ],
50 },
51 42 => { # CREATOR
52 other_arch => [ 'create obj' ],
53 connected => [ 'trigger' ],
54 hp => [ 'max create cnt' ],
55 lifesave => [ 'stay alive' ],
56 slaying => [ 'name of created obj' ],
57 level => [ 'level of created obj' ],
58 },
59 65 => { # MOOD FLOOR
60 last_sp => [ 'mood' ],
61 },
62 83 => { # DUPLICATOR
63 connected => [ 'connected'],
64 other_arch => [ 'copy arch' ],
65 level => [ 'copy cnt' ]
66 },
67 55 => { # MARKER
68 slaying => [ 'code' ],
69 speed => [ 'mark speed' ],
70 food => [ 'mark duration' ],
71 name => [ 'code remove' ],
72 },
73 51 => { # DETECTOR
74 slaying => [ 'detect name' ],
75 speed => [ 'sample speed' ],
76 connected => [ 'connected' ],
77 sp => [ 'sets buttons' ],
78 hp => [ 'search inventory' ],
79 },
80 64 => { # CHECK_INV
81 slaying => [ 'detect name' ],
82 race => [ 'detect arch' ],
83 hp => [ 'match value' ],
84 last_heal => [ 'remove obj' ],
85 last_sp => [ 'negate match' ],
86 connected => [ 'push value' ],
87 no_pass => [ 'no pass' ],
88 },
89 103 => { # CONVERTER
90 other_arch => [ 'convert into' ],
91 slaying => [ 'convert from' ],
92 sp => [ 'into count' ],
93 food => [ 'from count' ],
94 },
95 112 => { # DIRECTOR
96 sp => [ 'direction' ],
97 race => [ 'affected' ],
98 slaying => [ 'unaffected' ],
99 subtype => [ 'affected fields' ],
100 },
101 122 => { # CONTAINER
102 container => [ 'max weight' ],
103 Str => [ 'reduce %' ], # lowercase??
104 str => [ 'reduce %' ],
105 },
106 generator => { # GENERATOR?
107 other_arch => [ 'spawn arch' ],
108 use_content_on_gen => [ 'spawn inv.' ],
109 },
110 80 => { # MONSTER
111 %MONSTERATTRS
112 },
113 monster => { # MONSTER? equivalent to type 80 ??
114 %MONSTERATTRS
115 }
116 );
117
118
119 sub detect_types {
120 my ($arch) = @_;
121
122 my $al_arch = $Crossfire::ARCH{$arch->{_name}};
123
124 my @types;
125
126 $al_arch->{type} and push @types, $al_arch->{type};
127
128 $al_arch->{generator} and push @types, 'generator';
129 $al_arch->{monster} and push @types, 'monster';
130
131 return @types;
132 }
133
134 sub get_attr_alias {
135 my ($arch, $key) = @_;
136
137 my @names;
138
139 # XXX: is lowercasing key correct?
140
141 for my $type (detect_types ($arch)) {
142
143 if (defined $ARCHTYPES{$type} and exists $ARCHTYPES{$type}->{lc $key}) {
144 my $name = $ARCHTYPES{$type}->{lc $key}->[0];
145
146 push @names, $name;
147 }
148 }
149
150 @names or return $key;
151 return ((join ",", @names) . " ($key)");
152 }
153
154 sub interesting_fields {
155 my ($arch) = @_;
156
157 my %keys;
158
159 for my $type (detect_types ($arch)) {
160
161 for (keys %{$ARCHTYPES{$type} || {}}) {
162 $keys{$_}++;
163 }
164 }
165
166 return keys %keys;
167 }
168
169
170 =head1 AUTHOR
171
172 Marc Lehmann <schmorp@schmorp.de>
173 http://home.schmorp.de/
174
175 Robin Redeker <elmex@ta-sa.org>
176 http://www.ta-sa.org/
177
178 =cut
179 1;