Page 23 of 37

Re: My Adventure Game Engine (NEW DEMO ON PAGE 20! 6/17/10)

Posted: Fri Jun 25, 2010 3:57 am
by Luiji
I think qubodup mistook the wolf for a cat.

Re: My Adventure Game Engine (NEW DEMO ON PAGE 20! 6/17/10)

Posted: Fri Jun 25, 2010 4:26 am
by thelinx
Or it was a joke

Re: My Adventure Game Engine (NEW DEMO ON PAGE 20! 6/17/10)

Posted: Fri Jun 25, 2010 5:05 am
by Robin
Hm, no. I think I'm gonna go with Luiji's explanation. Less far-fetched.

Re: My Adventure Game Engine (NEW DEMO ON PAGE 20! 6/17/10)

Posted: Sat Jun 26, 2010 2:27 pm
by Jasoco
Work is coming along swimmingly...

Some changes since the last version:

Boomerangs are now independent of projectiles. And they're smarter and better. They can be fired in any direction (Straight out from the player right now, but any of 360 degrees in the future) and can be thrown at targets.

Targeting is in place. Press Z to target the closest enemy in your view. When targeting, the player will circle the enemy/target. Movement will be fixed in a future version. Right now it's Left and Right to circle and Up and Down to move closer or further from the target. I hope to make the directions work better soon.

Scenery is more prominently used. I don't think the previous version had Scenery, but this one does. Scenery will replace most of a map's data. Tiles will be used much more sparingly. Scenery will replace most decorations and in a much sooner version there will be probably 2 decoration layers at most, possibly only one if at all as they will mostly be replaced by scenery. Scenery can be anything from any image file that gets loaded as they are Quad's. Scenery can also be animated at the speed you choose. Each frame is a different Quad that is cycled through at your speed. In the future I hope to have frames that can have individual timing, or possibly random too. (Think a flickering neon sign.)

Currently Scenery is displayed in the order it is defined. In the future I hope to have a robust sorting and depth algorithm for making actors move behind and in front. It all depends on how fast table.sort and table.insert end up being when dealing with larger detailed maps.

Scenery can also be placed anywhere you want it to be instead of at a 32 pixel multiple like tiles. Flowers and grass will look much better.

A new menu backdrop looks like a softly lit white room. And shadows are cast from the logo. It's better to see in action.

I now use TrueType fonts instead of image fonts for their flexibility. They look better and are much easier to work with, since I don't have to put so much work into drawing them. The Status numbers are still images currently though. I've noticed fonts draw slowly so I want to keep less TTF drawing during action portions of the game, keeping them to dialogs and menus. Still looking for the perfect dialog font. Currently using Georgia. (BTW, is there a way to reference the OS' own included copy of Georgia or Times New Roman instead of having to include my own? I was told yes, but I don't know how. I'd rather not have to ship any fonts personally for copyright reasons since I don't own Georgia or the font I use for menus.)

All UI graphics are in one image now. UI meaning logos, backdrops, stuff belonging to the UI, as opposed to the game itself.

Some Screenshots:
Menu
Menu
Screen shot 2010-06-26 at 10.06.01 AM.jpg (54.59 KiB) Viewed 1694 times
Gameplay
Gameplay
Screen shot 2010-06-26 at 10.08.05 AM.jpg (111.93 KiB) Viewed 1694 times
Note the seemingly random placement of flowers and grass instead of being confined to a tile.

Additional:
I have discovered the joy of replacing table.insert with direct definitions of array entries so I can use strings as id's.

Code: Select all

--Instead of:
table.insert(tableName, 1, { stuff } )
--I use:
tableName["UniqueString"] = { stuff }
This makes my Scenery Library much better and will probably help me with some problems I've been having with enemies and projectiles and stuff since I could give it all unique names instead of assigned unknown numbers.

My question is if it has any speed hit by using strings instead of numbers as ID's?

Re: My Adventure Game Engine (NEW DEMO ON PAGE 20! 6/17/10)

Posted: Sat Jun 26, 2010 2:59 pm
by bartbes
No, it's probably faster because table.insert is slow as hell (t[#t+1] is faster than table.insert!).
And it looks GREAT!

Re: My Adventure Game Engine (NEW DEMO ON PAGE 20! 6/17/10)

Posted: Sat Jun 26, 2010 3:05 pm
by kikito
Jasoco wrote:I have discovered the joy of replacing table.insert with direct definitions of array entries so I can use strings as id's.

Code: Select all

    --Instead of:
    table.insert(tableName, 1, { stuff } )
    --I use:
    tableName["UniqueString"] = { stuff }
Notice that you can also do this, which is slightly better (4 characters less to parse)

Code: Select all

tableName.UniqueString = { stuff }
The only catch is that UniqueString must be a valid identifier then (only letters, numbers or underscore, the first char must be a letter or underscore)
Jasoco wrote:My question is if it has any speed hit by using strings instead of numbers as ID's?
It really depends on what you do with your tables; table.insert has some cost attached to it.
  • If you did lots of table.inserts and now you do a lot of table.x = y, then that part is faster
  • If you used ipairs() in order to parse your tables and now you use pairs(), then that part is slower
  • Table.field is slightly slower than Table[1]. But it normally isn't something game-changing - and the legibility added compensates it in a lot of cases

Re: My Adventure Game Engine (NEW DEMO ON PAGE 20! 6/17/10)

Posted: Sat Jun 26, 2010 3:39 pm
by bartbes
In huge quantities pairs is actually faster than ipairs.
And, I guess that he uses the [] version because he'd normally substitute the literal for a variable.

Re: My Adventure Game Engine (NEW DEMO ON PAGE 20! 6/17/10)

Posted: Sat Jun 26, 2010 3:50 pm
by Robin
  1. Looks nice. Very nice.
  2. As for the font, there are free fonts that you can distribute with your game. For the menus, it might be interesting to know Vera Sans has a "light" variant, which may look good.
  3. As for table keys: table.key is faster than table["key"], because it has a bytecode short cut. An advantage of using numeric keys (of course using t[#t+1] = v rather than table.insert(t, v)) is that it makes automatic generation of enemies or whatever easier. But if you are going to have lots of "level-scripting", where you access enemies by enemyTable.largeShark or enemyTable[19], string keys are much better.
  4. So, where is the .love? :3

Re: My Adventure Game Engine (NEW DEMO ON PAGE 20! 6/17/10)

Posted: Sat Jun 26, 2010 3:55 pm
by Jasoco
Well, here's how it goes. I have a Scenery Object defined in the Library:

Code: Select all

sceneryLibrary["Flower 1"] = {i = worldTiles, q = gr.newQuad(0, 128, 16, 16, worldTiles:getWidth(), worldTiles:getHeight()), ani = false }
And I would place it in the map by using adding Scenery to the current world space:

Code: Select all

table.insert(scenery, { x = 425, y = 335, id = "Flower 1", z = 1, sx = 1, sy = 1, ox = 8, oy = 16} )
I can set id to the string name of the Object instead of having to remember what number I used to use.

Re: My Adventure Game Engine (NEW DEMO ON PAGE 20! 6/17/10)

Posted: Sat Jun 26, 2010 3:57 pm
by TechnoCat
That transparent gray circle-gradient background on the menu is so sexy. It looks so very pleasant to look at. Also, consider making the target icon green arrow smaller. Or maybe even just a small green triangle.