ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/quadland.C
(Generate patch)

Comparing deliantra/server/server/quadland.C (file contents):
Revision 1.8 by root, Tue May 3 17:12:15 2011 UTC vs.
Revision 1.12 by root, Wed May 4 19:04:45 2011 UTC

52 52
53 if (wall->flag [FLAG_IS_QUAD] && visible) 53 if (wall->flag [FLAG_IS_QUAD] && visible)
54 { 54 {
55 maptile *m = wall->map; 55 maptile *m = wall->map;
56 56
57 if (m->tile_path [TILE_UP]) 57 if (ob->map->tile_path [TILE_UP] && wall->map->tile_path [TILE_UP])
58 {
58 if (maptile *up = m->tile_available (TILE_UP)) 59 maptile *wall_up = wall->map->tile_available (TILE_UP);
60 maptile *ob_up = ob ->map->tile_available (TILE_UP);
61
62 if (wall_up && ob_up)
59 { 63 {
60 if (ob->blocked (up, ob->x, ob->y) || has_floor (up, ob->x, ob->y)) 64 if (ob->blocked (ob_up, ob->x, ob->y) || has_floor (ob_up, ob->x, ob->y))
61 ob->failmsg (format ("Ouch, you hit your head while climbing the %s! H<Didn't you see the ceiling?>", query_name (wall))); 65 ob->failmsg (format ("Ouch, you hit your head while climbing the %s! H<Didn't you see the ceiling? :)>", query_name (wall)));
62 //TODO: reduce health 66 //TODO: reduce health
63 else if (ob->blocked (up, wall->x, wall->y)) 67 else if (ob->blocked (wall_up, wall->x, wall->y))
64 ob->failmsg (format ("You try to climb up, but the %s is too high for you!", query_name (wall))); 68 ob->failmsg (format ("You try to climb up, but the %s is too high for you! H<No free space on top of this block.>", query_name (wall)));
65 //TODO: reduce health 69 //TODO: reduce health
66 else 70 else
67 { 71 {
68 ob->statusmsg (format ("You successfully climb up the %s.", query_name (wall))); 72 ob->statusmsg (format ("You successfully climb up the %s.", query_name (wall)));
69 // here we assume that ob is a player... 73 // here we assume that ob is a player...
70 ob->enter_map (up, wall->x, wall->y); 74 ob->enter_map (wall_up, wall->x, wall->y);
71 } 75 }
72 } 76 }
73 else 77 else
74 ob->failmsg (format ("You try to climb the %s, but you fall down! H<Try again.>", query_name (wall))); 78 ob->failmsg (format ("You try to climb the %s, but you fall down! H<Try again.>", query_name (wall)));
79 }
75 else 80 else
76 ob->failmsg (format ("You fail to climb up the %s! H<You cannot climb up here.>", query_name (wall))); 81 ob->failmsg (format ("You fail to climb up the %s! H<You cannot climb up here.>", query_name (wall)));
77 82
78 83
79 return; 84 return;
90 } 95 }
91} 96}
92 97
93///////////////////////////////////////////////////////////////////////////// 98/////////////////////////////////////////////////////////////////////////////
94 99
100physics_queue::physics_queue ()
101{
102 i = 0;
103}
104
105object *
106physics_queue::pop ()
107{
108 if (expect_true (i < size ()))
109 return (*this)[i++];
110
111 i = 0;
112 clear ();
113 return 0;
114}
115
116inline unsigned int
117queue_of (tick_t tick)
118{
119 return tick & (PHYSICS_QUEUES - 1);
120}
121
122void update_physics (maptile *m, int x, int y)
123{
124}
125
126// handle physics updates
127void move_physics (object *ob)
128{
129}
130
131int
132maptile::run_physics (tick_t tick, int max_objects)
133{
134 int orig_max_object = max_objects;
135 physics_queue &q = pq [queue_of (server_tick)];
136
137 while (object *ob = q.pop ())
138 {
139 --max_objects;
140
141 //printf ("handling ob %s\n", ob->debug_desc());//D
142
143 if (max_objects <= 0)
144 break;
145 }
146
147 return orig_max_object - max_objects;
148}
149
150void
151maptile::queue_physics (object *ob)
152{
153 if (!ob->flag [FLAG_PHYSICS_QUEUE])
154 pq [queue_of (server_tick)].push_back (ob);
155}
156
95// this mapspace has changed - potentialyl activate dormant physics objects 157// this mapspace has changed - potentialyl activate dormant physics objects
96// in the vicinity 158// in the vicinity
97 159void
98void update_physics (maptile *m, int x, int y) 160maptile::queue_physics_at (int x, int y)
99{ 161{
100} 162}
101 163
102// handle physics updates 164void
103void move_physics (object *ob) 165maptile::post_load_physics ()
104{ 166{
167 for (mapspace *ms = spaces + size (); ms-- > spaces; )
168 for (object *tmp = ms->bot; tmp; tmp = tmp->above)
169 if (tmp->type == PHYSICS)
170 queue_physics (tmp);
105} 171}
106 172
107///////////////////////////////////////////////////////////////////////////// 173/////////////////////////////////////////////////////////////////////////////
108 174
109#define FANCY_GRAPHICS 0 175#define FANCY_GRAPHICS 0
165 int h = 1000000; // height form heightmap 231 int h = 1000000; // height form heightmap
166 232
167 // the continent increases in height from 0 to ~700 levels in the absence of anything else 233 // the continent increases in height from 0 to ~700 levels in the absence of anything else
168 // thats about one step every 7 maps. 234 // thats about one step every 7 maps.
169 int base_height = blend (0, 300, xy_gradient, 0.2f, 0.9f); 235 int base_height = blend (0, 300, xy_gradient, 0.2f, 0.9f);
170 int river_height = base_height * 9 / 10; 236 int river_height = base_height; // * 9 / 10;
171 237
172 // add this to rivers to "dry them out" 238 // add this to rivers to "dry them out"
173 float dry_out = max (0.f, lerp (xy_gradient, 0.7f, 1.f, 0.f, 0.3f)); 239 float dry_out = max (0.f, lerp (xy_gradient, 0.7f, 1.f, 0.f, 0.3f));
174 240
175 static frac2d river_gen (2); 241 static frac2d river_gen (2);
176 float river1 = abs (river_gen.fBm (P * 0.001 + perturb * 4)) + dry_out; 242 float river1 = abs (river_gen.fBm (P * 0.001 + perturb * 4)) + dry_out;
177 float river2 = river_gen.ridgedmultifractal (P * 0.04, 0.8, 10) - y_gradient * 0.2 - 0.16 - dry_out; 243 float river2 = river_gen.ridgedmultifractal (P * 0.04, 0.8, 10) - y_gradient * 0.2 - 0.16 - dry_out;
178 244
179 float valley = river1 - 0.2f; 245 float valley = river1 - 0.2f;
180 246
181 static frac2d mountain_gen (8, 2.14, 0.5); 247 static frac2d mountain_gen (6, 2.14, 0.5);
182 float mountain = mountain_gen.ridgedmultifractal (P * 0.004); 248 float mountain = mountain_gen.ridgedmultifractal (P * 0.004);
183 249
184 //TODO: mountains should not lower the height, should they? 250 //TODO: mountains should not lower the height, should they?
185 t = valley < 0 ? T_VALLEY : T_MOUNTAIN; 251 t = valley < 0 ? T_VALLEY : T_MOUNTAIN;
186 c = blend0 (vec3d (0, 0.8, 0), vec3d (0.8, 0, 0), valley, 0.1f); 252 c = blend0 (vec3d (0, 0.8, 0), vec3d (0.8, 0, 0), valley, 0.1f);
187 h = blend0 (base_height + continent * 300, base_height + mountain * xy_gradient * 400, valley, 0.1f); 253 h = blend0 (base_height + continent * 3, base_height + mountain * xy_gradient * 100, valley, 0.1f);
188 254
189 if (river1 < 0.01f) 255 if (river1 < 0.01f)
190 { 256 {
191 // main rivers - they cut deeply into the mountains (base_height * 0.9f) 257 // main rivers - they cut deeply into the mountains (base_height * 0.9f)
192 t = T_RIVER; 258 t = T_RIVER;
193 c = vec3d (0.2, 0.2, 1); 259 c = vec3d (0.2, 0.2, 1);
194 h0 = river_height; 260 h0 = river_height;
195 min_it (h, river_height + lerp<float> (river1, 0.f, 0.01f, -20, -1)); 261 min_it (h, river_height + lerp<float> (river1, 0.f, 0.01f, -10, -1));
196 } 262 }
197 263
198 if (river2 > 0) 264 if (river2 > 0)
199 { 265 {
200 t = T_RIVER; 266 t = T_RIVER;
201 c = vec3d (0.2, 0.2, 1); 267 c = vec3d (0.2, 0.2, 1);
202 h0 = river_height; 268 h0 = river_height;
203 min_it (h, river_height + lerp<float> (river1, 0.f, 0.01f, -5, -1)); 269 min_it (h, river_height + max (-5, lerp<float> (river2, 0.01f, 0, -4, -1)));
204 } 270 }
205 271
206 if (continent < 0) 272 if (continent < 0)
207 { 273 {
208 t = T_OCEAN; 274 t = T_OCEAN;
275 h0 = 0;
209 min_it (h, min (continent * 200, -1)); 276 min_it (h, min (continent * 200, -1));
210 c = vec3d (0, 0, 1); 277 c = vec3d (0, 0, 1);
211 } 278 }
212 279
213 // now we have the base height, and base terrain 280 // now we have the base height, and base terrain
232 { 299 {
233 t = T_ACQUIFER; 300 t = T_ACQUIFER;
234 c = vec3d (1,1,1); 301 c = vec3d (1,1,1);
235 } 302 }
236 } 303 }
304
305 //printf ("+%d+%d %d z %d h %d,%d\n", mx, my, t, z, h,h0);//D
237 306
238 // TODO: caves 307 // TODO: caves
239 // TODO: chees areas 308 // TODO: chees areas
240 // TODO: minerals 309 // TODO: minerals
241 // TODO: monsters 310 // TODO: monsters
281 350
282 case T_UNDERGROUND: 351 case T_UNDERGROUND:
283 // todo, use a fractal 352 // todo, use a fractal
284 if (z < h - 10) 353 if (z < h - 10)
285 { 354 {
286 arch_floor = shstr ("quad_dirt_floor"); 355 arch_floor = shstr ("quad_stone_floor");
287 arch_wall = shstr ("quad_dirt_wall"); 356 arch_wall = shstr ("quad_stone_wall");
288 } 357 }
289 else 358 else
290 { 359 {
291 arch_floor = shstr ("quad_stone_floor"); 360 arch_floor = shstr ("quad_dirt_floor");
292 arch_wall = shstr ("quad_stone_wall"); 361 arch_wall = shstr ("quad_dirt_wall");
293 } 362 }
294 break; 363 break;
295 364
296 case T_ACQUIFER: 365 case T_ACQUIFER:
297 arch_wall = shstr ("quad_water_wall"); 366 arch_wall = shstr ("quad_water_wall");
412 } 481 }
413#endif 482#endif
414 483
415 exit (0); 484 exit (0);
416} 485}
486

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines