/
smaug1.8/area/imc/
smaug1.8/boards/
smaug1.8/councils/
smaug1.8/deity/
smaug1.8/doc/mudprogs/
smaug1.8/gods/
smaug1.8/houses/
smaug1.8/log/
smaug1.8/vault/
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include "mud.h"

#define NUM_DAYS 35
/* Match this to the number of days per month; this is the moon cycle */
#define NUM_MONTHS 17
/* Match this to the number of months defined in month_name[].  */
#define MAP_WIDTH 72
#define MAP_HEIGHT 8
/* Should be the string length and number of the constants below.*/


const char * star_map[] =
{
"                                               C. C.                  g*",
"    O:       R*        G*    G.  W* W. W.          C. C.    Y* Y. Y.    ", 
"  O*.                c.          W.W.     W.            C.       Y..Y.  ",   
"O.O. O.              c.  G..G.           W:      B*                   Y.",     
"     O.    c.     c.                     W. W.                  r*    Y.",
"     O.c.     c.      G.             P..     W.        p.      Y.   Y:  ",
"        c.                    G*    P.  P.           p.  p:     Y.   Y. ",
"                 b*             P.: P*                 p.p:             "
};

/****************** CONSTELLATIONS and STARS *****************************
  Cygnus     Mars        Orion      Dragon       Cassiopeia          Venus
           Ursa Ninor                           Mercurius     Pluto    
               Uranus              Leo                Crown       Raptor
*************************************************************************/	
const char * sun_map[] =
{
"\\`|'/",
"- O -",
"/.|.\\"
};
const char * moon_map[] =
{
" @@@ ",
"@@@@@",
" @@@ "
};

void look_sky ( CHAR_DATA * ch )
{
    static char buf[MAX_STRING_LENGTH];
    static char buf2[4];
    int starpos, sunpos, moonpos, moonphase, i, linenum, precip;

   pager_printf_color(ch,"You gaze up towards the heavens and see:\n\r");

	precip = (ch->in_room->area->weather->precip + 3*weath_unit - 1)/
		weath_unit;
   if (precip > 1)                 
{
  send_to_char("There are some clouds in the sky so you cannot see anything else.\n\r", ch);
   return;
}
   sunpos  = (MAP_WIDTH * (24 - time_info.hour) / 24);
   moonpos = (sunpos + time_info.day * MAP_WIDTH / NUM_DAYS) % MAP_WIDTH;
   if ((moonphase = ((((MAP_WIDTH + moonpos - sunpos ) % MAP_WIDTH ) +
                      (MAP_WIDTH/16)) * 8 ) / MAP_WIDTH)
		         > 4) moonphase -= 8;
   starpos = (sunpos + MAP_WIDTH * time_info.month / NUM_MONTHS) % MAP_WIDTH;
   /* The left end of the star_map will be straight overhead at midnight during 
      month 0 */

   for ( linenum = 0; linenum < MAP_HEIGHT; linenum++ )
   {
     if ((time_info.hour >= 6 && time_info.hour <= 18) &&
         (linenum < 3 || linenum >= 6))
       continue;
     sprintf(buf," ");
   

     /* for ( i = MAP_WIDTH/4; i <= 3*MAP_WIDTH/4; i++)*/
     for ( i = 1; i <= MAP_WIDTH; i++)
     {
       /* plot moon on top of anything else...unless new moon & no eclipse */
       if ((time_info.hour >= 6 && time_info.hour <= 18)  /* daytime? */
        && (moonpos >= MAP_WIDTH/4 - 2) && (moonpos <= 3*MAP_WIDTH/4 + 2) /* in sky? */
        && ( i >= moonpos - 2 ) && (i <= moonpos + 2) /* is this pixel near moon? */
        && ((sunpos == moonpos && time_info.hour == 12) || moonphase != 0  ) /*no eclipse*/
        && (moon_map[linenum-3][i+2-moonpos] == '@'))
       {
         if ((moonphase < 0 && i - 2 - moonpos >= moonphase) ||
             (moonphase > 0 && i + 2 - moonpos <= moonphase))
           strcat(buf,"&W@");
         else
           strcat(buf," ");
       }
       else
       if ((linenum >= 3) && (linenum < 6) && /* nighttime */
           (moonpos >= MAP_WIDTH/4 - 2) && (moonpos <= 3*MAP_WIDTH/4 + 2) /* in sky? */
        && ( i >= moonpos - 2 ) && (i <= moonpos + 2) /* is this pixel near moon? */
        && (moon_map[linenum-3][i+2-moonpos] == '@'))
       {
         if ((moonphase < 0 && i - 2 - moonpos >= moonphase) ||
             (moonphase > 0 && i + 2 - moonpos <= moonphase))
           strcat(buf,"&W@");
         else
           strcat(buf," ");
       }
       else /* plot sun or stars */
       {
         if (time_info.hour>=6 && time_info.hour<=18) /* daytime */
         {
           if ( i >= sunpos - 2 && i <= sunpos + 2 )
           {
             sprintf(buf2,"&Y%c",sun_map[linenum-3][i+2-sunpos]);
             strcat(buf,buf2);
           }
           else
             strcat(buf," ");
         }
         else
         {
           switch (star_map[linenum][(MAP_WIDTH + i - starpos)%MAP_WIDTH])
           {
             default     : strcat(buf," ");    break;
             case ':'    : strcat(buf,":");    break;
             case '.'    : strcat(buf,".");    break;
             case '*'    : strcat(buf,"*");    break;
             case 'G'    : strcat(buf,"&G ");  break;
             case 'g'    : strcat(buf,"&g ");  break;
             case 'R'    : strcat(buf,"&R ");  break;
             case 'r'    : strcat(buf,"&r ");  break;
             case 'C'    : strcat(buf,"&C ");  break;
             case 'O'    : strcat(buf,"&O ");  break;
             case 'B'    : strcat(buf,"&B ");  break;
             case 'P'    : strcat(buf,"&P ");  break;
             case 'W'    : strcat(buf,"&W ");  break;
             case 'b'    : strcat(buf,"&b ");  break;
             case 'p'    : strcat(buf,"&p ");  break;
             case 'Y'    : strcat(buf,"&Y ");  break;
             case 'c'    : strcat(buf,"&c ");  break;
           }
         }
       }
     }
     strcat(buf,"\n\r");
     pager_printf_color(ch,buf);
  }

}