/** ** Create a sound. ** ** Glue between c and scheme. This function asks the sound system to ** register a sound under a given name, wiht an associated list of files ** (the list can be replaced by only one file). ** ** @param l Lua state. ** ** @return the sound id of the created sound */ static int CclMakeSound(lua_State *l) { LuaCheckArgs(l, 2); std::string c_name = LuaToString(l, 1); std::vector<std::string> files; CSound *id; if (lua_isstring(l, 2)) { // only one file files.push_back(LuaToString(l, 2)); id = MakeSound(c_name, files); } else if (lua_istable(l, 2)) { // several files const int args = lua_rawlen(l, 2); files.reserve(args); for (int j = 0; j < args; ++j) { lua_rawgeti(l, 2, j + 1); files.push_back(LuaToString(l, -1)); lua_pop(l, 1); } id = MakeSound(c_name, files); } else { LuaError(l, "string or table expected"); return 0; } LuaUserData *data = (LuaUserData *)lua_newuserdata(l, sizeof(LuaUserData)); data->Type = LuaSoundType; data->Data = id; return 1; }
/** Loads all sound groups. ** Special groups are created. */ local void LoadSoundGroups(void) { int i; int nb; int nb_sounds; nb=sizeof(Acknowledgments)/sizeof(*Acknowledgments); DebugLevel3("Loading Acknowledgment Sound Groups (%d groups)\n",nb); for(i=0;i<nb;i++) { nb_sounds=NbSoundsInGroup(Acknowledgments[i].Sounds); DebugLevel3("Load group %s (%d sounds)\n",Acknowledgments[i].Name, nb_sounds); MakeSound(Acknowledgments[i].Name,Acknowledgments[i].Sounds, nb_sounds); } nb=sizeof(Selections)/sizeof(*Selections); DebugLevel3("Loading Selection Sound Groups (%d groups)\n",nb); for(i=0;i<nb;i++) { nb_sounds=NbSoundsInGroup(Selections[i].Sounds); DebugLevel3("Load group %s (%d sounds)\n",Selections[i].Name, nb_sounds); MakeSound(Selections[i].Name,Selections[i].Sounds,nb_sounds); } nb=sizeof(Annoyed)/sizeof(*Annoyed); DebugLevel3("Loading Annoyed Sound Groups (%d groups)\n",nb); for(i=0;i<nb;i++) { nb_sounds=NbSoundsInGroup(Annoyed[i].Sounds); DebugLevel3("Load group %s (%d sounds)\n",Annoyed[i].Name, nb_sounds); MakeSound(Annoyed[i].Name,Annoyed[i].Sounds,nb_sounds); } nb=sizeof(OtherGroups)/sizeof(*OtherGroups); DebugLevel3("Loading Other Sound Groups (%d groups)\n",nb); for(i=0;i<nb;i++) { nb_sounds=NbSoundsInGroup(OtherGroups[i].Sounds); DebugLevel3("Load group %s (%d sounds)\n",OtherGroups[i].Name, nb_sounds); MakeSound(OtherGroups[i].Name,OtherGroups[i].Sounds, nb_sounds); } nb=sizeof(SelectionGroups)/sizeof(*SelectionGroups); DebugLevel3("Making Special Sound Groups (%d groups)\n",nb); for(i=0;i<nb;i++) { //FIXME: might be more efficient DebugLevel3("Group %s (%s,%s)\n",SelectionGroups[i].Name, SelectionGroups[i].First,SelectionGroups[i].Second); MakeSoundGroup(SelectionGroups[i].Name, SoundIdForName(SelectionGroups[i].First), SoundIdForName(SelectionGroups[i].Second)); } }
bool cNoteEntity::UsedBy(cPlayer * a_Player) { UNUSED(a_Player); IncrementPitch(); MakeSound(); return true; }
Unit* Rocket::Collision(unsigned int newCoorX, unsigned int newCoorY) { size_t size=Game::GetUnit()->size(); for (unsigned int i=0;i<size;i++){ if (Game::GetUnit()->at(i)==this){ continue; } if (Game::GetUnit()->at(i)->GetCoorX()==newCoorX && Game::GetUnit()->at(i)->GetCoorY()==newCoorY && (typeid(*(Game::GetUnit()->at(i)))==typeid(PartOfBuilding)|| Game::GetUnit()->at(i)->GetName()==UnitsType::HELICOPTER)) { if (Game::GetUnit()->at(i)->GetName()==UnitsType::HELICOPTER){ Game::GetInterFace()->SetFlyingText(GetLocalText(NAME_TARGGETER),Game::GetUnit()->at(i)->GetCoorX()*16+XSTARTOFFIELD+8,Game::GetUnit()->at(i)->GetCoorY()*16+YSTARTOFFIELD); Game::GetScore()+=SCOREFORHELICOPTER*Game::GetLevel(); Game::GetTargetCount()+=TIMEFORHELICOPTER; } else { Game::GetScore()+=Game::GetLevel(); } MakeSound(EXPLOSIONNOISE); return Game::GetUnit()->at(i); } } return nullptr; }
void PlayerFirePowerArmor(Guy *me, byte mode) { int x, y, x2, y2; byte f; switch (mode) { case 1: MakeSound(SND_ARMORSHOOT, me->x, me->y, SND_CUTOFF, 1200); f = me->facing * 32 - 64; x = me->x + Cosine(me->facing * 32)*20; y = me->y + Sine(me->facing * 32)*20; x2 = x + Cosine(f)*32; y2 = y + Sine(f)*32; FireBullet(x2, y2, me->facing * 32, BLT_BIGSHELL, 1); x2 = x - Cosine(f)*32; y2 = y - Sine(f)*32; FireBullet(x2, y2, me->facing * 32, BLT_BIGSHELL, 1); if (player.ammo > 2) player.ammo -= 2; break; case 2: QuadMissile(me->x, me->y, me->facing, 1); if (player.ammo > 25) player.ammo -= 25; else player.ammo = 0; break; } }
/** Loads all simple sounds (listed in the SimpleSounds array). */ local void LoadSimpleSounds(void) { int i; int nb; nb=sizeof(SimpleSounds)/sizeof(*SimpleSounds); DebugLevel3("Loading Simple Sounds (%d sounds)\n",nb); for(i=0;i<nb;i++) { DebugLevel3("Loading %s with name %s\n",SimpleSounds[i].File, SimpleSounds[i].Name); MakeSound(SimpleSounds[i].Name,&(SimpleSounds[i].File),1); } }
void PlayerThrowHammer(Guy *me) { if (opt.playAs == PLAYAS_BOUAPHA) { HammerLaunch(me->x, me->y, me->facing, player.hammers, player.hammerFlags); } else if (opt.playAs == PLAYAS_LUNATIC) { MakeSound(SND_BALLLIGHTNING, me->x, me->y, SND_CUTOFF, 600); FireBullet(me->x, me->y, me->facing, BLT_BALLLIGHTNING, 1); if (player.hammerFlags & HMR_REVERSE) FireBullet(me->x, me->y, (byte) MGL_random(8), BLT_BALLLIGHTNING, 1); } else { HappyLaunch(me->x, me->y, me->facing, player.hammers, player.hammerFlags); } player.reload = player.hamSpeed + 2; }
int bulldozer_tool(SimView *view, short x, short y) { unsigned short currTile, temp; short zoneSize, deltaH, deltaV; int result = 1; if ((x < 0) || (x > (WORLD_X - 1)) || (y < 0) || (y > (WORLD_Y - 1))) { return -1; } currTile = Map[x][y]; temp = currTile & LOMASK; if (currTile & ZONEBIT) { /* zone center bit is set */ if (TotalFunds > 0) { Spend(1); switch (checkSize(temp)) { case 3: MakeSound("city", "Explosion-High"); put3x3Rubble(x, y); break; case 4: put4x4Rubble(x, y); MakeSound("city", "Explosion-Low"); break; case 6: MakeSound("city", "Explosion-High"); MakeSound("city", "Explosion-Low"); put6x6Rubble(x, y); break; default: break; } } } else if ((zoneSize = checkBigZone(temp, &deltaH, &deltaV))) { if (TotalFunds > 0) { Spend(1); switch (zoneSize) { case 3: MakeSound("city", "Explosion-High"); break; case 4: MakeSound("city", "Explosion-Low"); put4x4Rubble(x + deltaH, y + deltaV); break; case 6: MakeSound("city", "Explosion-High"); MakeSound("city", "Explosion-Low"); put6x6Rubble(x + deltaH, y + deltaV); break; } } } else { if (temp == RIVER || temp == REDGE || temp == CHANNEL) { if (TotalFunds >= 6) { result = ConnecTile(x, y, &Map[x][y], 1); if (temp != (Map[x][y] & LOMASK)) { Spend(5); } } else { result = 0; } } else { result = ConnecTile(x, y, &Map[x][y], 1); } } UpdateFunds(); if (result == 1) { DidTool(view, "Dozr", x, y); } return result; }
void cNoteEntity::UsedBy(cPlayer * a_Player) { UNUSED(a_Player); IncrementPitch(); MakeSound(); }
//========================================================= // Leader boids use this think every tenth //========================================================= void CFlockingFlyer :: FlockLeaderThink( void ) { TraceResult tr; Vector vecDist;// used for general measurements Vector vecDir;// used for general measurements int cProcessed = 0;// keep track of how many other boids we've processed float flLeftSide; float flRightSide; pev->nextthink = gpGlobals->time + 0.1; UTIL_MakeVectors ( pev->angles ); // is the way ahead clear? if ( !FPathBlocked () ) { // if the boid is turning, stop the trend. if ( m_fTurning ) { m_fTurning = FALSE; pev->avelocity.y = 0; } m_fPathBlocked = FALSE; if (pev->speed <= AFLOCK_FLY_SPEED ) pev->speed+= 5; pev->velocity = gpGlobals->v_forward * pev->speed; BoidAdvanceFrame( ); return; } // IF we get this far in the function, the leader's path is blocked! m_fPathBlocked = TRUE; if ( !m_fTurning)// something in the way and boid is not already turning to avoid { // measure clearance on left and right to pick the best dir to turn UTIL_TraceLine(pev->origin, pev->origin + gpGlobals->v_right * AFLOCK_CHECK_DIST, ignore_monsters, ENT(pev), &tr); vecDist = (tr.vecEndPos - pev->origin); flRightSide = vecDist.Length(); UTIL_TraceLine(pev->origin, pev->origin - gpGlobals->v_right * AFLOCK_CHECK_DIST, ignore_monsters, ENT(pev), &tr); vecDist = (tr.vecEndPos - pev->origin); flLeftSide = vecDist.Length(); // turn right if more clearance on right side if ( flRightSide > flLeftSide ) { pev->avelocity.y = -AFLOCK_TURN_RATE; m_fTurning = TRUE; } // default to left turn :) else if ( flLeftSide > flRightSide ) { pev->avelocity.y = AFLOCK_TURN_RATE; m_fTurning = TRUE; } else { // equidistant. Pick randomly between left and right. m_fTurning = TRUE; if ( RANDOM_LONG( 0, 1 ) == 0 ) { pev->avelocity.y = AFLOCK_TURN_RATE; } else { pev->avelocity.y = -AFLOCK_TURN_RATE; } } } SpreadFlock( ); pev->velocity = gpGlobals->v_forward * pev->speed; // check and make sure we aren't about to plow into the ground, don't let it happen UTIL_TraceLine(pev->origin, pev->origin - gpGlobals->v_up * 16, ignore_monsters, ENT(pev), &tr); if (tr.flFraction != 1.0 && pev->velocity.z < 0 ) pev->velocity.z = 0; // maybe it did, though. if ( FBitSet (pev->flags, FL_ONGROUND) ) { UTIL_SetOrigin (pev, pev->origin + Vector ( 0 , 0 , 1 ) ); pev->velocity.z = 0; } if ( m_flFlockNextSoundTime < gpGlobals->time ) { MakeSound(); m_flFlockNextSoundTime = gpGlobals->time + RANDOM_FLOAT( 1, 3 ); } BoidAdvanceFrame( ); return; }
Rocket::Rocket(unsigned int newCoorX, unsigned int newCoorY):Unit(newCoorX, newCoorY,UnitsType::ROCKET), marvelValue(false){ MakeSound(ROCKETNOISE); }
void PlayerFireWeapon(Guy *me) { byte c; if (player.life == 0) return; // no shooting when you're dead switch (player.weapon) { case WPN_MISSILES: if (player.ammo) { FireBullet(me->x, me->y, me->facing, BLT_MISSILE, 1); player.ammo--; } player.wpnReload = 2; break; case WPN_BOMBS: if (player.ammo) { FireBullet(me->x, me->y, me->facing, BLT_BOMB, 1); player.ammo--; } player.wpnReload = 15; break; case WPN_AK8087: if (player.ammo) { FireBullet(me->x, me->y, me->facing, BLT_LASER, 1); player.ammo--; } me->z += FIXAMT * MGL_random(4); me->dx += FIXAMT / 2 - MGL_random(65535); me->dy += FIXAMT / 2 - MGL_random(65535); c = GetControls(); if (c & CONTROL_B2) // fire is held { player.wpnReload = 1; me->frmTimer = 0; } else { player.wpnReload = 5; } DoPlayerFacing(c, me); break; case WPN_FLAME: if (player.ammo) { FireBullet(me->x, me->y, me->facing, BLT_FLAME, 1); player.ammo--; } c = GetControls(); if (c & CONTROL_B2) // fire is held { player.wpnReload = 1; me->frmTimer = 0; } else player.wpnReload = 5; DoPlayerFacing(c, me); break; case WPN_BIGAXE: if (player.ammo) { FireBullet(me->x, me->y, me->facing, BLT_BIGAXE, 1); MakeSound(SND_BOMBTHROW, me->x, me->y, SND_CUTOFF, 1200); player.ammo--; } player.wpnReload = 10; break; case WPN_LIGHTNING: if (player.ammo) { // fire lightning FireBullet(me->x, me->y, me->facing, BLT_LIGHTNING, 1); player.ammo--; } c = GetControls(); if (c & CONTROL_B2) // fire is held { player.wpnReload = 1; me->frmTimer = 0; } else { player.wpnReload = 5; } DoPlayerFacing(c, me); break; case WPN_SPEAR: if (player.ammo) { MakeSound(SND_BOMBTHROW, me->x, me->y, SND_CUTOFF, 1200); FireBullet(me->x, me->y, me->facing, BLT_SPEAR, 1); player.ammo--; } player.wpnReload = 5; break; case WPN_MACHETE: if (player.ammo) { MakeSound(SND_SLASH, me->x, me->y, SND_CUTOFF, 1200); FireBullet(me->x + Cosine(me->facing * 32)*32, me->y + Sine(me->facing * 32)*32, me->facing, BLT_SLASH, 1); player.ammo--; } player.wpnReload = 2; break; case WPN_MINES: if (player.ammo) { MakeSound(SND_MINELAY, me->x, me->y, SND_CUTOFF, 1200); FireBullet(me->x - Cosine(me->facing * 32)*32, me->y - Sine(me->facing * 32)*32, me->facing, BLT_MINE, 1); player.ammo--; } player.wpnReload = 15; break; case WPN_TURRET: if (player.ammo) { Guy *g; g = AddGuy(me->x + Cosine(me->facing * 32)*32, me->y + Sine(me->facing * 32)*32, FIXAMT * 10, MONS_GOODTURRET); if (g == NULL || !g->CanWalk(g->x, g->y, GameCurrentMap(), &curWorld)) { MakeSound(SND_TURRETBZZT, me->x, me->y, SND_CUTOFF, 1200); if (g) g->type = MONS_NONE; } else { MakeSound(SND_MINELAY, me->x, me->y, SND_CUTOFF, 1200); player.ammo--; } player.wpnReload = 15; } break; case WPN_MINDCONTROL: if (player.ammo) { MakeSound(SND_MINDWIPE, me->x, me->y, SND_CUTOFF, 1200); FireBullet(me->x + Cosine(me->facing * 32)*32, me->y + Sine(me->facing * 32)*32, me->facing, BLT_MINDWIPE, 1); player.ammo--; player.wpnReload = 15; } break; case WPN_REFLECTOR: if (player.ammo) { MakeSound(SND_LIGHTSON, me->x, me->y, SND_CUTOFF, 1200); FireBullet(me->x, me->y, me->facing, BLT_REFLECT, 1); player.ammo--; c = GetControls(); if (c & CONTROL_B2) // fire is held { player.wpnReload = 0; me->frmTimer = 0; } else { player.wpnReload = 10; } } break; case WPN_JETPACK: if (player.ammo) { player.jetting = 5; player.ammo--; player.wpnReload = 3; } break; case WPN_SWAPGUN: if (player.ammo) { MakeSound(SND_LIGHTSON, me->x, me->y, SND_CUTOFF, 1200); FireBullet(me->x, me->y, me->facing, BLT_SWAP, 1); player.ammo--; player.wpnReload = 10; } break; } if (!player.ammo) player.weapon = 0; }
void PlayerControlMe(Guy *me, mapTile_t *mapTile, world_t *world) { byte c; int x, y, i; player.life = me->hp; if (player.rage) { if (player.rage > 5) player.rage -= 6; else player.rage = 0; } if (player.rageClock) DoRage(me); if (player.invisibility) player.invisibility--; if (player.jetting && me->seq != ANIM_DIE && me->seq != ANIM_A3) { me->dx += Cosine(me->facing * 32)*6; me->dy += Sine(me->facing * 32)*6; Clamp(&me->dx, FIXAMT * 20); Clamp(&me->dy, FIXAMT * 20); if (me->z < FIXAMT * 20) me->z += FIXAMT * 4; me->dz = 0; MakeSound(SND_FLAMEGO, me->x, me->y, SND_CUTOFF, 1200); for (i = 0; i < 3; i++) { c = ((me->facing + 4)&7)*32; x = me->x + Cosine(c)*10 - FIXAMT * 10 + MGL_randoml(FIXAMT * 20); y = me->y + Sine(c)*10 - FIXAMT * 10 + MGL_randoml(FIXAMT * 20); FireBullet(x, y, (me->facing + 4)&7, BLT_FLAME, 1); } player.jetting--; } if (player.weapon == WPN_PWRARMOR) { PlayerControlPowerArmor(me, mapTile, world); return; } if (player.reload) player.reload--; if (player.wpnReload) player.wpnReload--; if (player.garlic) { player.garlic--; StinkySteam(me->x - FIXAMT * 20 + MGL_randoml(FIXAMT * 40), me->y - FIXAMT * 20 + MGL_randoml(FIXAMT * 40), me->z + FIXAMT * 40, FIXAMT * 2); } if (player.shield) player.shield--; if (player.pushPower) player.pushPower--; if (tportclock) tportclock--; // ice is slippery if (!(world->terrain[mapTile->floor].flags & TF_ICE)) { if (player.jetting && me->mind1) { if (me->mind1 & 1) { me->dx = -me->dx; switch (me->facing) { case 0: me->facing = 4; break; case 1: me->facing = 3; break; case 2: case 6: break; case 3: me->facing = 1; break; case 4: me->facing = 0; break; case 5: me->facing = 7; break; case 7: me->facing = 5; break; } } if (me->mind1 & 2) { me->dy = -me->dy; switch (me->facing) { case 0: case 4: break; case 1: me->facing = 7; break; case 2: me->facing = 6; break; case 3: me->facing = 5; break; case 5: me->facing = 3; break; case 6: me->facing = 2; break; case 7: me->facing = 1; break; } } } Dampen(&me->dx, PLYR_DECEL); Dampen(&me->dy, PLYR_DECEL); } else { if (me->mind1) // bumped a wall while on ice { if (me->mind1 & 1) me->dx = -me->dx / 8; if (me->mind1 & 2) me->dy = -me->dy / 8; } } me->mind1 = 0; if (me->ouch == 4) { if (opt.playAs == PLAYAS_BOUAPHA) { if (me->hp > 0) MakeSound(SND_BOUAPHAOUCH, me->x, me->y, SND_CUTOFF | SND_ONE, 2000); else if (me->seq == ANIM_DIE) // so it doesn't do this if you're drowning MakeSound(SND_BOUAPHADIE, me->x, me->y, SND_CUTOFF | SND_ONE, 2000); } else if (opt.playAs == PLAYAS_LUNATIC) { if (me->hp > 0) MakeSound(SND_DRLOUCH, me->x, me->y, SND_CUTOFF | SND_ONE, 2000); else if (me->seq == ANIM_DIE) // so it doesn't do this if you're drowning MakeSound(SND_DRLDIE, me->x, me->y, SND_CUTOFF | SND_ONE, 2000); } else { if (me->hp > 0) MakeSound(SND_HAPPYOUCH, me->x, me->y, SND_CUTOFF | SND_ONE, 2000); else if (me->seq == ANIM_DIE) // so it doesn't do this if you're drowning MakeSound(SND_HAPPYDIE, me->x, me->y, SND_CUTOFF | SND_ONE, 2000); } } if (me->parent) // being grabbed by a Super Zombie or something { if (me->parent->type == MONS_SUPERZOMBIE) { me->dz = 0; if (me->parent->frm < 4) me->z += FIXAMT * 3; else if (me->parent->frm > 18) { me->z -= FIXAMT * 4; if (me->parent->frm == 21) { me->z = 0; me->parent = NULL; me->action = ACTION_IDLE; if (me->hp == 0) { me->seq = ANIM_DIE; me->frm = 0; me->frmTimer = 0; me->frmAdvance = 64; me->action = ACTION_BUSY; } return; } } if (me->seq != ANIM_MOVE) { me->seq = ANIM_MOVE; me->frm = 0; me->frmTimer = 0; me->frmAdvance = 512; } return; } else if (me->parent->type == MONS_MINECART) { me->x = me->parent->x; me->y = me->parent->y + 1; me->z = FIXAMT * 8; } else { me->parent = NULL; } } // triggering stuff if (me->action == ACTION_BUSY) { // throw hammer if need be, use item if need be if (me->seq == ANIM_A1 && me->frm == 2 && player.wpnReload == 0) { PlayerFireWeapon(me); return; } if (me->seq == ANIM_A3) { if (me->frm < 11) { me->z = FIXAMT * 8; // hover while spinning feet in the air before plunging into water me->dz = FIXAMT; } else { ExplodeParticles(PART_WATER, me->x, me->y, 0, 16); } return; } if (me->seq == ANIM_DIE) { me->facing = (me->facing + 1)&7; return; } if (me->seq == ANIM_A1) return; } // not busy, let's see if you want to do something c = GetControls(); if (!player.jetting) DoPlayerFacing(c, me); if (me->action == ACTION_IDLE) { if ((c & (CONTROL_B1 | CONTROL_B2)) == (CONTROL_B1 | CONTROL_B2) && (player.rage / 256) >= player.life) { // RAGE!!!!!!! player.rage = 0; player.rageClock = 15; if (player.shield == 0) player.shield = 30; EnterRage(); } if ((c & CONTROL_B1) && player.reload == 0) // pushed hammer throw button { me->action = ACTION_IDLE; if (!(c & (CONTROL_UP | CONTROL_DN | CONTROL_LF | CONTROL_RT))) { me->seq = ANIM_ATTACK; // even if unarmed me->frm = 0; me->frmTimer = 0; me->frmAdvance = 255; me->frm += 4 - (player.hamSpeed >> 2); } player.boredom = 0; if (player.hammers > 0) PlayerThrowHammer(me); player.reload += (10 - (4 - (player.hamSpeed >> 2))); }
/* comefrom: processEvent */ doKeyDown(SimView *view, short charCode) { LastKeys[0] = LastKeys[1]; LastKeys[1] = LastKeys[2]; LastKeys[2] = LastKeys[3]; LastKeys[3] = tolower(charCode); if (strcmp(LastKeys, "fund") == 0) { Spend(-10000); PunishCnt++; /* punish for cheating */ if (PunishCnt == 5) { PunishCnt = 0; MakeEarthquake(); } LastKeys[0] = '\0'; } else if (strcmp(LastKeys, "fart") == 0) { MakeSound("city", "Explosion-High"); MakeSound("city", "Explosion-Low"); MakeFire(); MakeFlood(); MakeTornado(); MakeEarthquake(); MakeMonster(); LastKeys[0] = '\0'; } else if (strcmp(LastKeys, "nuke") == 0) { int i, j; MakeSound("city", "Explosion-High"); MakeSound("city", "Explosion-Low"); for (i = 0; i < WORLD_X; i++) { for (j = 0; j < WORLD_Y; j++) { short tile = Map[i][j] & LOMASK; if ((tile >= RUBBLE) && ((tile < CHURCH - 4) || (tile > CHURCH + 4))) { if ((tile >= HBRIDGE && tile <= VBRIDGE) || (tile >= BRWH && tile <= LTRFBASE + 1) || (tile >= BRWV && tile <= BRWV + 2) || (tile >= BRWXXX1 && tile <= BRWXXX1 + 2) || (tile >= BRWXXX2 && tile <= BRWXXX2 + 2) || (tile >= BRWXXX3 && tile <= BRWXXX3 + 2) || (tile >= BRWXXX4 && tile <= BRWXXX4 + 2) || (tile >= BRWXXX5 && tile <= BRWXXX5 + 2) || (tile >= BRWXXX6 && tile <= BRWXXX6 + 2) || (tile >= BRWXXX7 && tile <= BRWXXX7 + 2)) { Map[i][j] = RIVER; } else { Map[i][j] = TINYEXP + ANIMBIT + BULLBIT + Rand(2); } } } } LastKeys[0] = '\0'; } else if (strcmp(LastKeys, "stop") == 0) { heat_steps = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "will") == 0) { int i; int n = 500; for (i = 0; i < n; i++) { int x1 = Rand(WORLD_X - 1); int y1 = Rand(WORLD_Y - 1); int x2 = Rand(WORLD_X - 1); int y2 = Rand(WORLD_Y - 1); short temp = Map[x1][y1]; Map[x1][y1] = Map[x2][y2]; Map[x2][y2] = temp; } Kick(); } else if (strcmp(LastKeys, "bobo") == 0) { heat_steps = 1; heat_flow = -1; heat_rule = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "boss") == 0) { heat_steps = 1; heat_flow = 1; heat_rule = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "mack") == 0) { heat_steps = 1; heat_flow = 0; heat_rule = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "donh") == 0) { heat_steps = 1; heat_flow = -1; heat_rule = 1; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "patb") == 0) { heat_steps = 1; heat_flow = Rand(40) - 20; heat_rule = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "lucb") == 0) { heat_steps = 1; heat_flow = Rand(1000) - 500; heat_rule = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "olpc") == 0) { Spend(-1000000); } switch (charCode) { case 'X': case 'x': { short s = view->tool_state; if (++s > lastState) { s = firstState; } setWandState(view, s); break; } case 'Z': case 'z': { short s = view->tool_state; if (--s < firstState) { s = lastState; } setWandState(view, s); break; } /***** shift wand state to bull dozer *****/ case 'B': case 'b': case 'B'-'@': { if (view->tool_state_save == -1) { view->tool_state_save = view->tool_state; } setWandState(view, dozeState); break; } /***** shift wand state to roads *****/ case 'R': case 'r': case 'R'-'@': { if (view->tool_state_save == -1) { view->tool_state_save = view->tool_state; } setWandState(view, roadState); break; } /***** shift wand state to power *****/ case 'P': case 'p': case 'P'-'@': { if (view->tool_state_save == -1) { view->tool_state_save = view->tool_state; } setWandState(view, wireState); break; } /***** shift wand state to transit *****/ case 'T': case 't': case 'T'-'@': { if (view->tool_state_save == -1) { view->tool_state_save = view->tool_state; } setWandState(view, rrState); break; } #if 0 /***** shift wand state to query *****/ case 'Q': case 'q': case 'Q'-'@': { if (view->tool_state_save == -1) view->tool_state_save = view->tool_state; setWandState(view, queryState); break; } #endif case 27: { SoundOff(); break; } } }
void DoRage(Guy *me) { int cx, cy, i; if (player.rageClock > 0) player.rageClock--; if (player.rageClock > 59) switch (rageWpn) { case WPN_NONE: switch (opt.playAs) { case PLAYAS_BOUAPHA: if (player.rageClock == (player.rageClock / 4)*4) HammerLaunch(me->x, me->y, me->facing, 5, HMR_REVERSE | HMR_REFLECT); break; case PLAYAS_LUNATIC: if (player.rageClock == (player.rageClock / 4)*4) { for (i = 0; i < 10; i++) FireBullet(me->x, me->y, (byte) MGL_random(8), BLT_BALLLIGHTNING, 1); } break; case PLAYAS_HAPPY: if (player.rageClock == (player.rageClock / 4)*4) HappyLaunch(me->x, me->y, me->facing, 5, HMR_REVERSE | HMR_REFLECT); break; } break; case WPN_MISSILES: FireBullet(me->x, me->y, (player.rageClock & 7), BLT_MISSILE, 1); break; case WPN_BOMBS: GetCamera(&cx, &cy); cx -= 320; cy -= 240; FireBullet((cx + MGL_random(640)) << FIXSHIFT, (cy + MGL_random(480)) << FIXSHIFT, 0, BLT_BOOM, 1); ShakeScreen(10); // make the screen shake! break; case WPN_AK8087: FireBullet(me->x, me->y, (byte) MGL_random(8), BLT_LASER, 1); FireBullet(me->x, me->y, (byte) MGL_random(8), BLT_LASER, 1); FireBullet(me->x, me->y, (byte) MGL_random(8), BLT_LASER, 1); break; case WPN_FLAME: GetCamera(&cx, &cy); cx -= 320; cy -= 240; for (i = 0; i < 3; i++) FireBullet((cx + MGL_random(640)) << FIXSHIFT, (cy + MGL_random(480)) << FIXSHIFT, (byte) MGL_random(8), BLT_FLAME, 1); break; case WPN_BIGAXE: if (player.rageClock == (player.rageClock / 5)*5) { MakeSound(SND_BOMBTHROW, me->x, me->y, SND_CUTOFF, 1200); FireBullet(me->x, me->y, me->facing, BLT_BIGAXE, 1); } break; case WPN_LIGHTNING: GetCamera(&cx, &cy); cx -= 320; cy -= 240; FireBullet((cx + MGL_random(640)) << FIXSHIFT, (cy + MGL_random(480)) << FIXSHIFT, (byte) MGL_random(8), BLT_LIGHTNING, 1); break; case WPN_SPEAR: if (player.rageClock == (player.rageClock / 3)*3) { MakeSound(SND_BOMBTHROW, me->x, me->y, SND_CUTOFF, 1200); FireBullet(me->x, me->y, (me->facing + 7)&7, BLT_SPEAR, 1); FireBullet(me->x, me->y, me->facing, BLT_SPEAR, 1); FireBullet(me->x, me->y, (me->facing + 1)&7, BLT_SPEAR, 1); } break; case WPN_MACHETE: GetCamera(&cx, &cy); cx -= 320; cy -= 240; for (i = 0; i < 10; i++) FireBullet((cx + MGL_random(640)) << FIXSHIFT, (cy + MGL_random(480)) << FIXSHIFT, (byte) MGL_random(8), BLT_SLASH, 1); break; case WPN_MINES: if (player.rageClock == (player.rageClock / 8)*8) { cx = 32 / 8 - ((player.rageClock - 60) / 8) + 1; for (i = 0; i < 8; i++) FireBullet(me->x + Cosine(i * 32)*(cx * 32), me->y + Sine(i * 32)*(cx * 32), 0, BLT_BOOM, 1); } break; case WPN_MINDCONTROL: if (player.rageClock & 1) for (i = 0; i < 8; i++) FireBullet(me->x, me->y, i, BLT_MINDWIPE, 1); break; case WPN_REFLECTOR: FireBullet(me->x, me->y, 0, BLT_REFLECT, 1); break; case WPN_TURRET: case WPN_SWAPGUN: for (i = 0; i < 4; i++) FireBullet(me->x, me->y, (i * 64 + player.rageClock)&255, BLT_GREEN, 1); break; case WPN_JETPACK: for (i = 0; i < 8; i++) FireBullet(me->x, me->y, i, BLT_FLAME, 1); break; } }