KanonBaum

Members
  • Content count

    253
  • Joined

  • Last visited

Community Reputation

277 Neutral

About KanonBaum

  • Rank
    Member

Personal Information

  1. Re-Lease the Kraken Beta

    Game is still unfinished, but reaching a closing point. Mac Demo here. Windows, Linux, and iPad ports when it's finished. (Sorry! Just takes time, ya know.) Read the text files. Finished product soon!
  2. I've found several mini-tutorials with setting up Android projects in Xcode and that it is possible to use C++ language too. However, I have other libraries I'd like to use that are, as I've read, Android compatible. I'm just not sure how to set this up. The libraries are all cross-platform. OpenGL for graphics and OpenAL for audio. Let me know if I need to tell you anything else to help me out. Thanks!
  3. [quote name='slicer4ever' timestamp='1341036548' post='4954217'] first idea to come to mind is instead of going through each tile for each light, you start at the lights center, and expand in a circle around the tiles of the light, until you've hit all walls in all directions for the light, or at least until the light value for each particular direction is withing whatever threashold you need(essentially a Dijksta algo). [/quote] Dijksta in this case sounds like an interesting approach. However, it did lead me to think about using a simple flood-fill algorithm alongside the ray-casting. All the tiles beginning from the light will be filled and dissolve with greater distance. Along with the ray-casting, it would lead to an instant check if there is an initial blockage. Thanks for the brain storming! I'll reply with any results.
  4. [quote name='Endurion' timestamp='1340943212' post='4953830'] I did something similar in a Ludum Dare entry a few years ago (Light and Darkness). Instead of calculating the lights during the drawing I did that before. Also, every tile had a color value at each edge. Set all values to 0. For every visible light ray casting to modify the affected tiles. Let the GPU handle the smoothing via vertex coloring. [/quote] But even if I changed the location of the logic (i.e. update() and storing the data in some buffer for the draw() phase), wouldn't it still be slow? Color value at each edge isn't a bad idea instead of center-point light values. I believe that will solve my smoothing problem at least.
  5. I have an implemented algorithm to generate these shadows and lights and it does fine. My problem is with the speed. Observe some screenshots: [b]Screenshots.[/b] [img]https://dl.dropbox.com/u/1333628/TechPics/ZombieGame/shadow_help/Lights_NoShadows.png[/img] [img]https://dl.dropbox.com/u/1333628/TechPics/ZombieGame/shadow_help/Lights_NoShadows2.png[/img] Several Multi-colored Lights with NO Shadows. Get a solid 60 fps.... [img]https://dl.dropbox.com/u/1333628/TechPics/ZombieGame/shadow_help/Lights_WShadows2.png[/img] [img]https://dl.dropbox.com/u/1333628/TechPics/ZombieGame/shadow_help/Lights_WShadows.png[/img] Lights WITH shadows. Generates 20-30~ fps. Speed reduces even further after 5 or so more lights in the map... [b]The Concept.[/b] 1. Pre-Lighting. It the checks to see if any light_groups have been added to the map and iterates through each visible tile on screen and applies each light to it. If the tile is off-screen or pitch black, it simply isn't drawn. 2. Light Calculation. Each light casts line checks to see if the tile is blocked by a wall tile (to reduce the light value the final tile may receive.) If so, the light value is cut immensely and is returned. If not, full light value is returned. 3. Light Baking. The final color value from the lights are applied to the tile (keeping a threshold between 0-255). This process is repeated for each tile on-screen until all tiles are affected by the light sources. [b]The Problem.[/b] Each tile through each light is costly. The screen is 600x400, so there are about 950 tiles to iterate through. Currently 5 light sources. That's a lot of calculation that I'm sure could be reduced. [b]The Code.[/b] Light Group and calculation. [CODE] #include "MapLightGroup.h" MapLightGroup::MapLightGroup(GenericTiledMap *generic_tiled_map) { map = generic_tiled_map; } MapLightGroup::~MapLightGroup() { } const Light::Color MapLightGroup::calculateLight(const Vector2D point) { Light::Color final_color, current_color; final_color.r = 0; final_color.g = 0; final_color.b = 0; final_color.a = 1; // Map cell dimensions int cell_w = map->getCellWidth(); int cell_h = map->getCellHeight(); for(int i = 0; i < getSize(); i++) { bool blocked = false; if(get(i)->getPosition().distance(point) < get(i)->getCutoffDistance()) { if(map->lineIntersection(get(i)->getPosition().x/cell_w, get(i)->getPosition().y/cell_h, point.x/cell_w, point.y/cell_h, 0, 0, 0)) { blocked = true; } } /*else { }*/ // If the light source is beyond a block, darken it. if(blocked) { current_color = get(i)->calculateLight(point); final_color.r += current_color.r/10.0; final_color.g += current_color.r/10.0; final_color.b += current_color.r/10.0; final_color.a += current_color.r/10.0; } else { //final_color.r = 0; //final_color.g = 0; //final_color.b = 0; current_color = get(i)->calculateLight(point); final_color.r += current_color.r; final_color.g += current_color.g; final_color.b += current_color.b; final_color.a += current_color.a; } } // limit threshold to 0-255 final_color.normalize(); return final_color; } [/CODE] The individual light calculation code: [CODE] const Light::Color Light::calculateLight(Vector2D point) { Light::Color final_color; double dist = light_position.distance(point); if(dist <= 1) dist = 1.0; if(dist >= light_cutoff) { final_color.r = 0; final_color.g = 0; final_color.b = 0; final_color.a = 1; return final_color; } double dist_light_factor = dist*light_tightness; double light_scalar = 1.0/(dist_light_factor/(light_radius*light_spread_weight)); final_color.r = light_color.r * light_scalar; final_color.g = light_color.g * light_scalar; final_color.b = light_color.b * light_scalar; final_color.a = light_color.a * light_scalar; final_color.normalize(); return final_color; } [/CODE] The map drawing code. [CODE] void ZombieGameTiledMap::draw(Camera *cam, LightGroup *lights) { if(cam == 0) return; int cell_width = getCellWidth(); int cell_height = getCellHeight(); for(int k = 0; k < getNumLayers(); k++) { if(!map_parser->getLayer(k).visible) continue; for(int i = 0; i < getMapWidth(); i++) { for(int j = 0; j < getMapHeight(); j++) { GenericTiledMap::Tile tile = getTile(i, j, k); if(tile.getCellID() - 1 < 0) continue; if(!cam->isPositionInView(Vector2D(i*cell_width, j*cell_height))) continue; Gosu::Color c = Gosu::Colors::white; c.setAlpha( map_parser->getLayer(k).opacity * 255 ); Vector2D coord = cam->worldToScreen( Vector2D( (i*cell_width), (j*cell_height) ) ); // CALCULATE LIGHT COLORS TO TILES if(lights != 0) { Light::Color color; Vector2D point = Vector2D(i*cell_width, j*cell_height); color = lights->calculateLight(point); // PITCH BLACK. DON'T DRAW! if(color.r == 0 && color.g == 0 && color.b == 0) continue; // RED double red = color.r; if(red > 255) red = 255; c.setRed( red ); // GREEN double green = color.g; if(green > 255) green = 255; c.setGreen( green ); // BLUE double blue = color.b; if(blue > 255) blue = 255; c.setBlue( blue ); } double scale = cam->getZoom(); // NOW DRAW v_img[tile.getCellID()-1].draw(coord.x, coord.y, k, scale, scale, c); } } } } [/CODE] [b]The Help.[/b] If there is any more information needed (i.e. more code), please let me know. I want to be able to have decent results with better speed. Also, another achievement I'd like is less blocky shadows if possible. If some kind of smoother interpolation between shadow'd tiles is possible, inform me. Thank you.
  6. [quote name='Felix Ungman' timestamp='1340177184' post='4950866'] I couple of aspects are: - Text is much more readable, even in small font sizes. Not only are individual characters much sharper, but the overall text layout is much better. - Animated objects move much smoother. Even with crude graphics, the movement of game objects can be much more precise. - With smaller pixels you have more control over the layout. Thinner lines and boxes gives you more space to work with. - More pixels means you can add more detail. Not by cramming in more stuff in less space, but rather playing with different levels of emphasis. Of course this is, and should be, all very subtle, and nothing that you should notice at a glance. Some more reading: [url="https://developer.apple.com/library/mac/#documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Introduction/Introduction.html"]https://developer.ap...troduction.html[/url] [/quote] Thanks for the reading, I very much appreciate it Felix Ungman!
  7. Luckily most of my projects are 8-bit styled, but can you tell me more about retina resolution? How do I "design" for that?
  8. I have been writing games lately that I ultimately want to see as an app for the iPad and other iOS touch devices. I have everything but an iOS to test the porting on. I was going to buy a refurbished iPad1 for testing purposes only as I figured I didn't need a brand new one just to see if something runs right. However, are there aspects I'm not thinking about that will really determine what I need to buy? (iPad, iPad2, or the newer one?) Any feedback would be greatly appreciated.
  9. Re-Lease the Kraken -> Implemented Title Screen

    [quote name='Gaiiden' timestamp='1339886233'] Yep we have vimeo embed codes too [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] [/quote] Today I Learned. Thanks!
  10. Made some music a while back for an "action anime RPG game" but the director of the game wanted music more arcade-like (with metal guitars strumming in the background and cheesy synths). I straight-up told him that I felt it would not be a good direction for the game (as it was a really impressive one) and I wouldn't make such music knowing the music he wanted wouldn't fit. I couldn't have that on my consciousness. He politely informed me that there were others that would make his music. So that was that. So anyways, I have music free to use and currently only a few:[list] [*]3 alternative title screen pieces [*]2 alternative "gear"/mech dungeon level pieces [*]1 catacombs piece [/list] [url="https://dl.dropbox.com/u/1333628/Music/RPG_MUSIC_LIBRARY/Archive.zip"]Download the current Archive.[/url] Just slap my name somewhere and include the copyright .html files in your game. I do plan on expanding this library to be a full-fledge free-to-use background-music-for-games library, so when I make more pieces, I'll either update here or make a new post. Enjoy.
  11. Made a video to show the menu in action and not just a photoshopped concept: [media]http://vimeo.com/43863721[/media] [color=#71767A][font=helvetica, arial, sans-serif]Things seen: Fully functional menu Normal mode Particle effects Player Kraken Level-reset on death Temporary(?) In-game tune Things to do: Decide on the musical direction for the game Write and design the levels for easy and hard Write AI for easy and hard predators Add an Options screen (?) Cleanup Credits Windows Port[/font][/color]
  12. Re-Lease the Kraken

    There was a Kraken-related comp here on the 'ol GDnet Lounge to which I figured I should join. Initially I knew I wouldn't have time to make a full game, but I could at least make something playable since I started much later into the comp. Then my release app didn't work. Then the comp ended. So I never technically had anything to submit. Dang. Anyway, here I am a week or so later (I'm terrible at determining the passing of time) and I have three game modes and a flashy title screen in the works. My goal now is to complete it as a full-fledged simpleton-of-a-game that people can play, enjoy, while I gloat about it among my friends with some sense of false superiority. Here's an old video (but still close to the current game play) to watch. I can't help but push my limits in competitions regarding themes. In this case, it's a play on words "Re-Lease the Kraken": the Kraken needs a new lease on yet another car, that greedy bastard, but his credit is bad and he should feel bad. Play as the car to avoid the wrath of the Kraken all the while collecting money so the Kraken can straight-up afford it. Giving the Kraken the car is the only way thousands of lives can be saved by this slimy, self-centered, salt-squid. The things left to do are: Finish coding the flashy menu (Objects slide in and move around on selection) Lengthen the levels. This will give players the feeling of time worth spent since there are only three modes (three levels) Game State where the Kraken is approved for a re-lease on the car and one where it is not. Make sound, music, and place it in the game. More updates on the way.
  13. A way to Delete my account? Please?

    [quote name='Lite_Noxus' timestamp='1338608236' post='4945479'] [color=#000000][font=verdana, arial, helvetica, sans-serif][size=3][background=rgb(238, 240, 249)]Hello! I'd really like to have my account deleted, and if it's not possible I would like to have most of the information either erased or changed. I would like my username to be changed to something else, because I still use it and my younger self was pretty stupid making my internet presence and reputation pretty bad. I'd really appreciate it. Thanks![/background][/size][/font][/color] [/quote] [size=3][font=arial, helvetica, sans-serif]"you can check out anytime you like, but [i]you can never leave[/i]".[/font][/size]
  14. [quote name='cowsarenotevil' timestamp='1338498778' post='4945093'] [quote name='Cornstalks' timestamp='1338434841' post='4944869'] [b]cowsarenotevil[/b]: I know it's not a game, but it looks pretty cool... Is it a 3D model (i.e. can you post more views of it?)? [/quote] Sure. Do you have anything in mind? [/quote] I'm not sure how well you can render water, but it would be cool to see it bursting out from the ocean a couple of miles away (to show its size) with large waves of water being displaced. All of this with dark red lighting (more black than anything for contrast). Perhaps even spice it up with debris of ships floating closer towards the camera. Just an idea.