Jump to content
  • Advertisement

Search the Community

Showing results for tags '2D'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

  • Audio
    • Music and Sound FX
  • Business
    • Business and Law
    • Career Development
    • Production and Management
  • Game Design
    • Game Design and Theory
    • Writing for Games
    • UX for Games
  • Industry
    • Interviews
    • Event Coverage
  • Programming
    • Artificial Intelligence
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Engines and Middleware
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
  • Archive

Categories

  • Audio
  • Visual Arts
  • Programming
  • Writing

Categories

  • Game Dev Loadout
  • Game Dev Unchained

Categories

  • Game Developers Conference
    • GDC 2017
    • GDC 2018
  • Power-Up Digital Games Conference
    • PDGC I: Words of Wisdom
    • PDGC II: The Devs Strike Back
    • PDGC III: Syntax Error

Forums

  • Audio
    • Music and Sound FX
  • Business
    • Games Career Development
    • Production and Management
    • Games Business and Law
  • Game Design
    • Game Design and Theory
    • Writing for Games
  • Programming
    • Artificial Intelligence
    • Engines and Middleware
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
    • 2D and 3D Art
    • Critique and Feedback
  • Community
    • GameDev Challenges
    • GDNet+ Member Forum
    • GDNet Lounge
    • GDNet Comments, Suggestions, and Ideas
    • Coding Horrors
    • Your Announcements
    • Hobby Project Classifieds
    • Indie Showcase
    • Article Writing
  • Affiliates
    • NeHe Productions
    • AngelCode
  • Topical
    • Virtual and Augmented Reality
    • News
  • Workshops
    • C# Workshop
    • CPP Workshop
    • Freehand Drawing Workshop
    • Hands-On Interactive Game Development
    • SICP Workshop
    • XNA 4.0 Workshop
  • Archive
    • Topical
    • Affiliates
    • Contests
    • Technical
  • GameDev Challenges's Topics
  • For Beginners's Forum

Calendars

  • Community Calendar
  • Games Industry Events
  • Game Jams
  • GameDev Challenges's Schedule

Blogs

There are no results to display.

There are no results to display.

Product Groups

  • Advertisements
  • GameDev Gear

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me


Website


Role


Twitter


Github


Twitch


Steam

