What kind of work? Do I sense the creation of another game?Actually, I have been thinking up ideas for a new browser based RPG involving allot more adventure elements than usual (and no grid nav) but no, I'm busy with work. I haven't even had time to finish my own site yet even though I've paid for the hosting.
You can download a free demo of Photoshop from the Adobe website: http://www.adobe.com/products/photoshop/photoshop/Man that makes me fear upgrading. I love the lasso tool in appleworks its so useful.
I'm using it exclusively now, as the super awesome lasso tool in Appleworks broke with Snow Leopard. :(
I've been using Tiled for awhile: http://mapeditor.org/index.htmlI've figured quite a bit out and it's very simplistic though I can't find just the right setting to go with your tiles.
I've just glanced at the Downloads page; it's incredibly daunting, but if you can figure it out the software is great.
Give me like two days to upgrade/ expand the tileset before you start mapping... the tiles are inconsistent in their shading and quality.You can have 4. That'll give me four days of no need to map or worry about map related things and instead work on coding.
I've figured quite a bit out and it's very simplistic though I can't find just the right setting to go with your tiles.This is how I did it:
This setting is the best so far:
Map Size - Width: 8 Height: 7
Tile size - Width: 44 Height: 44
Tileset size - Width: 44 Height: 44
Though it excludes a black line along the bottom and right of the map.
What do you think? (I think it's because your tiles are made to overlap each other on the 45th pixel)
-Gandolf
stop();
//loadTileBitmapData
var sourceTiles:tileMapBitmap=new tileMapBitmap(1,1);
//renderMap Variable Definitions
var rowCtr:Number=0;
var colCtr:Number=0;
var mapRows:Number=7;
var mapCols:Number=9;
var tileNum:int=0;
var destY:int=0;
var destX:int=0;
var sourceX:int=0;
var sourceY:int=0;
var sourceRect:Rectangle=null;
var destPoint:Point=null;
var screenBitmapData=new BitmapData((44*9)+1,(44*7)+1,false,0x000000);
var displayData=new Bitmap(screenBitmapData);
stage.addChild(displayData);
displayData.x=5;
displayData.y=5;
/************
* Tile Maps *
************/
var tileMap1:Array = new Array();
tileMap1.push(new Array(0,0,0,0,9,253,0,0,0));
tileMap1.push(new Array(0,0,0,0,19,0,0,0,0));
tileMap1.push(new Array(0,32,0,0,19,32,0,0,0));
tileMap1.push(new Array(0,0,0,0,19,0,0,0,0));
tileMap1.push(new Array(0,0,0,32,19,0,0,32,0));
tileMap1.push(new Array(0,0,0,0,19,0,0,0,0));
tileMap1.push(new Array(161,161,161,161,162,161,161,161,161));
var colMap1:Array = new Array();
colMap1.push(new Array(0,0,0,0,0,0,0,0,0));
colMap1.push(new Array(0,0,0,0,0,0,0,0,0));
colMap1.push(new Array(0,0,0,0,0,0,0,0,0));
colMap1.push(new Array(0,0,0,0,0,0,0,0,0));
colMap1.push(new Array(0,0,0,0,0,0,0,0,0));
colMap1.push(new Array(0,0,0,0,0,0,0,0,0));
colMap1.push(new Array(0,0,0,0,0,0,0,0,0));
function renderMap(tileArray) {
stage.removeChild(displayData);
//using the data in the array add to screenBitmapData
screenBitmapData=new BitmapData((44*9)+1,(44*7)+1,false,0x000000);
//screenBitmapData.copyPixels(tilesBitmapData,new Rectangle(0,0,32,32), new Point(0,0));
for (rowCtr=0; rowCtr<mapRows; rowCtr++) {
for (colCtr=0; colCtr<mapCols; colCtr++) {
tileNum=int(tileArray[rowCtr][colCtr]);
destY=rowCtr*44;
destX=colCtr*44;
sourceX=(tileNum % 10)*44;
sourceY=(Math.floor(tileNum/10))*44;
sourceRect=new Rectangle(sourceX,sourceY,45,45);
destPoint=new Point(destX,destY);
screenBitmapData.copyPixels(sourceTiles,sourceRect,destPoint);
}
}
displayData=new Bitmap(screenBitmapData);
stage.addChild(displayData);
displayData.x=5;
displayData.y=5;
}
renderMap(tileMap1);
Give me like two days to upgrade/ expand the tileset before you start mapping... the tiles are inconsistent in their shading and quality.Cool! Can't wait to see what you come up with! :D
Tiled is being used on the project I'm working on, seems great with easy XML integration, ect. Silver, if you're working on a browser game I'd love to help, just got into AS3 and am loving it so far. Highly recommend the open source flex compiler + Flixel libraries.It's only thoughts in my head at the moment, and with work I probably won't be making games at all for a while, but I'd certainly love your help when I do start development. I was gonna use JavaScript and PHP, but I'd love to see some AS3 stuff. Is it something like Flash?
AS3 is the language used by flash, it compiles to a .swf. It's a "real" programming language, you don't need flash to write and compile it. Check out the Adobe Flex open source AS3 SDK.Yea, I just use flash to lay out stuff. It makes the programming a bit more easy :P
I tried to preserve the original set's feel by making the tree tiles stand out from the grass tiles.
The set I posted is definite and finished as long as no one has any objections.Well... (and this isn't an objection mind, just a comment) I think the grass tile would look even awesomer if it was a little brighter. Don't go redoing the entire set on account of me though, I'm just voicing the thought.
Nice Gnome, but you've violated the number one rule of pixel art - never save anything as a .jpg!lol! ;D I hear that. I once caused massive damage to the original RS tile set by saving it as a .jpg by mistake. It dithered the colours on everything, even the solid grass tile!
Jpeg compression doesn't dither, it basically just blends some colors together to cut down on space.Oh trust me, open the RS sprite sheet and save it as a lowish quality jpg: It dithers the pants off it!
http://rjanes.co.uk/images/tutorials/introduction/Tutorial1-Dithering1x4.pngYeah, and a good job at it too. I had a nightmarish result:
That is dithering.
I'll try, but not when I have a paper to write, two tests to study for, a set to design, and three essays to write.Wow you got a lot of stuff to do. Sounds like you procrastinated to get a stack of stuff that big to do, but maybe all your classes just happened to dump it on you at the same time. Anyways, good luck.
Fixed the maps:woah, those tiles are so detailed, i dont think it looks swampy
(http://web.mac.com/avisaria/Map%202.png)(http://web.mac.com/avisaria/Map%201.png)
They do look kinda swampy... Maybe Silver was onto something when he said that it may look better in more vibrant colors.
-Gandalf
Wow you got a lot of stuff to do. Sounds like you procrastinated to get a stack of stuff that big to do, but maybe all your classes just happened to dump it on you at the same time. Anyways, good luck.
i think you can use pixen, thats pretty good
looks like warhampster bailedMaybe he's just incognito for a bit...
(can you use the map i posted earlier?)Probably. We'll have to get the latest tiles from previous posts or if WH is still here.
you already got the gameplay down, just wrap it up and sell it as an app for 99cGameplay is pretty good, need to stick in maps and the story.
name it "pocket rpg"That's an interesting name, will keep it in mind.
why didnt you make scrolling maps?wouldnt one big map be easier to program than seperate little maps?I'm actually unsure. I have an idea, I think I can make the game scrolling without having to remake any of the maps or change any map loading code.
I haven't bailed, it's the week before spring break so I have lots of work.Awesome. :) And you have my condolences.
Don't sell this until we all agree on pricing and stuff.Don't worry, haven't even bought a developer's license yet(Going to get one for my birthday on April 9th so we have at least a month before we sell). Anyways, we still have maps we need to put in. We need to stick in maps before I can continue finishing the latest of features.
Terrain types will include grass, dirt, mud, swamp, rock, and street. Gan, will there be dungeons, or will everything take place above ground?
Great stuff! :)
And guys... I'm not a mod... yet everyone else is. D:
Tired of wandering, a group of traveling merchants settle down. With trades of all sorts New Town is sure to flourish, but only if the area can be made safe.
You must venture forth into the surrounding hills and cleanse the area of monster lairs.
I vote for Gnome!
I vote for Gnome!
Why do all of the maps (other than Gnome's) look really bright?I have no idea. If it's due to tiles we can just go into the tiles folder and replace/fix things without destroying the map.
I vote for Gnome by the way.
i vote jeremymaharglol! ;D Don't we all.
I liked the town Xiphos made.Xiphos + 1
I vote for Gnome!Gnome + 1
There's something individually likeable about each of those maps, but I think I like Gnome's the best.Gnome + 1
Why do all of the maps (other than Gnome's) look really bright?Gnome + 1
I vote for Gnome by the way.
Deduct one vote for Gnome.Gnome - 1
i vote jeremymahargJeremymaharg + 1
In all seriousness, I vote Ouren.Ouren + 1
I vote for gnome, if I can.Gnome + 1
"i vote jeremymaharg"Jeremymaharg + 1
lol! ;D Don't we all.
I think Ghost wouldn't allow that... anyway this is getting off topic.hes not ghost anymore, hes "tim", whats that about?
-Gan
:D
Just comes to show what can happen if a group of teenagers band together.
-Gan
P.S. Alias, mind if we take a break and continue the debate after the iPhone RPG? I want to focus all my energy on the RPG and get it up on the App Store soon. :) (Especially now that I'm probably getting the Dev License today)
Wait, what are you debating?The recent abolition of koala bear rights.
Argh, you brought it up... Everyone knows that Koalas aren't citizens and therefore do not have rights. It is also not animal cruelty as taking away their ability to smoke could be classified as animal protection.I LOL'd! ;D
On other news, the order has been sent. I recieve the iPhone dev license in 24 hrs or less.Hurray!
Argh, you brought it up...LOL
Everyone knows that Koalas aren't citizens and therefore do not have rights. It is also not animal cruelty as taking away their ability to smoke could be classified as animal protection.
- (void) moveNpc:(NpcData*)npcToProcess currentMapTiles:(NSArray*)tiles allNpcs:(NSArray*)allNpcs {
int target = npcToProcess.target;
CGPoint npcTilePosition = npcToProcess.position;
TileData* npcTile = [[tiles objectAtIndex:npcTilePosition.x] objectAtIndex:npcTilePosition.y];
if (target == -1) //RANDOM
{
int vertOrHorz = arc4random() % 2;
int moveDirection = arc4random() % 2;
if (moveDirection == 0) {moveDirection = -1;}
if (vertOrHorz == 0) { //Vertical
if (npcTilePosition.y + moveDirection >= 0 && npcTilePosition.y + moveDirection < [[tiles objectAtIndex:0] count]) {
TileData *tileToGo = [[tiles objectAtIndex:npcTilePosition.x] objectAtIndex:npcTilePosition.y + moveDirection];
if (tileToGo.npcOn==0 && tileToGo.blocked==0 && (playerData.playerTilePos.x != npcTilePosition.x || playerData.playerTilePos.y != npcTilePosition.y + moveDirection)) {
npcTilePosition.y += moveDirection;
}
}
} else { //Horizontal
if (npcTilePosition.x + moveDirection >= 0 && npcTilePosition.x + moveDirection < [tiles count]) {
TileData *tileToGo = [[tiles objectAtIndex:npcTilePosition.x + moveDirection] objectAtIndex:npcTilePosition.y];
if (tileToGo.npcOn==0 && tileToGo.blocked==0 && (playerData.playerTilePos.x != npcTilePosition.x + moveDirection || playerData.playerTilePos.y != npcTilePosition.y)) {
npcTilePosition.x += moveDirection;
}
}
}
} else //Move towards target
{
CGPoint targetPos;
if (target == -2) {targetPos = playerData.playerTilePos;} else {
NpcData* npcTarget = [allNpcs objectAtIndex:target];
targetPos = npcTarget.position;}
TileData* tilesAround[4] = {nil, nil, nil, nil}; //Up down left right
if (npcTilePosition.y > 0) {tilesAround[0] = [[tiles objectAtIndex:npcTilePosition.x] objectAtIndex:npcTilePosition.y - 1];}
if (npcTilePosition.y < 6) {tilesAround[1] = [[tiles objectAtIndex:npcTilePosition.x] objectAtIndex:npcTilePosition.y + 1];}
if (npcTilePosition.x > 0) {tilesAround[2] = [[tiles objectAtIndex:npcTilePosition.x - 1] objectAtIndex:npcTilePosition.y];}
if (npcTilePosition.x < 7) {tilesAround[3] = [[tiles objectAtIndex:npcTilePosition.x + 1] objectAtIndex:npcTilePosition.y];}
BOOL moveableDirections[4] = {YES, YES, YES, YES}; //Up down left right
if (tilesAround[0] == nil) {moveableDirections[0] = NO;}
if (tilesAround[1] == nil) {moveableDirections[1] = NO;}
if (tilesAround[2] == nil) {moveableDirections[2] = NO;}
if (tilesAround[3] == nil) {moveableDirections[3] = NO;}
//Place in movement restrictions
CGPoint playerPos = playerData.playerTilePos;
if (playerPos.x == npcTilePosition.x && playerPos.y == npcTilePosition.y - 1) {moveableDirections[0] = NO;}
if (playerPos.x == npcTilePosition.x && playerPos.y == npcTilePosition.y + 1) {moveableDirections[1] = NO;}
if (playerPos.x == npcTilePosition.x - 1 && playerPos.y == npcTilePosition.y) {moveableDirections[2] = NO;}
if (playerPos.x == npcTilePosition.x + 1 && playerPos.y == npcTilePosition.y) {moveableDirections[3] = NO;}
if (moveableDirections[0]) {moveableDirections[0] = !(tilesAround[0].blocked==1 || tilesAround[0].npcOn==1);}
if (moveableDirections[1]) {moveableDirections[1] = !(tilesAround[1].blocked==1 || tilesAround[1].npcOn==1);}
if (moveableDirections[2]) {moveableDirections[2] = !(tilesAround[2].blocked==1 || tilesAround[2].npcOn==1);}
if (moveableDirections[3]) {moveableDirections[3] = !(tilesAround[3].blocked==1 || tilesAround[3].npcOn==1);}
//Aim to move towards player, if can't, move randomly
BOOL ablemovetotargetx = (targetPos.x < npcTilePosition.x && moveableDirections[2])||(targetPos.x > npcTilePosition.x && moveableDirections[3]);
BOOL ablemovetotargety = (targetPos.y < npcTilePosition.y && moveableDirections[0])||(targetPos.y > npcTilePosition.y && moveableDirections[1]);
int movedir = -1; // 0 = x, 1 = y
if (ablemovetotargetx && ablemovetotargety) {movedir = arc4random() % 2;}
else if (ablemovetotargetx) {movedir = 0;} else if (ablemovetotargety) {movedir = 1;}
if (movedir == 0) {
if (targetPos.x < npcTilePosition.x && moveableDirections[2]) {npcTilePosition.x -= 1;}
if (targetPos.x > npcTilePosition.x && moveableDirections[3]) {npcTilePosition.x += 1;}
} else if (movedir == 1) {
if (targetPos.y < npcTilePosition.y && moveableDirections[0]) {npcTilePosition.y -= 1;}
if (targetPos.y > npcTilePosition.y && moveableDirections[1]) {npcTilePosition.y += 1;}
} else //Move randomly as to get around barrier
if (!(abs(targetPos.x - npcTilePosition.x) <= 1 && abs(targetPos.y - npcTilePosition.y) == 0) && !(abs(targetPos.x - npcTilePosition.x) == 0 && abs(targetPos.y - npcTilePosition.y) <= 1)) {
int vertOrHorz = arc4random() % 2;
int moveDirection = arc4random() % 2;
if (moveDirection == 0) {moveDirection = -1;}
if (vertOrHorz == 0) { //Vertical
if (npcTilePosition.y + moveDirection >= 0 && npcTilePosition.y + moveDirection < [[tiles objectAtIndex:0] count]) {
TileData *tileToGo = [[tiles objectAtIndex:npcTilePosition.x] objectAtIndex:npcTilePosition.y + moveDirection];
if (tileToGo.npcOn==0 && tileToGo.blocked==0 && (playerData.playerTilePos.x != npcTilePosition.x || playerData.playerTilePos.y != npcTilePosition.y + moveDirection)) {
npcTilePosition.y += moveDirection;
}
}
} else { //Horizontal
if (npcTilePosition.x + moveDirection >= 0 && npcTilePosition.x + moveDirection < [tiles count]) {
TileData *tileToGo = [[tiles objectAtIndex:npcTilePosition.x + moveDirection] objectAtIndex:npcTilePosition.y];
if (tileToGo.npcOn==0 && tileToGo.blocked==0 && (playerData.playerTilePos.x != npcTilePosition.x + moveDirection || playerData.playerTilePos.y != npcTilePosition.y)) {
npcTilePosition.x += moveDirection;
}
}
}
}
}
npcTile.npcOn = 0;
TileData *nowOn = [[tiles objectAtIndex:npcTilePosition.x] objectAtIndex:npcTilePosition.y];
nowOn.npcOn = 1;
npcToProcess.position = npcTilePosition;
}
<img name="subNav3BackgroundButtonImg"src="images/subNav3Background.gif" alt="Designs"width="105"height="44">
<img
name="subNav3BackgroundButtonImg"
src="images/subNav3Background.gif"
alt="Designs"
width="105"
height="44"
>
Nice, but why are the side and top tiles darker?
Here is a screencast:Wow, I missed this somehow. Nice going Gnome! :D That's two areas pretty much complete! Only three to go! We're flying!
http://www.screencast.com/users/Hooliovoncoolio/folders/Jing/media/5f17183f-6332-40bd-8098-9d47fb7dabb3