environment.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. #ifdef PRECOMPILEDHEADERS
  2. #include "TileEngine All.h"
  3. #else
  4. #include "sgp.h"
  5. #include "lighting.h"
  6. #include "environment.h"
  7. #include "renderworld.h"
  8. #include "sound control.h"
  9. #include "overhead.h"
  10. #include "Game Clock.h"
  11. #include "quests.h"
  12. #include "Ambient Control.h"
  13. #include "AimMembers.h"
  14. #include "Strategic Event Handler.h"
  15. #include "BobbyR.h"
  16. #include "mercs.h"
  17. #include "email.h"
  18. #include "Merc Hiring.h"
  19. #include "insurance Contract.h"
  20. #include "Strategic Merc Handler.h"
  21. #include "Game Events.h"
  22. #include "message.h"
  23. #include "opplist.h"
  24. #include "Random.h"
  25. #include "strategicmap.h"
  26. #endif
  27. //effects whether or not time of day effects the lighting. Underground
  28. //maps have an ambient light level that is saved in the map, and doesn't change.
  29. BOOLEAN gfBasement = FALSE;
  30. BOOLEAN gfCaves = FALSE;
  31. #define ENV_TOD_FLAGS_DAY 0x00000001
  32. #define ENV_TOD_FLAGS_DAWN 0x00000002
  33. #define ENV_TOD_FLAGS_DUSK 0x00000004
  34. #define ENV_TOD_FLAGS_NIGHT 0x00000008
  35. /*
  36. #define DAWNLIGHT_START ( 5 * 60 )
  37. #define DAWN_START ( 6 * 60 )
  38. #define DAY_START ( 8 * 60 )
  39. #define TWILLIGHT_START ( 19 * 60 )
  40. #define DUSK_START ( 20 * 60 )
  41. #define NIGHT_START ( 22 * 60 )
  42. */
  43. #define DAWN_START ( 6 * 60 + 47 ) //6:47AM
  44. #define DAY_START ( 7 * 60 + 5 ) //7:05AM
  45. #define DUSK_START ( 20 * 60 + 57 ) //8:57PM
  46. #define NIGHT_START ( 21 * 60 + 15 ) //9:15PM
  47. #define DAWN_TO_DAY (DAY_START-DAWN_START)
  48. #define DAY_TO_DUSK (DUSK_START-DAY_START)
  49. #define DUSK_TO_NIGHT (NIGHT_START-DUSK_START)
  50. #define NIGHT_TO_DAWN (24*60-NIGHT_START+DAWN_START)
  51. UINT32 guiEnvWeather = 0;
  52. UINT32 guiRainLoop = NO_SAMPLE;
  53. // frame cues for lightning
  54. UINT8 ubLightningTable[3][10][2]=
  55. { { {0, 15},
  56. {1, 0},
  57. {2, 0},
  58. {3, 6},
  59. {4, 0},
  60. {5, 0},
  61. {6, 0},
  62. {7, 0},
  63. {8, 0},
  64. {9, 0} },
  65. { {0, 15},
  66. {1, 0},
  67. {2, 0},
  68. {3, 6},
  69. {4, 0},
  70. {5, 15},
  71. {6, 0},
  72. {7, 6},
  73. {8, 0},
  74. {9, 0} },
  75. { {0, 15},
  76. {1, 0},
  77. {2, 15},
  78. {3, 0},
  79. {4, 0},
  80. {5, 0},
  81. {6, 0},
  82. {7, 0},
  83. {8, 0},
  84. {9, 0} } };
  85. // CJC: I don't think these are used anywhere!
  86. UINT8 guiTODFlags[ENV_NUM_TIMES] = {
  87. ENV_TOD_FLAGS_NIGHT, // 00
  88. ENV_TOD_FLAGS_NIGHT, // 01
  89. ENV_TOD_FLAGS_NIGHT, // 02
  90. ENV_TOD_FLAGS_NIGHT, // 03
  91. ENV_TOD_FLAGS_NIGHT, // 04
  92. ENV_TOD_FLAGS_DAWN, // 05
  93. ENV_TOD_FLAGS_DAWN, // 06
  94. ENV_TOD_FLAGS_DAWN, // 07
  95. ENV_TOD_FLAGS_DAY, // 08
  96. ENV_TOD_FLAGS_DAY, // 09
  97. ENV_TOD_FLAGS_DAY, // 10
  98. ENV_TOD_FLAGS_DAY, // 11
  99. ENV_TOD_FLAGS_DAY, // 12
  100. ENV_TOD_FLAGS_DAY, // 13
  101. ENV_TOD_FLAGS_DAY, // 14
  102. ENV_TOD_FLAGS_DAY, // 15
  103. ENV_TOD_FLAGS_DAY, // 16
  104. ENV_TOD_FLAGS_DAY, // 17
  105. ENV_TOD_FLAGS_DAY, // 18
  106. ENV_TOD_FLAGS_DUSK, // 19
  107. ENV_TOD_FLAGS_DUSK, // 20
  108. ENV_TOD_FLAGS_DUSK, // 21
  109. ENV_TOD_FLAGS_NIGHT, // 22
  110. ENV_TOD_FLAGS_NIGHT}; // 23
  111. typedef enum
  112. {
  113. COOL,
  114. WARM,
  115. HOT
  116. } Temperatures;
  117. typedef enum
  118. {
  119. TEMPERATURE_DESERT_COOL,
  120. TEMPERATURE_DESERT_WARM,
  121. TEMPERATURE_DESERT_HOT,
  122. TEMPERATURE_GLOBAL_COOL,
  123. TEMPERATURE_GLOBAL_WARM,
  124. TEMPERATURE_GLOBAL_HOT,
  125. } TemperatureEvents;
  126. #define DESERT_WARM_START ( 8 * 60 )
  127. #define DESERT_HOT_START ( 9 * 60 )
  128. #define DESERT_HOT_END (17 * 60 )
  129. #define DESERT_WARM_END (19 * 60 )
  130. #define GLOBAL_WARM_START ( 9 * 60 )
  131. #define GLOBAL_HOT_START (12 * 60 )
  132. #define GLOBAL_HOT_END (14 * 60 )
  133. #define GLOBAL_WARM_END (17 * 60 )
  134. #define HOT_DAY_LIGHTLEVEL 2
  135. BOOLEAN fTimeOfDayControls=TRUE;
  136. UINT32 guiEnvTime=0;
  137. UINT32 guiEnvDay=0;
  138. UINT8 gubEnvLightValue = 0;
  139. BOOLEAN gfDoLighting = FALSE;
  140. UINT8 gubDesertTemperature = 0;
  141. UINT8 gubGlobalTemperature = 0;
  142. // local prototypes
  143. void EnvDoLightning(void);
  144. // polled by the game to handle time/atmosphere changes from gamescreen
  145. void EnvironmentController( BOOLEAN fCheckForLights )
  146. {
  147. UINT32 uiOldWorldHour;
  148. UINT8 ubLightAdjustFromWeather = 0;
  149. // do none of this stuff in the basement or caves
  150. if( gfBasement || gfCaves )
  151. {
  152. guiEnvWeather &= (~WEATHER_FORECAST_THUNDERSHOWERS );
  153. guiEnvWeather &= (~WEATHER_FORECAST_SHOWERS );
  154. if ( guiRainLoop != NO_SAMPLE )
  155. {
  156. SoundStop( guiRainLoop );
  157. guiRainLoop = NO_SAMPLE;
  158. }
  159. return;
  160. }
  161. if(fTimeOfDayControls )
  162. {
  163. uiOldWorldHour = GetWorldHour();
  164. // If hour is different
  165. if ( uiOldWorldHour != guiEnvTime )
  166. {
  167. // Hour change....
  168. guiEnvTime=uiOldWorldHour;
  169. }
  170. //ExecuteStrategicEventsUntilTimeStamp( (UINT16)GetWorldTotalMin( ) );
  171. // Polled weather stuff...
  172. // ONly do indooors
  173. if( !gfBasement && !gfCaves )
  174. {
  175. #if 0
  176. if ( guiEnvWeather & ( WEATHER_FORECAST_THUNDERSHOWERS | WEATHER_FORECAST_SHOWERS ) )
  177. {
  178. if ( guiRainLoop == NO_SAMPLE )
  179. {
  180. guiRainLoop = PlayJA2Ambient( RAIN_1, MIDVOLUME, 0 );
  181. }
  182. // Do lightning if we want...
  183. if ( guiEnvWeather & ( WEATHER_FORECAST_THUNDERSHOWERS ) )
  184. {
  185. EnvDoLightning( );
  186. }
  187. }
  188. else
  189. {
  190. if ( guiRainLoop != NO_SAMPLE )
  191. {
  192. SoundStop( guiRainLoop );
  193. guiRainLoop = NO_SAMPLE;
  194. }
  195. }
  196. #endif
  197. }
  198. if ( gfDoLighting && fCheckForLights )
  199. {
  200. // Adjust light level based on weather...
  201. ubLightAdjustFromWeather = GetTimeOfDayAmbientLightLevel();
  202. // ONly do indooors
  203. if( !gfBasement && !gfCaves )
  204. {
  205. // Rain storms....
  206. #if 0
  207. if ( guiEnvWeather & ( WEATHER_FORECAST_THUNDERSHOWERS | WEATHER_FORECAST_SHOWERS ) )
  208. {
  209. // Thunder showers.. make darker
  210. if ( guiEnvWeather & ( WEATHER_FORECAST_THUNDERSHOWERS ) )
  211. {
  212. ubLightAdjustFromWeather = (UINT8)(__min( gubEnvLightValue+2, NORMAL_LIGHTLEVEL_NIGHT ));
  213. }
  214. else
  215. {
  216. ubLightAdjustFromWeather = (UINT8)(__min( gubEnvLightValue+1, NORMAL_LIGHTLEVEL_NIGHT ));
  217. }
  218. }
  219. #endif
  220. }
  221. LightSetBaseLevel( ubLightAdjustFromWeather );
  222. //Update Merc Lights since the above function modifies it.
  223. HandlePlayerTogglingLightEffects( FALSE );
  224. // Make teams look for all
  225. // AllTeamsLookForAll( FALSE );
  226. // Set global light value
  227. SetRenderFlags(RENDER_FLAG_FULL);
  228. gfDoLighting = FALSE;
  229. }
  230. }
  231. }
  232. void BuildDayLightLevels()
  233. {
  234. UINT32 uiLoop, uiHour;
  235. /*
  236. // Dawn; light 12
  237. AddEveryDayStrategicEvent( EVENT_CHANGELIGHTVAL, DAWNLIGHT_START, NORMAL_LIGHTLEVEL_NIGHT - 1 );
  238. // loop from light 12 down to light 4
  239. for (uiLoop = 1; uiLoop < 8; uiLoop++)
  240. {
  241. AddEveryDayStrategicEvent( EVENT_CHANGELIGHTVAL, DAWN_START + 15 * uiLoop, NORMAL_LIGHTLEVEL_NIGHT - 1 - uiLoop );
  242. }
  243. */
  244. //Transition from night to day
  245. for( uiLoop = 0; uiLoop < 9; uiLoop++ )
  246. {
  247. AddEveryDayStrategicEvent( EVENT_CHANGELIGHTVAL, DAWN_START + 2 * uiLoop, NORMAL_LIGHTLEVEL_NIGHT - 1 - uiLoop );
  248. }
  249. // Add events for hot times
  250. AddEveryDayStrategicEvent( EVENT_TEMPERATURE_UPDATE, DESERT_WARM_START, TEMPERATURE_DESERT_WARM );
  251. AddEveryDayStrategicEvent( EVENT_TEMPERATURE_UPDATE, DESERT_HOT_START, TEMPERATURE_DESERT_HOT );
  252. AddEveryDayStrategicEvent( EVENT_TEMPERATURE_UPDATE, DESERT_HOT_END, TEMPERATURE_DESERT_WARM );
  253. AddEveryDayStrategicEvent( EVENT_TEMPERATURE_UPDATE, DESERT_WARM_END, TEMPERATURE_DESERT_COOL );
  254. AddEveryDayStrategicEvent( EVENT_TEMPERATURE_UPDATE, GLOBAL_WARM_START, TEMPERATURE_GLOBAL_WARM );
  255. AddEveryDayStrategicEvent( EVENT_TEMPERATURE_UPDATE, GLOBAL_HOT_START, TEMPERATURE_GLOBAL_HOT );
  256. AddEveryDayStrategicEvent( EVENT_TEMPERATURE_UPDATE, GLOBAL_HOT_END, TEMPERATURE_GLOBAL_WARM );
  257. AddEveryDayStrategicEvent( EVENT_TEMPERATURE_UPDATE, GLOBAL_WARM_END, TEMPERATURE_GLOBAL_COOL );
  258. /*
  259. // Twilight; light 5
  260. AddEveryDayStrategicEvent( EVENT_CHANGELIGHTVAL, TWILLIGHT_START, NORMAL_LIGHTLEVEL_DAY + 1 );
  261. // Dusk; loop from light 5 up to 12
  262. for (uiLoop = 1; uiLoop < 8; uiLoop++)
  263. {
  264. AddEveryDayStrategicEvent( EVENT_CHANGELIGHTVAL, DUSK_START + 15 * uiLoop, NORMAL_LIGHTLEVEL_DAY + 1 + uiLoop );
  265. }
  266. */
  267. //Transition from day to night
  268. for( uiLoop = 0; uiLoop < 9; uiLoop++ )
  269. {
  270. AddEveryDayStrategicEvent( EVENT_CHANGELIGHTVAL, DUSK_START + 2 * uiLoop, NORMAL_LIGHTLEVEL_DAY + 1 + uiLoop );
  271. }
  272. //Set up the scheduling for turning lights on and off based on the various types.
  273. uiHour = NIGHT_TIME_LIGHT_START_HOUR == 24 ? 0 : NIGHT_TIME_LIGHT_START_HOUR;
  274. AddEveryDayStrategicEvent( EVENT_TURN_ON_NIGHT_LIGHTS, uiHour * 60, 0 );
  275. uiHour = NIGHT_TIME_LIGHT_END_HOUR == 24 ? 0 : NIGHT_TIME_LIGHT_END_HOUR;
  276. AddEveryDayStrategicEvent( EVENT_TURN_OFF_NIGHT_LIGHTS, uiHour * 60, 0 );
  277. uiHour = PRIME_TIME_LIGHT_START_HOUR == 24 ? 0 : PRIME_TIME_LIGHT_START_HOUR;
  278. AddEveryDayStrategicEvent( EVENT_TURN_ON_PRIME_LIGHTS, uiHour * 60, 0 );
  279. uiHour = PRIME_TIME_LIGHT_END_HOUR == 24 ? 0 : PRIME_TIME_LIGHT_END_HOUR;
  280. AddEveryDayStrategicEvent( EVENT_TURN_OFF_PRIME_LIGHTS, uiHour * 60, 0 );
  281. }
  282. void BuildDayAmbientSounds( )
  283. {
  284. INT32 cnt;
  285. // Add events!
  286. for ( cnt = 0; cnt < gsNumAmbData; cnt++ )
  287. {
  288. switch( gAmbData[ cnt ].ubTimeCatagory )
  289. {
  290. case AMB_TOD_DAWN:
  291. AddSameDayRangedStrategicEvent( EVENT_AMBIENT, DAWN_START, DAWN_TO_DAY, cnt );
  292. break;
  293. case AMB_TOD_DAY:
  294. AddSameDayRangedStrategicEvent( EVENT_AMBIENT, DAY_START, DAY_TO_DUSK, cnt );
  295. break;
  296. case AMB_TOD_DUSK:
  297. AddSameDayRangedStrategicEvent( EVENT_AMBIENT, DUSK_START, DUSK_TO_NIGHT, cnt );
  298. break;
  299. case AMB_TOD_NIGHT:
  300. AddSameDayRangedStrategicEvent( EVENT_AMBIENT, NIGHT_START, NIGHT_TO_DAWN, cnt );
  301. break;
  302. }
  303. }
  304. guiRainLoop = NO_SAMPLE;
  305. }
  306. void ForecastDayEvents( )
  307. {
  308. UINT32 uiOldDay;
  309. UINT32 uiStartTime, uiEndTime;
  310. UINT8 ubStormIntensity;
  311. // UINT32 cnt;
  312. // Get current day and see if different
  313. if ( ( uiOldDay = GetWorldDay() ) != guiEnvDay )
  314. {
  315. // It's a new day, forecast weather
  316. guiEnvDay = uiOldDay;
  317. // Set light level changes
  318. //BuildDayLightLevels();
  319. // Build ambient sound queues
  320. BuildDayAmbientSounds( );
  321. // Build weather....
  322. // ATE: Don't forecast if start of game...
  323. if ( guiEnvDay > 1 )
  324. {
  325. // Should it rain...?
  326. if ( Random( 100 ) < 20 )
  327. {
  328. // Add rain!
  329. // Between 6:00 and 10:00
  330. uiStartTime = (UINT32)( 360 + Random( 1080 ) );
  331. // Between 5 - 15 miniutes
  332. uiEndTime = uiStartTime + ( 5 + Random( 10 ) );
  333. ubStormIntensity = 0;
  334. // Randomze for a storm!
  335. if ( Random( 10 ) < 5 )
  336. {
  337. ubStormIntensity = 1;
  338. }
  339. // ATE: Disable RAIN!
  340. // AddSameDayRangedStrategicEvent( EVENT_RAINSTORM, uiStartTime, uiEndTime - uiStartTime, ubStormIntensity );
  341. //AddSameDayStrategicEvent( EVENT_BEGINRAINSTORM, uiStartTime, ubStormIntensity );
  342. //AddSameDayStrategicEvent( EVENT_ENDRAINSTORM, uiEndTime, 0 );
  343. }
  344. }
  345. }
  346. }
  347. void EnvEnableTOD(void)
  348. {
  349. fTimeOfDayControls=TRUE;
  350. }
  351. void EnvDisableTOD(void)
  352. {
  353. fTimeOfDayControls=FALSE;
  354. }
  355. void EnvDoLightning(void)
  356. {
  357. static UINT32 uiCount=0, uiIndex=0, uiStrike=0, uiFrameNext=1000;
  358. static UINT8 ubLevel=0, ubLastLevel=0;
  359. if ( gfPauseDueToPlayerGamePause )
  360. {
  361. return;
  362. }
  363. uiCount++;
  364. if(uiCount >= (uiFrameNext+10))
  365. {
  366. uiCount=0;
  367. uiIndex=0;
  368. ubLevel=0;
  369. ubLastLevel=0;
  370. uiStrike=Random(3);
  371. uiFrameNext=1000+Random(1000);
  372. }
  373. else if(uiCount >= uiFrameNext)
  374. {
  375. if(uiCount == uiFrameNext)
  376. {
  377. //EnvStopCrickets();
  378. PlayJA2Ambient(LIGHTNING_1+Random(2), HIGHVOLUME, 1);
  379. }
  380. while(uiCount > ((UINT32)ubLightningTable[uiStrike][uiIndex][0] + uiFrameNext))
  381. uiIndex++;
  382. ubLastLevel=ubLevel;
  383. ubLevel=ubLightningTable[uiStrike][uiIndex][1];
  384. // ATE: Don't modify if scrolling!
  385. if ( gfScrollPending || gfScrollInertia )
  386. {
  387. }
  388. else
  389. {
  390. if(ubLastLevel!=ubLevel)
  391. {
  392. if(ubLevel > ubLastLevel)
  393. {
  394. LightAddBaseLevel(0, (UINT8)(ubLevel-ubLastLevel));
  395. if(ubLevel > 0)
  396. RenderSetShadows(TRUE);
  397. }
  398. else
  399. {
  400. LightSubtractBaseLevel(0, (UINT8)(ubLastLevel-ubLevel));
  401. if(ubLevel > 0)
  402. RenderSetShadows(TRUE);
  403. }
  404. SetRenderFlags(RENDER_FLAG_FULL);
  405. }
  406. }
  407. }
  408. }
  409. UINT8 GetTimeOfDayAmbientLightLevel()
  410. {
  411. if ( SectorTemperature( GetWorldMinutesInDay(), gWorldSectorX, gWorldSectorY, gbWorldSectorZ ) == HOT )
  412. {
  413. return( HOT_DAY_LIGHTLEVEL );
  414. }
  415. else
  416. {
  417. return( gubEnvLightValue );
  418. }
  419. }
  420. void EnvBeginRainStorm( UINT8 ubIntensity )
  421. {
  422. if( !gfBasement && !gfCaves )
  423. {
  424. gfDoLighting = TRUE;
  425. #ifdef JA2TESTVERSION
  426. ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_TESTVERSION, L"Starting Rain...." );
  427. #endif
  428. if ( ubIntensity == 1 )
  429. {
  430. // Turn on rain storms
  431. guiEnvWeather |= WEATHER_FORECAST_THUNDERSHOWERS;
  432. }
  433. else
  434. {
  435. guiEnvWeather |= WEATHER_FORECAST_SHOWERS;
  436. }
  437. }
  438. }
  439. void EnvEndRainStorm( )
  440. {
  441. gfDoLighting = TRUE;
  442. #ifdef JA2TESTVERSION
  443. ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_TESTVERSION, L"Ending Rain...." );
  444. #endif
  445. guiEnvWeather &= (~WEATHER_FORECAST_THUNDERSHOWERS );
  446. guiEnvWeather &= (~WEATHER_FORECAST_SHOWERS );
  447. }
  448. void TurnOnNightLights()
  449. {
  450. INT32 i;
  451. for( i = 0; i < MAX_LIGHT_SPRITES; i++ )
  452. {
  453. if( LightSprites[ i ].uiFlags & LIGHT_SPR_ACTIVE &&
  454. LightSprites[ i ].uiFlags & LIGHT_NIGHTTIME &&
  455. !(LightSprites[ i ].uiFlags & (LIGHT_SPR_ON|MERC_LIGHT) ) )
  456. {
  457. LightSpritePower( i, TRUE );
  458. }
  459. }
  460. }
  461. void TurnOffNightLights()
  462. {
  463. INT32 i;
  464. for( i = 0; i < MAX_LIGHT_SPRITES; i++ )
  465. {
  466. if( LightSprites[ i ].uiFlags & LIGHT_SPR_ACTIVE &&
  467. LightSprites[ i ].uiFlags & LIGHT_NIGHTTIME &&
  468. LightSprites[ i ].uiFlags & LIGHT_SPR_ON &&
  469. !(LightSprites[ i ].uiFlags & MERC_LIGHT) )
  470. {
  471. LightSpritePower( i, FALSE );
  472. }
  473. }
  474. }
  475. void TurnOnPrimeLights()
  476. {
  477. INT32 i;
  478. for( i = 0; i < MAX_LIGHT_SPRITES; i++ )
  479. {
  480. if( LightSprites[ i ].uiFlags & LIGHT_SPR_ACTIVE &&
  481. LightSprites[ i ].uiFlags & LIGHT_PRIMETIME &&
  482. !(LightSprites[ i ].uiFlags & (LIGHT_SPR_ON|MERC_LIGHT) ) )
  483. {
  484. LightSpritePower( i, TRUE );
  485. }
  486. }
  487. }
  488. void TurnOffPrimeLights()
  489. {
  490. INT32 i;
  491. for( i = 0; i < MAX_LIGHT_SPRITES; i++ )
  492. {
  493. if( LightSprites[ i ].uiFlags & LIGHT_SPR_ACTIVE &&
  494. LightSprites[ i ].uiFlags & LIGHT_PRIMETIME &&
  495. LightSprites[ i ].uiFlags & LIGHT_SPR_ON &&
  496. !(LightSprites[ i ].uiFlags & MERC_LIGHT) )
  497. {
  498. LightSpritePower( i, FALSE );
  499. }
  500. }
  501. }
  502. void UpdateTemperature( UINT8 ubTemperatureCode )
  503. {
  504. switch( ubTemperatureCode )
  505. {
  506. case TEMPERATURE_DESERT_COOL:
  507. gubDesertTemperature = 0;
  508. break;
  509. case TEMPERATURE_DESERT_WARM:
  510. gubDesertTemperature = 1;
  511. break;
  512. case TEMPERATURE_DESERT_HOT:
  513. gubDesertTemperature = 2;
  514. break;
  515. case TEMPERATURE_GLOBAL_COOL:
  516. gubGlobalTemperature = 0;
  517. break;
  518. case TEMPERATURE_GLOBAL_WARM:
  519. gubGlobalTemperature = 1;
  520. break;
  521. case TEMPERATURE_GLOBAL_HOT:
  522. gubGlobalTemperature = 2;
  523. break;
  524. }
  525. gfDoLighting = TRUE;
  526. }
  527. INT8 SectorTemperature( UINT32 uiTime, INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
  528. {
  529. if (bSectorZ > 0)
  530. {
  531. // cool underground
  532. return( 0 );
  533. }
  534. else if ( IsSectorDesert( sSectorX, sSectorY ) ) // is desert
  535. {
  536. return( gubDesertTemperature );
  537. }
  538. else
  539. {
  540. return( gubGlobalTemperature );
  541. }
  542. }