#include "math.h"
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include "define.h"
#include "struct.h"
/*
* SUNLIGHT
*/
const char* light_name( int i )
{
const char* adj [] = { "Pitch Dark", "Extremely Dark", "Dark",
"Dimly Lit", "Lit", "Well Lit", "Brightly Lit", "Blinding" };
i = (int) log( (float) 2+i );
i = min( i, 7 );
return adj[i];
}
int sunlight( int time )
{
int sunrise = 5*60;
int sunset = 20*60;
if( time < sunrise || time > sunset )
return 10;
double x = 10+500*sin(M_PI*(time-sunrise)/(sunset-sunrise));
return (int) x;
}
/*
* ILLUMINATION
*/
int Thing_Data :: Light( int ) { return 0; }
int Player_Data :: Light( int ) { return wearing.light; }
int Mob_Data :: Light( int ) { return wearing.light+species->light; }
int Obj_Data :: Light( int n )
{
int i = pIndexData->light;
i *= ( n == -1 ? number : n );
return i;
}
int Room_Data :: Light( int )
{
int i = contents.light;
if( !is_set( &room_flags, RFLAG_INDOORS ) )
i += weather.sunlight;
return i;
}
/*
* SPELLS
*/
bool spell_create_light( char_data* ch, char_data*, void*,
int level, int )
{
obj_data* light;
// event_data* event;
if( null_caster( ch, SPELL_CREATE_LIGHT ) )
return TRUE;
light = create( get_obj_index( OBJ_BALL_OF_LIGHT ) );
send( ch, "%s appears floating near you.\n\r", light );
send( *ch->array, "%s appears floating near %s.\n\r", light, ch );
light->position = WEAR_FLOATING;
light->layer = 0;
light->To( &ch->wearing );
/*
event = new event_data( execute_extinguish, light );
add_queue( event, 100 );
*/
return TRUE;
}
bool spell_continual_light( char_data *ch, char_data *victim, void*,
int level, int duration )
{
spell_affect( ch, victim, level, duration, SPELL_CONTINUAL_LIGHT,
AFF_CONTINUAL_LIGHT );
return TRUE;
}