Esempio n. 1
0
static int mm_handleBallState(sim_tBallStatus *ball, int *inports) {
  switch (ball->state)
	{

	/* Hit Trolls */
	case stLTroll:
		if(core_getSw(swLTrollUp))
			return setState(stLTroll2,0);
		else
			return setState(stFree,0);
	case stRTroll:
		if(core_getSw(swRTrollUp))
			return setState(stRTroll2,0);
		else
			return setState(stFree,0);

	/* Hit the Castle */
	case stCastle:
		if(core_getSw(swDBUp))
			return setState(stCastleMoat,0);
		else
			if (core_getSol(sCastleGateH))
				return setState(stEnterCastle,0);
			else
      			return setState(stHitCastle,0);

	/* Tower Lock (has to be here, works inverted) */
	case stTowerLock:
		if(!core_getSol(sTowerLockPost))
			return setState(stFree,0);

	}
    return 0;
  }
Esempio n. 2
0
File: br.c Progetto: Bremma/pinmame
static void br_handleMech(int mech) {

  /* --------------------------------------
     --	Get Up and Down the Ship's Ramp  --
     -------------------------------------- */
  if (mech & 0x01) {
    /*-- if Ramp is Up and the RampDown Solenoid is firing, Lower it --*/
    if (core_getSol(sRampDown))
      locals.shiprampPos = 1 ;
    /*-- if Ramp is Down and the RampUp Solenoid is firing, raise it --*/
    if (core_getSol(sRampUp))
      locals.shiprampPos = 0 ;
    /*-- Make sure RampUpDown Switch is on, when ramp is Up --*/
    core_setSw(swRampDown,locals.shiprampPos);
  }
  /* --------------------------------------------------------------------
     --	Handle the Cannon to change its position and go back and forth --
     -------------------------------------------------------------------- */
  if (mech & 0x02) {
    if (locals.cannonPos == 0)
      core_setSw(swCannonDir,0);
    if (locals.cannonPos == 300)
      core_setSw(swCannonDir,1);
    if (core_getSol(sCannonMotor) && !core_getSw(swCannonDir))
      locals.cannonPos++;
    if (core_getSol(sCannonMotor) && core_getSw(swCannonDir))
      locals.cannonPos--;
  }
}
Esempio n. 3
0
File: wcs.c Progetto: freezy/pinmame
/*--------------------
/ Drawing information
/---------------------*/
static void wcs_drawMech(BMTYPE **line) {
  static const char *goalie[] = {" * ", "*  ", "  *"};
  static const char ball[] = {'|','/','-','\\'};
  core_textOutf(50, 0,BLACK,"Goalie: [%s]",
               goalie[core_getSw(swGoalieL) ? 1 : (core_getSw(swGoalieR) ? 2 : 0)]);
  core_textOutf(50,10,BLACK,"Ball: %c %3d  ", ball[mech_getPos(1)], mech_getSpeed(1));
}
Esempio n. 4
0
/*---------------------------------
  Display Status of the DrawBridge
 ----------------------------------*/
