text:
Archive for the 'Objc' Tag
iPhone Gaming Framework: Stage 2 Tutorial
NOTE:: I am still looking for a good way to turn this into a template and release it for anyone wishing to install this for the base of their game. If you know of a good resource for doing so, please let me know, as google has been fairly unhelpful as of this point.
Welcome back everyone! Did you all finish Stage 1 of the tutorial? If not, please do that, as we are going to be building off stage 1 in our next tutorial. Stage 1 can be found HERE
Okay, now that stage 1 is done, you have a working screen management system… except you don't have an input manager to help you with input management! Remember my note from previous tutorials, there are MANY solutions to a problem, and this is just one of many. Our input class works as follows: If a touch is detected, the GLViewController will send a message to the input manager, and that message will be stored in an input "state" called "queryState." Before the view controller updates any of the game screens, it will send a message to the input manager to update the input, and this is when the input is changed from the "queryState" to "currentState" and the current state is then set to the previous state.
So lets look at the code, yeah? First the InputManager.h file
// // The input manager is a helper class that houses any input // that can be obtained by the game engine. As a touch is detected // on screen, it will send a message to the input helper. The input // helper will then hold onto that message and filter it into the // current state on the next game loop. The current state is moved // to the previous state, and any incoming touches are then put // back into the query state, waiting to be updated. // // This method of updating lets the game filter updates to the top-most // game screen and not have to worry about un-focused screens handling // input that was not intended for them. // // Created by Craig Giles on 1/3/09. // #import <Foundation/Foundation.h> #import "InputState.h" @interface InputManager : NSObject { @private bool isLandscape; InputState *currentState; InputState *previousState; InputState *queryState; } @property (nonatomic, readwrite) bool isLandscape; @property (nonatomic, readonly) InputState *currentState; @property (nonatomic, readonly) InputState *previousState; - (void) update:(float)deltaTime; // // Touch events // - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)view WithTimer:(NSTimer *)deltaTimer; - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)view WithTimer:(NSTimer *)deltaTimer; - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)view WithTimer:(NSTimer *)deltaTimer; - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)view WithTimer:(NSTimer *)deltaTimer; // // Helper Methods // - (void) update:(float)deltaTime; - (bool) isButtonPressed:(CGRect)rect; - (bool) isButtonHeld:(CGRect)rect; - (void) convertCoordinatesToLandscape; // // Class methods // + (bool) doesRectangle:(CGRect)rect ContainPoint:(CGPoint)point; @end
And the .m file
// // The input manager is a helper class that houses any input // that can be obtained by the game engine. As a touch is detected // on screen, it will send a message to the input helper. The input // helper will then hold onto that message and filter it into the // current state on the next game loop. The current state is moved // to the previous state, and any incoming touches are then put // back into the query state, waiting to be updated. // // This method of updating lets the game filter updates to the top-most // game screen and not have to worry about un-focused screens handling // input that was not intended for them. // // Created by Craig Giles on 1/3/09. // #import "InputManager.h" @implementation InputManager // // Getters / Setters // @synthesize isLandscape; @synthesize currentState; @synthesize previousState; // // Initialization // - (id) init { self = [super init]; if (self != nil) { // // Allocate memory for all of the possible states // currentState = [[InputState alloc] init]; previousState = [[InputState alloc] init]; queryState = [[InputState alloc] init]; // // Set the initial coords for the touch locations. // currentState.touchLocation = CGPointMake(0, 0); previousState.touchLocation = CGPointMake(0, 0); queryState.touchLocation = CGPointMake(0, 0); } return self; } // // Deallocation // - (void) dealloc { [currentState release]; [previousState release]; [queryState release]; [super dealloc]; } // // Update the input manager. This method will take the // values in updateState and apply them to the current state. // in essence, this method will "query" the current state // - (void) update:(float)deltaTime { // Sets previous state to current state previousState.isBeingTouched = currentState.isBeingTouched; previousState.touchLocation = currentState.touchLocation; // Sets the current state to the query state currentState.isBeingTouched = queryState.isBeingTouched; currentState.touchLocation = queryState.touchLocation; // converts the coordinate system if the game is in landscape mode [self convertCoordinatesToLandscape]; } // // Touch events // // These events are filtered into the input manager as they occur. // Since we want to control how our input, we are going to use a // queryState as the "Live" state, while our current and previous // states are updated every loop. For this reason, we are always // modifying the queryState when these touch events are detected, // and the current state is only modified on [self update:deltaTime]; // - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)view WithTimer:(NSTimer *)deltaTimer { queryState.isBeingTouched = YES; queryState.touchLocation = [[touches anyObject] locationInView:view]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)view WithTimer:(NSTimer *)deltaTimer { queryState.isBeingTouched = YES; queryState.touchLocation = [[touches anyObject] locationInView:view]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)view WithTimer:(NSTimer *)deltaTimer { queryState.isBeingTouched = NO; queryState.touchLocation = [[touches anyObject] locationInView:view]; } - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)view WithTimer:(NSTimer *)deltaTimer { queryState.isBeingTouched = NO; } // // When in landscape mode, the touch screen still records input // as if it were in portrait mode. To get around this, if we // are writing a game in landscape we need to adjust the coordinate // system on the touchscreen to match that of our world. // - (void) convertCoordinatesToLandscape { // If we are not in landscape mode, don't convert anything if ( !isLandscape ) return; // Otherwise, we will need to take the current touch location // swap the x and y values (since in landscape, the portrait // coordinate system means x will point up / down instead of // left / right) and move the y position to match our origin // point of (0,0) in the upper left corner. int x = currentState.touchLocation.y; int y = (currentState.touchLocation.x - 320); // make sure we take the absolute value of y, since if we didn't // y would always be a negative number. y = abs(y); // Since we were converting the current state, we need to update // the current touch location currentState.touchLocation = CGPointMake( x, y ); } // // Looks at the previous state, and the current state to determine // weather or not the button (rectangle) was just pressed and released. // - (bool) isButtonPressed:(CGRect)rect { // // If the current state is not being touched // and the previous state is being touched, the // user just released their touch. This is // personal preference really, But i've found with // my XNA programming, that its better to detect if // a button was just released rather than if it was // just pressed in when determining a button press. // if ( !currentState.isBeingTouched && previousState.isBeingTouched ) { return [InputManager doesRectangle:rect ContainPoint:currentState.touchLocation]; } return NO; } // // Looks at the previous state, and the current state to determine // weather or not the button (rectangle) is being held down. // - (bool) isButtonHeld:(CGRect)rect { // // If the current state and the previous states // are being touched, the user is holding their // touch on the screen. // if ( currentState.isBeingTouched && previousState.isBeingTouched ) { return [InputManager doesRectangle:rect ContainPoint:currentState.touchLocation]; } return NO; } // // Helper method for determining if a rectangle contains a point. // Unsure if this will stay in the input helper or be moved to some // sort of "RectangleHelper" class in the future, but for now this // is a good spot for it. Remember, this works with our current coord // system. If your engine uses a different coord system (IE: (0,0) is at // the bottom left of the screen) you'll need to modify this method. // + (bool) doesRectangle:(CGRect)rect ContainPoint:(CGPoint)point { // // If the rectangle contains the given point, return YES // Otherwise, the point is outside the rectangle, return NO // if (point.x > rect.origin.x && point.x < rect.origin.x + rect.size.width && point.y > rect.origin.y && point.y < rect.origin.y + rect.size.height) { return YES; } return NO; } @end [/sourcecode] InputState just contains 2 values, and I have chosen to set them as the following: [sourcecode language="cpp"] #import <Foundation/Foundation.h> @interface InputState : NSObject { bool isBeingTouched; CGPoint touchLocation; } @property (nonatomic, readwrite) bool isBeingTouched; @property (nonatomic, readwrite) CGPoint touchLocation; @end // // Implementation of InputState // @implementation InputState @synthesize isBeingTouched; @synthesize touchLocation; - (id) init { self = [super init]; if (self != nil) { isBeingTouched = NO; touchLocation = CGPointMake(0, 0); } return self; } @end
It should be a good time to point out, that the input manager changes the coordinates of the actual touch, depending on if you're playing your game in landscape mode or normal mode. One of the problems I was having, before I realized what was really happening, was my coordinates for the touch screen and coordinates for the game world were different. For example, my touch screen coordinates, if held landscape, (0,0) was in the lower left corner, while in the world coordinates, (0,0) was in the upper left corner. This gave me problems, as you can imagine.
In order to change this, I wrote a method that will convert the coordinates system if the screen is detected in landscape mode. It should be pointed out, that if you're using a different origin point for your world (IE: Lower left corner instead of upper left) you're conversions will have to be done differently.
Another method that is currently in the input manager class, is the [self doesRectangle:rect ContainPoint:touchLocation]; Inside this method, you'll see that both current and previous states are being used in order to detect if a touch is being "touched" or "held." This can be done differently, but the way I've chosen to implement it, is as follows;
if the button was just RELEASED (current state is not pressed, but previous state was) than the button was just "pressed."
This is important to note, because it means if the user touches the screen, and holds their finger down, it won't register as a "button press" until they release their finger. Some people prefer to do the opposite, meaning if the current state was just pressed and the previous state was un-pressed. Use what you feel comfortable with.
So now all we need to do is add a game screen or two, right? Well, I told you that I would help you get up a paused screen. This will help you learn how to get any sort of game screen up and running. First, lets take a look at the PausedScreen.h file
// // The paused screen is just an overlay popup screen that is // displayed to the user when the game is paused. // // Created by Craig Giles on 1/5/09. // #import <Foundation/Foundation.h> #import "GameScreen.h" #import "InputManager.h" #import "Texture2D.h" @interface PausedScreen : GameScreen { Texture2D *pausedText; double alphaValue; } @property (nonatomic, retain) Texture2D *pausedText; - (void) loadContent; - (void) unloadContent; - (void) handleInput:(InputManager *)input; - (void) update:(float)deltaTime OtherScreenHasFocus:(bool)otherFocus CoveredByOtherScreen:(bool)coveredByOtherScreen; - (void) draw:(float)deltaTime; @end
If you notice, several of these methods are in "GameScreen.h" right? You'll also notice the LACK of touch event classes. All input is handled by the input manager, and will be called from the view controller (the [self handleInput:input] method) Aah now you are getting why I went the touch manager route instead of re-writing every single "touchEvent" method in each game screen!
There are several methods that every game screen needs in order to function properly. It will need a loadContent / unloadContent methods, handleInput method, and the update / draw methods. Also keep in mind, every game screen will need to call the [super update:deltaTime…], and every screen (other than the paused screen, which is a popup screen) will need to call the [super draw:deltaTime]; within its draw method.
So now you have the basics of the game screen, let me show you the .m file.
// // The paused screen is just an overlay popup screen that is // displayed to the user when the game is paused. // // Created by Craig Giles on 1/5/09. // #import "PausedScreen.h" @implementation PausedScreen @synthesize pausedText; // // Initialize the pause menu screen // - (id) init { self = [super init]; if (self != nil) { // flag that there is no need for the game to transition // off when the pause menu is on top of it self.isPopup = YES; } return self; } // // Load all content associated with the paused screen // - (void) loadContent { // // Since this is a popup screen, we will over-ride the // view controllers transition time and set this to instantly // transition on and off. // self.transitionOnTime = 0; self.transitionOffTime = 0; // set the paused text pausedText = [[Texture2D alloc] initWithString:@"Paused\nTap screen to unpause" dimensions:CGSizeMake(self.viewport.size.width, self.viewport.size.height) alignment:UITextAlignmentCenter fontName:@"Zapfino" fontSize:32]; // The alpha value of the background. below // the paused text. alphaValue = 0.75f; } - (void) unloadContent { //TODO: all unload content goes here [pausedText release]; [super unloadContent]; } - (void) handleInput:(InputManager *)input { // If the 'tap here to resume' button was pressed // resume game if ([input isButtonPressed:self.viewport]) { [self exitScreen]; } } - (void) update:(float)deltaTime OtherScreenHasFocus:(bool)otherFocus CoveredByOtherScreen:(bool)coveredByOtherScreen { //TODO: Update logic goes here // Update the base class [super update:deltaTime OtherScreenHasFocus:otherFocus CoveredByOtherScreen:coveredByOtherScreen]; } - (void) draw:(float)deltaTime { // Darken the screen to alert the player that it has been paused [self.controller fadeBackBufferToBlack:alphaValue]; [pausedText drawInRect:CGRectMake(self.viewport.size.width / 4, self.viewport.size.height / 4, self.viewport.size.width / 2, self.viewport.size.height / 2)]; } @end
One thing to take note, since the PausedScreen is a popup screen, it has overwritten the transition on and transition off values sent to it by the view controller. Any game screen can do the same, for example if you are transitioning to a screen that you've made your own custom transition, turn the view controllers transition off and let the screen transition itself. (IE: a battle screen.)
So there you have it! I don't remember if textures are drawing upside down with this coord system, but if they are, all you have to do is edit the Texture2D.m file to fix that. If you don't know how, send me an email and I'll show you how I did it, but there are several ways of doing it.
I hope you enjoyed my heavily commented code for the screen manager, input manager, and game screen classes. This should give you the basic knowledge to get up and running with your own iPhone OpenGL applications. If you found these useful, let me know and I'll write up some more when I have the time. I'm still learning all of this myself, but sharing my knowledge will lead to more interesting games for everyone! Keep in mind these are very basic systems and can be heavily expanded on by creative programmers. Can't wait to see what you guys come up with!
Happy coding all!
iPhone Gaming Framework: Stage 1 Tutorial
Buckle in guys, this is going to be a rather large tutorial. The goal for this tutorial is to get a basic screen management system up and running, ready to start writing game code. I would like to start off by saying the following: This is not the only way to get a project up and running! There are many many many ways of solving problems in the programming world. Some people might prefer to use Cocos2D for the iPhone, while others might prefer to roll their own engine from scratch. I did this more as a learning process for myself, and now that I've learned what I could, i thought I should share the knowledge to everyone else who is struggling with the problems that I've solved.
Also, keep in mind that this screen management system is basically a port of the GameStateManagement demo from the XNA sample ( http://creators.xna.com/ ) from C# to Objective-C with some modifications. Anyone currently using XNA should have a fairly easy time porting this over, as a lot of the code should be recognizable to you.
So, now that I've got that out of the way, lets begin! Your first step is going to head over to Jeff's blog iPhoneDevelopment and pick up the Updated OpenGL Xcode Project Template.
Next step, is to follow his directions and install it! Once you have it installed, load a new project using his template. You will find that a few things are different, and a whole lot is added. Open up the GLView.m in the classes subdirectory, and add the following four methods:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [controller touchesBegan:touches withEvent:event InView:self WithTimer:animationTimer]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { [controller touchesMoved:touches withEvent:event InView:self WithTimer:animationTimer]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [controller touchesEnded:touches withEvent:event InView:self WithTimer:animationTimer]; } - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { [controller touchesCancelled:touches withEvent:event InView:self WithTimer:animationTimer]; }
What this is going to do, is when your iPod touch or iPhone is touched, a message is sent to the GLView. We are going to capture that message, and send it to the GLViewController. Okay, got that done? GREAT! Now comes the fun stuff.
Open up your GLViewController.h file. You are going to be putting in quite a bit of code, and i'll explain everything when we do the .m file, so for right now just adjust your .h file to look like the following. You'll see the .m file is HEAVILY commented to show what everything is and what it does, and i'll make some additional notes here as well… so here is the GLViewController.h file.
// // The View Controller is a service which mananges one or more GameScreen // instances. It maintains a stack of screens, calls their Update and Draw // methods at the appropriate times, and automatically routes the input to // the topmost active screen. // // Created by XNA Development Team ( http://creators.xna.com/ ) as a // ScreenManager.cs GameComponent. // // Adapted for iPhone Game Development by Craig Giles on 1/1/09. // // // Import statements // #import <UIKit/UIKit.h> #import <OpenGLES/EAGL.h> #import <OpenGLES/ES1/gl.h> #import <OpenGLES/ES1/glext.h> #import "Texture2D.h" #import "InputManager.h" #import "GameScreen.h" #import "TitleScreen.h" @class GLView; @interface GLViewController : UIViewController { NSMutableArray *screens; NSMutableArray *screensToUpdate; InputManager *input; Texture2D *blankTexture; bool isInitialized; bool traceEnabled; UIView *gameView; CGRect viewport; } // // Properties // @property (nonatomic, retain) NSMutableArray *screens; @property (nonatomic, retain) NSMutableArray *screensToUpdate; @property (nonatomic, retain) InputManager *input; @property (nonatomic, retain) Texture2D *blankTexture; @property (nonatomic, readwrite) bool isInitialized; @property (nonatomic, readwrite) bool traceEnabled; @property (nonatomic, retain) UIView *gameView; @property (nonatomic, readwrite) CGRect viewport; // // Methods // - (void) setupView:(GLView*)view; - (void) loadContent; - (void) addScreen:(GameScreen *)screen; - (void) removeScreen:(GameScreen *)screen; - (void) releaseScreen:(GameScreen *)screen; - (void) updateView:(GLView *)view WithTime:(float)deltaTime; - (void) drawView:(GLView *)view WithTime:(float)deltaTime; - (void) traceScreens; - (void) fadeBackBufferToBlack:(double)alpha; // // Touches events // - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)touchView WithTimer:(NSTimer *)timer; - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)touchView WithTimer:(NSTimer *)timer; - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)touchView WithTimer:(NSTimer *)timer; - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)touchView WithTimer:(NSTimer *)timer; @end
Its a good idea to look through the .h file to see what you can do with the screen manager. Obviously you can do the touch events (remember we connected those from the GLView?) but also, looking at the methods you will be able to add and remove screens from the screen manager, update and draw, fade back buffer to black, and a few other things. Lets see how it all works!
// // The View Controller is a service which mananges one or more GameScreen // instances. It maintains a stack of screens, calls their Update and Draw // methods at the appropriate times, and automatically routes the input to // the topmost active screen. // // Created by XNA Development Team ( http://creators.xna.com/ ) as a // ScreenManager.cs GameComponent. // // Adapted for iPhone Game Development by Craig Giles on 1/1/09. // // // Import commands from Jeff's template // #import "GLViewController.h" #import "GLView.h" #import "OpenGLCommon.h" #import "ConstantsAndMacros.h" // // This indicates weather or not the game will be played in // landscape or portrait mode. While in landscape mode, the // screen will be rotated, but also the input will be off. // Touch coordinates for the screen will have to be converted // before it reaches the input manager class. // const bool LANDSCAPE_MODE = NO; // // The time it takes for a game screen to transition // These can be over written in the game screen init. // If there is no values in the game screen itself, these // will be used as the default values. // const float TRANSITION_ON_TIME = .70f; const float TRANSITION_OFF_TIME = .20f; // // Implementation of the Screen Manager class // @implementation GLViewController // // Getters / Setters // @synthesize screens; @synthesize screensToUpdate; @synthesize input; @synthesize blankTexture; @synthesize isInitialized; @synthesize traceEnabled; @synthesize gameView; @synthesize viewport; // // Setup View handles setting up OpenGL's Projection Matrix and // enables all states needed for rendering the game to screen. // -(void)setupView:(GLView*)view { // Set the view to the gameView gameView = view; // Modify the Projection matrix glMatrixMode(GL_PROJECTION); glLoadIdentity(); // // Orthof projection is used for 2d games. This sets the coordinates to // (0, 0) at the top left corner of the screen, and as you move downward // your y value will increase. As you move to the right, your x value will // increase. // (left, right, bottom, top, near, far) // // If the game is going to be played in landscape mode, enable // it via the bool switch at the top of the GLViewController.m file. if ( LANDSCAPE_MODE ) { viewport = CGRectMake(0, 0, 480, 320); glViewport(0, 0, viewport.size.height, viewport.size.width); glRotatef(-90, 0, 0, 1); glOrthof(0, viewport.size.width, viewport.size.height, 0, -10.0, 10.0); } else // Game is to be played in portrait { viewport = CGRectMake(0, 0, 320, 480); glViewport(0, 0, viewport.size.width, viewport.size.height); glOrthof(0.0, viewport.size.width, viewport.size.height, 0.0, -1.0, 1.0); } // // Setup Model view matrix // Load graphics settings // glMatrixMode(GL_MODELVIEW); glDisable(GL_DEPTH_TEST); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); // needed to draw textures using Texture2D glEnable(GL_TEXTURE_2D); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); // enables alpha for transparent textures // I forget where I got these commands, iDevGames.net I think glAlphaFunc(GL_GREATER, 0.1f); glEnable(GL_ALPHA_TEST); // // Setup clear color (cornflower blue'ish) // Call me crazy, but I got so used to this color developing // for XNA. This is a little nod to the Microsoft Development // Team :) // glLoadIdentity(); glClearColor(.39f, 0.58f, 0.920f, 1.0f); // // Call the view controllers loadContent method // [self loadContent]; } // // Loads all content needed to run the screen manager. This is seperated // from the setupView method in order to seperate what is needed from OpenGL // to setup the screen, and what is needed from the screen manager to set // up the game structure. // - (void)loadContent { // // Allocate memory for your arrays to hold the Screens "stacks." // All game screens will be housed in this array for easy manipulation. // screens = [[NSMutableArray alloc] init]; screensToUpdate = [[NSMutableArray alloc] init]; // // Allocate memory for the input manager and the blankTexture used // to fade the screen in / out. // input = [[InputManager alloc] init]; input.isLandscape = LANDSCAPE_MODE; blankTexture = [[Texture2D alloc] initWithImage:[UIImage imageNamed:@"blankTexture.png"]]; for (GameScreen *screen in screens) [screen loadContent]; // // Once we are initialized, set the bool values to appropriate values. // isInitialized = YES; traceEnabled = NO; // // Adds a title screen to the game stack. This will be taken out // later, and right now is only used for debugging purposes. It // will be replaced with your splash screen or game introduction // screen. // TitleScreen *newScreen = [[TitleScreen alloc] init]; [self addScreen:newScreen]; [newScreen release]; } // // When the view controller exits, we will need to clean up any memory used. // - (void)dealloc { // // setup a delete screens array and add all of the current game screens // to this array. We will then cycle through all game screens, unloading // their content, and releasing them from the view controller. After all // is said and done, we will then remove the deleteScreens array, and // continue on releasing any other memory allocated for the view controller. // NSMutableArray *deleteScreens = [[NSMutableArray alloc] initWithArray:screens]; for (GameScreen *screen in deleteScreens) { [self removeScreen:screen]; [self releaseScreen:screen]; } [deleteScreens release]; [screens release]; [screensToUpdate release]; [input release]; [blankTexture release]; [super dealloc]; } // // If the game is going over memory, this method will be called by the device // warning that we are running low on memory and should release any un needed // items. // - (void)didReceiveMemoryWarning { // <<TODO: Unload any un-needed game content here>> [super didReceiveMemoryWarning]; } // // Add a screen to the view controller // - (void) addScreen:(GameScreen *)screen { // // When adding a screen to the view controller, we will be // setting some default values for the screen, and then call // the screens "loadContent" method. Once everything is loaded, // the view controller will retain the screen and add it to the // screens array. // screen.controller = self; screen.viewport = self.viewport; screen.transitionOnTime = TRANSITION_ON_TIME; screen.transitionOffTime = TRANSITION_OFF_TIME; screen.currentScreenState = TransitionOn; screen.transitionPosition = 1; [screen loadContent]; [screen retain]; [screens addObject:screen]; } // // Unload all game content from the screen. This in turn // sets a flag within the screen itself, that the content has // been unloaded, and in the controllers Update method, all game // screens that have been unloaded will be released from memory. // - (void) removeScreen:(GameScreen *)screen { //unload any content it has stored [screen unloadContent]; } // // Release all game screens from memory, that have had their content // unloaded. This will release all screens themselves, as well as remove // them from the screens arrays. // - (void) releaseScreen:(GameScreen *)screen { // remove the screen from all screen arrays [screens removeObject:screen]; [screensToUpdate removeObject:screen]; // deallocate any memory used for the screen [screen release]; } // // Update every screen in the screens stack, keeping track // of which screens are covered and which are fully active. // if a screen is fully active and "on top" of the stack, it // should receive any input. // - (void) updateView:(GLView *)view WithTime:(float)deltaTime { // Read the touch input [input update:deltaTime]; // make a copy of hte master screen list, to avoid confusion if // the process of updating one screens adds or removes others. [screensToUpdate removeAllObjects]; for(GameScreen *screen in screens) [screensToUpdate addObject:screen]; bool otherScreenHasFocus = NO; bool coveredByOtherScreen = NO; // loop as long as there are screens waiting to be updated while ([screensToUpdate count] > 0) { // pop the topmost screen off the waiting list GameScreen *screen = [screensToUpdate objectAtIndex:([screensToUpdate count] - 1)]; [screensToUpdate removeObjectAtIndex:[screensToUpdate count] - 1]; // update the screen [screen update:deltaTime OtherScreenHasFocus:otherScreenHasFocus CoveredByOtherScreen:coveredByOtherScreen]; if ([screen currentScreenState] == TransitionOn || [screen currentScreenState] == Active) { // if this is the first active screen we came across, // give it a chance to handle input. if (!otherScreenHasFocus) { [screen handleInput:input]; otherScreenHasFocus = YES; } // if this is an active non-popup, inform any subsequent // screens that they are covered by it if (![screen isPopup]) coveredByOtherScreen = YES; } } // do we need to print the debug trace? if (traceEnabled) [self traceScreens]; // // For every screen that had their content unloaded.. release // the memory used for that screen here. We do this up front // to ensure that any released screen doesn't get their update // or draw methods called, when there is nothing to update or draw. // for (GameScreen *screen in screens) { if (screen.hasBeenUnloaded) { [self releaseScreen:screen]; } } } // // Draw the game screens from "Bottom to Top." This is done // in order to ensure that any pop'up screens are drawn on top // of the full screen below it. // - (void) drawView:(GLView *)view WithTime:(float)deltaTime { // Clear the screen to preset color before drawing glClear(GL_COLOR_BUFFER_BIT); // Draw every screen in the screens array for (GameScreen *screen in screens) { //if the screens content has been unloaded, don't draw if (screen.hasBeenUnloaded) continue; [screen draw:deltaTime]; } } // // Helper method designed to draw the screen names currently // in the game stack in order to see if they are being added // and removed correctly. // - (void) traceScreens { // <<TODO: Input code to draw the screen names>> } // // Helper method to draw a translecent black fullscreen sprite, used // for fading screens in and out, and for darkening the background // behind pop up screens. // - (void) fadeBackBufferToBlack:(double)alpha { glColor4f(alpha,alpha,alpha,alpha); [blankTexture drawInRect:self.viewport]; glColor4f(1, 1, 1, 1); } // // When the screen is touched by the user, the GLView will pass along a message // to the view controller that the screen has been touched. The view controller // will take the message, and pass it along to the input manager where the // necessary information will be stored and filtered to the game screen that // will handle the user input. // // In order for this to work, in your GLView, you need to write the following // 4 methods: // - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event // - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event // - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event // - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event // // Those methods will call the methods below. // - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)touchView WithTimer:(NSTimer *)timer { [input touchesBegan:touches withEvent:event InView:touchView WithTimer:timer]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)touchView WithTimer:(NSTimer *)timer { [input touchesMoved:touches withEvent:event InView:touchView WithTimer:timer]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)touchView WithTimer:(NSTimer *)timer { [input touchesEnded:touches withEvent:event InView:touchView WithTimer:timer]; } - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event InView:(UIView *)touchView WithTimer:(NSTimer *)timer { [input touchesCancelled:touches withEvent:event InView:touchView WithTimer:timer]; } @end
As you can see, this is a pretty good sized class. What makes it bigger is I have a nasty habit of commenting everything to hell! I always believe it is best to comment heavily, because if you come back a year later and want to adjust your game, comments make it very helpful for remembering what does what.
The comments in the GLViewController (screen manager) class explains what everything does, but if you have any questions feel free to post them here.
So… now we need a game screen or two!! Remember, the following code should never be used to make a game screen directly. What I mean is, use this as a super class and inherit from it with your screens. For example, your TitleScreen should inherit from GameScreen. Make sense?
here is the GameScreen.h file
// // A screen is a single layer that has update and draw logic, and which // can be combined with other layers to build up a complex screen system // or menu system, or even dialog system. // // Developed by XNA Development Studio ( http://creators.xna.com/ ) // Modified for the iPhone Gameing Framework by Craig Giles on 1/1/09. // #import <Foundation/Foundation.h> #import <OpenGLES/EAGL.h> #import <OpenGLES/ES1/gl.h> #import <OpenGLES/ES1/glext.h> #import "InputManager.h" #import "Texture2D.h" // // Enum to describe the screens transition state // enum ScreenState { TransitionOn = 0, Active, TransitionOff, Hidden }; // // Forward Declarations // @class GLViewController; @interface GameScreen : NSObject { @private GLViewController *controller; CGRect viewport; bool hasBeenUnloaded; bool isPopup; float transitionOnTime; float transitionOffTime; float transitionPosition; float transitionAlpha; enum ScreenState currentScreenState; bool isExiting; bool isActive; bool otherScreenHasFocus; } @property (nonatomic, retain) GLViewController *controller; @property (readwrite) CGRect viewport; @property (readwrite) bool hasBeenUnloaded; @property (readwrite) bool isPopup; @property (readwrite) float transitionOnTime; @property (readwrite) float transitionOffTime; @property (readwrite) float transitionPosition; @property (readwrite) float transitionAlpha; @property (readwrite) enum ScreenState currentScreenState; @property (readwrite) bool isExiting; @property (readwrite) bool isActive; @property (readwrite) bool otherScreenHasFocus; - (void) loadContent; - (void) unloadContent; - (void) handleInput:(InputManager *)input; - (void) update:(float)deltaTime OtherScreenHasFocus:(bool)otherFocus CoveredByOtherScreen:(bool)coveredByOtherScreen; - (bool) updateTransition:(float)deltaTime TransitionTime:(float)transition Direction:(int)direction; - (void) draw:(float)deltaTime; - (void) exitScreen; @end
and the GameScreen.m file
// A screen is a single layer that has update and draw logic, and which
// can be combined with other layers to build up a complex screen system
// or menu system, or even dialog system.
// Developed by XNA Development Studio ( http://creators.xna.com/ )
// Modified for the iPhone Gameing Framework by Craig Giles on 1/1/09.
#import "GameScreen.h"
@implementation GameScreen
// Properties
@synthesize controller;
@synthesize viewport;
@synthesize hasBeenUnloaded;
@synthesize isPopup;
@synthesize transitionOnTime;
@synthesize transitionOffTime;
@synthesize transitionPosition;
@synthesize transitionAlpha;
@synthesize currentScreenState;
@synthesize isExiting;
@synthesize otherScreenHasFocus;
@dynamic isActive;
– (bool) isActive
return !otherScreenHasFocus &&
(currentScreenState == TransitionOn ||
currentScreenState == Active);
// Constructor(s) / destructors
– (id) init
self = [super init];
if (self != nil)
//initializations go here
isExiting = NO;
return self;
– (void) dealloc
//Deallocations go here
[super dealloc];
// Loads all content associated with the current screen
– (void) loadContent
// Unloads all content associated with the current screen
– (void) unloadContent
// Release the screen manager
[controller release];
// inidicate that the screens content has been unloaded
hasBeenUnloaded = YES;
// Allows the screen to perform its update logic.
– (void) handleInput:(InputManager *)input
// Updates the base screen. Since any game screen
// wil be inheriting from this class, the game screen will
// call this update method. This update just helps with the
// transition between two screens, and if a screen is
// transitioning on and off.
– (void) update:(float)deltaTime OtherScreenHasFocus:(bool)otherFocus CoveredByOtherScreen:(bool)coveredByOtherScreen
otherScreenHasFocus = otherFocus;
if (isExiting)
//if the screen is going to die, it should transition off
currentScreenState = TransitionOff;
if (![self updateTransition:deltaTime TransitionTime:transitionOffTime Direction: 1])
//when transition finishes, remove the screen
[controller removeScreen:self];
else if (coveredByOtherScreen)
//if the screen is covered by another, it should transition off
if ([self updateTransition:deltaTime TransitionTime:transitionOffTime Direction: 1])
//scren is still transitioning
currentScreenState = TransitionOff;
//transition has finished
currentScreenState = Hidden;
if ([self updateTransition:deltaTime TransitionTime:transitionOnTime Direction: -1])
//still busy transitioning
currentScreenState = TransitionOn;
//transition finished
currentScreenState = Active;
// Helper method for updating the screen transition position
// (how much the screen has faded in / out)
– (bool) updateTransition:(float)deltaTime TransitionTime:(float)time Direction:(int)direction
// how much should we move by?
float transitionDelta;
if (time <= 0)
transitionDelta = 1;
transitionDelta = deltaTime / time;
//update the transition position
transitionPosition += transitionDelta * direction;
//did we reach the end of the transition?
if (direction < 0 && transitionPosition <= 0 ||
direction > 0 && transitionPosition >= 1)
//clamp transition position to 0, 1, or value;
if (transitionPosition >= 1)
transitionPosition = 1;
else if (transitionPosition <= 0) transitionPosition = 0; return NO; }//end "end of transition" //otherwise, we are still busy transitioning return YES; } // // Each screen will have their own draw method. EVERY SCREEN // should call [super draw:deltaTime] in order to draw // the fade correctly when the screen manager wishes to fade // the screen in or out. // - (void) draw:(float)deltaTime { [self.controller fadeBackBufferToBlack:self.transitionPosition]; } // // Tells the screen to go away. Unlike [controller removeScreen] which // instantly kills the screen, this method respects the transition timings // and will give the scren a chance to gradually transition off. // - (void) exitScreen { if (transitionOffTime == 0) { //if the screen has zero transition time, kill it [controller removeScreen:self]; } else { //otherwise flag that it should transition off and exit isExiting = YES; } } @end [/sourcecode] Well that does it for the screen manager and the game screen classes.. But keep in mind.. this will NOT build until the InputManager is built. Why don't you try to fiddle with that for a while, see what you can come up with? I'll post Part 2 of this tutorial detailing how I did my input manager and two screens (TitleScreen and PausedScreen) in my next update. Two thing before I go: I would really like to find a way to turn this into a template for anyone wishing to use it, but I simply do not know how. If you know how to do so, please send me an email at: firstname.lastname@example.com Secondly, if you have any questions, comments, sly remarks, please post them. I am very good at reading everyones comments, and getting back to you if needed. You can either post a comment or send me an email and I'll get back to you. EDIT: I just wanted to let everyone know that there have been a few changes to this article since first posting. I just modified the code within the GLViewController in several places. The following changes were made: - Added [self releaseScreen:screen]; in the dealloc method inside the for loop. - added const bool LANDSCAPE_MODE = NO; at the top of the view controller, and an if / else statement in the setup view method to help with setting up a landscape view rather than a portrait view. (The first screen manager was written for only portrait view) - added input.isLandscape = LANDSCAPE_MODE; to the loadContent method. Again, there are too many people to thank for helping me to get to where I am with my current knowledge. I hope this was informational to a few of you! Happy coding everyone!
iPhone Gaming Framework: Screen Manager Update
I don't have time to write up a complete tutorial, but I will soon.. but I wanted to show just how the screen manager works. First, the video so you have an idea;
Click here for iPhone Screen Management Demo
Since I am on OSX, I am working on a way to record videos and upload them to youtube like I did with windows. When I do, I'll embed them into the page again. For now, this solution works.
As you can see, the transitions and everything works just like an XNA project would. As said before, I converted Jeff's GLViewController to be my screen manager. To use it, what you would do is something like the following;
TitleScreen *newScreen = [[TitleScreen alloc] init]; [controller addScreen:newScreen]; [newScreen release];
the addScreen method will retain the screen, load any content the screen will need in the game, and then add it to the screens array. Since the controller is handling the screen, and has retained the screen, we then need to release it. It is now in the controllers hands!
The controller knows if a screen is a popup screen (ala dialog box) or a full game screen (ala battle screen / inventory screen / main game screen, etc) and will transition based on what kind of screen it is. Popups get no transition, full screens will get the fade effect seen in the video. Same for transitioning off. To exit a screen, you would do the following;
if (condition == true) { //in the game screens "update" method. Self refers to the game screen [self exitScreen]; }
the game screen will handle any transitions if it needs to.. popup's will just pop off the stack.
One other thing that I found really interesting, was input handling. since the iPhone uses an event like system, the moment you touch the screen the iPhone sends a message saying "HEY! I've been touched!" What I've done was create an InputManager class that takes that input, and stores it in either the previousInputState, currentInputState, or queryInputState. Obviously the previous and current input states are self explanitory, the queryInputState is the state that has happened but has not been committed quite yet (meaning, the screen manager has not updated the input state quite yet) The screen manager would then update the input state, and filter it to the top-most screen.
What I would like to do, is create a project template for this framework for any 2d developer wishing to get started in iPhone Games Development. Obviously this template will be an ongoing project, and as improvements are made the template will be updated. My problem, is google has been unhelpful for trying to create a template file. If anyone knows of a good tutorial to look at, or good reading material, please send it my way! I can be reached at my listed email address ( firstname.lastname@example.com ) If I can't find a way to convert this into a template, the best way to distribute this would be to zip it up and that would be a pain when you want to start a new project.
Later this weekend, I will try to do a full writeup of the screen management system. Until then, happy coding!
Objective-C can be frustrating
With simple things that I am used to, such as operator overloading, absent from Objective-C, i was forced to write all of my necessary framework structures in C. Not that its a bad thing, just took me a while to get everything working.
Anyway, status right now is going well.. I still don't know what I'm doing with OpenGL ES, but at least I have a few of the fundimentals working:
– Screen management and GameScreen systems written in Obj-C
– Basic 'Framework' structures that I'm used to dealing with (IE: Vector2, Rectangle, RandomNumber) written in C
– Basic project organization complete, i can now write my games in either ObjC or C / C++
I guess its time to learn how to do things in OpenGL ES. Figure if I'm going to be making any sort of game, I'll need to learn how to do textured quads and basic manipulation of a camera object.
iPhone Development blogs
After realizing that getting into iPhone development is a little more… eer… a lot more work than XNA development (lack of good tutorials, the fact that the SDK just went non-NDA, and no good gaming frameworks) I went around to search for some good blogs.
Now, one of the things XNA has going for it, is its a fully developed framework for the Xbox360 and Windows platforms. iPhone, while having some great classes for Cocoa Touch (and if you're writing any sort of application, and not a game, its an AMAZING system) iPhone doesn't have a really good "template" for making iPhone games in OpenGL ES. I find myself having to re-create a lot of the classes that already exist in XNA, classes that I've grown to love ;)
One blog that has really helped and is one to keep an eye on, is http://iphonedevelopment.blogspot.com/ .. Posts come frequently, and are very informative.
Another site that has really helped, is GameDev's OpenGL section located at http://www.gamedev.net/reference/list.asp?categoryid=31#217
And who can forget Apples documentation for ObjC. http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/ObjC.pdf
If you're doing any sort of iPhone development and find some really great sources of information, drop me an email!
Objective-C, and me
I have been toying with the idea of developing an iPhone app since the app store went public, and since I've finished my current semester of school I thought I would give it a shot. One of the primary focuses for me was to utilize C++ since my classes are going to focus around it, and programming on the iPhone, i will be able to use C++ syntax which is great.
The parts that are troubling me? Obj-C!! Things are happening (or in my case, not happening) the way I need them to happen and researching every little thing that I could do with my eyes closed in C# or C++ is annoying me, although I do find it fun learning OpenGL.
So with my first project underway, all I am doing is taking the basic screen manager / game screen system from the XNA projects and porting it over to the iPhone. Anyone else done anything in Obj-C?


text:
Zinc Finger Gene Therapy Continues to Show Promise
November/December 2012
For HIV-positive individuals on HAART with low CD4 T-cell counts (immune nonresponders), there are limited therapeutic options. CCR5 is one of the major co-receptors on CD4 cells which HIV uses to enter. Zinc finger nuclease (ZFN) technology modifies the CCR5 gene on CD4 T-cells from the patient's own body in an effort to increase them while creating cells that are resistant to HIV. The "byproduct" of this process is called SB-728-T.
Data presented from a small phase 1 study suggest that this approach to HIV therapy offers the hope of providing a persistent source of CD4 T-cells that are resistant to HIV infection.
The technique, developed by Sangamo Biosciences, uses a process called apheresis to collect T-cells from the patient's blood. The ZFN is then used to interfere with CCR5 gene expression, and the altered SB-728 T-cells multiply and are infused back into the individual.
SB-728-T was safe and well tolerated with minor reversible infusion-related symptoms, and resulted in significant increases in CD4 T-cells averaging 233 cells/mm3 at 14 days, and 93 cells/mm3 at 12 months. The authors concluded that the preliminary data suggest that SB-728-T provides "sustained improvement in the CD4 compartment and has the potential to reconstitute the immune system." Phase 1 and 2 studies are moving forward.
Got a comment on this article? Write to us at firstname.lastname@example.com.
This article was provided by Positively Aware. It is a part of the publication Positively Aware. Visit Positively Aware's website to find out more about the publication.
Add Your Comment:
(Please note: Your name and comment will be public, and may even show up in
Internet search results. Be careful when providing personal information! Before
adding your comment, please read TheBody.com's Comment Policy.)
The content on this page is free of advertiser influence and was produced by our editorial team. See our content and advertising policies.

subset: commoncrawl


text:
Serhii Horodnii wanted two things to build his business idea: a healthy market of consumers, and cash.
Luckily, he found the second thing in a market offering the first. So the Ukrainian entrepreneur is now in Dubai on one of the desert emirate's few start-up accelerator programmes, developing his idea of using unmanned aerial drones for entertainment.
"It's the kind of place that suits my business perfectly," says Mr. Horodnii, 33, who received $24,000 from the Turn 8 accelerator programme, which is funded by Dubai ports company DP World and operated by Innovation 360, a private sector start-up consultancy that also runs its own investment and mentor programme i360 Accelerator.
For 20% equity in his business, Mr. Horodnii has accessed a small amount of capital, mentors and a new market of high-spending, game-savvy consumers. It is in Dubai where he now aims to launch his idea for a center where gamers control drones that relay their movement and action real time to headsets on the ground.
And as Dubai's entrepreneurship ecosystem slowly develops, Mr. Horodnii is not the only start-up to choose the emirate as the launch pad for his business. Coworking spaces are popping up across the city as a growing number of start-up companies and tech entrepreneurs from the region and other parts of the world, seek places to work, meet like-minded people and get connected to the few wealthy angel investors and seed funds in the market.
A handful of private-sector led coworking spaces, which are mix between cafe, office and sometimes exclusive club, have been setting up in Dubai in empty industrial warehouses, galleries and residential towers to cater for entrepreneurs. The Cribb, a coworking space opened in September and is home to table soccer, video games, soft furnishings, and oh yeah, the start-ups in the Turn 8 and i360 accelerator programmes.
Meanwhile, Impact Hub, part of a global network of coworking spaces for entrepreneurs, is set to open in December in a building in the shadow of the Burj Khalifa, the world's tallest tower. It aims to eventually launch an accelerator programme and is offering entrepreneurs a place to work for a fee, but only if their start-ups are involved in projects with social impact.
In an economy largely driven by top-down government policy, many of the new coworking spaces are being funded by wealthy individuals in search of an exciting technology idea, while local companies are also helping fund the accelerator initiatives and take stakes in start-ups through mentorship programmes that aim to accelerate an entrepreneurs' growth.
Turn 8 and i360 are also not the only accelerators out there offering start-ups a leg up. Silicon Oasis Founders and In5 are government-led initiatives that support start-ups with discounts on licensing and registration fees and offices, while SeedStartup is a private-sector led accelerator with a number of graduate classes already.
"[The market] has been evolving very quickly," says Dany El Eid, the cofounder of an augmented reality marketing company that now works at The Cribb. "Three years ago, this space would have been unimaginable."


text:
Paraguay is a landlocked country in South America rich in natural resources: the world's largest drinking water reservoir (Guarani Aquifer) is beneath its soil, the biggest hydroelectric producer--The Itaipú Dam--is on its border with Brazil. It's also the world's fifth largest exporter of soya beans, as well as a renowned producer of beef. Despite this, many of its people live in poverty and it's very common to see beggars asking for money on Asuncion's corners.
Colonized for 3 centuries by the Spanish, since the 1500s, Paraguay has managed to keep a lot of its indigenous character and identity. Nowadays, the mestizos (Spanish + Amerindian) account for more than 90% of the country's 6 million inhabitants and Guarani is, side by side with Spanish, the country's official language.


text:
Skyway Nimbus 2 28" Hardside Spinner Upright - Silver
The Nimbus 2.0 28" 4 Wheel Carry On from Skyway Luggage is a durable hardside expandable suitcase with easy maneuverability. High impact resistant polymer shell provides superior protection for your clothes or travel items. Fully zippered mesh compartment allows you to seperate laundry or additional items.
- Dimensions: 28" x 20" x 12"
- 9.9 lbs.
- High impact resistant polymer shell for superior protection for your belongings
- Two-compartment interior for organized packing
- Fully zippered mesh compartment for separating laundry or additional storage
- Mesh pocket on interior frame for garments or travel accessories
- Top and side padded carry handles for lifting ease
- Smooth-rolling 360-degree dual spinner wheels offer better stability and minimize effort and strain on arms, shoulders and back
- Oversized self-repairing zippers and ergonomic zipper pullers


text:
Khaled Mattawa was born in Benghazi, Libya, in 1964 and immigrated to the United States in his teens.
Mattawa received a BA in political science and economics from the University of Tennessee at Chattanooga before earning an MA in English and an MFA in creative writing from Indiana University, as well as a PhD from Duke University in 2009.
His collections of poetry include Tocqueville (New Issues, 2010), Amorisco (Ausable, 2008), Zodiac of Echoes (Ausable, 2003), and Ismailia Eclipse (Sheep Meadow Press, 1995). He is also the author of Mahmoud Darwish: The Poet's Art and His Nation (Syracuse University Press, 2014).
Mattawa has also translated many volumes of contemporary Arabic poetry and coedited two anthologies of Arab American literature. His many books of translation include Adonis: Selected Poems (Yale University Press, 2010), Invitation to a Secret Feast (Tupelo Press, 2008) by Joumana Haddad, A Red Cherry on A White-Tile Floor (Copper Canyon Press, 2007) by Maram Al-Massri, Miracle Maker, Selected Poems of Fadhil Al-Azzawi (BOA Editions, 2004) and Without An Alphabet, Without A Face: Selected Poems of Saadi Youssef (Graywolf Press, 2002), among others.
The poet Yusef Komunyakaa has described Mattawa's work as "novelistic in its reach and depth" and the poet Marilyn Hacker writes that it "is politically astute, formally daring, grips the reader with an intelligence that spotlights, too, its sensual and emotional (and historical) accuracy."
Mattawa is the 2010 recipient of the Academy of American Poets Fellowship. He has received a Guggenheim fellowship, a translation grant from the National Endowment for the Arts, the Alfred Hodder Fellowship from Princeton University, the PEN American Center Poetry Translation Prize, three Pushcart Prizes, and a MacArthur Fellowship.
In 2014, Mattawa was elected a Chancellor of the Academy of American Poets. Currently, Mattawa teaches in the graduate creative writing program at the University of Michigan, Ann Arbor.
Selected Bibliography
Tocqueville (New Issues, 2010)
Amorisco (Ausable, 2008)
Zodiac of Echoes (Ausable, 2003)
Ismailia Eclipse (Sheep Meadow Press, 1995)
Adonis: Selected Poems (Yale University Press, 2010)
Invitation to a Secret Feast by Joumana Haddad (Tupelo Press, 2008)
A Red Cherry on A White-Tile Floor by Maram Al-Massri (Copper Canyon Press, 2007)
Miracle Maker, Selected Poems of Fadhil Al-Azzawi (BOA Editions, 2004)
Without An Alphabet, Without A Face: Selected Poems of Saadi Youssef (Graywolf Press, 2002)


text:
A moving story about the fight to save the elephants of Sri Lanka.
Video: The fight to save the elephants of Sri Lanka
Subscribe to: Post Comments (Atom)
Tags: Wildlife
I am neither Sinhalese, nor Tamil. I was born in Colombo, Sri Lanka, and raised with moderate views.
At most times I'm a liberal, but I transform into a conservative on topics such as terrorism and extremism.
When I write, I try to keep things simple. You won't hear me talk in rhymes, and you won't need a dictionary to understand what I'm saying.
Welcome to the daily rant of a very stoned Sri Lankan.
You may reproduce -unedited- any part of this blog as long as you link back to: Bailaman


text:
Wildlife Rehabilitators
of North Carolina
Symposium 2019
January 26 -27
Wildlife Rehabilitators of North Carolina (WRNC) is a nonprofit,
membership organization committed to sharing information and knowledge
about wildlife rehabilitation for the benefit of native wildlife.
The main purpose of WRNC is to provide educational opportunities
for rehabilitators and educators at all skill levels. As a new rehabilitator
or an experienced rehabilitator we want to invite you to take advantage
of these opportunities. In this day and age, it isn't necessary
for somebody new to the field to reinvent the wheel. Much information
is published and
much can be learned by talking to more experienced rehabilitators,
by attending classes, or by volunteering with another rehabilitator.
Activities of WRNC include compiling a statewide listing of active
rehabilitators, sending out a quarterly newsletter, producing resource
lists, assisting rehabilitators with public education efforts and
assisting with training classes and procedure materials.


text:
Sanative needed a new logo design and created a contest on 99designs.
A winner was selected from 76 designs submitted by 19 freelance designers.
Need a logo for an entertainment site. The logo needs to be easy to read, fun and clean.
The ideal design will be clean and exciting, giving the viewer a feeling of fun. Ideally the logo would be vector art as we will be using this in print materials, in Flash movies and other applications.
- Use your imagination!
- No tagline
- easy to read on light colored backgrounds. Will generally be used on whites and light blues.
- Must make use of the word SacFun as the primary element of the logo
We are open to pretty much anything as long as it professional and meets the "What I want" requirements.
Find out how a design contest works or learn more about our logo design services.


text:
California Department of Transportation
Date: January 9, 2013
District: 4 - Oakland
Contact: Traci Ruth
Phone: 510.286.6120
OAKLAND - Continuing the push to rebuild California's infrastructure, the California Transportation Commission (CTC) today allocated $64 million to 43 projects that will reduce traffic congestion and repair highways, local streets, and bridges.
"We are putting transportation dollars to work supporting jobs and making improvements that will benefit Californians now and for decades to come," said Caltrans Director Malcolm Dougherty.
The allocations include $42 million from Proposition 1B, a transportation bond approved by voters in 2006. In total, approximately $14.7 billion in Proposition 1B funds have been distributed statewide.
The remaining allocations ($22 million) came from assorted transportation accounts funded by state and federal dollars.
Among the projects that received funding today were:
- Foster City – $508,000 investment in several streets that will be resurfaced
- Marin County - $45,000 investment to construct the Miller Creek Class II Bike Lanes and Pedestrian Improvements
Please see the attached file for information about all projects that received allocations today.
# # # #


text:
Other regional blogs
Follow the Money - Local Politicians Campaign Contributors
Friday, October 9, 2015
Fair Use
FAIR USE NOTICE: This site contains copyrighted material the use of which has not always been specifically authorized by the copyright owner. Material from diverse and sometimes temporary sources is being made available in a permanent unified manner, as part of an effort to advance understanding of the social justice issues associated with eminent domain and the privatization of public infrastructure. It is believed that this is a 'fair use' of the information as allowed under section 107 of the US Copyright Law. In accordance with Title 17 USC Section 107, the site is maintained without profit for those who access it for research and educational purposes. For more information, see: http://www.law.cornell.edu/ To use material reproduced on this site for purposes that go beyond 'fair use', permission is required from the copyright owner indicated with a name and an Internet link at the end of each item. [NOTE: The text of this notice was lifted from CorridorNews.blogspot.com]
See ARCHIVE on side bar
A government big enough to give you everything you want, is strong enough to take everything you have. - Thomas Jefferson


text: Emergency Services The Emergency Department at Bridgeport Hospital provides the highest level of emergency medical care available in the area. A state-designated regional Trauma Center and the site of Connecticut's only Burn Center, the hospital receives more than 80,000 emergency visits each year. Bridgeport Hospital also has its own helipad for the rapid transport of traumatically injured patients. Bridgeport Hospital's special Emergency Department services include: Connecticut's only Geriatric Emergency Medicine Service (GEMS) A dedicated Children's Emergency Center Patients receive care from an experienced team of emergency physicians, nurses, technicians and other healthcare professionals. Employing the latest techniques and technology, Bridgeport Hospital works closely with the area's ambulance services to ensure the best possible care, beginning even before patients arrive at the hospital.


text:
January, with its dreary colours and subjects, doesn't exactly tempt you outdoors to take pictures. The days are short, the trees are bare, and life, for the most part, takes place indoors. It is, therefore, the perfect time of year to do some intensive work on some of the basic aspects of photography – composition, for example.
Do you want to take more photographs but don't quite know what of? Then why not start a personal 52-picture project in 2014, taking one photo each week.
Did you also start the new year with a handful of good intentions? And did you stick to them? Are you taking them seriously, or have you postponed "more exercise, more salad and less alcohol" to 2015?
Over a period of 5 days Nicole Loos was on the go in Manhattan with the Tamron SP 24-70mm f2.8 Di VC USD. In the interview she reports on getting to the best photos spots in the metropolis.
We seem to live in a camera world with untold possibilities. Whilst photographers had mainly to be satisfied with ISO 400 sensitivities when films were analogue, extreme settings of ISO 12,800 or 25,600 can be chosen today on modern system cameras.


text:
Women's hooded jacket with Shield on the breast
Scuderia Ferrari Store Exclusive
Dynamic women's hooded jacket decorated with the Shield on the heart.
This Scuderia Ferrari jacket, made of waterproof material, is characterized by its three layers fabric combined with a perforated fabric and shaped inserts in contrasting colors, placed along the sides and made of 3000 mm waterproof nylon. The edges of the hood and sleeves are emphasized by stripes resembling the starting lines of the F1 tracks, outlined here in the iconic Scuderia Ferrari red. The loose-fit of this rain jacket guarantees comfort at all times. This hooded jacket also has two practical side pockets with reversible zipper closure and the irreplaceable Ferrari Shield on the breast.
- Hood
- Pockets with zipper
- Ferrari Shield
- Composition: 100% Polyamide
We offer both Standard and Express shipping: choose the service that best meets your needs at checkout.
We provide an easy return service: just ship your items back to us with a shipping service of your choice within 30 days of delivery.


text:
Function Enquiries
TRAK Live Lounge Bar is available for private functions and events. Menus and drink packages are available upon request.
Make an enquiry
Join our mailing list
Please enter your details to join our mailing list for invitations to upcoming gigs and birthday specials.
Register now
Book Dinner
Buy Tickets


text:
Location: meet in the Main foyer.
Dates: November 13-17, 20-24
Times: 10:15am and 11:15am
Young Explorers is our fun and educational program for children aged 3 to 5 years. In November, we look into homes and habitats.
Please note: This program has been specially designed for children aged 3 to 5 years – if you are bringing an accompanying sibling less than 3 years of age, please care for your younger child to allow the older sibling to fully enjoy the program.
You do not need to print your ticket. Our educators will check your name off at the beginning of the session.
Young Explorers is made for small family groups rather than childcare groups. If you are planning on coming to the Museum with a childcare group, please call 8207 7575 or email firstname.lastname@example.com to discuss your visit.


text:
IRMA T-Shirt. IRMA IN PRADA 19
Incl. VAT excl. shipping costs
IRMA is the brainchild and alter ego of illustrator, art director and publisher Jasmin Khezri. IRMA illustrations regularly appear in international magazines like Vogue, Tatler, Elle, Marie Claire, Cosmopolitan, Glamour or ICON. High-quality cooperation with partners such as Celine, MCM or Kiehl's complete IRMAS WORLD. A number of Her work has been featured in exhibitions in New York, Paris and Tokyo.
Motive: IRMA IN PRADA 19
100% cotton
one size (M)
Every frame is custom built by Officina Fotografica using the highest-quality materials:
in shadow joints frame - matte white / matte black
sandwiched with permanently elastic silicone between 3mm matte acrylic glass and 3mm aluminium Dibond, back-mounted hangers included (15mm wall distance)
Shipping Terms:
Within the European Union: Shipping is free
Outside the European Union please ask for a quote at email@example.com
Please note : International shipping charges (all orders outside the EU) do not include the applicable import duties or taxes that are due upon entry into the destination country. All duties and taxes are the responsibility of the customer, and must be paid at the time of delivery.
Payment of your order is made exclusively through advance payment, that is: You will receive an E-mail with an invoice iwhich includes the purchase price incl. VAT, possible addition shipping and handling costs (free of charge within the EU, for all other countries according to standard Deutsche Post rates, see terms and conditions) as well as our bank account information. We will send your order to the address of your choice as soon as the total amount has been credited to our bank account.


text: Impressions patio furniture collection is the perfect choice for contemporary café and hospitality seating. The collection consists of durable, stacking cast aluminum dining chairs, side chairs, and bar stools available in any Tropitone® finish. Patterned aluminum dining tables, coffee tables, and accessory tables in coordinating and complementary designs pair perfectly with the Impressions Collection to complete the outdoor setting.


text:
Dear visitor,
It's a pleasure to have you in our forum. Your ideas, suggestions, questions and contributions will be highly appreciated. Would you like to join us?
Register and start participating in English4Fun!
Click Here To Log In
Log In
Log in
Latest topics
Tweets by @English_4Fun
Loading crossword puzzle. One moment please.
Who is online?In total there is 1 user online :: 0 Registered, 0 Hidden and 1 Guest
Most users ever online was 14 on Thu Aug 16, 2012 8:58 am
Current date/time is Fri Apr 19, 2019 7:30 pm
No topics or posts met your search criteria


text:
Tejas Travels provides vehicle rental services for people across in Bengaluru, Karnataka. We are having multiple makes and models of Cars/ SUV's/ TT's/ Mini Bus and Bus for the intercity travel purposes and also provide outstation pickup and drop services for individuals, groups, schools, colleges and employees or workers of corporates companies. The company was established in 2010 by Manjunath A.P, who started his carrier at Safe Express in the year 2001. The company has its own headquarter in Hosakote, Bengaluru (Karnataka) and driving multiple core branches in south urban area of Bengaluru. Tejas Cab Rental Service Company has expanded its vehicle hire for the cheapest price and delighting customers more than a decade at Koramangala and surrounding places. Book your right fleet from Tejas 13 Seater Tempo Traveler rental services to acquire market best and affordable price rates. Tejas provide you a low rates per km TT services and we are having multiple category vehicles which are includes, luxury and executive types of fleets for your comfort.
Rent a 13 Seater Tempo Traveler
|Non A/C
|(8 Hrs/80 Km)
|Rs. 3,500
|Rs. 3,000
|Extra Hour
|Rs. 250
|Rs. 200
|Extra Km
|Rs. 16
|Rs. 14
|Outstation Per Km
|Rs. 16
|Rs. 14
|Driver Bata
|Rs. 350
|Rs. 350


text:
Amy Butler's artful aesthetic brings beauty to diaper bags. Her delightfully designed Wildflower diaper bag in Fountains Tangerine doesn't compromise smart style. Sturdy one piece leather handles gracefully contour the generous opening.
Would you like us to help you find a similar item? Talk with our Design Consultants toll-free at1-800-927-5164.
*Shipping transit time varies based on destination. Free shipping offers are limited to the 48 contiguous states of the USA.
International Customers (including Alaska and Hawaii) please contact a Customer Service Representative if you have any questions about placing an order with PoshTots.
Promotion codes cannot be used for sale item purchases.
*Free shipping offers are limited to the 48 contiguous states of the USA.


text: Cape Town - Springbok prop Coenie Oosthuizen has been cleared to play after an examination by a neurosurgeon in Durban on Tuesday.Oosthuizen injured his neck during his Test debut for South Africa against England in Durban in June. He spent almost three months doing rehabilitation and returned to action in a Currie Cup match last weekend.Following the match, Oosthuizen experienced some muscle stiffness and it was decided to send him for a further consultation with a neurosurgeon in Durban, who was in agreement with the previous assessments of his injury. "We wanted to ensure that we don't put Coenie at undue risk by playing him," said Springbok team doctor Craig Roberts."The neurosurgeon is happy with his progress and the scans and has declared him fit to play."Springbok coach Heyneke Meyer was happy with the news."Our players are our greatest assets and I'm happy to have Coenie available again this weekend," said Meyer."We will always consider the players' welfare first which is why we decided to get several opinions on Coenie's neck." The team to face New Zealand in Soweto on Saturday will be named on Wednesday afternoon.


text:
Join us on June 20, 2017, 2:30pm - 4:30pm at Supermercado Oriente, 523 W.Lake St., Maywood, IL to:
Supermercado Oriente is participating in the Healthy Corner Store project, working to bring healthy, affordable, fresh foods to the local community. This event has been organized by the Consortium to Lower Obesity in Chicago Children (CLOCC) in collaboration with Cook County Department of Public Health and University of Illinois Extension.
If you have questions, contact Megan Hinchy at 312-227-7066 or email@example.com. To learn more about the Healthy HotSpot Initiative, click here.
This event is made possible in part with funding from the Centers for Disease Control and Prevention.
More than 23 million Americans do not have access to a full-service grocery store within a mile of their home and often depend on neighborhood stores for their daily food needs. Healthy corner stores can help make fresh fruits and vegetables and other foods such as whole grains and low-fat dairy products available in more communities.
Neighborhood stores are making healthy living easier in your community by offering a variety of healthy foods and beverages. Click below to view stores that have recently become Healthy Hotspots. You may also check out these stores on the Healthy HotSpot map.
Healthy HotSpot works together with the following community organizations to expand the ability of local corner stores to sell healthy foods: City of Blue Island, The Ministers Conference of South Cook County, Respond Now and TCA Health.
Partners supporting to build healthy corner stores are the Consortium to Lower Obesity in Chicago Children, The Center for Faith & Community Health Transformation, and the South Suburban Mayors and Managers Association.
The resources below can help you if you're thinking about supporting or becoming a Healthy Corner Store.
Healthy Corner Store Toolkit: In this toolkit, lessons learned from the Healthy Corner Store project of the Healthy HotSpot initiative in suburban Cook County are shared. The toolkit is designed for community organizations interested in identifying, recruiting, and working with local retailers to create a healthy corner store environment. While this toolkit describes how to become a Healthy HotSpot in suburban Cook County, it also can serves as a framework for healthy corner store projects everywhere and be modified to meet each community's unique identity and needs. Access the full appendix here.
To learn more about the Healthy Corner Store project or to become recognized as a healthy corner store location, email firstname.lastname@example.com for more information.
Registration is not currently open, please check back later for updates.
Copyright © Cook County Department of Public Health. All Rights Reserved. Privacy Policy
Website Designed & Developed by BCT Consulting, Inc., a Fresno Web Design firm.


text:
|Session Name:
|Realm of the Counter-Intuitive God [SOGS Postmortem]
|David Edery
|Company Name(s):
|Spry Fox
|Track / Format:
|Social and Online Games Summit
Realm of the Mad God is a web-based f2p MMO with a penchant for breaking rules. It's a MMO bullet-hell-shooter... in Flash. It is based on open source art. It features permadeath (the ultimate in retention challenges)! And it just so happens to be surprisingly popular and very profitable. This lecture will review some of the unusual design and business choices we made and explore which worked, which didn't, and why. Financial and other data will be shared (and not just the stuff that makes us look good).


text:
Shih Tzu Hand ainted Goblets
Cheers! Relax and enjoy a toast with these elegant hand painted 10oz. goblets. Each goblet is individually hand painted and finished with playful paw prints on the base on American made stemware. Sold in pairs and packed in a white gift box.
*Because of variables in dish washers and cleaning additives, we recommend hand washing.
Is your breed is missing? Please email us, if we can add your breed we will.


text:
The Faber-Castell Watercolor Connector Paints do contain starch and gluten. If there is an allergy to starch or gluten, please do not use the Children's Watercolor Connector Paints.
Allergies - Contains Starch & Gluten
Did you find it helpful? Yes No
Can you please tell us how we can improve this article?


text:
Here is the information that is currently on the NARA website:
National Archives Virtual Genealogy FairWHAT: National Archives Virtual Genealogy Fair
- For the first time ever, the National Archives will host a virtual Genealogy Fair via webcast using the Internet.
- This two-day program will showcase tips and techniques for using Federal records at the National Archives for genealogy research. Lectures are designed for experienced genealogy professionals and novices alike.
- Lecture topics include Native American and African American history, immigration, Civil War pensions, U.S. Colored Troops, and Navy Deck logs.
- "Help! I'm Stuck" Call-In Consultation: National Archives staff will be available to answer research questions during the Fair.
WHO: Speakers include genealogy experts from the National Archives and U.S. Citizen and Immigration Services.
HOW: The National Archives will make this event available via webcast. The webcast will include options for the hearing-impaired. Recorded sessions will be available online after the event.
Background: The National Archives holds the permanently valuable records of the Federal government. These include records of interest to genealogists, such as pension files, ship passenger lists, census and Freedmen's Bureau materials. For information on National Archives holdings see www.archives.gov.
For more information about the fair, e-mail firstname.lastname@example.com. Join the Genealogy Fair conversation on Twitter using #genfair2013.


text:
Burnaby, Canada – Christmas has come early for Instagram lovers. YouHue, the new photo sharing and editing app that works with Instagram, is now available for download from iTunes. YouHue enhances the Instagram app, giving diehard iphoneographers access to more filters and photo editing tools.
YouHue lets users:
* Adjust elements like lighting, brightness, contrast, saturation, and sharpness
* Eliminate red eye and blemishes
* Enhance photos with new filters including Singe, Laguna, Indiglow, and Soft Focus
* Add text, drawing, and stickers to photos
* Upload photos to their Instagram feed, Facebook or Twitter with the simple click of a button
* YouHue is a free app. It's the second release from Vancouver-based developers Done Right Apps
"We learned a lot from the Release of our first app PictiseMe," says Done Right co-founder Sudhir Datta. We're diehard Instagram users, and we know lots of users hoped for new filters and editing options for their pictures. We tried to focus on that, and created an app that's intuitive and fun to use."
Response to the new app has been strong so far, and team members are hopeful that YouHue will become a staple for iPhoneographers.
Language Support:
YouHue directly supports English, Chinese, Danish, Dutch, French, German, Italian, Japanese, Korean, Polish, Portuguese, Russian, Spanish and Swedish languages.
Device Requirements:
* iPhone, iPod touch, and iPad
* Requires iOS 5.1 or later
Pricing and Availability:
YouHue: Effects for Instagram 1.0 is free and available worldwide exclusively through the App Store in the Photo & Video category. For More information or to schedule an interview, please contact Nita or Sudhir at 778-989-6738.
Done Right Apps
YouHue: Effects for Instagram 1.0
Download from iTunes
Media Assets
Founded in 2011, Done Right Apps is an entertainment media company based in Vancouver, BC. PictsieMe is the first app released by Done Right. Copyright (C) 2012 Done Right Apps. All Rights Reserved. Apple, the Apple logo, iPhone, iPod and iPad are registered trademarks of Apple Inc. in the U.S. and/or other countries.


text:
There are 32 players representing 31 teams — that's right, one franchise has no representative — in the second edition of Madden NFL's fan-voted playoff for the cover of the video game.
It's possible there may be two teams with no candidate in the contest before it's all over, too.
Befitting a promotion that opened as NFL free agency got underway earlier this month, there is a lot of intrigue in the pairings EA Sports announced moments ago. Madden's makers returned the choice of the cover to the fans for a second year, this time opening the balloting with a "play-in" round pitting two players from the same franchise against each other. After two weeks of voting on that, the main 32-player field has been chosen and seeded.
Yet since the play-in round began, some of those candidates have signed contracts with other teams. Wide receiver Brandon Lloyd, who prevailed as the St Louis representative (pictured above in his old threads), will play in New England next year. Therefore, he now represents the Patriots in this tournament.
That is in addition to his new teammate Rob Gronkowski, whom Lloyd will face in the first round of this tournament when voting opens in an hour on ESPN's SportsNation page. And Lloyd may not be the only one who changes shirts in this process. Tim Tebow, one of the favourites when the tournament was announced in early February, will almost certainly not be in uniform on opening day for the Denver Broncos, the team he currently represents.
That's because Denver signed Peyton Manning on Tuesday, an acquisition whose domino effect touches the NFL draft, numerous other free agent quarterbacks' futures, and, now, a video game.
EA Sports' Anthony Stevenson, Madden's top marketing officer, said that whomever wins out, the game will portray that player on his team at the time the game releases in August. Fans, Stevenson said, were aware that some of the candidates may leave via free agency, and if they chose them anyway, EA Sports would respect the decision and portray the man accurately. Only one time has Madden's cover featured a player in the uniform of a team he wasn't on at the time the game released: Brett Favre, who infamously unretired from the Green Bay Packers in 2008 and was traded to the New York Jets.
Seedings, Stevenson told Kotaku, reflect a player's overall appeal, the season he just had, and also the size of his team's media market and its overall fan base. In the opening round, players were matched both for the storylines the pairing would create as well as the natural rivalries, either between positions or teams, that they identified.
On the left side of the bracket, these are the matchups:
(1) Cam Newton (Carolina) vs. (16) LeGarrette Blount (Tampa Bay) (8) Antonio Gates (San Diego) vs. (9) Dwight Freeney (Indianapolis)
(4) Larry Fitzgerald (Arizona) vs. (13) Troy Polamalu (Pittsburgh) (5) LeSean McCoy (Philadelphia) vs. (12) Reggie Bush (Miami)
(2) Victor Cruz (Giants) vs. 15 Brian Orakpo (Washington) (7) Darrelle Revis (Jets) vs. (10) Stevie Johnson (Buffalo)
(3) Maurice Jones-Drew (Jacksonville) vs. (14) Sebastian Janikowski (Raida organisation) (6) Matt Forte (Chicago) vs. (11) Patrick Willis (San Francisco)
The winner of that half of the bracket will face the winner of this half:
(1) Aaron Rodgers (Green Bay) vs. (16) Joe Haden (Cleveland) (8) Marshawn Lynch (Seattle) vs. (9) Chris Johnson (Tennessee)
(4) Drew Brees (New Orleans) vs. (13) Matt Ryan (Atlanta) (5) Ray Rice (Baltimore) vs. (12) A.J. Green (Cincinnati)
(2) Rob Gronkowski (New England) vs. (15) Brandon Lloyd (New England) (7) Jared Allen (Minnesota) vs. (10) DeMarcus Ware (Dallas)
(3) Arian Foster (Houston) vs. (14) Tim Tebow (Denver) (6) Calvin Johnson (Detroit) vs. (11) Dwayne Bowe (Kansas City)
Voting begins in one hour on ESPN's "SportsNation" web page. This evening, Sportaku will return with an inside look at how the seedings were chosen, who EA Sports' Stevenson thinks can go all the way, and the risks posed by putting this honour up to the wisdom of the crowd.


text:
If you have a good competitive moveset for Bisharp, post an answer below and upvote the best ones. Movesets for its pre-evolutions, if any, can also be shared on this thread.
Be sure to include full set details in your post, e.g. items, abilties, natures and EVs. Some detail, including the intended game mode for your set, is also appreciated. Access the full list of guidelines here.
Bisharp Pokédex and learnset for reference.
Lets see...
Psycho cut-Covers fighting weakness.
Stealth Rock/Rock polish/thunder wave-one of the few gen 5 pokemon to learn it. Rock polish boosts speed. Thunder wave can cut speed, giving him a chance to sweep.
Iron Head/Night slash-Good power, chance to flinch, STAB. Or chance a critical hit with Night slash.
Stone Edge-Deals with Fire weakness.
This is the most gimmicky move-set I could think of, but it is kind of fun:
Bisharp (M) @ Iron Ball
Trait: Inner Focus
EVs: 120 HP / 252 Atk / 136 SDef
Brave Nature (+Atk, -Spd)
- Metal Burst
- Fling
- Revenge
- Taunt
Alright, people are going to think I am crazy, but here we go. Metal Burst is like a combined Mirror Coat and Counter, but only deals 1.5x damage received, rather than double. Fling, paired with Iron Ball and STAB will do a one-off 195 power (130 x 1.5= 195), pretty nice damage if I do say so myself, especially from this thing's attack stat. Revenge does more damage if the user has just been hit, seeings how he is Brave with Iron Ball, this guy is slower than just about anything, so he'll probably get hit. Taunt is to force attacking moves, this will power up Revenge, and force them to activate Metal Burst.
EV's and nature are pretty simple, Brave Nature boosts attack, which is nice, and lowers speed, which this set doesn't care about. EVs maximize Attack, increase HP to 301, and give it a little bit of Special bulk so it won't get wiped out by a single Surf or something... I chose the ability Inner Focus because this guy is so slow, pretty well anything with a flinch move could mess the set up, but we're mainly concerned with Jirachi and Togekiss and their Serene Grace.
[1]: http://3.bp.blogspot.com/-uGWv1xSbZo8/TbnHFwb07WI/AAAAAAAAABY/g1-vgCVrAok/s1600/625Bisharp.png
I dunno. OU sounds like it's pushing it a little. It needs a turn of setup in Swords Dance, and needs another in Thunder Wave. it has a weakness to Fire, Ground, and a x4 weakness to Fighting, which all seem to be shaping to be common in this generation. Also, Base 60 Special Defense and Base 65 HP is nothing to be proud of.
I'd say high-end UU, at best. He'd be clobbered by all of the faster Pokemon / Earthquake-users in OU, and a lack of effecient attack types makes it even less useful there. It may be able to be a lead with Stealth Rock and Thunder Wave, but personally, I don't think it will be an OU force.
Anyway, long rant aside, here's a good moveset to match what I'm saying:
Stealth Rock
Thunder Wave
Night Slash / Iron Head
AM I SEEIN' A COPY OF SCIZOR?! IT SEEMS LIKE THIS THING IS JUST A DIFFERENT DUAL TYPE SCIZOR! based on its stats............
Ability: Competetive Spirit
Nature: Jolly: mine as well get some speed.
EVs: 252 Speed, 252 Attack, 4 SD
Scary Face/Swords Dance/Rock Polish: To Lower Stats or raise your own
Iron Head: STAB
Psycho Cut: For Fighting
Night Slash: STAB
Bisharp (M) @ Air Balloon
Trait: Defiant
EVs: 252 Atk / 36 Def / 220 Spd
Adamant Nature (+Atk, -SAtk)
- Sucker Punch
- Rock Polish
- Low Sweep
- Iron Head
Sucker Punch is for right away, in case yo are unable to set up Rock Polish. Rock Polish takes care of the biggest problem with Bisharp: its low speed. Low Sweep also helps with that, but more important it offers type coverage. I mean, let's face it, Dark and Steel doesn't offer much type coverage. Iron Head gives STAB.
Bisharp is cool :Jolly: Life orb: 252 speed and attack 4 hp
Rock polish(Let the sweeping begin!)
Iron head(STAB Flinch flinch FLINCH!)
Aerial ace/Pscycho cut(Kill the fighting types)
Stone edge/Night slash/stealth rock/ brcik break(Your choice from coverage or entry hazard)
Well, I, as a fellow bisharp fan, have found a decent moveset for it... emphasis on decent, its very beatable, the main things you want to look out for being stealth rock, spikes, and blizzard (toxic spikes are ineffective on steel, sandstorm misses steel). Anyway, on to the actual set.
Bisharp @focus sash (very much required) and, as stated a million times, 252 speed, 252 attack, 4 hp.
Swords dance
Sucker punch
Aerial ace/psycho cut/night slash (I prefer psycho cut over aerial ace, crit rate is better than accuracy to me, as for n.s. vs p.c., id prefer that night slash STAB)
Iron head (flinch, flinch everywhere+STAB=realistic troll)
Bisharp being slow, it is important to have sucker punch. Because of focus sash (as long as there aren't effective entry hazards/blizzard/smart opponent with leech seed) you're gonna get an extra turn to set up a crucial swords dance. If you can force the switch out by setting bisharp against something you both know won't work on bisharp, you can set up 2 swords dance, usually enough to beat most pokemon, even n.v.e pokemon, and if you can set up 3, you might get ragequits. This set relys on sucker pucnh, but if you suspect they won't use a damaging move, USE THE FREAKING BACKUP MOVES! This set has actually given me a couple bisharp sweeps, and I usually try to get the entry hazard setups out of the way before I send it out, as this set relies on sending bisharp out with full hp.
i think a good moveset is:
Night slash
Psycho cut
Stone edge
Ghost claw
Item:Scope lense
Nature: Jolly
good set for 1hko with high crit ratio
Extreme high crit rate Sweeper. Non-PO Bisharp. This one I actually own. Wow, this is just a Steel-Type Absol....
@Razor Claw/Scope Lens (This is why it's not PO.)
Adamant (Impish is also good, but this is what hatched.)
Psycho Cut
Night Slash
Stone Edge
Swords Dance
Ability SHOULD be Pressure, but mine has Defiant. Suggested EV's: 156 Atk 252 Def 100 Spd
Pressure lowers those extremely powerful/annoying/overused moves like Hydro Pump to 3 uses rather than 5. Stone Edge Has a high crit ratio and covers Ice, FIRE, Bug, and Flying. Psycho Cut puts the major weakness plus poison in their place. I think I'll just say now that all the moves have High Crit Ratio. Night Slash is STAB. Swords Dance is boosting, because it doesn't have full attack EV's.
One of my Favorite OU sets! works best in Rain...
Ability: Defiant
Item: Leftovers
Nature: Adamant
EV's: 248 HP, 252 Atk, 8 Def
Swords Dance
Sucker Punch
Brick Break
Perfect set for a tier where a lot of Pokemons LOVE to set up. Snatch is great to steal any type of boost + Wish/Sotfboiled from Chansey's/Blissey's. Swords Dance is when you have the chance to set up. Sucker punch is to troll when your opponent has gotten something snatched and decides to attack. Brick break is there for STAB.
I've been using this set in Showdown recently and it has been an absolute monster.
Bisharp(f) @ Black Glasses
Ability: Defiant, in case of Intimidate
Role: Bulky Physical Sweeper
EVs: 252 Def, 252 Atk, 4 Hp
Adamant Nature
Sucker Punch- Bisharp's best move. after a couple Swords Dance with Black Glasses, you can OHKO even some of the bulkiest Fighting types
Substitute/Psycho Cut/Iron Head- this one's down to preference. Substitute is useful for setting up because of Bisharp's relatively low defensive stats, psycho cut is good for fighting coverage, and Iron head gets STAB
Swords Dance- Because it's Swords Dance
Stone Edge- Coverage
Bisharp @ Life Orb
Ability: Defiant
Evs: 4 HP / 252 Atk / 252 Spe
Adamant/Jolly Nature
- Psycho Cut/Knock Off
- Sucker Punch/Night Slash
- Iron Head
- Swords Dance
This is the most common set on Bisharp, trying to make it fast and hard hitting, and get up Swords Dance and sweep.
Bisharp @ Assault Vest
Ability: Pressure
Evs: 252 HP / 180 Def / 76 SpD
Adamant Nature
- Psycho Cut/Brick Break
- Sucker Punch/Knock Off
- Iron Head
- Stone Edge/Shadow Claw
Not many use this defensive set and I don't understand why, it has alot of potential, and can hit hard with that Adamant Ability.
Banded Bandit
Bisharp @ Choice Band
Nature: Adamant
Ability: Defiant
EVs: 252 Atk, 252 Sp. Def, 4 Def
Knock Off - Gets rid of very annoying items
Sucker Punch - Priority move
Low Kick - Coverage
Iron Head - Powerful STAB. Not used for Flinching
Well, we now have a Power Ranger as a Pokemon. But this guy is good, I have to say. He is made of two very good types, although he should stay away from some Fighting types. He reminds me of Gallade.
Ability: Pressure
EVs: Attack, Defense, Speed Nature: Impish
Swords Dance: Ultimate power as always.
Night Slash: Dark type STAB.
Psycho Cut: Deals with those Fighting types.
Iron Head/Stealth Rock: Stealth Rock for those of you who use entry hazards. For those who don't, go with Steel STAB.
A decent physical attacker.
Nature: Jolly
EVs: 252 speed, 252 attack
Item: Leftovers or Life Orb
Night Slash
Psycho Cut
Brick Break (or Ankle Sweep which can make up for speed deficiency)
Rock Polish or Swords Dance
Shame we don't have Dragon Dance, but Rock Polish is a viable option giving a high chance of out-speeding most pokemon.
Bisharp gets a good attack stat as it is, I'd put the EVs into defense or special defense instead of attack. Here's what I feel is a good set:
Nature: Jolly
I recommend maxing out speed, and either splitting the remaining EVs in defense and special defense, or maxing out HP so you've got enough bulk to withstand multiple attacks.
Psycho cut (to cover fighting weakness)
Iron Head (STAB)
Night Slash (STAB)
Swords Dance {to raise attack}
Additionally, I have a few substitutions. Hone claws would be good for raising both attack and accuracy, but at a slower rate than swords dance. Switching one of the offensive moves with X scissor could help bring down dark types, and provide an unexpected surprise when attacking.
Having inner focus isn't a bad ability, as it prevents flinching, but defiant works well if you want to get a higher attack stat quicker. I'd also recommend giving Bisharp a focus sash or a chople berry, to help combat the 4x fighting weakness.
Bisharp... One of the BEST users of Sucker Punch
Adamant Nature
Item: Blackglasses
Ability: Defiant
Swords Dance - A must. One swords dance is enough to 1HKO or 2HKO many. Two will guarantee a 1HKO on fighting types with sucker punch. Three will cause ragequits.
Sucker Punch - The main part of this set. Needs to be breeded in. However, if you have it, High Base Attack + STAB + Swords Dance + Blackglasses = Ragequit
The best part about Bisharp is that he is immune to poison, so he is difficult to stall.
Night slash and Iron Head - Backup if your enemy tries to stall away your precious Sucker Punch PP. Night Slash is always preffered, because of Blackglasses and better type coverage. However, if you want flinches or the enemy is Rock/Ice type, use Iron Head. You need both moves.
No need for Rock Polish, too long to set up, and Sucker Punch takes care of that. By the time he got rock polish set up, he might have already been brick breaked.
Only combat fighting types if you have 2-3 Swords dances under your belt. If you have 3, then do NOT switch out. Most people will be eager to finish off Bisharp with a 4 times weakness fighting type move. Most will proceed to attack and completely forget about the Sucker Punch. However, with the three swords dances plus Blackglasses plus STAB plus high base attack, it will be a Sucker Punch instant kill, period. And when I say period, I mean PERIOD. If they do not have a focus sash, they will be instantly vaporized.
He is one of my favorites - this moveset abuses his high base attack to the fullest.
Ability- Defaint
Night Slash- STAB
Iron Head- STAB
Stone Edge- Coverage from Fire-types
Well, Bisharp was denied OU and will be debuting in UU Beta this generation. Bisharp, however, will be able to fit into this metagame perfectly and you can bet I will be abusing it as much as I can before it eventually gets sent up.
First things first is that every team looking for perfect synergy will require a Dark or a Normal type. Only Dark resists Ghost. Another thing is that Bisharp no longer worries about getting wall by every Steel now Dark can it normally. Sucker Punch can run right through it hitting Scizor, Genesect, and Aegislash.
You might think that Aegislash could care less for Bisharp thanks to King's Sheild, but when Aegislash uses King's Shield on Bisharp, he won't lose any attack thanks to his ability Defiant. The same goes for when Bisharp lands on Sticky Web, but instead, his Attack goes up by 2.
Bisharp @ Leftovers / Life Orb
Ability: Defiant
EVs: 200 HP / 252 Atk / 56 Spd
Adamant Nature
- Swords Dance
- Iron Head
- Knock Off
- Sucker Punch
Fairly simple Pokemon who can fit on any team as a setup sweeper. Swords Dance makes Bish able to destroy anything that it won't resist his attacks. Iron Head now hits Fairy's and can cause flinch a healthy amount of the time as well as providing a strong STAB move. Knock Off got a huge buff this generation and Bisharp is one of the strongest users of it. It can also tack off an item from the opponent. Sucker Punch can land some faster hits as base 70 speed isn't too impressive.
The EVs give him enough bulk to avoid being 2HKO'd by weak Hidden Powers and fast enough to outspeed some Aegislash and Scizor sets.
You also have the choice of choosing between Leftovers and Life Orb. Leftovers will increase survivability while Life Orb will do the exact opposite, but still tack on a lot of damage.
Have fun with Bisharp, try to use him as much as possible in UU just in case it gets sent up OU!
Hmm, Bisharp. Love this guy.
Here's a set that I've been experimenting with and has been actually working pretty darn well so far.
Bisharp @ Choice Scarf
Ability: Defiant
EVs: 252 Attack, 252 Speed, 4 HP
Nature: Jolly (+Spd -SpA) or Adamant (+Atk -SpA)
- Brick Break/Psycho Cut
- Stone Edge
- Knock Off
- Iron Head
Adamant is for that extra pure killing power, while Jolly is to outspeed some fast pokes (I'm not sure which is preferred, I've just been experimenting). I've found that this thing makes for a fantastic revenge killer, and the surprise factor of having a scarf on a Bisharp is priceless. The only problem is that Stone edge is a bit inaccurate and a miss can easily spell Bisharp's doom. But anyways, Stone Edge is for trashing any flying type that isn't Skarmory, Gliscor, or Landorus, Knock Off is a great STAB (if the other Pokemon has an item), Iron Head is for STAB , Fairy killing, and potential flinches, and it's your choice between Brick Break and Psycho Cut. Psycho Cut's for those pesky fighting types and Brick Break's for pure coverage.