Found 969 results

  1. Hiya! i'm Jason, And i want to reach everyone here who's excited about making games! And as the Title says, I'm looking for either GMS2 Programmers Or Godot Programmers. I want to invite you to my Game Creation Of Imagistory, A Beautiful 2D RPG game with Plot twists, Corky Characters and an amazing story. Here is some spoliers: Long ago, A mystical Comet Flew throughout the universe. Legends say that one day this comet will create a brand-new galaxy. A little scientist named Brown tried to fly to space to see the comet in action. His Friends, the Wizards, went with him to see the explosion. Until… A Vortex Pulled them into a strange portal. They all scattered in different locations. What will Brown Do? And Here is Some Art: I'm Ciao Gelato #7986 on discord and my email is is imagistory2500@gmail.com, if you want to contact me there. I'm Looking For Free/Revshare Workers, Please! Stay Creative!!!
  2. Hello, I'm an amateur digital artist looking for a beginner-level project. I'd like to be a part of a team that wants to learn to create games. It might be a simple idle, mini, simulation game or a visual novel. I'm still a beginner at backgrounds and I usually draw females but I'm willing to learn. Time invested to the game creation might differ every week mostly because of my work and will be discussed separately. Here's my DA : https://www.deviantart.com/sneikyz
  3. We are a small team of 2 coders (both with degrees in software engineering) a writer/producer (me) and a sound designer. We are currently looking for a reliable and dependable person to help us with this project. It is in early planning and the art style will be decided by who applies. Think King's Quest style art and game play. Anyone interested please contact me or tell me how to contact you. - We are using Unity as our platform and will distribute through Steam. - The game will have mature and occult themes, so applicants need to be fine with this. - The game requires about a dozen characters and 12 - 24 backgrounds. - We are female friendly and welcoming. Creative input is also welcome. You will feel like part of the group. Rather than write a wall of text, if you are still interested after reading this feel free to ask questions here and I'll answer them with as much detail as possible. Your questions will also help me learn what information is important to add in the future.
  4. Hi there, I’m relatively new to game making. But I will like to try my hands on making a simple pixel art game that can work on either iOS AppStore, or PC. Which software would you all recommend me to use? Hope to hear from everyone. Thanks in advance.
  5. The Rundown Been working hard lately on the next big patch for Uagi and I wanted to run some things by everyone. This is not really a patch post but an announcement to discuss the plans for Uagi in the next few months, a road map some would call it. My current goal is to release Uagi into Steam Full Access November 30th, this may still change but I am pretty set on this goal. Very excited. The next big patch will be released either mid or end October depending on how things go. I also plan to do a second patch a couple weeks before full release, this will include the final end game content and should be rolling in mid November. Uagi-Saba has now officially been in development 894 Days (2.4) years. Uagi On Steam UG Live For those who don't know I stream development of Uagi daily on Twitch. Stop by sometime to see the inner workings of Uagi, don't be afraid to say hello! https://www.twitch.tv/undergroundies Upcoming Patch Content I really want to take my time with this one so I can squeeze in a lot of new content. The next patch will be an optional update for the player and will include the following. New And Improved Body Part Color System Previously Mystics had three color genes that determined their overall skin pigment (covering the whole body). Now with the use of a helpful extension I am able to color individual body parts! This is something I have wanted since the start of development. Now each body part has it's own three unique color genes that determine its color. This makes for some pretty amazing color combinations and every player is guaranteed to have a completely unique mystic. New Room Biomes I will be introducing new room biomes with the next patch. Chiseled stones and vines make up this lovely new set of rooms. These will have their own unique set of object spawns. Balance Of Resource Management And Creature Care Resource management has started to become a bit more important than creature breeding in terms of balance. Uagi-Saba is a creature breeding game and I want it to feel more that way. some have said there is too much running around/busy work and that leaves less time for breeding and other things. I completely agree and I'm working on making changes to help with this. Though I still want there to be a challenge I don't want it too hard to hatch a few mystics and have a good time without stressing about resources and timers too much. New Mystic Skill System The player will be able to teach each of their mystics one of three skills depending on if mystics have the required stats. The skills are "Smash", "Repair" and "Decipher" and all will be needed to proceed to end game. Though the next patch will not have the game ending the player will still be able to teach and use skills. Other Notable Changes -Improved and expanded tutorial. -New Mystic body parts. -Balance changes to resources and other game mechanics. -More lore, computer logs and more to read. -A variety of new cave plants will be added in the next patch, more life and movement to sanctuary. 1.0.3.3. Patch List Below -Re-arranged the main player HUD a tad. -Fixed bug crash involving the new furnace buttons. -Removed old temp system. -Furnaces now only have one temperature stage. -Removed Kelvin from the HUD. -The change in temperature per cycle is now displayed on the HUD. -Added three new back pieces to the gene pool, two from the beast family and one from the material family. -Two of the three new back pieces are only available through breeding with wild mystics, I have made more of the back pieces now available to default mystics. -Added new buttons to the build menu. Button on far left now opens skills when pressed. -Pressing "Q" now opens and closes skills. -Though I have added new skill buttons they have all been turned off until next patch, come next patch they will all be usable. -Fixed problem where eggs created through breeding would sometimes destroy egg pedestals.
  6. Undergroundies

    New Coloring System

    From the album: Uagi-Saba Screenshots

  7. Undergroundies

    New Body Part Coloring System

    From the album: Uagi-Saba Screenshots

  8. Undergroundies

    New Room Biome

    From the album: Uagi-Saba Screenshots

    © Aaron Arcand

  9. jbadams

    Free art assets

    The older version of this topic is getting quite dated, with some broken links and notable omissions, so after 8 years it's high time for an update. This is a list of free graphics for games but aims to avoid sprites ripped from existing games in favour of ones that may be legally used in your work. Please feel free to submit your own suggestions, but note that any off-topic posts and all spam may be removed from this topic. Be sure to check the licensing terms before using any of the linked graphics. Free Airplane Sprite Pack A free .zip package right here on GameDev.net containing various aircraft from different (mostly side or top down) angles. Includes fighter jets, bombers and cargo planes. Provided by our very own (but recently inactive) @Prinz Eugn (Mark Simpson). Free for any use with attribution to the author. Kenney Assets A huge collection of freely available assets (both 2d and 3d) for many different styles of games, available under CC0 1.0 Universal licensing terms. In addition to the free assets, Kenney's work is supported by the sale of cheaply available asset packs which you'll find linked at the top of the page, and the fantastic Asset Forge which allows the easy creation of customised game assets. SpriteLib GPL A free .zip package of 2d games sprites by Ari Feldman, now available under a Common Public License Version 1.0. Unfortunately, the original website is no longer online, the source website is back online HERE, but the sprite package is attached to this post for you to download: spritelib_gpl.zip Contains sprites for a platform game, Pong/Breakout/Arkanoid style games, overhead shooter in the style of 1943, and a maze combat game in the style of Tank Force. Lost Garden Freely provided graphics from Daniel Cook of Lost Garden & Spry Fox, under licensing terms explained on this page. Danc's Miraculously Flexible Game Prototyping Tiles Danc's Miraculously Flexible Game Prototyping Graphics for Small Worlds 250 free hand-drawn textures Tyrian ships and tiles Tiles for Zelda-like RPG Complete set of 8-bit Sinistar clone graphics Unreleased RTS Postmortem: 'Hard Vacuum' (graphics near end of post) In addition to the above, Daniel also has a couple of 'Game Prototyping Challenges' where he provides the basic outline of a game design and challenges people to implement and iterate on the design to hopefully create a fun game. A couple of these challenges come with freely provided graphics, although in this case the assets are intended for use if undertaking the challenge (a fantastic learning exercise!) in question rather than for general use: Prototyping Challenge: Play With Your Peas Prototyping Challenge: Fishing Girl Glitch - Public Domain Art (and code) All assets from a defunct web-based MMO game, made freely available under CC0 1.0 Universal licensing terms. Get it HERE. Most of the graphics are available in .fla and .swf formats. Quaternius Quaternius offers a large range of basic low-poly models with CC0 licensing. You can also support his efforts by purchasing all of his sets in a single file for $1. OpenGameArt.org OpenGameArt have a huge collection of different art, constantly added to by new and existing contributors. Quality and style vary, but there is some really good material available if you're willing to spend some time looking. Note that licensing terms vary, so be sure to check each item's license before use. Game-Icons.net At the time of writing, Game-Icons.net offers 3044 free icons in SVG and PNG formats with CC BY 3.0 licensing (which requires attribution). The built in editor on the site will allow you to alter the icon size and apply some simple properties (such as background type and colour). AI War 2.0 graphics library Graphics from the space RTS game AI War: Fleet Command. Free for use by indie developers. Get it HERE. Reiner's Tilesets 2d and 3d graphics (use the menu at the top of the site to view categories) available under these licensing terms. MakeHuman MakeHuman is an open source (AGPL licenced) tool for creating 3d characters. Output characters can be used under a permissive CC0 license under certain conditions. GameDev.Market There are some free assets available via the GameDev Marketplace (our very own asset store!). Looking to hire an artist for custom work? Check out our Contractors section, or advertise your project in our Game Jobs board (for paid commercial projects) or Hobby Classifieds forum (for free hobbyist projects). Looking to purchase pre-made assets? Try the GameDev Marketplace, or other asset stores such as GameDev Market (not affiliated with us!), the Unity Asset Store, the Unreal Marketplace, or others.
  10. Hello there! I'd like to show you my new game - Hurry Birdie. It's an endless game where you have to dodge tree brunches and stones falling from above. Your birdie flies from side to side and speeds up when you press the screen. Features: * Nice design; * You can unlock new birdies; * Easy to play; * Leaderboard; * Good timekiller. Download here: iOS: https://itunes.apple.com/app/id1434970622?mt=8 Android: https://play.google.com/store/apps/details?id=com.abdullakh.hurrybirdie
  11. RidiculousName

    FXML and CSS in JavaFX

    Would any readers please explain to me the differences between FXML and CSS? I just want to create a basic GUI in JavaFX. For example does one work better on linux? Is one easier to learn than the other? What are their benefits and drawbacks?
  12. Hey GameDev! I'm currently sitting with a cool 2D game concept and time/team to get into a decently good development cycle, but torn between several engines. I'm currently considering: Java or Kotlin - LibGDX C# - SFML bind(SFML.NET), Unity, Godot C++ - Unreal, Cocos2d-x, SFML I'm not exactly sure about language either; With my interests lying mostly in Java/Kotlin area, they are pretty slow. C# is mostly referred as go-to game dev language, but SFML is pretty low-level(and won't run on my Linux Mono setup duh) and I personally don't like Unity too much as it's pretty heavy for my taste and seems somewhat messed up with its truckload of different features. Maybe it's not true and I've been approaching it from the wrong end since everyone seems to recommend it? Godot is there, too, but its C# support is in beta stage right now and they themselves advise not to use it for serious projects. I also considered C++ as I'm somewhat fluent in it, but it's pretty low-level and shooting myself in a leg seems to slow down the development and clutter the code too much. Maybe it's not true for some engines/APIs? Not sure. Just in case, I also know Python 3 and JS basics in case there is a decent solution(though I was unable to find it). If there are good options I'm missing for listed languages - please let me know as well!
  13. Color Fiesta is a collection of best and most addictive color matching games with minimalism graphics and unique game level design that suitable for kids and adult. You can play the best color matching game like Match And Catch, True Color, Color Roulette which are easy to learn and fun to master in one game. As a color matching game lover, you don't need to spend time searching new brain teasers any more. We will give you a ONE-STOP game experience from now on!Games you can play in Color Fiesta★★ Match And Catch ★★Simply rotate the blocks so that the side of the block that face the falling ball has the same color with the falling ball. Make sure you are reacting fast enough to keep rotating the block to match the color of falling ball.★★ True Color ★★There are several options appear on the screen, only tap on the options that the color is match with the text of the option. Stay patient and look carefully before you make your choice!★★ Color Roulette ★★The roulette is keep rotating, make sure you only tap on it when the section is match with the color of the pointer! Beware, it's keep speeding up!★★ And many more games ★★We will constantly adding new game so that you can keep having fun with us without spending much time search for your favorite games!Time and patient is the key for you to complete all levels.Please feel free to leave your review or feedback to us @ bigcheeseapp@gmail.com! We'd love to hear from you! Download now from Google Play or scan the QR code below Download now from App Store: Coming Soon...
  14. Brizzler

    Boof Master Reviews

    Hey Everyone, I'm new here and I'm looking to get some feedback on my new game. It's kind of addictive, so I'm thinking about adding some network based features. If you're up for it, please let me know what you think Here is the link: Boof Master For UWP Here's a quick video:
  15. ERASERHEAD STUDIO

    13 RONIN - DevLog #6 - Time for graphics

    In my last blog post I showcased some of the audio I’ve been working with for my upcoming game 13 RONIN, now it’s time for graphics. But first a celebration. The 4th of October is a day dedicated to the cinnamon roll here in Sweden (yes, it’s true), which we, of course, celebrate by baking, buying and eating lot’s of (you guessed it) cinnamon rolls. Since I’m a fan of the pastry myself, I happily took part in the celebration. But I also had another reason to celebrate. From October and till the end of the year I’ve reduced the number of hours I’m putting in on my day job from 40 to 32 in favor of spending more time working on 13 RONIN. Big kudos to my boss for approving this! Main character How do you go about drawing a samurai with realistic proportions when you don’t know how to draw? I started by googling images on human proportions and created a reference image I could use as background layer while drawing. In parallel to this, I watched a lot of old samurai movies and Kendo-tournaments and with still images from these kind of videos as reference I drew my character. At the beginning of this project, I intended to use silhouette-looking sprites mostly drawn in solid black. This changed over time, I had a few different ideas, but finally settled on using gray-scaled sprites with very low-saturated colors for light and dark areas. I decided on this color scheme to keep consistent with the black and white samurai movie theme. The low saturated colors are there to make the sprites stand out from the background, but also to make the visuals more interesting. With this style, I’ve found a reasonable balance between aesthetics and time spent drawing. Background In the early days of this project, I was more into ninjas than samurais and the initial idea for the game was that you as a white dressed samurai had to fight a bunch of bad, bad ninjas dressed in colorful outfits. To get started I drew a forest background. Soon I discovered that even the best of the ninja-movies weren’t that good and I found myself switching to samurai-movies and my approach to the project changed. Now I wanted to create a fighting game looking like Limbo, with black ninjas emerging from the dark. Sometime later I re-discovered my love for low-resolution pixel-art and the Limbo-aesthetics was dropped. The code-project still carries the somewhat humorous working title of the ninja-project, it’s called “Ninja in the dark”. I wanted to start drawing something basic, something I thought I had the skills for and choose to draw a building which I later on turned into a tavern. It’s yet not finished and I can’t promise it will fit into the final game, but it will be the background of the first public build. Energy and score After finishing the background I took some time to draw the graphics for player score and energy symbols. I tried a few different ideas and settled on the score written in a custom font upon a scroll-like background. For energy symbols I also tried a few different ideas before stealing the yin-yang symbols from The way of the exploding fist and turning them red. I do love that game. In-game graphics There are a lot of animations to finish before the game is playable, but this is at least a taste of what will come. Please visit www.eraserheadstudio.com for more about 13 RONIN. Happy coding! /jan.
  16. Project Title:ArcturonDescription:Arcturon is a 2d space singelplayer sandbox game where the player must "fight" or "flight" in a dying universe plagued by wars,universal catastrophes and so forth.The game is set in dimensions/realms where there are currently 6 realms/universes to go to "More might be planned"..1.being the main universe that is infinite in size but this is a statement that is shrouded as it is actively getting destroyed. 2.Xeon: The "Energy Void" as they call it is a realm that is a mystery this realm is full of space-time rifts that can spawn any sort of creature randomly and gravity is majorly different compared. 3.Crimaxtion:This realm is called worst than hell itself is a universe/realm so hostile this is where the true survival test will be given.There is more to this but thats just a quick rundown. For me this is a hobby project i have no true planning or motive for revenue.I would want to see where this goes first if this becomes some sort of big thing payment would be discussed if required.Im posting this as i believe that if im the one doing the programming and someone else can do the art at least for the majority it could get a lot of load off my back and the game can finally make major strides again in progression and feel.I have prototypes and some current snapshots should they need to be analyzed.Talent Required:2D Artist (How Many I Can Take)That have the ability to draw characters,npcs and hostile foes.The ability to animate if possible.Bonus.The ability to draw environments like parallax.Bonus.More details will be laid out to whoever accepts all this.If anymore information is required please Contact,PM or Reply. Also the formatting seems to be acting odd so sorry for these black lines of text?
  17. I'm creating a textbox for my UI, and I found a way to place the cursor where the user clicks on the text. Here is all of my code: using System; using System.Collections.Generic; using System.Timers; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace TextEditorTest { public class Cursor { public int CharacterIndex = 0; public string Symbol = "|"; public Vector2 Position = new Vector2(0, 0); public int LineIndex = 0; public bool Visible = true; } /// <summary> /// This is the main type for your game. /// </summary> public class Game1 : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; private GapBuffer<string> m_Text = new GapBuffer<string>(); //private List<Vector2> m_CharacterPositions = new List<Vector2>(); private Dictionary<int, Vector2> m_CharacterPositions = new Dictionary<int, Vector2>(); private List<Rectangle> m_HitBoxes = new List<Rectangle>(); private bool m_UpdateCharPositions = true; private const int NUM_CHARS_IN_LINE = 10; private Vector2 m_TextEditPosition = new Vector2(50, 0), m_TextEditSize = new Vector2(250, 320); private SpriteFont m_Font; private Timer m_CursorVisibilityTimer = new Timer(); private Cursor m_Cursor = new Cursor(); private InputHelper m_Input = new InputHelper(); private int m_NumLinesInText = 1; private bool m_HasFocus = true; private bool m_MultiLine = true; private bool m_CapitalLetters = false; //For how long has a key been presseed? private DateTime m_DownSince = DateTime.Now; private float m_TimeUntilRepInMillis = 100f; private int m_RepsPerSec = 15; private DateTime m_LastRep = DateTime.Now; private Keys? m_RepChar; //A character currently being pressed (repeated). private Vector2 m_TextPosition = new Vector2(0, 0); //Coordinate for anchoring the text. public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; m_Cursor.Position = m_TextEditPosition; m_CursorVisibilityTimer = new Timer(100); m_CursorVisibilityTimer.Enabled = true; m_CursorVisibilityTimer.Elapsed += CursorVisibilityTimer_Elapsed; m_CursorVisibilityTimer.Start(); IsMouseVisible = true; Window.TextInput += Window_TextInput; m_TextPosition = m_TextEditPosition; } private void CursorVisibilityTimer_Elapsed(object sender, ElapsedEventArgs e) { if (m_HasFocus) { if (m_Cursor.Visible) m_Cursor.Visible = false; else m_Cursor.Visible = true; } } /// <summary> /// The text in this TextEditor instance, containing "\n". /// </summary> private string TextWithLBreaks { get { string Text = ""; foreach (string Str in m_Text) Text += Str; return Text; } } /// <summary> /// Returns a line of text. /// </summary> /// <param name="LineIndex">The index of the line of text to get.</param> /// <returns>The line of text, as indicated by the line index.</returns> private string GetLine(int LineIndex) { try { if (TextWithLBreaks.Contains("\n")) return TextWithLBreaks.Split("\n".ToCharArray())[LineIndex]; } catch(Exception) { return ""; } return TextWithLBreaks; } /// <summary> /// Make sure cursor's index is valid and in range. /// </summary> private void FixCursorIndex() { if (m_Cursor.CharacterIndex < 0) m_Cursor.CharacterIndex = 0; if (m_Cursor.CharacterIndex == m_Text.Count) m_Cursor.CharacterIndex = m_Text.Count - 1; } /// <summary> /// Make sure cursor's position is valid and in range. /// </summary> private void FixCursorPosition() { if (m_Cursor.Position.X < m_TextEditPosition.X) m_Cursor.Position.X = m_TextEditPosition.X; m_UpdateCharPositions = true; UpdateCharacterPositions(); UpdateHitboxes(); //Find the curor's real character index. int RealCharIndex = m_Cursor.CharacterIndex; RealCharIndex = (RealCharIndex < m_CharacterPositions.Count) ? //Make sure it doesn't overflow. RealCharIndex : m_CharacterPositions.Count - 1; if (RealCharIndex < 0) RealCharIndex = 0; //Make sure it doesn't underflow. //Adjust the character's position based on the real character index. if (m_Text.Count > 0) { Vector2 IndexPosition = m_CharacterPositions[(RealCharIndex > 0) ? RealCharIndex : 0]; if (m_Cursor.Position.X < IndexPosition.X) m_Cursor.Position.X = IndexPosition.X; if (m_Cursor.Position.Y != IndexPosition.Y) m_Cursor.Position.Y = IndexPosition.Y; } } /// <summary> /// The text in this TextEditor instance, without \n /// (except for those explicitly added by pressing backspace). /// </summary> public string Text { get { string Text = ""; foreach (string Str in m_Text) Text += Str; return Text.Replace("\n", ""); } } /// <summary> /// Returns the width of a character in this font. /// </summary> /// <returns>The width of the character in floating point numbers.</returns> private float CharacterWidth { get { return m_Font.MeasureString("a").X; } } /// <summary> /// Returns the width of a capitalized character in this font. /// </summary> /// <returns>The width of the capitalized character in floating point numbers.</returns> private float CapitalCharacterWidth { get { return m_Font.MeasureString("A").X; } } /// <summary> /// Returns the height of a character in this font. /// </summary> /// <returns>The height of the character in floating point numbers.</returns> private float CharacterHeight { get { return m_Font.MeasureString("a").Y; } } /// <summary> /// Returns the height of a capitalized character in this font. /// </summary> /// <returns>The height of the capitalized character in floating point numbers.</returns> private float CapitalCharacterHeight { get { return m_Font.MeasureString("A").Y; } } /// <summary> /// Returns the last line of text in the gap buffer. /// </summary> /// <returns></returns> private string CurrentLine { get { if (m_Text.Count > 1) { if (TextWithLBreaks.Contains("\n")) { string[] Lines = TextWithLBreaks.Split("\n".ToCharArray()); return Lines[Lines.Length - 1]; } else return TextWithLBreaks; } if (m_Text.Count > 0) return m_Text[0]; else return ""; } } /// <summary> /// The control received text input. /// </summary> private void Window_TextInput(object sender, TextInputEventArgs e) { if (e.Character != (char)Keys.Back) { int Index = TextWithLBreaks.LastIndexOf("\n", m_Cursor.CharacterIndex); if (Index == -1) //No occurence was found!! { if (Text.Length <= NUM_CHARS_IN_LINE) { AddText((m_CapitalLetters == true) ? e.Character.ToString().ToUpper() : e.Character.ToString()); m_CapitalLetters = false; m_UpdateCharPositions = true; return; } else { if (m_MultiLine) { AddNewline(); return; } } } if ((m_Cursor.CharacterIndex - Index) <= NUM_CHARS_IN_LINE) { //If the cursor has moved away from the end of the text... if (m_Cursor.CharacterIndex < (m_Text.Count - (1 + m_NumLinesInText))) { //... insert it at the cursor's position. m_Text.Insert(m_Cursor.CharacterIndex, (m_CapitalLetters == true) ? e.Character.ToString().ToUpper() : e.Character.ToString()); m_CapitalLetters = false; m_UpdateCharPositions = true; } else { AddText((m_CapitalLetters == true) ? e.Character.ToString().ToUpper() : e.Character.ToString()); //... just add the text as usual. m_CapitalLetters = false; m_UpdateCharPositions = true; } } else { if(m_MultiLine) AddNewline(); } } } /// <summary> /// Adds a string to m_Text, and updates the cursor. /// </summary> /// <param name="Text">The string to add.</param> private void AddText(string Text) { m_Text.Add(Text); m_Cursor.CharacterIndex++; m_Cursor.Position.X += CharacterWidth; } //Can the cursor move further down or has it reached the end of the textbox? private bool m_CanMoveCursorDown = true; /// <summary> /// Adds a newline to m_Text, and updates the cursor. /// </summary> private void AddNewline() { m_Text.Add("\n"); m_Cursor.CharacterIndex++; m_Cursor.Position.X = m_TextEditPosition.X; m_Cursor.LineIndex++; //Scroll the text up if it's gone beyond the borders of the control. if ((m_TextEditPosition.Y - TextSize().Y) < (m_TextEditPosition.Y - m_TextEditSize.Y)) { m_TextPosition.Y -= CapitalCharacterHeight; m_CanMoveCursorDown = false; m_UpdateCharPositions = true; } if (m_CanMoveCursorDown) m_Cursor.Position.Y += CapitalCharacterHeight; m_NumLinesInText++; } /// <summary> /// Removes text from m_Text. /// </summary> private void RemoveText() { FixCursorIndex(); FixCursorPosition(); if (m_Cursor.Position.X > m_TextEditPosition.X) { m_Text.RemoveAt(m_Cursor.CharacterIndex); m_Cursor.CharacterIndex--; m_Cursor.Position.X -= CharacterWidth; } if (m_Cursor.Position.X <= m_TextEditPosition.X) { if (m_Cursor.LineIndex != 0) { m_Cursor.Position.X = m_TextEditPosition.X + m_Font.MeasureString(GetLine(m_Cursor.LineIndex - 1)).X; if (m_MultiLine) { m_Cursor.Position.Y -= CapitalCharacterHeight; m_Cursor.LineIndex--; m_NumLinesInText--; if (m_TextPosition.Y < m_TextEditPosition.Y) m_TextPosition.Y += m_Font.LineSpacing; } } } } /// <summary> /// Moves m_Cursor left. /// </summary> private void MoveCursorLeft() { if (m_Cursor.Position.X > m_TextEditPosition.X) { m_Cursor.CharacterIndex -= (((NUM_CHARS_IN_LINE + 1) - GetLine(m_Cursor.LineIndex).Length) + GetLine(m_Cursor.LineIndex).Length); m_Cursor.Position.X -= CapitalCharacterHeight; } //Scroll the text right if the cursor is at the beginning of the control. if (m_Cursor.Position.X == m_TextEditPosition.X) { if (m_TextPosition.X > m_TextEditPosition.X) m_TextPosition.X -= m_Font.LineSpacing; } } /// <summary> /// Moves m_Cursor right. /// </summary> private void MoveCursorRight() { if (m_Cursor.Position.X < (m_TextEditPosition.X + m_TextEditSize.X)) { m_Cursor.CharacterIndex += (((NUM_CHARS_IN_LINE + 1) - GetLine(m_Cursor.LineIndex).Length) + GetLine(m_Cursor.LineIndex).Length); m_Cursor.Position.X += CapitalCharacterHeight; } //Scroll the text right if the cursor is at the beginning of the control. if (m_Cursor.Position.X == m_TextEditPosition.X) { if (m_TextPosition.X < m_TextEditPosition.X) m_TextPosition.X += m_Font.LineSpacing; } } /// <summary> /// Moves m_Cursor up. /// </summary> private void MoveCursorUp() { if (m_Cursor.Position.Y > m_TextEditPosition.Y) { m_Cursor.LineIndex--; m_Cursor.CharacterIndex -= (((NUM_CHARS_IN_LINE + 1) - GetLine(m_Cursor.LineIndex).Length) + GetLine(m_Cursor.LineIndex).Length); m_Cursor.Position.Y -= CapitalCharacterHeight; m_CanMoveCursorDown = true; } //Scroll the text down if the cursor is at the top of the control. if (m_Cursor.Position.Y == m_TextEditPosition.Y) { if (m_TextPosition.Y < m_TextEditPosition.Y) m_TextPosition.Y += m_Font.LineSpacing; } } /// <summary> /// Moves m_Cursor down. /// </summary> private void MoveCursorDown() { if (m_Cursor.Position.Y < (m_TextEditPosition.Y + m_TextEditSize.Y)) { m_Cursor.LineIndex++; m_Cursor.CharacterIndex += (((NUM_CHARS_IN_LINE + 1) - GetLine(m_Cursor.LineIndex).Length) + GetLine(m_Cursor.LineIndex).Length); m_Cursor.Position.Y += CapitalCharacterHeight; } else //Scroll the text up if the cursor is at the bottom of the control. { if ((m_TextPosition.Y + TextSize().Y) > (m_TextEditPosition.Y + m_TextEditSize.Y)) m_TextPosition.Y -= m_Font.LineSpacing; } } /// <summary> /// Allows the game to perform any initialization it needs to before starting to run. /// This is where it can query for any required services and load any non-graphic /// related content. Calling base.Initialize will enumerate through any components /// and initialize them as well. /// </summary> protected override void Initialize() { // TODO: Add your initialization logic here base.Initialize(); } /// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here m_Font = Content.Load<SpriteFont>("ProjectDollhouse_11px"); } /// <summary> /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// </summary> protected override void UnloadContent() { // TODO: Unload any non ContentManager content here } /// <summary> /// Calculates the size of all the text in the textbox. /// </summary> /// <returns>A Vector2 containing the width and height of the text.</returns> private Vector2 TextSize() { float Width = 0.0f, Height = 0.0f; foreach (string Str in TextWithLBreaks.Split("\n".ToCharArray())) { Vector2 Size = m_Font.MeasureString(Str); Width = Size.X; Height += Size.Y; } return new Vector2(Width, Height); } /// <summary> /// Update the hitboxes for the characters in the textbox. /// The hitboxes are used to detect collision(s) with the mouse cursor. /// </summary> private void UpdateHitboxes() { if (m_UpdateCharPositions) { int Height = 0; m_HitBoxes.Clear(); //Make sure it doesn't go out of bounds... if (m_Text.Count >= 1) { for (int i = 0; i < m_CharacterPositions.Count; i++) { //Make sure it doesn't go out of bounds... Height = (int)m_Font.MeasureString(m_Text[i < m_Text.Count ? i : m_Text.Count - 1]).Y; //Create a hitbox for each character if the character isn't the last one. if (i != m_CharacterPositions.Count - 1) { Rectangle Hitbox = new Rectangle((int)m_CharacterPositions[i].X, (int)m_CharacterPositions[i].Y, (int)(m_CharacterPositions[i + 1].X - m_CharacterPositions[i].X), Height); m_HitBoxes.Add(Hitbox); } } } m_UpdateCharPositions = false; } } /// <summary> /// Updates the positions of the characters. /// Called when a character is added or deleted from the textbox. /// </summary> private void UpdateCharacterPositions() { Vector2 Position = m_TextEditPosition; float XPosition = 0, YPosition = 0; if (m_UpdateCharPositions) { m_CharacterPositions.Clear(); int CharIndex = 0; foreach (string Str in TextWithLBreaks.Split("\n".ToCharArray())) { XPosition = 0; for (int i = 0; i < Str.Length; i++) { float CharWidth = m_Font.MeasureString(Str.Substring(i, 1)).X; XPosition += CharWidth; m_CharacterPositions.Add(CharIndex, new Vector2(XPosition + m_TextEditPosition.X, Position.Y + m_TextEditPosition.Y)); CharIndex++; } YPosition += CapitalCharacterHeight; Position.Y = YPosition; } ///This shouldn't be set here, because it is set in UpdateHitboxes(); //m_UpdateCharPositions = false; } } /// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); m_Input.Update(); UpdateCharacterPositions(); UpdateHitboxes(); foreach (Rectangle Hitbox in m_HitBoxes) { if (Hitbox.Contains(new Vector2(m_Input.MousePosition.X, m_Input.MousePosition.Y)) && m_Input.IsNewPress(MouseButtons.LeftButton)) { m_Cursor.Position = new Vector2(Hitbox.X, Hitbox.Y); int CharIndex = m_CharacterPositions.FirstOrDefault(x => x.Value == m_Cursor.Position).Key; if (CharIndex != -1) m_Cursor.CharacterIndex = CharIndex; } } foreach (Keys Key in (Keys[])Enum.GetValues(typeof(Keys))) { if (m_Input.IsNewPress(Key)) { m_DownSince = DateTime.Now; m_RepChar = Key; } else if (m_Input.IsOldPress(Key)) { if (m_RepChar == Key) m_RepChar = null; } if (m_RepChar != null && m_RepChar == Key && m_Input.CurrentKeyboardState.IsKeyDown(Key)) { DateTime Now = DateTime.Now; TimeSpan DownFor = Now.Subtract(m_DownSince); if (DownFor.CompareTo(TimeSpan.FromMilliseconds(m_TimeUntilRepInMillis)) > 0) { // Should repeat since the wait time is over now. TimeSpan repeatSince = Now.Subtract(m_LastRep); if (repeatSince.CompareTo(TimeSpan.FromMilliseconds(1000f / m_RepsPerSec)) > 0) // Time for another key-stroke. m_LastRep = Now; } } } Keys[] PressedKeys = m_Input.CurrentKeyboardState.GetPressedKeys(); //Are these keys being held down since the last update? if (m_RepChar == Keys.Back && m_LastRep == DateTime.Now) RemoveText(); if (m_RepChar == Keys.Up && m_LastRep == DateTime.Now) { if(m_MultiLine) MoveCursorUp(); } if (m_RepChar == Keys.Down && m_LastRep == DateTime.Now) { if(m_MultiLine) MoveCursorDown(); } foreach (Keys K in PressedKeys) { if (m_Input.IsNewPress(K)) { switch(K) { case Keys.Up: if (m_RepChar != Keys.Up || m_LastRep != DateTime.Now) { if(m_MultiLine) MoveCursorUp(); } break; case Keys.Down: if (m_RepChar != Keys.Down || m_LastRep != DateTime.Now) { if (m_MultiLine) MoveCursorDown(); } break; case Keys.Left: if (!m_MultiLine) MoveCursorLeft(); break; case Keys.Right: if (!m_MultiLine) MoveCursorRight(); break; case Keys.Back: if (m_RepChar != Keys.Back || m_LastRep != DateTime.Now) RemoveText(); break; case Keys.LeftShift: m_CapitalLetters = true; break; case Keys.RightShift: m_CapitalLetters = true; break; case Keys.Enter: AddNewline(); break; } } } base.Update(gameTime); } /// <summary> /// This is called when the game should draw itself. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.GraphicsDevice.ScissorRectangle = new Rectangle((int)m_TextEditPosition.X, (int)m_TextEditPosition.Y, (int)m_TextEditSize.X, (int)m_TextEditSize.Y); Vector2 Position = m_TextPosition; spriteBatch.Begin(SpriteSortMode.BackToFront); if(m_Cursor.Visible) spriteBatch.DrawString(m_Font, m_Cursor.Symbol, m_Cursor.Position, Color.White); // TODO: Add your drawing code here foreach (string Str in TextWithLBreaks.Split("\n".ToCharArray())) { spriteBatch.DrawString(m_Font, Str, Position, Color.White); Position.Y += CapitalCharacterHeight; } spriteBatch.End(); base.Draw(gameTime); } } } UpdateCharacterPositions() and UpdateHitboxes() seems to work perfectly. That is, UNTIL the text has been scrolled up: /// <summary> /// Adds a newline to m_Text, and updates the cursor. /// </summary> private void AddNewline() { m_Text.Add("\n"); m_Cursor.CharacterIndex++; m_Cursor.Position.X = m_TextEditPosition.X; m_Cursor.LineIndex++; //Scroll the text up if it's gone beyond the borders of the control. if ((m_TextEditPosition.Y - TextSize().Y) < (m_TextEditPosition.Y - m_TextEditSize.Y)) { m_TextPosition.Y -= CapitalCharacterHeight; m_CanMoveCursorDown = false; m_UpdateCharPositions = true; } if (m_CanMoveCursorDown) m_Cursor.Position.Y += CapitalCharacterHeight; m_NumLinesInText++; } I'm guessing that I need to take m_TextPosition.Y into consideration here: foreach (Rectangle Hitbox in m_HitBoxes) { if (Hitbox.Contains(new Vector2(m_Input.MousePosition.X, m_Input.MousePosition.Y)) && m_Input.IsNewPress(MouseButtons.LeftButton)) { m_Cursor.Position = new Vector2(Hitbox.X, Hitbox.Y); int CharIndex = m_CharacterPositions.FirstOrDefault(x => x.Value == m_Cursor.Position).Key; if (CharIndex != -1) m_Cursor.CharacterIndex = CharIndex; } } But I'm not entirely sure what to do. I tried both multiplying and adding m_TextPosition.Y to m_Input.MousePosition.Y and Hitbox.Y, but none of them seemed to work. Please help!
  18. Val Valentino

    Browser Game Fishes

    I've developed a browser game that I do not intend to sell and I'm looking for an investor to help me with advertising and upgrading. Languages: PHP7, HTML, JS, Jquery Database: MySQL FrameWork: Laravel Anyone who wants more information, write on PM
  19. This update is huge. Lots added which is why it took over 2 weeks. It’s very epic and I’m extremely proud of myself with this update. I hope you all find it fun!!! Here are the changes Change log Version 1.6 Game Mode Update: 2 New Ways To Play the Game! 2 Brand New Game Modes!! Completely change the way you play the game. Offers much more replay-ability and different ways to enjoy the game. All Game Modes can be permanently unlocked for 100 coins in the Store (Pharmacy). “Roll and Throw” Game-mode Play the original game but using Chemo Balloons as your main weapon. Instead of the Baseball Bat you will have Water Balloons filled with Chemo Medicine. Offers a completely different play style as you can attack from a distance with this “throwing” mechanic. All new animations for character and chemo balloon along with new sounds! Germs and Boss’s have adjusted health in this mode, this is for difficulty balancing. Everything is exactly the same except for the way you attack. “Coin Rush” Game-mode: In this mode you can not attack. The only power up you can use is the “Beanie” the ability to roll. Sarah is in a rush so you are now running and roll faster. There will be no enemies in this mode. There will be a 60 Second time at the start of the game. You will move room to room, all chosen randomly, trying to collect as many coins as you can before the timer reaches 0. Sound Easy? Well it won’t be as you will have to dodge all the room hazards in each room. Spikes, Mucus, Crates, Fireballs, and holes in the floor are all there to stop you. Also the coins disappear if you do not pick them up quick enough. All Coins will be placed randomly and have random timers on them when they disappear. They will give a blinking animation to alert they are going to disappear. Find Timer Pickups that will add seconds to your timer! Can you Top the leaderboards for this game mode? That’s right an all new leaderboard!! Brand New Music Track for this game mode. Music by Luis! You can now play Endless Mode with either weapon!! When you select Endless Mode it will ask you if you want to use the Bat or Chemo Balloon!! New Save Game Reminder Pop Up feature. If you click on Story Mode or Roll and Throw mode and an auto save is found it will alert you to either start new game or load your save game. Starting new game will overwrite the auto save data. New Section In SOSopedia for explanation and description on the New Game Modes! Credits screen updated and Added More Stats to the stats page Text in Store (pharmacy) updated for unlocking all Game Modes. New select cursor when using a controller. It is now animated and in color! Also updated for all added buttons and screens. Made the Coin, full heart, and half a heart pickups slightly larger. Made large hole look more like a hole and allows you to see the edge clearly. Now watch out and don’t fall in! Dryers no longer have a delay before they start shooting fireballs when you enter a room. They will start firing now right away. Fixed a crucial bug that could have prevented the defeat of chapter 2 boss, Chronic. Fixed another crucial bug that could possibly cause the screen to stay white after beating Chronic in Endless mode. Bug Fixes and Optimizations Done! View the full article
  20. I have programmed an implementation of the Separating Axis Theorem to handle collisions between 2D convex polygons. It is written in Processing and can be viewed on Github here. There are a couple of issues with it that I would like some help in resolving. In the construction of Polygon objects, you specify the width and height of the polygon and the initial rotation offset by which the vertices will be placed around the polygon. If the rotation offset is 0, the first vertex is placed directly to the right of the object. If higher or lower, the first vertex is placed clockwise or counter-clockwise, respectively, around the circumference of the object by the rotation amount. The rest of the vertices follow by a consistent offset of TWO_PI / number of vertices. While this places the vertices at the correct angle around the polygon, the problem is that if the rotation is anything other than 0, the width and height of the polygon are no longer the values specified. They are reduced because the vertices are placed around the polygon using the sin and cos functions, which often return values other than 1 or -1. Of course, when the half width and half height are multiplied by a sin or cos value other than 1 or -1, they are reduced. This is my issue. How can I place an arbitrary number of vertices at an arbitrary rotation around the polygon, while maintaining both the intended shape specified by the number of vertices (triangle, hexagon, octagon), and the intended width and height of the polygon as specified by the parameter values in the constructor? The Polygon code: class Polygon { PVector position; PShape shape; int w, h, halfW, halfH; color c; ArrayList<PVector> vertexOffsets; Polygon(PVector position, int numVertices, int w, int h, float rotation) { this.position = position; this.w = w; this.h = h; this.halfW = w / 2; this.halfH = h / 2; this.c = color(255); vertexOffsets = new ArrayList<PVector>(); if(numVertices < 3) numVertices = 3; shape = createShape(); shape.beginShape(); shape.fill(255); shape.stroke(255); for(int i = 0; i < numVertices; ++i) { PVector vertex = new PVector(position.x + cos(rotation) * halfW, position.y + sin(rotation) * halfH); shape.vertex(vertex.x, vertex.y); rotation += TWO_PI / numVertices; PVector vertexOffset = vertex.sub(position); vertexOffsets.add(vertexOffset); } shape.endShape(CLOSE); } void move(float x, float y) { position.set(x, y); for(int i = 0; i < shape.getVertexCount(); ++i) { PVector vertexOffset = vertexOffsets.get(i); shape.setVertex(i, position.x + vertexOffset.x, position.y + vertexOffset.y); } } void rotate(float angle) { for(int i = 0; i < shape.getVertexCount(); ++i) { PVector vertexOffset = vertexOffsets.get(i); vertexOffset.rotate(angle); shape.setVertex(i, position.x + vertexOffset.x, position.y + vertexOffset.y); } } void setColour(color c) { this.c = c; } void render() { shape.setFill(c); shape(shape); } } My other issue is that when two polygons with three vertices each collide, they are not always moved out of collision smoothly by the Minimum Translation Vector returned by the SAT algorithm. The polygon moved out of collision by the MTV does not rest against the other polygon as it should, it instead jumps back a small distance. I find this very strange as I have been unable to replicate this behaviour when resolving collisions between polygons of other vertex quantities and I cannot find the flaw in the implementation, though it must be there. What could be causing this incorrect collision resolution, which from my testing appears to only occur between polygons of three vertices? Any help you can provide on these issues would be greatly appreciated. Thank you.
  21. Hello Folks, We finally completed our first game - and need feedback on the mechanic, gameplay and design. Game : Fungry Birds is a fun, endless casual game about defeating..err.. eating your enemies. 4 hungry birds are inside a hacked drone in the space. With their beaks out. You steer it in a gravity less space - looking for aliens and gulping them! The hacked drone rotates continuously and you have not control whatsoever!There is one catch though - Birds can eat only the same colored enemy! Here is the complete story of our development. It contains all the twists and turns of our development cycle, hope you guys like it! You can watch the trailer here If you want to try the game on Android, its on Play Store! Some Screenshots attached below.
  22. Hello friends! I've got a new blog posting for my upcoming 2D pixel-art samurai fighting game 13 RONIN. This time I'm talking about background and character drawing. Please check it out at: Happy coding! /jan.
  23. LukasIrzl

    Tales of Vastor - Progress #9

    Tales of Vastor - Progress #9 Content What's done? What's next? Music What's done? Black knight model Another enemy was added to the game - the black knight, one of the late game enemies. Waypoint icons The waypoint icons will help you identify what is waiting on a certain waypoint. Currently, the following ones are designed and configured: The boss icon will be displayed on waypoints, where a boss will occur. So, you might want to buy a few items before getting into the fight. The merchant is located near Udins castle. There, you should stock up a few potions or even buy a new weapon. Last but no least, the temple icon. It displays a temple, where you can save the game and heal all your characters. Status icons Up until now, there was no way to know, which status effects applied to a certain character. Later, the following icons will be displayed, depending on the active statuses. A short explanation to the effects: freeze: Does not allow action choosing for a certain amount or turns. The only good thing about the freeze effect is, that it nullifies the fire effect. fire: Damages the affected character at the start of each turn. If you can not remove the status fast enough, the character might end up dying. If the character is frozen, the fire effect will remove the freeze status. defense up: Raises the defense of the affected character. This status effect is essential to survive certain bosses or even harder fights. lower defense: Will decrease the affected characters defense. You should be careful, if a character has this status applied, because the damage received will increase. New background Here is one of the refactored backgrounds used for fights: This one provides more fog in the background, which shows the depth of the landscape. Lately, I love to put in a little bit of fog to the backgrounds, since it provides so much more life. What's next? This week, I want to focus on the character animations for the playable characters. Up until now, the base animations are already available for every character. Power attack animations, on the other hand, are still missing. They should be complete, as soon as the beta version is released. Alongside with the new animations, a few particle effects have to the created, such as lightnings, status changes and many others. Music I am glad to tell, that the main theme is already composed and others will come soon. Here is the main theme by Andrew LiVecchi: If you missed to check him out on YouTube, be sure to click the link: Youtube.com If you have feedback, you can contact me via mail or direct message whenever you want. Be sure to take a look at Twitter as well, since there will be more frequent updates. Thank you!
  24. Can anyone explain how to procedurally generate lake floor(sand) texture like on screenshot below?
  25. KATbIKST

    Rust Tank

    Hi people! We have released the third game for Android. Title: Rust Tank Developer: KATbIK STUDIOS Genres: Action Engine: Unity Platform: Android FREE Good old epic tank battles in retro style! Rust Tank is a dynamic action game about the world of tank battles in pixel graphics. Classic tanks made in retro style. Fight and win! Destroy the hordes of hostile tanks and their bases. Upgrade your combat vehicles to defeat the most powerful enemies. Complete missions and unlock all levels. In the game there are various skills and bonuses scattered throughout the levels. GooglePlay: https://play.google.com/store/apps/details?id=com.katbikstudios.rusttank Twitter: https://twitter.com/KATbIKST https://www.youtube.com/watch?v=nn59qqh9hKw&t=0s&index=7&list=PLJlhYvntoNJG75yZyUSM5Kxfn4ulZqvHT
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!