static const char* showdrawbridgePos(void)
{
  if(core_getSw(swDBUp) && !core_getSol(sDBMotor))
	return "Up              ";
  if(core_getSw(swDBDown) && !core_getSol(sDBMotor))
	return "Down            ";
  if(core_getSol(sDBMotor) && locals.drawbridgePos < 50)
	return "Moving Down.....";
  if(core_getSol(sDBMotor) && locals.drawbridgePos < 100)
	return "Moving Down.... ";
  if(core_getSol(sDBMotor) && locals.drawbridgePos < 150)
	return "Moving Down...  ";
  if(core_getSol(sDBMotor) && locals.drawbridgePos < 200)
	return "Moving Down..   ";
  if(core_getSol(sDBMotor) && locals.drawbridgePos < 250)
	return "Moving Down.    ";
  if(core_getSol(sDBMotor) && locals.drawbridgePos < 300)
	return "Moving Up.      ";
  if(core_getSol(sDBMotor) && locals.drawbridgePos < 350)
	return "Moving Up..     ";
  if(core_getSol(sDBMotor) && locals.drawbridgePos < 400)
	return "Moving Up...    ";
  if(core_getSol(sDBMotor) && locals.drawbridgePos < 450)
	return "Moving Up....   ";
  if(core_getSol(sDBMotor) && locals.drawbridgePos < 500)
	return "Moving Up.....  ";
  return "Unknown         ";
}
Esempio n. 5
0
/* The drop target and hole behind can only be reached if the bank is down */
static int afm_keyCond(int cond, int ballState, int *inports) {
  switch (cond) {
    case AFM_DROPCOND:
      /* ball on PF & bank down & drop up */
      return (ballState == stFree) && core_getSw(swMBankDn) && !core_getSw(swDrop);
    case AFM_CTCOND:
      /* ball on PF & bank down & drop down */
      return (ballState == stFree) && core_getSw(swMBankDn) && core_getSw(swDrop);
  }
  return FALSE;
}
Esempio n. 6
0
static void jd_handleMech(int mech)
{
  /*Spin Globe*/
  if (mech & 0x01) {
    if (core_getSol(sGlobeMotor))
      locals.globePos++;
    if (locals.globePos>100)
      locals.globePos=0;
    /*Ball ok to lift switch set when in desired position*/
    core_setSw(swGlobe2,(locals.globePos>=0 && locals.globePos<=10));
  }

  /*Move Arm*/
  if (mech & 0x02) {
    if (core_getSol(sGlobeArm))
      locals.armPos++;
    if (locals.armPos>100)
      locals.armPos=0;
    /*ARM FAR RIGHT is set when at desired position*/
    core_setSw(swArmFR,(locals.armPos>=0 && locals.armPos<=10));
  }

  /*Handle Drop Targets*/
  /*WPCMAME: I don't get this. Why do we need all this drop target handling? */
  //Drop Target Solenoid Raises ALL 5 DTS*/
  if (mech & 0x04) {
    if (core_getSol(sDropTarget))
      locals.jdtPos = locals.udtPos = locals.ddtPos = locals.gdtPos = locals.edtPos = DT_UP;
    else {
      /*Switch hit pops the target down!*/
      if (locals.jdtPos == DT_UP && core_getSw(sw_Judge))
     	locals.jdtPos = DT_DOWN;
      if (locals.udtPos == DT_UP && core_getSw(swJ_udge))
     	locals.udtPos = DT_DOWN;
      if (locals.ddtPos == DT_UP && core_getSw(swJu_dge))
     	locals.ddtPos = DT_DOWN;
      if (locals.gdtPos == DT_UP && core_getSw(swJud_ge))
     	locals.gdtPos = DT_DOWN;
      if (locals.edtPos == DT_UP && core_getSw(swJudg_e))
     	locals.edtPos = DT_DOWN;
    }
    /*If TripDrop Pull D Back Down! */
    if (core_getSol(sTripDropTarget))
      locals.ddtPos = DT_DOWN;

    /*All drop target switches must be on, while target is down!*/
    core_setSw(sw_Judge,locals.jdtPos == DT_DOWN);
    core_setSw(swJ_udge,locals.udtPos == DT_DOWN);
    core_setSw(swJu_dge,locals.ddtPos == DT_DOWN);
    core_setSw(swJud_ge,locals.gdtPos == DT_DOWN);
    core_setSw(swJudg_e,locals.edtPos == DT_DOWN);
  }
}
Esempio n. 7
0
File: s11.c Progetto: Bremma/pinmame
static void s11_irqline(int state) {
  if (state) {
    cpu_set_irq_line(0, M6808_IRQ_LINE, ASSERT_LINE);
	/*Set coin door inputs, differs between S11 & DE*/
    if (locals.deGame) {
      pia_set_input_ca1(S11_PIA2, !core_getSw(DE_SWADVANCE));
      pia_set_input_cb1(S11_PIA2, core_getSw(DE_SWUPDN));
    }
    else {
      pia_set_input_ca1(S11_PIA2, core_getSw(S11_SWADVANCE));
      pia_set_input_cb1(S11_PIA2, core_getSw(S11_SWUPDN));
    }
  }
  else if (!locals.piaIrq) {
    cpu_set_irq_line(0, M6808_IRQ_LINE, CLEAR_LINE);
    pia_set_input_ca1(S11_PIA2, locals.deGame);
    pia_set_input_cb1(S11_PIA2, locals.deGame);
  }
}
Esempio n. 8
0
  static void rs_drawMech(BMTYPE **line) {
//  core_textOutf(30,  0,BLACK,"Ted's /Red's Mouth:");
//  core_textOutf(30, 10,BLACK,"%-6s/%-6s", locals.tedmouthPos?"Open":"Closed", locals.redmouthPos?"Closed":"Open");
//  core_textOutf(30, 20,BLACK,"Ted's   /Red's Eyes:");
//  core_textOutf(30, 30,BLACK,"%-8s/%-8s", showtedeyepos(), showredeyepos());
//  core_textOutf(30, 40,BLACK,"Bulldozer: %-6s", core_getSw(swDozerDown)?"Closed":"Open");
  core_textOutf(30,  0,BLACK,"Ted/Red's Mouth, Eyes:");
  core_textOutf(30, 10,BLACK,"%-8s/%-6s,", locals.tedmouthPos?"Open":"Closed", locals.redmouthPos?"Closed":"Open");
  core_textOutf(30, 20,BLACK,"%-8s/%-8s", showtedeyepos(), showredeyepos());
  core_textOutf(30, 30,BLACK,"Bulldozer: %-6s", core_getSw(swDozerDown)?"Closed":"Open");
}
Esempio n. 9
0
File: br.c Progetto: Bremma/pinmame
static int br_handleBallState(sim_tBallStatus *ball, int *inports) {
  switch (ball->state)
	{

	/* Ball in Shooter Lane */
    	case stBallLane:
		if (ball->speed < 7)
			return setState(stNotEnough,7);		/*Ball not plunged hard enough*/
		if (ball->speed < 20)
			return setState(stFree,20);		/*Ball doesn't touch anything*/
		if (ball->speed < 25)
			return setState(stBotBot,25);		/*Ball touched Bot.Bot. Target*/
		if (ball->speed < 35)
			return setState(stBotMid,35);		/*Ball touched Bot.Mid. Target*/
		if (ball->speed < 45)
			return setState(stBotTop,45);		/*Ball touched Bot.Top. Target*/
		if (ball->speed < 51)
			return setState(stShipRamp,51);		/*Ball gets the Ship Ramp*/
		break;

		/*-----------------
		    Ship's Ramp
		-------------------*/
		case stShipRamp:
		/* If the ramp is Down... Go up the Creature Ramp!*/
		/* Otherwise go normally through the Left Ramp. */
		if (core_getSw(swRampDown))
			return setState(stEnterShipRamp,5);
		else
			return setState(stLoadCannon,5);
		break;

		/*-----------------------------------
		   Cannon - Where will the ball land?
		-------------------------------------*/
		case stCannonFired:
		if (locals.cannonPos >= 0 && locals.cannonPos <= 50)
			return setState(stEnterLock,30);
		if (locals.cannonPos >= 51 && locals.cannonPos <= 100)
			return setState(stEnterLRamp,30);
		if (locals.cannonPos >= 101 && locals.cannonPos <= 150)
			return setState(stBroadside,30);
		if (locals.cannonPos >= 151 && locals.cannonPos <= 200)
			return setState(stEnterRRamp,30);
		if (locals.cannonPos >= 201 && locals.cannonPos <= 250)
			return setState(stJetsLoop,30);
		if (locals.cannonPos >= 251 && locals.cannonPos <= 300)
			return setState(stFree,30);

	}
  return 0;
}
Esempio n. 10
0
File: s11.c Progetto: Bremma/pinmame
static INTERRUPT_GEN(s11_vblank) {
  /*-------------------------------
  /  copy local data to interface
  /--------------------------------*/
  locals.vblankCount += 1;
  /*-- lamps --*/
  if ((locals.vblankCount % S11_LAMPSMOOTH) == 0) {
    memcpy(coreGlobals.lampMatrix, coreGlobals.tmpLampMatrix, sizeof(coreGlobals.tmpLampMatrix));
    memset(coreGlobals.tmpLampMatrix, 0, sizeof(coreGlobals.tmpLampMatrix));
  }
  /*-- solenoids --*/
  if (locals.ssEn) { // set gameon and special solenoids
    int ii;
    locals.solenoids |= CORE_SOLBIT(S11_GAMEONSOL);
    /*-- special solenoids updated based on switches --*/
    for (ii = 0; ii < 6; ii++) {
      if (core_gameData->sxx.ssSw[ii] && core_getSw(core_gameData->sxx.ssSw[ii]))
        locals.solenoids |= CORE_SOLBIT(CORE_FIRSTSSSOL+ii);
    }
  }
#ifdef FIXMUX
// mux translation moved
#else
  if ((core_gameData->sxx.muxSol) &&
      (locals.solenoids & CORE_SOLBIT(core_gameData->sxx.muxSol))) {
    if (core_gameData->hw.gameSpecific1 & S11_RKMUX)
      locals.solenoids = (locals.solenoids & 0x00ff8fef) |
                         ((locals.solenoids & 0x00000010)<<20) |
                         ((locals.solenoids & 0x00007000)<<13);
    else
      locals.solenoids = (locals.solenoids & 0x00ffff00) | (locals.solenoids<<24);
  }
#endif
  locals.solsmooth[locals.vblankCount % S11_SOLSMOOTH] = locals.solenoids;
#if S11_SOLSMOOTH != 2
#  error "Need to update smooth formula"
#endif
  coreGlobals.solenoids  = locals.solsmooth[0] | locals.solsmooth[1];
  coreGlobals.solenoids2 = locals.extSol << 8;
  locals.solenoids = coreGlobals.pulsedSolState;
  locals.extSol = locals.extSolPulse;
  /*-- display --*/
  if ((locals.vblankCount % S11_DISPLAYSMOOTH) == 0) {
    memcpy(coreGlobals.segments, locals.segments, sizeof(coreGlobals.segments));
    memcpy(locals.segments, locals.pseg, sizeof(locals.segments));
    coreGlobals.diagnosticLed = locals.diagnosticLed;
    locals.diagnosticLed = 0;
  }
  core_updateSw(locals.ssEn);
}
Esempio n. 11
0
static int gi_handleBallState(sim_tBallStatus *ball, int *inports) {
  switch (ball->state)
	{

	/* Ball in Shooter Lane */
    	case stBallLane:
		if (ball->speed < 25)
			return setState(stNotEnough,25);	/*Ball not plunged hard enough*/
		if (ball->speed < 40)
			return setState(stTopEject,40);		/*Ball fall into Top-KickOut*/
		if (ball->speed < 51)
			return setState(stTopRightLane,51);	/*Ball rolled down Right Top Lane*/

		/*-----------------
		   Island Ramp
		-------------------*/
		case stRamp:
		/* If the ramp is Down, go up the Jungle*/
		/* Otherwise go normally down-ramp */
		if (core_getSw(swRampStatus))
			return setState(stUpRamp,5);
		else
			return setState(stDownRamp,5);
		break;

		/*-----------------
		  Where in Jungle?
		-------------------*/
		case stUpRamp:
		if (locals.junglePos == 1)
			return setState(stTopRampHole,5);
		if (locals.junglePos == 2)
			return setState(stPBotRite,5);
		if (locals.junglePos == 3)
			return setState(stPTopRite,5);
		if (locals.junglePos == 4)
			return setState(stPTopLeft,5);
		if (locals.junglePos == 5)
			return setState(stPBotLeft,5);
	}
  return 0;
}
Esempio n. 12
0
static int cftbl_handleBallState(sim_tBallStatus *ball, int *inports) {
    switch (ball->state)
    {

    /* Ball in Shooter Lane */
    case stBallLane:
        if (ball->speed < 15)
            return setState(stNotEnough,15);	/*Ball not plunged hard enough*/
        if (ball->speed < 22)
            return setState(stpaiD,22);		/*Ball rolled down 'D' Letter*/
        if (ball->speed < 29)
            return setState(stpaId,29);		/*Ball rolled down 'I' Letter*/
        if (ball->speed < 36)
            return setState(stpAid,36);		/*Ball rolled down 'A' Letter*/
        if (ball->speed < 43)
            return setState(stPaid,43);		/*Ball rolled down 'P' Letter*/
        if (ball->speed < 51)
            return setState(stDownFromLeft,51);	/*Ball rolled down from left*/
        break;

    /*-----------------
       Creature Ramp
    -------------------*/
    /*
    This time I'm gonna give a little help on this part...
    If you look at the state array you'll find that this state has all 0s, you
    must create this state for using it as a hook. Jump your Keyboard Definitions
    here in case you want to decide something, in this case the RampUp/Down state
    is decided. If you jump to a normal state (ie without 0s), this part will not
    be used so be careful :)
    */
    case stLRamp:
        /* If the ramp is Down... Go up the Creature Ramp!*/
        /* Otherwise go normally through the Left Ramp. */
        if (core_getSw(swRampUpDown))
            return setState(stCreatureRamp,5);
        else
            return setState(stEnterLeftRamp,5);
        break;
    }
    return 0;
}
Esempio n. 13
0
static int rs_handleBallState(sim_tBallStatus *ball, int *inports) {
  switch (ball->state)
	{

	/* Ball in Right Shooter Lane */
    	case stBallLane:
		if (ball->speed < 10)
			return setState(stNotEnough,10);	/*Ball not plunged hard enough*/
		if (ball->speed < 20)
			return setState(stSkillUp,20);		/*Ball comes down from the right*/
		if (ball->speed < 30)
			return setState(stSkillShot,25);	/*Ball entered Skill Shot hole*/
		if (ball->speed < 40)
			return setState(stRightLane2,35);	/*Ball goes to the Jets*/
		if (ball->speed < 51)
			return setState(stRightLane3,51);	/*Ball hits Bulldozer*/
		break;

	/* Ball in Left Shooter Lane */
    	case stLBallLane:
		if (ball->speed < 15)
			return setState(stNoStrength,30);	/*Ball not plunged hard enough*/
		if (ball->speed < 25)
			return setState(st5XBlast,50);		/*Ball landed in 5X Blast Hole*/
		if (ball->speed < 35)
			return setState(stRRiot,70);		/*Ball landed in Radio Riot Hole*/
		if (ball->speed < 45)
			return setState(stEB,70);		/*Ball landed in Extra Ball Lit Hole*/
		if (ball->speed < 51)
			return setState(stHelmet,70);		/*Ball Hits the Ted's Helmet*/
		break;

	/* Red Hit */
    	case stHitRed:
		/*Is Red's Mouth Open?*/
		if (locals.redmouthPos)
			return setState(stRedMouth,10);		/*Ball hits Red's Jaw*/
		else
			return setState(stRedGulp,10);		/*Ball goes into Red's mouth*/
		break;


	/* Bulldozer */
	case stBulldozer:
		/*Is the Bulldozer Open?*/
		if (core_getSw(swDozerDown))
			return setState(stDozerHit,10);
		else
			return setState(stHitTed,10);

	/* Ted Hit */
    	case stHitTed:
		/*Is Ted's Mouth Open?*/
		if (!locals.tedmouthPos)
			return setState(stTedMouth,10);		/*Ball hits Ted's Jaw*/
		else
			return setState(stTedGulp,10);		/*Ball goes into Ted's mouth*/
		break;

	/* Left Inlane - StFree or Go to Left Shooter? */
	case stLeftInlane2:
		if (locals.frgatePos)
			{
			ball->speed = -1;
			return setState(stLShooter,5);
			}
		else
			return setState(stLeftInlane,5);
		break;

       }
    return 0;
  }
