#include <daemons.h> #include <clock.h> #include <astronomy.h> #define DEFAULT_MSG "You do not see that here." private static int moon_light; private static mapping moons; void init_sky(); void set_moon_light(); string query_phase_name(int x); int query_phase(string moon); void create() { moons = ([]); init_sky(); set_moon_light(); } void init_sky() { int x; moons[MOONS[0]] = CURRENT_WEEK(time()) + 1; x = date(time())+(20*(CURRENT_MONTH(time()))); moons[MOONS[1]] = 1+((to_int(to_float(x)/2.5))%4); moons[MOONS[2]] = 1+((x/10)%4); } int query_phase(string moon) { if(member_array(moon, MOONS) == -1) return 0; else return moons[moon]; } string query_phase_name(int phase) { if(phase > sizeof(PHASES)) return "Error"; else return PHASES[phase-1]; } void set_moon_light() { int i; i = sizeof(MOONS); moon_light = 0; while(i--) { switch(moons[MOONS[i]]) { case 1: break; case 2: moon_light += 1; break; case 3: moon_light += 2; break; case 4: moon_light += 1; break; } } moon_light = moon_light/2; } int query_moon_light() { return moon_light; } void la_sky(string str) { string tod; string *phase; int i; if(environment(this_player())->query_property("indoors")) { write(DEFAULT_MSG); return; } tod = (string)EVENTS_D->query_time_of_day(); phase = allocate(i=sizeof(MOONS)); while(i--) phase[i] = (query_phase_name(query_phase(MOONS[i])) || ""); switch(str) { case "sun": switch(tod) { case "dawn": write("The sun is hanging low in the dawning eastern sky."); break; case "day": write("The sun is shining brightly in the daytime sky."); break; case "twilight": write("The sun is falling into the twilight sky."); break; case "night": write(DEFAULT_MSG); break; } break; case "moon": if(tod != "night") write(DEFAULT_MSG); else { write("The sky is dark with night."); if(phase[0] != "new") write("There is a "+MOON_DESC[0]+"."); if(phase[1] != "new") write("There is a "+MOON_DESC[1]+"."); if(phase[2] != "new") write("There is a "+MOON_DESC[2]+"."); } break; case "sky": switch(tod) { case "dawn": write("%^ORANGE%^It is lit with the colours of a brand " "new day."); break; case "day": write("%^BOLD%^%^YELLOW%^The sun lights up the " "daytime sky."); break; case "twilight": write("%^BOLD%^%^MAGENTA%^The sun is fading over the " "western horizon."); break; case "night": //if(phase[0] == phase[1] == phase[2] == "new") if(true()) write("The night time sky is moonless and dark."); else { write("The sky is darkened with night."); if(phase[0] != "new") write("There is a "+MOON_DESC[0]+" in the sky."); if(phase[1] != "new") write("There is a "+MOON_DESC[1]+" in the sky."); if(phase[2] != "new") write("There is a "+MOON_DESC[2]+" in the sky."); } break; } break; case "moons": if(tod != "night") write(DEFAULT_MSG); else { if(phase[0] != "new") write("There is a "+MOON_DESC[0]+"."); if(phase[1] != "new") write("There is a "+MOON_DESC[1]+"."); if(phase[2] != "new") write("There is a "+MOON_DESC[2]+"."); //if(phase[0] == phase[1] == phase[2] == "new") write(DEFAULT_MSG); } break; case "laros": case "red moon": if(tod != "night" || phase[0] == "new") write(DEFAULT_MSG); else write("The "+phase[0]+" %^RED%^"+MOON_DESC[0]+"%^RESET%^" " is hovering in the night time sky."); break; case "spyefel": case "blue moon": if(tod != "night" || phase[1] == "new") write(DEFAULT_MSG); else write("The "+phase[1]+" %^BLUE%^"+MOON_DESC[1]+"%^RESET%^" " is hovering in the night sky."); break; case "slayar": case "green moon": if(tod != "night" || phase[2] == "new") write(DEFAULT_MSG); else write("The "+phase[2]+" %^GREEN%^"+MOON_DESC[2]+" %^RESET%^" "is hovering in the night sky."); break; } }