Difference for server/weather.c from version 1.30 to 1.31


version 1.30 version 1.31
Line 1
 
Line 1
 /*  /*
  * static char *rcsid_weather_c =   * static char *rcsid_weather_c =
  *   "$Id: weather.c,v 1.30 2003/03/30 16:40:20 temitchell Exp $";   *   "$Id: weather.c,v 1.31 2003/06/30 19:14:13 tchize Exp $";
  */   */
 /*  /*
     CrossFire, A Multiplayer game for X-windows      CrossFire, A Multiplayer game for X-windows
Line 71
 
Line 71
  */   */
   
 weather_avoids_t weather_avoids[] = {  weather_avoids_t weather_avoids[] = {
     {"snow", 1},      {"snow", 1, NULL},
     {"snow2", 1},      {"snow2", 1, NULL},
     {"snow4", 1},      {"snow4", 1, NULL},
     {"snow5", 1},      {"snow5", 1, NULL},
     {"mountain1_snow", 1},      {"mountain1_snow", 1, NULL},
     {"mountain2_snow", 1},       {"mountain2_snow", 1, NULL},
     {"rain1", 1},      {"rain1", 1, NULL},
     {"rain2", 1},      {"rain2", 1, NULL},
     {"rain3", 1},      {"rain3", 1, NULL},
     {"rain4", 1},      {"rain4", 1, NULL},
     {"rain5", 1},      {"rain5", 1, NULL},
     {"mountain1_rivlets", 1},      {"mountain1_rivlets", 1, NULL},
     {"mountain2_rivlets", 1},      {"mountain2_rivlets", 1, NULL},
     {"drifts", 0},      {"drifts", 0, NULL},
     {"glacier", 0},      {"glacier", 0, NULL},
     {"cforest1", 0},      {"cforest1", 0, NULL},
     {"sea", 0},      {"sea", 0, NULL},
     {"sea1", 0},      {"sea1", 0, NULL},
     {"deep_sea", 0},      {"deep_sea", 0, NULL},
     {"shallow_sea", 0},      {"shallow_sea", 0, NULL},
     {"lava", 0},      {"lava", 0, NULL},
     {"permanent_lava", 0},      {"permanent_lava", 0, NULL},
     {NULL, 0}      {NULL, 0}
 };   };
   
Line 103
 
Line 103
  */   */
   
 weather_avoids_t growth_avoids[] = {  weather_avoids_t growth_avoids[] = {
     {"cobblestones", 0},      {"cobblestones", 0, NULL},
     {"cobblestones2", 0},      {"cobblestones2", 0, NULL},
     {"flagstone", 0},      {"flagstone", 0, NULL},
     {"stonefloor2", 0},      {"stonefloor2", 0, NULL},
     {"lava", 0},      {"lava", 0, NULL},
     {"permanent_lava", 0},      {"permanent_lava", 0, NULL},
     {"sea", 0},      {"sea", 0, NULL},
     {"sea1", 0},      {"sea1", 0, NULL},
     {"deep_sea", 0},      {"deep_sea", 0, NULL},
     {"shallow_sea", 0},      {"shallow_sea", 0, NULL},
     {"farmland", 0},      {"farmland", 0, NULL},
     {"dungeon_magic", 0},      {"dungeon_magic", 0, NULL},
     {"dungeon_floor", 0},      {"dungeon_floor", 0, NULL},
     {"lake", 0},      {"lake", 0, NULL},
     {"grasspond", 0},      {"grasspond", 0, NULL},
     {NULL, 0}      {NULL, 0, NULL}
 };  };
   
 /*  /*
Line 1128
 
Line 1128
 /* END of read/write/init */  /* END of read/write/init */
   
   
   
   void init_weatheravoid (weather_avoids_t wa[]){
    int i;
    for (i=0; wa[i].name != NULL; i++) {
    wa[i].what=find_archetype(wa[i].name);
    }
   }
   
 int wmperformstartx;  int wmperformstartx;
 int wmperformstarty;  int wmperformstarty;
   
Line 1152
 