Esempio n. 14
0
static int drac_handleBallState(sim_tBallStatus *ball, int *inports) {
  switch (ball->state)
	{

		/*-----------------
		    Coffin Ramp
		-------------------*/
		case stRRamp:
		/* If the ramp is Down, go up the Coffin Ramp
		else fall down into the Coffin Hole */
		if (core_getSw(swRRampUp))
			return setState(stCoffinPopper,5);
		else
			return setState(stRRampMade,20);
		break;

		/*-----------------
		    Castle Ramp
		-------------------*/
		case stLRamp:
		/* If the ramp diverter is off, go through the Left Ramp
		otherwise send the ball into Castle Locks */
		if (core_getSw(swDiverter))
			return setState(stLRampDivMade,5);
		else
			return setState(stLRampMade,5);
		break;

		/*-----------------
		    Shooter Ramp
		-------------------*/
		case stBallLane:
		/* If the Shooter ramp is down, go to the Left Loop
		else go to the Right Gate */
		if (core_getSol(sShooterRamp))
			return setState(stUnderShootRamp,5);
		else
			return setState(stLeftLoop,5);
		break;

		/*-----------------
		    Drop Target
		-------------------*/
		case stLDrop:
		/* If the Drop Target is down, pass through it into VM hole,
		else lower it */
		if (core_getSw(swLDrop))
			return setState(stLDropScore,5);
		else
			return setState(stLDrop2,5);
		break;

		/*-------------
		   Mist Magnet
		 --------------*/
		case stMagnet:
		/* The BallOnMagnet switch must be always 1, except when there
		is no ball on the left/right gates */
			core_setSw(swBallOnMagnet,1);

		/* If the Magnet is on the right AND active AND the motor
		position counts to 0, go to the Left Gate */
		if (core_getSw(swMagnetRight) && core_getSol(sMagnet) && locals.magnetPos == 0)
			return setState(stLGate,0);

		/* If the Magnet is on the left AND active AND the motor
		position counts to 500, go to the Right Gate */
		if (core_getSw(swMagnetLeft)  && core_getSol(sMagnet) && locals.magnetPos == 500)
			return setState(stRGate,0);

		/* If the Magnet is off OR the fake switch activated by enter
		is on, get out of the magnet's area */
		if (!core_getSol(sMagnet) || core_getSw(swExitMagnet))
		{
			core_setSw(swBallOnMagnet,0);
			return setState(stFree,0);
		}
		break;
	}
  return 0;
}
Esempio n. 15
0
  static void drac_drawMech(BMTYPE **line) {
  core_textOutf(30, 10,BLACK,"Shooter Ramp : %-6s", core_getSol(sShooterRamp) ? "Up":"Down");
  core_textOutf(30, 20,BLACK,"Coffin Ramp  : %-6s", core_getSw(swRRampUp) ? "Up":"Down");
  core_textOutf(30, 30,BLACK,"Drop Target  : %-6s", core_getSw(swLDrop) ? "Down":"Up");
//  core_textOutf(30, 40,BLACK,"Ramp Diverter: %-6s", core_getSw(swDiverter) ? "On":"Off");
}
Esempio n. 16
0
File: br.c Progetto: Bremma/pinmame
/*--------------------
  Drawing information
  --------------------*/
