Advertisement Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Community Reputation

277 Neutral

About KanonBaum

  • Rank

Personal Information

  1. KanonBaum

    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. 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. 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: Screenshots. Several Multi-colored Lights with NO Shadows. Get a solid 60 fps.... Lights WITH shadows. Generates 20-30~ fps. Speed reduces even further after 5 or so more lights in the map... The Concept. 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. The Problem. 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. The Code. Light Group and calculation. #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; } The individual light calculation 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; } The map drawing 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); } } } } The Help. 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. 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. KanonBaum

    Re-Lease the Kraken -> Implemented Title Screen

    [quote name='Gaiiden' timestamp='1339886233'] Yep we have vimeo embed codes too [img][/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: 3 alternative title screen pieces 2 alternative "gear"/mech dungeon level pieces 1 catacombs piece Download the current Archive. 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][/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. KanonBaum

    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. KanonBaum

    A way to Delete my account? Please?

    [font=arial, helvetica, sans-serif]"you can check out anytime you like, but you can never leave".[/font]
  14. 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.
  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!