Line 1160
  settings.worldmaptilesx < 1 || settings.worldmaptilesy < 1 ||   settings.worldmaptilesx < 1 || settings.worldmaptilesy < 1 ||
  settings.worldmaptilesizex < 1 || settings.worldmaptilesizex < 1)   settings.worldmaptilesizex < 1 || settings.worldmaptilesizex < 1)
  return;   return;
       /*prepare structures used for avoidance*/
       init_weatheravoid (weather_avoids);
       init_weatheravoid (growth_avoids);
   
   
     LOG(llevDebug, "Initializing the weathermap...\n");      LOG(llevDebug, "Initializing the weathermap...\n");
   
Line 1290
 
Line 1302
     x = 0;      x = 0;
     y = 0;      y = 0;
     /* for now, just bail if it's not the worldmap */      /* for now, just bail if it's not the worldmap */
     if (worldmap_to_weathermap(x, y, &wx, &wy, filename) != 0)      if (worldmap_to_weathermap(x, y, &wx, &wy, /*filename*/ m) != 0)
  return;   return;
    /*First, calculate temperature*/
    calculate_temperature(m, wx, wy);
     /* we change the world first, if needed */      /* we change the world first, if needed */
     if (settings.dynamiclevel >= 5) {      if (settings.dynamiclevel >= 5) {
  change_the_world(m, wx, wy, filename);   change_the_world(m, wx, wy, filename);
Line 1336
 
Line 1349
      !(tmp->material & M_ICE || tmp->material & M_LIQUID))       !(tmp->material & M_ICE || tmp->material & M_LIQUID))
      gotsnow++;       gotsnow++;
      for (i=0; growth_avoids[i].name != NULL; i++) {       for (i=0; growth_avoids[i].name != NULL; i++) {
  if (!strcmp(tmp->arch->name, growth_avoids[i].name)) {   //if (!strcmp(tmp->arch->name, growth_avoids[i].name)) {
    if (tmp->arch== growth_avoids[i].what) {
      avoid++;       avoid++;
      break;       break;
  }   }
        }
  if (!strncmp(tmp->arch->name, "biglake_", 8)) {   if (!strncmp(tmp->arch->name, "biglake_", 8)) {
      avoid++;       avoid++;
      break;       break;
  }   }
      }  
      if (avoid)       if (avoid)
  break;   break;
  }   }
     } else {      } else {
  for (tmp=GET_MAP_OB(m, x, y); tmp; tmp = tmp->above) {   for (tmp=GET_MAP_OB(m, x, y); tmp; tmp = tmp->above) {
      for (i=0; weather_avoids[i].name != NULL; i++) {       for (i=0; weather_avoids[i].name != NULL; i++) {
  if (!strcmp(tmp->arch->name, weather_avoids[i].name)) {   //if (!strcmp(tmp->arch->name, weather_avoids[i].name)) {
    if (tmp->arch == weather_avoids[i].what) {
      if (weather_avoids[i].snow == 1)       if (weather_avoids[i].snow == 1)
  gotsnow++;   gotsnow++;
      else       else
Line 1368
 
Line 1383
     return tmp;      return tmp;
 }  }
   
   /* Temperature is used in a lot of weather function.
    * This need to be precalculated before used.
    */
   void calculate_temperature(mapstruct *m, int wx, int wy){
    int x,y;
       for (x=0; x < settings.worldmaptilesizex; x++) {
    for (y=0; y < settings.worldmaptilesizey; y++) {
    weathermap[wx][wy].realtemp=real_world_temperature(x, y, m);
    }
    }
   }
   
 /*  /*
  * Process snow.  m is the map we are currently processing.  wx and wy are   * Process snow.  m is the map we are currently processing.  wx and wy are
  * the weathermap coordinates for the weathermap square we want to work on.   * the weathermap coordinates for the weathermap square we want to work on.
Line 1385
 
Line 1412
   
     for (x=0; x < settings.worldmaptilesizex; x++) {      for (x=0; x < settings.worldmaptilesizex; x++) {
  for (y=0; y < settings.worldmaptilesizey; y++) {   for (y=0; y < settings.worldmaptilesizey; y++) {
      (void)worldmap_to_weathermap(x, y, &wx, &wy, filename);       (void)worldmap_to_weathermap(x, y, &wx, &wy, /*filename*/ m);
      ob = NULL;       ob = NULL;
      at = NULL;       at = NULL;
      /* this will definately need tuning */       /* this will definately need tuning */
Line 1393
 
Line 1420
      two = 0;       two = 0;
      gotsnow = 0;       gotsnow = 0;
      nodstk = 0;       nodstk = 0;
      temp = real_world_temperature(x, y, m);       //temp = real_world_temperature(x, y, m);
    temp = weathermap[wx][wy].realtemp;
      sky = weathermap[wx][wy].sky;       sky = weathermap[wx][wy].sky;
      if (temp <= 0 && sky > SKY_OVERCAST && sky < SKY_FOG)       if (temp <= 0 && sky > SKY_OVERCAST && sky < SKY_FOG)
  sky += 10; /*let it snow*/   sky += 10; /*let it snow*/
Line 1450
 
Line 1478
  /* clean up the trees we put over the snow */   /* clean up the trees we put over the snow */
  found = 0;   found = 0;
  doublestack2 = NULL;   doublestack2 = NULL;
               if (tmp)
  for (i=0; weather_replace[i].tile != NULL; i++) {   for (i=0; weather_replace[i].tile != NULL; i++) {
      if (weather_replace[i].doublestack_arch == NULL)       if (weather_replace[i].doublestack_arch == NULL)
  continue;   continue;
Line 1582
 
Line 1611
   
     for (x=0; x < settings.worldmaptilesizex; x++) {      for (x=0; x < settings.worldmaptilesizex; x++) {
  for (y=0; y < settings.worldmaptilesizey; y++) {   for (y=0; y < settings.worldmaptilesizey; y++) {
      (void)worldmap_to_weathermap(x, y, &wx, &wy, filename);       (void)worldmap_to_weathermap(x, y, &wx, &wy, /*filename*/m);
      ob = NULL;       ob = NULL;
      at = NULL;       at = NULL;
      avoid = 0;       avoid = 0;
      two = 0;       two = 0;
      gotsnow = 0;       gotsnow = 0;
      nodstk = 0;       nodstk = 0;
      temp = real_world_temperature(x, y, m);       //temp = real_world_temperature(x, y, m);
    temp = weathermap[wx][wy].realtemp;
      sky = weathermap[wx][wy].sky;       sky = weathermap[wx][wy].sky;
      /* it's probably allready snowing */       /* it's probably allready snowing */
      if (temp < 0)       if (temp < 0)
Line 1780
 
Line 1810
     days = todtick / HOURS_PER_DAY;      days = todtick / HOURS_PER_DAY;
     for (x=0; x < settings.worldmaptilesizex; x++) {      for (x=0; x < settings.worldmaptilesizex; x++) {
  for (y=0; y < settings.worldmaptilesizey; y++) {   for (y=0; y < settings.worldmaptilesizey; y++) {
      (void)worldmap_to_weathermap(x, y, &wx, &wy, filename);       (void)worldmap_to_weathermap(x, y, &wx, &wy, /*filename*/m);
      ob = NULL;       ob = NULL;
      at = NULL;       at = NULL;
      avoid = 0;       avoid = 0;
      two = 0;       two = 0;
      gotsnow = 0;       gotsnow = 0;
      temp = real_world_temperature(x, y, m);       //temp = real_world_temperature(x, y, m);
    temp = weathermap[wx][wy].realtemp;
      sky = weathermap[wx][wy].sky;       sky = weathermap[wx][wy].sky;
      (void)avoid_weather(&avoid, m, x, y, &gotsnow, 1);       (void)avoid_weather(&avoid, m, x, y, &gotsnow, 1);
      if (!avoid) {       if (!avoid) {
Line 1878
 
Line 1909
     days = todtick / HOURS_PER_DAY;      days = todtick / HOURS_PER_DAY;
     for (x=0; x < settings.worldmaptilesizex; x++) {      for (x=0; x < settings.worldmaptilesizex; x++) {
  for (y=0; y < settings.worldmaptilesizey; y++) {   for (y=0; y < settings.worldmaptilesizey; y++) {
      (void)worldmap_to_weathermap(x, y, &wx, &wy, filename);       (void)worldmap_to_weathermap(x, y, &wx, &wy, /*filename*/m);
      ob = NULL;       ob = NULL;
      at = NULL;       at = NULL;
      dat = NULL;       dat = NULL;
      avoid = 0;       avoid = 0;
      two = 0;       two = 0;
      gotsnow = 0;       gotsnow = 0;
      temp = real_world_temperature(x, y, m);       //temp = real_world_temperature(x, y, m);
    temp = weathermap[wx][wy].realtemp;
      sky = weathermap[wx][wy].sky;       sky = weathermap[wx][wy].sky;
      (void)avoid_weather(&avoid, m, x, y, &gotsnow, 1);       (void)avoid_weather(&avoid, m, x, y, &gotsnow, 1);
      if (!avoid) {       if (!avoid) {
Line 1992
 
Line 2024
   
     for (x=0; x < settings.worldmaptilesizex; x++) {      for (x=0; x < settings.worldmaptilesizex; x++) {
  for (y=0; y < settings.worldmaptilesizey; y++) {   for (y=0; y < settings.worldmaptilesizey; y++) {
      (void)worldmap_to_weathermap(x, y, &wx, &wy, filename);       (void)worldmap_to_weathermap(x, y, &wx, &wy, /*filename*/m);
      ob = NULL;       ob = NULL;
      at = NULL;       at = NULL;
      avoid = 0;       avoid = 0;
Line 2079
 
Line 2111
    map.  returns -1 if you give it something it can't figure out. 0 normally.     map.  returns -1 if you give it something it can't figure out. 0 normally.
 */  */
   
 int worldmap_to_weathermap(int x, int y, int *wx, int *wy, char *filename)  //int worldmap_to_weathermap(int x, int y, int *wx, int *wy, char *filename)
   int worldmap_to_weathermap(int x, int y, int *wx, int *wy, mapstruct* m)
 {  {
     int spwtx, spwty;      int spwtx, spwty;
     int fx, fy;      int fx, fy;
     int nx, ny;      int nx, ny;
    char* filename=m->path;
     spwtx = (settings.worldmaptilesx * settings.worldmaptilesizex) / WEATHERMAPTILESX;      spwtx = (settings.worldmaptilesx * settings.worldmaptilesizex) / WEATHERMAPTILESX;
     spwty = (settings.worldmaptilesy * settings.worldmaptilesizey) / WEATHERMAPTILESY;      spwty = (settings.worldmaptilesy * settings.worldmaptilesizey) / WEATHERMAPTILESY;
   
     while (*filename == '/')      while (*filename == '/')
  *filename++;   *filename++;
   
     fx = -1;      fx = MAP_WORLDPARTX(m);
     fy = -1;      fy = MAP_WORLDPARTY(m);
    if (fx > settings.worldmapstartx + settings.worldmaptilesx ||
      fx < settings.worldmapstartx ||
         fy > settings.worldmapstarty + settings.worldmaptilesy ||
      fy < settings.worldmapstarty){
    printf ("worldmap_to_weathermap(%s)\n",filename);
     sscanf(filename, "world/world_%d_%d", &fx, &fy);      sscanf(filename, "world/world_%d_%d", &fx, &fy);
    MAP_WORLDPARTX(m)=fx;
       MAP_WORLDPARTY(m)=fy;
    }
     if (fx > settings.worldmapstartx + settings.worldmaptilesx ||      if (fx > settings.worldmapstartx + settings.worldmaptilesx ||
  fx < settings.worldmapstartx)   fx < settings.worldmapstartx)
  return -1;   return -1;
Line 2302
 
Line 2343
 {  {
     int wx, wy, temp, eleva, elevb;      int wx, wy, temp, eleva, elevb;
     object *op;      object *op;
    //printf ("real_world_temperature: worldmaptoweathermap : %s\n",m->path);
     worldmap_to_weathermap(x, y, &wx, &wy, m->path);      worldmap_to_weathermap(x, y, &wx, &wy, /*m->path*/m);
     temp = real_temperature(wx, wy);      temp = real_temperature(wx, wy);
     if (weathermap[wx][wy].avgelev < 0)      if (weathermap[wx][wy].avgelev < 0)
  eleva = 0;   eleva = 0;
Line 2687
 
Line 2728
      }       }
  }   }
 }  }
        


Legend:
line(s) removed in v.1.30 
line(s) changed
 line(s) added in v.1.31

File made using version 1.98 of cvs2html by leaf at 2011-07-21 17:53