static void br_drawMech(BMTYPE **line) {
  core_textOutf(30, 10,BLACK,"Ship Ramp  : %-4s", core_getSw(swRampDown) ? "Down":"Up");
  core_textOutf(30, 20,BLACK,"Cannon Pointing to:");
  core_textOutf(30, 30,BLACK,"%-11s (%3d)", showcannonpos(), locals.cannonPos);
}
Esempio n. 17
0
static void drac_handleMech(int mech) {
  /* ---------------------------------
     --	Raise/Lower the Coffin Ramp --
     --------------------------------- */
  if (mech & 0x01) {
    /*-- if Ramp is up and the RampDown Solenoid is firing, lower it --*/
    if (core_getSol(sRRampDown))
      locals.coffinrampPos = 0 ;
    /*-- if Ramp is down and the RampUp Solenoid is firing, raise it --*/
    if (core_getSol(sRRampUp))
      locals.coffinrampPos = 1 ;
    /*-- Make sure RampUp Switch is on, when the ramp is up --*/
    core_setSw(swRRampUp,locals.coffinrampPos);
  }
  /* ---------------------------
     --	Raise the Drop Target --
     --------------------------- */
  if ((mech & 0x02) && core_getSol(sLDrop))
    core_setSw(swLDrop,0);

  /* -----------------
     --	Mist Magnet --
     ----------------- */
  if (mech & 0x04) {
    /* Set switches according to position */
    if (locals.magnetPos == 0) {
      core_setSw(swMagnetLeft,1);
      core_setSw(swMagnetRight,0);
    }
    if (locals.magnetPos == 500) {
      core_setSw(swMagnetRight,1);
      core_setSw(swMagnetLeft,0);
    }

    /* If the magnet is on the left and the motor is on, increase position */
    if (core_getSw(swMagnetLeft) && core_getSol(sMagnetMotor))
      locals.magnetPos++;

    /* If the magnet is on the right and the motor is on, decrease position */
    if (core_getSw(swMagnetRight) && core_getSol(sMagnetMotor))
      locals.magnetPos--;
  }
  /* ----------------------------------------------------------------------
     --	Ramp Diverter (Needs to be tricked because it doesn't like to be --
     -- pressed for the necessary time needed to complete the ramp shot) --
     ---------------------------------------------------------------------- */
  if (mech & 0x08) {
    /* If the diverter fires, increase diverter's time, when it is < 20 set a
       fake diverter switch to 1 */
    if (core_getSol(sTopDiverter)) {
      locals.diverterTime++;
      if (locals.diverterTime < 20)
        core_setSw(swDiverter,1);
    }

    /* If any of these switches are pressed, reset the diverter's timer and set
       the fake diverter switch to 0 */
    if (core_getSw(swLRampDivMade) || core_getSw(swCastle3) ||
        core_getSw(swCastle2) || core_getSw(swCastle3) ||
        core_getSw(swShooter)) {
      locals.diverterTime = 0;
      core_setSw(swDiverter,0);
    }
  }
}
Esempio n. 18
0
/*--------------------
  Drawing information
  --------------------*/
