void weather_change(void) { int diff, change; if((time_info.month>=9)&&(time_info.month<=16)) diff=(weather_info.pressure>985 ? -2 : 2); else diff=(weather_info.pressure>1015? -2 : 2); weather_info.change += (dice(1,4)*diff+dice(2,6)-dice(2,6)); weather_info.change = MIN(weather_info.change,12); weather_info.change = MAX(weather_info.change,-12); weather_info.pressure += weather_info.change; weather_info.pressure = MIN(weather_info.pressure,1040); weather_info.pressure = MAX(weather_info.pressure,960); change = 0; switch(weather_info.sky){ case SKY_CLOUDLESS : { if (weather_info.pressure<990) change = 1; else if (weather_info.pressure<1010) if(dice(1,4)==1) change = 1; break; } case SKY_CLOUDY : { if (weather_info.pressure<970) change = 2; else if (weather_info.pressure<990) if(dice(1,4)==1) change = 2; else change = 0; else if (weather_info.pressure>1030) if(dice(1,4)==1) change = 3; break; } case SKY_RAINING : { if (weather_info.pressure<970) if(dice(1,4)==1) change = 4; else change = 0; else if (weather_info.pressure>1030) change = 5; else if (weather_info.pressure>1010) if(dice(1,4)==1) change = 5; break; } case SKY_LIGHTNING : { if (weather_info.pressure>1010) change = 6; else if (weather_info.pressure>990) if(dice(1,4)==1) change = 6; break; } default : { change = 0; weather_info.sky=SKY_CLOUDLESS; break; } } ChangeWeather(change); }
void weather_change(void) { int diff = 0; int change = 0; if (DEBUG > 2) log_info("called %s with no arguments", __PRETTY_FUNCTION__); if ((time_info.month >= 9) && (time_info.month <= 16)) diff = (weather_info.pressure > 985 ? -2 : 2); else diff = (weather_info.pressure > 1015 ? -2 : 2); weather_info.change += (dice(1, 4) * diff + dice(2, 6) - dice(2, 6)); weather_info.change = MIN(weather_info.change, 12); weather_info.change = MAX(weather_info.change, -12); weather_info.pressure += weather_info.change; weather_info.pressure = MIN(weather_info.pressure, 1040); weather_info.pressure = MAX(weather_info.pressure, 960); change = 0; switch (weather_info.sky) { case SKY_CLOUDLESS: { if (weather_info.pressure < 990) change = 1; else if (weather_info.pressure < 1010) if (dice(1, 4) == 1) change = 1; break; } case SKY_CLOUDY: { if (weather_info.pressure < 970) change = 2; else if (weather_info.pressure < 990) if (dice(1, 4) == 1) change = 2; else change = 0; else if (weather_info.pressure > 1030) if (dice(1, 4) == 1) change = 3; } break; case SKY_RAINING: { if (weather_info.pressure < 970) if (dice(1, 4) == 1) change = 4; else change = 0; else if (weather_info.pressure > 1030) change = 5; else if (weather_info.pressure > 1010) if (dice(1, 4) == 1) change = 5; } break; case SKY_LIGHTNING: { if (weather_info.pressure > 1010) change = 6; else if (weather_info.pressure > 990) if (dice(1, 4) == 1) change = 6; } break; default: { change = 0; weather_info.sky = SKY_CLOUDLESS; } break; } ChangeWeather(change); }