void w_players_in_game2::click(int, int) { player_entry2 thePlayerEntry; // make up a name /* int theNameLength = (local_random() % MAXIMUM_PLAYER_NAME_LENGTH) + 1; for(int i = 0; i < theNameLength; i++) thePlayerEntry.player_name[i] = 'a' + (local_random() % ('z' - 'a')); thePlayerEntry.player_name[theNameLength] = '\0'; // strcpy(thePlayerEntry.player_name, "The Big Lebowski"); */ strcpy(thePlayerEntry.player_name, sTestingNames[local_random() % 8]); // Set the size of the text thePlayerEntry.name_width = text_width(thePlayerEntry.player_name, font, style); // Make up a team-color int theTeamColor = local_random() % 8; // Get the pixel-color for the player's team (for drawing the name) thePlayerEntry.name_pixel_color = get_dialog_player_color(theTeamColor); // Set up a player image for the player (funfun) thePlayerEntry.player_image = new PlayerImage; thePlayerEntry.player_image->setRandomFlatteringView(); thePlayerEntry.player_image->setTeamColor(theTeamColor); player_entries.push_back(thePlayerEntry); dirty = true; }
void PlayerImage::setRandomFlatteringView() { int16 theView; do { theView = local_random() % 8; } while(theView >= 3 && theView <= 5); setView(theView); }
OSErr open_network_speaker() { // Allocate storage for noise data - assume if pointer not NULL, already have storage. if(sNoiseBufferStorage == NULL) { assert(kNoiseBufferSize % 2 == 0); uint16* theBuffer = new uint16[kNoiseBufferSize / 2]; // Fill in noise data (use whole width of local_random()) for(int i = 0; i < kNoiseBufferSize / 2; i++) theBuffer[i] = local_random() / 4; sNoiseBufferStorage = (byte*) theBuffer; } // Fill out the noise-buffer descriptor sNoiseBufferDesc.mData = sNoiseBufferStorage; sNoiseBufferDesc.mLength = kNoiseBufferSize; sNoiseBufferDesc.mFlags = 0; // Reset the buffer descriptor queue sSoundBuffers.reset(); // Reset the data buffer queue sSoundDataBuffers.reset(); // Allocate storage for audio data buffers for(int i = 0; i < kNumSoundDataBuffers; i++) { byte* theBuffer = new byte[kSoundDataBufferSize]; sSoundDataBuffers.enqueue(theBuffer); } // Reset a couple others to sane values sDryDequeues = 0; sSpeakerIsOn = false; #ifdef SPEEX init_speex_decoder(); #endif return 0; }
void PlayerImage::updateLegsDrawingInfo() { // Remove old data, if applicable if(mLegsSurface != NULL) { SDL_FreeSurface(mLegsSurface); mLegsSurface = NULL; } if(mLegsData != NULL) { free(mLegsData); mLegsData = NULL; } mLegsValid = false; // Get the player shape definitions player_shape_definitions* theShapeDefinitions = get_player_shape_definitions(); // tryAgain tells us whether we made any random choices in the loop. If so, a failed effort results in // another trip through the loop (hopefully with different random choices :) ). bool tryAgain = false; // For safety - don't keep looping if we seem not to be finding good data... eventually, give up as invalid. int16 theNumberOfTriesLeft = 100; do { // We're using up one of our attempts... theNumberOfTriesLeft--; // Find the leg action // We use a local here (instead of using the member directly) so we still which things to pick randomly if we loop. int16 theLegsAction = mLegsAction; if(mLegsAction == NONE) { theLegsAction = local_random() % NUMBER_OF_PLAYER_ACTIONS; tryAgain = true; } // If the user fed us a bad value, stop (with invalid data) else if(theLegsAction < 0 || theLegsAction >= NUMBER_OF_PLAYER_ACTIONS) break; // Find the high-level shape index uint16 theLegsHighLevelShapeIndex = theShapeDefinitions->legs[theLegsAction]; // Find out how many animation frames there are for the chosen legs shape_animation_data* theLegsAnimationData = get_shape_animation_data( BUILD_DESCRIPTOR(theShapeDefinitions->collection, theLegsHighLevelShapeIndex)); // If this failed, either give up or try again if(theLegsAnimationData == NULL) continue; // Find a view for the legs int16 theLegsView = mLegsView; if(theLegsView == NONE) { theLegsView = local_random() % 8;//theLegsAnimationData->number_of_views; tryAgain = true; } else if(theLegsView < 0 || theLegsView >= 8) break; // Find an animation frame int16 theLegsFrame = mLegsFrame; if(theLegsFrame == NONE) { theLegsFrame = local_random() % theLegsAnimationData->frames_per_view; tryAgain = true; } else if(theLegsFrame < 0 || theLegsFrame >= theLegsAnimationData->frames_per_view) break; // Calculate the low-level shape index index uint16 theLegsLowLevelShapeIndexIndex = theLegsAnimationData->frames_per_view * theLegsView + theLegsFrame; // Finally, we can look up the low-level shape index uint16 theLegsLowLevelShapeIndex = theLegsAnimationData->low_level_shape_indexes[theLegsLowLevelShapeIndexIndex]; // Find a legs color int16 theLegsColor = mLegsColor; if(theLegsColor == NONE) { theLegsColor = local_random() % 8; tryAgain = true; } else if(theLegsColor < 0 || theLegsColor >= 8) break; low_level_shape_definition *theLegsLowLevelShape = get_low_level_shape_definition(theShapeDefinitions->collection, theLegsLowLevelShapeIndex); if(theLegsLowLevelShape == NULL) continue; // Get the shape surfaces for the given collection, CLUT (according to color/team), and low-level shape index. if (bit_depth == 8) continue; mLegsSurface = get_shape_surface(theLegsLowLevelShapeIndex, BUILD_COLLECTION(theShapeDefinitions->collection, theLegsColor), &mLegsData, mLegsBrightness); if(mLegsSurface == NULL) continue; // Fill in rect information mLegsRect.x = -theLegsLowLevelShape->key_x; mLegsRect.y = -theLegsLowLevelShape->key_y; mLegsRect.w = mLegsSurface->w; mLegsRect.h = mLegsSurface->h; // We're clear. Copy our temporary variables into the data members. mLegsAction = theLegsAction; mLegsView = theLegsView; mLegsFrame = theLegsFrame; mLegsColor = theLegsColor; // We are _valid_. Sweet. mLegsValid = true; // Success - get me outta here! break; } while(tryAgain && theNumberOfTriesLeft > 0); // Valid or not, the legs are no longer dirty. mLegsDirty = false; }
void PlayerImage::updateTorsoDrawingInfo() { // Remove old data, if applicable if(mTorsoSurface != NULL) { SDL_FreeSurface(mTorsoSurface); mTorsoSurface = NULL; } if(mTorsoData != NULL) { free(mTorsoData); mTorsoData = NULL; } mTorsoValid = false; // Get the player shape definitions player_shape_definitions* theShapeDefinitions = get_player_shape_definitions(); // tryAgain tells us whether we made any random choices in the loop. If so, a failed effort results in // another trip through the loop (hopefully with different random choices :) ). bool tryAgain = false; // For safety - don't keep looping if we seem not to be finding good data... eventually, give up as invalid. int16 theNumberOfTriesLeft = 100; do { // We're using up one of our attempts... theNumberOfTriesLeft--; // Find the torso action // We use a local here (instead of using the member directly) so we still which things to pick randomly if we loop. int16 theTorsoAction = mTorsoAction; if(mTorsoAction == NONE) { theTorsoAction = local_random() % PLAYER_TORSO_WEAPON_ACTION_COUNT; tryAgain = true; } // If the user fed us a bad value, stop (with invalid data) else if(theTorsoAction < 0 || theTorsoAction >= PLAYER_TORSO_WEAPON_ACTION_COUNT) break; // Find a torso pseudo-weapon int16 thePseudoWeapon = mPseudoWeapon; if(mPseudoWeapon == NONE) { thePseudoWeapon = local_random() % PLAYER_TORSO_SHAPE_COUNT; tryAgain = true; } else if(thePseudoWeapon < 0 || thePseudoWeapon >= PLAYER_TORSO_SHAPE_COUNT) break; // Find the high-level shape index uint16 theTorsoHighLevelShapeIndex; switch(theTorsoAction) { case _shape_weapon_firing: theTorsoHighLevelShapeIndex = theShapeDefinitions->firing_torsos[thePseudoWeapon]; break; case _shape_weapon_idle: theTorsoHighLevelShapeIndex = theShapeDefinitions->torsos[thePseudoWeapon]; break; case _shape_weapon_charging: theTorsoHighLevelShapeIndex = theShapeDefinitions->charging_torsos[thePseudoWeapon]; break; default: // This staves off a compiler warning theTorsoHighLevelShapeIndex = 0; assert(false); } // Find out how many animation frames there are for the chosen torso shape_animation_data* theTorsoAnimationData = get_shape_animation_data( BUILD_DESCRIPTOR(theShapeDefinitions->collection, theTorsoHighLevelShapeIndex)); // If this failed, either give up or try again if(theTorsoAnimationData == NULL) continue; // Find a view for the torso int16 theTorsoView = mTorsoView; if(theTorsoView == NONE) { theTorsoView = local_random() % 8;//theTorsoAnimationData->number_of_views; tryAgain = true; } else if(theTorsoView < 0 || theTorsoView >= 8) break; // Find an animation frame int16 theTorsoFrame = mTorsoFrame; if(theTorsoFrame == NONE) { theTorsoFrame = local_random() % theTorsoAnimationData->frames_per_view; tryAgain = true; } else if(theTorsoFrame < 0 || theTorsoFrame >= theTorsoAnimationData->frames_per_view) break; // Calculate the low-level shape index index uint16 theTorsoLowLevelShapeIndexIndex = theTorsoAnimationData->frames_per_view * theTorsoView + theTorsoFrame; // Finally, we can look up the low-level shape index uint16 theTorsoLowLevelShapeIndex = theTorsoAnimationData->low_level_shape_indexes[theTorsoLowLevelShapeIndexIndex]; // Find a torso color int16 theTorsoColor = mTorsoColor; if(theTorsoColor == NONE) { theTorsoColor = local_random() % 8; tryAgain = true; } else if(theTorsoColor < 0 || theTorsoColor >= 8) break; low_level_shape_definition *theTorsoLowLevelShape = get_low_level_shape_definition(theShapeDefinitions->collection, theTorsoLowLevelShapeIndex); if(theTorsoLowLevelShape == NULL) continue; // Get the shape surfaces for the given collection, CLUT (according to color/team), and low-level shape index. if (bit_depth == 8) continue; mTorsoSurface = get_shape_surface(theTorsoLowLevelShapeIndex, BUILD_COLLECTION(theShapeDefinitions->collection, theTorsoColor), &mTorsoData, mTorsoBrightness); // Argh, it failed. Why don't we wait for backup? if(mTorsoSurface == NULL) continue; // Fill in rect information mTorsoRect.x = -theTorsoLowLevelShape->origin_x; mTorsoRect.y = -theTorsoLowLevelShape->origin_y; mTorsoRect.w = mTorsoSurface->w; mTorsoRect.h = mTorsoSurface->h; // We're clear. Copy our temporary variables into the data members. mTorsoAction = theTorsoAction; mPseudoWeapon = thePseudoWeapon; mTorsoView = theTorsoView; mTorsoFrame = theTorsoFrame; mTorsoColor = theTorsoColor; // We are _valid_. Sweet. mTorsoValid = true; // Success - get me outta here! break; } while(tryAgain && theNumberOfTriesLeft > 0); // Valid or not, the torso is no longer dirty. mTorsoDirty = false; }