static void cftbl_drawMech(BMTYPE **line) {
    core_textOutf(30, 10,BLACK,"Creature Ramp: %-6s", core_getSw(swRampUpDown) ? "Down":"Up");
}
Esempio n. 19
0
static void gi_handleMech(int mech) {
  /* --------------------------------------
     --	Get Up and Down the Jungle Ramp  --
     -------------------------------------- */
  if (mech & 0x01) {
    /*-- if Ramp is Up and the RampDown Solenoid is firing, Lower it --*/
    if (core_getSol(sRampDown))
      locals.junglerampPos = 1 ;
    /*-- if Ramp is Down and the RampUp Solenoid is firing, raise it --*/
    if (core_getSol(sRampUp))
      locals.junglerampPos = 0 ;
    /*-- Make sure RampStatus Switch is off, when ramp is Up --*/
    core_setSw(swRampStatus,locals.junglerampPos);
  }

  /* Now here we handle the Jungle */
  if (mech & 0x02) {
    /* If the Jungle Motor is spinning, increase Jungle Time */
    if (core_getSol(sJungleMotor) && !core_getSol(sIslandLock)) {
      core_setSw(swFakeIslandPos,1);
      locals.jungleTime++;
    }

    /* Set switches according to position */
    if (locals.jungleTime >= 0 && locals.jungleTime <= 12) {
      core_setSw(swWheelOpto,0);
      core_setSw(swWheelLock,0);
      locals.junglePos = 5;
    }
    else if (locals.jungleTime >= 12 && locals.jungleTime <= 49) {
      core_setSw(swWheelOpto,1);
      core_setSw(swWheelLock,1);
    }

    /* Same that before from now on, but on different positions */
    if (locals.jungleTime >= 50 && locals.jungleTime <= 62) {
      core_setSw(swWheelOpto,0);
      core_setSw(swWheelLock,0);
      locals.junglePos = 1;
    }
    else if (locals.jungleTime >= 63 && locals.jungleTime <= 99) {
      core_setSw(swWheelOpto,1);
      core_setSw(swWheelLock,1);
    }

    if (locals.jungleTime >= 100 && locals.jungleTime <= 112) {
      core_setSw(swWheelOpto,0);
      core_setSw(swWheelLock,0);
      locals.junglePos = 2;
    }
    else if (locals.jungleTime >= 113 && locals.jungleTime <= 149) {
      core_setSw(swWheelOpto,1);
      core_setSw(swWheelLock,1);
    }

    if (locals.jungleTime >= 150 && locals.jungleTime <= 162) {
      core_setSw(swWheelOpto,0);
      core_setSw(swWheelLock,0);
      locals.junglePos = 3;
    }
    else if (locals.jungleTime >= 163 && locals.jungleTime <= 199) {
      core_setSw(swWheelOpto,1);
      core_setSw(swWheelLock,1);
    }

    if (locals.jungleTime >= 200 && locals.jungleTime <= 212) {
      core_setSw(swWheelOpto,0);
      core_setSw(swWheelLock,0);
      locals.junglePos = 4;
    }
    else if (locals.jungleTime >= 213 && locals.jungleTime <= 249) {
      core_setSw(swWheelOpto,1);
      core_setSw(swWheelLock,1);
    }

    if (locals.jungleTime == 250)
      locals.jungleTime = 0;

    /* If the emulation resets (F3), sync the island position */
    if (!core_getSw(swFakeIslandPos)) {
      locals.junglePos = 5;
      locals.jungleTime = 0;
    }
  }
}
Esempio n. 20
0
  static void gi_drawMech(BMTYPE **line) {
  core_textOutf(30, 10,BLACK,"Ramp Status    : %-4s", core_getSw(swRampStatus) ? "Down":"Up");
  core_textOutf(30, 20,BLACK,"Jungle Position: %d", locals.junglePos);

/* Help */
}
Esempio n. 21
0
/*--------------------
/ Drawing information
/---------------------*/
static void afm_drawMech(BMTYPE **line) {
  core_textOutf(50, 0,BLACK,"Bank: %-4s", core_getSw(swMBankUp) ? "Up" : (core_getSw(swMBankDn) ? "Down" : ""));
  core_textOutf(50,10,BLACK,"Drop: %-4s", core_getSw(swDrop) ? "Down" : "Up");
}
Esempio n. 22
0
static void rs_handleMech(int mech) {
  /* ------------------------------
     --	Open & Close Ted's Mouth --
     ------------------------------ */
  if (mech & 0x01) {
    /* -- If open, and Mouth Solenoid fired and !UpDown fired - Close it! -- */
    if (locals.tedmouthPos && core_getSol(sTedMouthMotor) && !core_getSol(sTedMotorDrv))
      locals.tedmouthPos = 0;
    /* -- If closed, and Mouth Solenoid fired and UpDown fired - Open it! -- */
    if (!locals.tedmouthPos && core_getSol(sTedMouthMotor) && core_getSol(sTedMotorDrv))
      locals.tedmouthPos = 1;
  }
    /* ------------------------------
       --	Open & Close Red's Mouth --
       ------------------------------ */
  if (mech & 0x02) {
    /* -- If open, and Mouth Solenoid fired and !UpDown fired - Close it! -- */
    if (locals.redmouthPos && core_getSol(sRedMouthMotor) && !core_getSol(sRedMotorDrv))
      locals.redmouthPos = 0;
    /* -- If closed, and Mouth Solenoid fired and UpDown fired - Open it! -- */
    if (!locals.redmouthPos && core_getSol(sRedMouthMotor) && core_getSol(sRedMotorDrv))
      locals.redmouthPos = 1;
  }
  /* -------------------------------
     --	Open & Close Bulldozer    --
     ------------------------------- */
  if (mech & 0x04) {
    if (core_getSol(sBulldozer))
      locals.bulldozerPos = (locals.bulldozerPos + 1) % BULLDOZER_TICKS;
    core_setSw(swDozerUp, locals.bulldozerPos < 15);
    core_setSw(swDozerDown, (locals.bulldozerPos >= (BULLDOZER_TICKS/2)) &&
                            (locals.bulldozerPos <  (BULLDOZER_TICKS/2+15)));
  }

  /* ------------------------------------
     --	Open & Close Flying Rocks Gate --
     ------------------------------------ */
  /* -- If the Lower Left Solenoid fires, open it till the Left Shooter Switch is pressed --*/
  if (mech & 0x08) {
    if (core_getSol(sLLDiverter))
      locals.frgatePos = 1;
    if (core_getSw(swLShooter))
      locals.frgatePos = 0;
  }
  /* ----------------------------------
     -- Update status of Ted's Eyes --
     ---------------------------------- */
  if (mech & 0x10) {
    /* -- If Eyes are Open, and Closed Solenoid Fired, close them! --*/
    if (locals.tedeyesOC == 0 && core_getSol(sTedLidsDown))
      locals.tedeyesOC = 1;
    /* - If Eyes are Closed, and Open Solenoid Fired, open them! -*/
    if (locals.tedeyesOC == 1 && core_getSol(sTedLidsUp))
      locals.tedeyesOC = 0;
  }
  /* -- Now check position of Eyes -- */
  if (mech & 0x20) {
    if (core_getSol(sTedEyesLeft))
      locals.tedeyesLR = TEYES_LEFT;
    else
      if (core_getSol(sTedEyesRight))
        locals.tedeyesLR = TEYES_RIGHT;
      else
        locals.tedeyesLR = TEYES_ST;
  }
  /* ----------------------------------
     -- Update status of Red's Eyes --
     ---------------------------------- */
  if (mech & 0x40) {
    /* -- If Eyes are Open, and Closed Solenoid Fired, close them! --*/
    if (locals.redeyesOC == 0 && core_getSol(sRedLidsDown))
      locals.redeyesOC = 1;
    /* -- If Eyes are Closed, and Open Solenoid Fired, open them! -- */
    if (locals.redeyesOC == 1 && core_getSol(sRedLidsUp))
      locals.redeyesOC = 0;
  }
  if (mech & 0x80) {
    /* -- Now check position of Eyes  -- */
    if (core_getSol(sRedEyesLeft))
      locals.redeyesLR = REYES_LEFT;
    else
      if (core_getSol(sRedEyesRight))
        locals.redeyesLR = REYES_RIGHT;
      else
        locals.redeyesLR = REYES_ST;
  }
}
Esempio n. 23
0
static READ_HANDLER(riot_porta_r) {
  int sw = core_getSw(1 + locals.swStrobe) ? 0 : 1;
  return locals.swStrobe | (locals.inhibitNmi << 5) | (sw << 6) | ((coreGlobals.swMatrix[0] & 1) << 7);
}