void
do_shanty (int x, int y)
{				/* just steal some stuff and make pollution. */

  get_food (x, y, SHANTY_GET_FOOD);
  if (get_goods (x, y, SHANTY_GET_GOODS) != 0)
    if ((goods_tax -= SHANTY_GET_GOODS * 2) < 0)
      goods_tax = 0;
  get_ore (x, y, SHANTY_GET_ORE);
  get_steel (x, y, SHANTY_GET_STEEL);
  if (get_jobs (x, y, SHANTY_GET_JOBS) != 0)
    if ((income_tax -= SHANTY_GET_JOBS * 2) < 0)
      income_tax = 0;
  if (get_coal (x, y, SHANTY_GET_COAL) != 0)
    if ((coal_tax -= SHANTY_GET_COAL * 2) < 0)
      coal_tax = 0;
  if ((total_time & 1) == 0)
    MP_POL(x,y)++;
  else
    MP_POL(x+1,y+1)++;
}
Exemple #2
0
void
do_blacksmith (int x, int y)
{
  /*
    // int_1 contains the goods at the blacksmith
    // int_2 contains the goods made - for the animation
    // int_3 contains the coal store
    // int_4 is the animation trigger time
    // int_5 is the % made so far this month
    // int_6 is the % capacity last month
  */
  if (MP_INFO(x,y).int_3 < MAX_COAL_AT_BLACKSMITH)
    if (get_coal (x, y, BLACKSMITH_GET_COAL) != 0)
      MP_INFO(x,y).int_3 += BLACKSMITH_GET_COAL;
  if (MP_INFO(x,y).int_1 < MAX_GOODS_AT_BLACKSMITH
      && MP_INFO(x,y).int_3 >= BLACKSMITH_COAL_USED)
    {
      if (get_steel (x, y, BLACKSMITH_STEEL_USED) != 0)
	{
	  MP_INFO(x,y).int_1 += GOODS_MADE_BY_BLACKSMITH;
	  MP_INFO(x,y).int_3 -= BLACKSMITH_COAL_USED;
	}
    }
  if (get_jobs (x, y, BLACKSMITH_JOBS) != 0)
    {
      if (MP_INFO(x,y).int_1 > GOODS_MADE_BY_BLACKSMITH)
	{
	  if (put_goods (x, y, GOODS_MADE_BY_BLACKSMITH - 1) != 0)
	    {
	      MP_INFO(x,y).int_1 -= (GOODS_MADE_BY_BLACKSMITH - 1);
	      MP_INFO(x,y).int_2 += (GOODS_MADE_BY_BLACKSMITH - 1);
	      MP_INFO(x,y).int_5++;
	    }
	  else
	    put_jobs (x, y, BLACKSMITH_JOBS);
	}
      else
	put_jobs (x, y, BLACKSMITH_JOBS);
    }
  else
    MP_TYPE(x,y) = CST_BLACKSMITH_0;
  if (MP_INFO(x,y).int_2 > BLACKSMITH_BATCH
      && real_time >= MP_INFO(x,y).int_4)
    {
      MP_INFO(x,y).int_4 = real_time + BLACKSMITH_ANIM_SPEED;
      switch (MP_TYPE(x,y))
	{
	case (CST_BLACKSMITH_0):
	  MP_TYPE(x,y) = CST_BLACKSMITH_1;
	  break;
	case (CST_BLACKSMITH_1):
	  MP_TYPE(x,y) = CST_BLACKSMITH_2;
	  break;
	case (CST_BLACKSMITH_2):
	  MP_TYPE(x,y) = CST_BLACKSMITH_3;
	  break;
	case (CST_BLACKSMITH_3):
	  MP_TYPE(x,y) = CST_BLACKSMITH_4;
	  break;
	case (CST_BLACKSMITH_4):
	  MP_TYPE(x,y) = CST_BLACKSMITH_5;
	  break;
	case (CST_BLACKSMITH_5):
	  MP_TYPE(x,y) = CST_BLACKSMITH_6;
	  break;
	case (CST_BLACKSMITH_6):
	  MP_TYPE(x,y) = CST_BLACKSMITH_1;
	  MP_INFO(x,y).int_2 = 0;
	  MP_POL(x,y)++;
	  break;
	}
    }
  if (total_time % 100 == 0)
    {
      MP_INFO(x,y).int_6 = MP_INFO(x,y).int_5;
      MP_INFO(x,y).int_5 = 0;
    }
}
void do_rocket_pad(int x, int y)
{
    /*
       // You need ROCKET_PAD_JOBS, ROCKET_PAD_GOODS and ROCKET_PAD_STEEL 
       // to add 1 to % of ready to fire.
       // int_1 is the stored jobs
       // int_2 is the stored goods
       // int_3 is the stored steel
       // int_4 is the count which gets to ROCKET_PAD_LAUNCH to fire.
       // int_5 unused
       // MP_ANIM is the time of the next animation frame, when waiting for launch. since 1.91
     */
    if (MP_TYPE(x, y) == CST_ROCKET_FLOWN)
        return;                 /* The rocket has been launched. */

    /* get some jobs */
    if (MP_INFO(x, y).int_1 < ROCKET_PAD_JOBS_STORE) {
        if (get_jobs(x, y, ROCKET_PAD_JOBS + 10) != 0)
            MP_INFO(x, y).int_1 += ROCKET_PAD_JOBS;
    }
    /* get goods */
    if (MP_INFO(x, y).int_2 < ROCKET_PAD_GOODS_STORE) {
        if (get_goods(x, y, ROCKET_PAD_GOODS + 10) != 0)
            MP_INFO(x, y).int_2 += ROCKET_PAD_GOODS;
        else if (get_goods(x, y, ROCKET_PAD_GOODS / 10) != 0)
            MP_INFO(x, y).int_2 += ROCKET_PAD_GOODS / 5;
        else if (get_goods(x, y, ROCKET_PAD_GOODS / 50) != 0)
            MP_INFO(x, y).int_2 += ROCKET_PAD_GOODS / 20;
    }
    /* get steel */
    if (MP_INFO(x, y).int_3 < ROCKET_PAD_STEEL_STORE) {
        if (get_steel(x, y, ROCKET_PAD_STEEL + 10) != 0)
            MP_INFO(x, y).int_3 += ROCKET_PAD_STEEL + 10;
        else if (get_steel(x, y, ROCKET_PAD_STEEL / 5) != 0)
            MP_INFO(x, y).int_3 += ROCKET_PAD_STEEL / 5;
        else if (get_steel(x, y, ROCKET_PAD_STEEL / 20) != 0)
            MP_INFO(x, y).int_3 += ROCKET_PAD_STEEL / 20;
    }
#ifdef DEBUG_ROCKETS
    MP_INFO(x, y).int_4++;
#else
    /* now build the rocket.  Unlike uni's need a full store to make +1% */
    if (MP_TYPE(x, y) < CST_ROCKET_5
        && MP_INFO(x, y).int_1 >= ROCKET_PAD_JOBS_STORE
        && MP_INFO(x, y).int_2 >= ROCKET_PAD_GOODS_STORE && MP_INFO(x, y).int_3 >= ROCKET_PAD_STEEL_STORE) {
        MP_INFO(x, y).int_1 -= ROCKET_PAD_JOBS_STORE;
        MP_INFO(x, y).int_2 -= ROCKET_PAD_GOODS_STORE;
        MP_INFO(x, y).int_3 -= ROCKET_PAD_STEEL_STORE;
        MP_INFO(x, y).int_4++;
        goods_used += ROCKET_PAD_GOODS_STORE;

    }
#endif
    rocket_pad_cost += ROCKET_PAD_RUNNING_COST;
    /* animate and return if already said no to launch */
    if (MP_TYPE(x, y) >= CST_ROCKET_5 && MP_INFO(x, y).int_4 >= (100 * ROCKET_PAD_LAUNCH) / 100) {
        if (real_time >= MP_ANIM(x, y)) {
            MP_ANIM(x, y) = real_time + ROCKET_ANIMATION_SPEED;
            switch (MP_TYPE(x, y)) {
            case (CST_ROCKET_5):
                MP_TYPE(x, y) = CST_ROCKET_6;
                break;
            case (CST_ROCKET_6):
                MP_TYPE(x, y) = CST_ROCKET_7;
                break;
            case (CST_ROCKET_7):
                MP_TYPE(x, y) = CST_ROCKET_5;
                break;
            }
        }
        return;
    }
    /* now choose a graphic */
    if (MP_INFO(x, y).int_4 < (25 * ROCKET_PAD_LAUNCH) / 100)
        MP_TYPE(x, y) = CST_ROCKET_1;
    else if (MP_INFO(x, y).int_4 < (60 * ROCKET_PAD_LAUNCH) / 100)
        MP_TYPE(x, y) = CST_ROCKET_2;
    else if (MP_INFO(x, y).int_4 < (90 * ROCKET_PAD_LAUNCH) / 100)
        MP_TYPE(x, y) = CST_ROCKET_3;
    else if (MP_INFO(x, y).int_4 < (100 * ROCKET_PAD_LAUNCH) / 100)
        MP_TYPE(x, y) = CST_ROCKET_4;
    else if (MP_INFO(x, y).int_4 >= (100 * ROCKET_PAD_LAUNCH) / 100) {
        MP_TYPE(x, y) = CST_ROCKET_5;
        update_main_screen(0);
        if (ask_launch_rocket_now(x, y)) {
            /* ? FIXME ? AL1: in NG 1.1 it seems we are never here ?
             * ? ask_launch_rocket_now  manages everything and call launch_rocket ?
             */
            launch_rocket(x, y);
        }
    }
}