/* /adm/simul_efun/light.c
* from Nightmare IV
* light SimulEfuns
* created by Descartes of Borg 940213
*/
#include <daemons.h>
int effective_light(object ob) {
object *inv;
int i, x;
if(!objectp(ob)) error("Bad argument 1 to effective_light().\n");
if(creatorp(ob) || (int)ob->query_level() == 1) return 1;
x = total_light(ob) + (int)ob->query_sight_bonus();
i = sizeof(inv = all_inventory(ob));
while(i--) x += (int)inv[i]->query_property("light");
return x;
}
int moon_light() { return (int)ASTRONOMY_D->query_moon_light(); }
int total_light(object ob) {
object *inv;
object env;
int i, x;
if(!objectp(ob)) error("Bad argument 1 to total_light().\n");
if(!(env = environment(ob))) return 0;
i = sizeof(inv = all_inventory(env));
x = (int)env->query_property("light");
while(i--) x += (int)inv[i]->query_property("light");
if((int)env->query_property("indoors")) return x;
switch((string)EVENTS_D->query_time_of_day()) {
case "day": return x;
case "night":
return (x+moon_light()+(int)env->query_property("night light")-4);
case "dawn": case "twilight": return (x-1);
default: return x;
}
}