Jump to content
  • Advertisement
Sign in to follow this  
  • entries
  • comments
  • views

May 18 Project Spotlight: Felicity Toad

Sign in to follow this  


Crowdsourcer.io is a growing concept, it allows projects/small businesses to bring in collaborators on a revenue share basis to help them grow and expand. Felicity Toad is one of many projects that is successfully developing their game through this platform and we want to share some insights with you.

Felicity Toad has started as a labour of love and grown into a team of co-operative people who are willing to work on the final vision of this original game. Its foundations lay with one Neil Badman, who being 43, has decided to go with a dream. He had spent many years in menial jobs, the most recent being in care, but working in the health sector gave him purpose and meaning, which would profoundly alter the way in which he saw his life. Unfortunately, after a time he fell into disarray, which ended with a breakdown, but without this event Neil would never have been diagnosed with schizophrenia, a much stigmatized illness, in part thanks to Hollywood and other uneducated outlets, he says. Unperturbed and with a new and hopefully temporary found freedom, he wondered what to do with his time out of work. He began a band, but couldn’t quite find the sound he wanted despite many auditions and help from friends, so he put this project aside for the time being and pondered what was next.


A gamer turned developer

Before his breakdown he had found himself playing various computer games in his spare time, something he had always loved, and stumbled across a game called Oolite, a cooperatively built game reverse engineered from an old classic called Elite, a 3D space game that ran on 32k and even less for the Vic-20, a remarkable technical achievement. Oolite was a modern take on this classic, and being cooperatively built allowed you to construct your own content that would go up on the game’s site, for other people to download. Being a lifelong drawer and creative he took to looking at what other people weren’t particularly working on, settling with the look of the stars and the nebula’s generated from various images within the file system. He spent a year perfecting the use of the nebula generator, which was extremely popular with the player base. After creating a few different assets for this game he moved on and discovered a game called Battle For Wesnoth, a tongue in cheek strategy game that was simple, but very fun. It too was a labour of love by a very involved community and was not only moddable but had its own programming language.

It was around here he was diagnosed with schizophrenia and suddenly found himself with a lot of free time, a very frightening time but free nonetheless. Neil needed to find something to occupy himself with, a distraction therapy from the nightmarish voices that were plaguing him, this was when he started to explore and start the band.  He found himself returning to Battle For Wesnoth, as it was a perfect platform to learn something new, whilst creating a story and the characters in it, the start of a therapeutic addiction that instantly rang true for him. This was nearly but not quite all his loves combined, he discovered the joy of creating through programming, despite his extremely messy first attempts. The code was however functional, and a story emerged. Neil wondered what it would be to have total creative freedom other than modding someone else’s build, so he researched and soon found Unity3D, a platform for developing games from scratch that is free up until you make a certain amount of money, if any.


The start of something new

Now he needed an idea, he went through the motions of beginning to create the basics of a game, but soon found the technology wasn’t quite there yet to do what he wanted, so it was back to the drawing board. This was the birth of Felicity Toad, a tongue in cheek adventure, but dark and gritty in places. This would be a labour of love, a therapy, and a possible path back into work. It seemed perfect.   



The Beginnings of Felicity Toad


Soon the idea was growing, and Neil realized if he was going to build the game it would take years of learning all the different aspects, and as much as he had the drive to get on with it, technology is changing at a rate, and in the supposed time he took to build the game it would be out of date by the time he finished, surrounded by up and coming virtual reality and holographic technology, would a 2D platformer survive in this environment? He needed a team, he didn’t have money and finding people who would fall in love with his game and join up seemed extremely unlikely. After posting on numerous sites, sometimes in the wrong places, he garnered a small amount of interest, but it was through exploring the different sites he could try that he stumbled upon a suggestion posted by someone for someone else. A site called Crowdsourcer.io was up and coming, promising to set people such as himself on the right path with the right help. There was nothing to lose.



Progress Made on Felicity Toad After Signing Up On Crowdsourcer.io


Crowdsourcer.io has helped the project to get its creative foothold in a world already swimming in games, so what would be different about it? Well, firstly he decided he needed to be doing something doable as a first game, so he settled on a 2D platformer, but there are many 2D indie games out there and being developed, even AAA companies still produce 2D platformers of extremely and unobtainable quality to compete with. There was still hope, a large sector of society has a love of independently made games, simply because they can take risks big AAA companies can’t afford to, and the 2D style is very reminiscent yet appealing to all age ranges. So what could be different? What needs to be familiar? This was a balance that needed to be assessed, and the Felicity Toad team have gone a way to addressing this interesting situation.


Neil is still working on the game and making strides to finishing it every day. You can learn more about Neil’s project, Felicity Toad by following the link or finding his project on www.crowdsourcer.io. If you would like to contribute to Neil’s project you can find it here and can apply to contribute! 

View the full article

Sign in to follow this  


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement
  • Advertisement
  • Blog Entries

  • Similar Content

    • By Jiraya
      I am planning to use some third party libraries, more specifically FreeImage, and in the Download page there is a Disclaimer:
      Basically it displays the licenses and the copyright owners of the libraries included within FreeImage.
      I know I have to display FreeImage's license at some point in my game, but do I have to display all of those licenses from the libraries contained within FreeImage itself?
    • By 999PING
      I'm very often facing one small problem when trying to learn some new stuff - hard to choose what to learn next.
      Even if the problem seems to be small it has a very huge impact on the final result I think. And because Game Programming offers so much to learn, I'm always feeling that I'm missing something important and wasting my time learning something not important or unneeded. Or usually, I'm afraid to focus on something specific and huge for a long time, because I think that I'll spend all my time on that particular filed and will not be able to solve another problem.
      So I've tried to fit all my thoughts in this questions.
      1) Are you trying to cover all the aspects of Game Programming? Or you trying to focus on some specific aspects like physics, animations, or networking etc.
      2) What is your way to find a new theory or whatever else for your learning process? (Manuals, Courses, Books, Documentation? etc.)
      3) When you trying to learn while practicing, are you search for learning because of a problem that appears, or because you wants to try new things? How do you choose this new thing? And finally, Which of this two approaches was the best for you if any?
      Not actually in the scope of the topic, but I'm also very interested to hear your thoughts on this.
      What is Game Programming for you? How would you describe what should Game Programmer able to solve?
    • By supermikhail
      You click on objects in the world and get their name and how it's pronounced, in Russian which is my native language.
      That's pretty much it. Basically I want to be 100% sure that I can accomplish the project. The problem is, as a player, would I want to buy it? I myself am poor and consequently very selective with my entertainment spending. Which means, it'd be too lean an offering for me.
      On the other hand, I more or less believe that there are... enough "suckers" out there who'd pick up anything with "language learning" in description... To put it plainly.
      I guess that's the short of it. I don't know if that last intuition of mine is correct. And if it is, I don't actually want to scam people. But I don't want to promise something that I don't know that I'll be able to deliver, like... voice recognition or anything as useful and preposterous. Or even a story. I've never written for games. I've never designed a puzzle. All of which would probably add all the value necessary, but more likely just show me my limits.
      I suppose you could say "make a prototype". And I know I won't enjoy playing it, simply because, well, Russian is my native language and I like challenge. But I'd enjoy making it, and I like the idea of using videogames for studying languages.
      Any thoughts to help my conscience, more or less?
    • By Septopus
      Okay, looking for some constructive feedback/criticism here... 
      What follows is the code of my c# UDP Socket Class.  I've written this based on a number of online examples and a few distant memories from the past, so I really have no idea how "bad" the code is/could be in a 100+ concurrent connection scenario(my dev environment is just two machines at the moment)...  It works, I know that, it is fairly stable(I can't break it when using it normally), and it behaves how I believe I want it to. 
      It is a dual purpose class for handling both Servers and Clients.  It uses an asynchronous receive and synchronous send(I may switch to async send if it proves beneficial later on).  My servers use Client sockets to communicate with each other and to perform internal connection tests in a multiple server, "single shard" type environment.  I'll be devising some heavy load testing methods a little further down the line, but I'm hoping to fish out most of the major gotchas before I get there.
      So, please, let me know how to fix it up if it smells terribly to you, or if not, that's even better...
      Sorry for the large code dump, but THANKS for checking it out!
      using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using UWAvatarServerData; namespace UWAvatarServer { public class UDPSocket : IDisposable { //Some simple string length counters and averages to get a rough idea of generated traffic. public int sndMax = 0; public MovingAverage sndAvg = new MovingAverage(); public int csndMax = 0; public MovingAverage csndAvg = new MovingAverage(); public int rcvMax = 0; public MovingAverage rcvAvg = new MovingAverage(); //Constant for configuring the prevention of ICMP connection resets private const int SIO_UDP_CONNRESET = -1744830452; //UDP socket private Socket _socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //Buffer Size Constant private const int bufSize = 8 * 1024; //Raw string data from client packets private Dictionary<EndPoint, Queue<string>> messageDictionary; //Queue for holding raw string data from server packets when in client mode. private Queue<string> cQ; //Referece to the data store used by the server(for access to the current game time clock) private UWDataStore dataStore; //Time code storage for last sent/received messages private double lastSentMessage = 0; private double lastReceivedMessage = 0; //Boolean to determine which mode we're in so received messages get put in the right place. private bool clientMode = false; //Max string lenght allowed by the servers. private int maxMessageLength = 1450; //IDisposable stuff public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { // free managed resources if (_socket != null) { _socket.Dispose(); _socket = null; } } } //State class for async receive. public class State { public byte[] buffer = new byte[bufSize]; public EndPoint epFrom = new IPEndPoint(IPAddress.Any, 0); } //Server "Mode" public UDPSocket(Dictionary<EndPoint, Queue<string>> msgsDict, UWDataStore DATASTORE) { clientMode = false; messageDictionary = msgsDict; dataStore = DATASTORE; lastSentMessage = dataStore.UWServerSeconds; } //Client "Mode" public UDPSocket(Queue<string> mq, UWDataStore DATASTORE) { clientMode = true; cQ = mq; dataStore = DATASTORE; lastSentMessage = dataStore.UWServerSeconds; } public void CloseSocket() { _socket.Close(); } //Internal connection status checking public int SendHowStale() { if (lastSentMessage == 0) lastSentMessage = dataStore.UWServerSeconds; return (int)(dataStore.UWServerSeconds - lastSentMessage); } //Internal connection status checking public int ReceiveHowStale() { if (lastReceivedMessage == 0) lastReceivedMessage = dataStore.UWServerSeconds; return (int)(dataStore.UWServerSeconds - lastReceivedMessage); } //Start/Bind a Server. public void Server(string address, int port) { //In case restarting uncleanly, dunno if this actually does anything.. _socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.ReuseAddress, true); //Ensure all async packets contain endpoint info and etc. _socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.PacketInformation, true); //Ignore ICMP port unreachable exceptions. _socket.IOControl((IOControlCode)SIO_UDP_CONNRESET, new byte[] { 0, 0, 0, 0 }, null); //Bind to port. if (address == "all") { _socket.Bind(new IPEndPoint(IPAddress.Any, port)); } else { _socket.Bind(new IPEndPoint(IPAddress.Parse(address), port)); } //Start receive callback process. Receive(); } //Setup a Client to Server socket. public void Client(string address, int port) { //Dunno if these two options do anything for client sockets, but they don't seem to break anything. _socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.PacketInformation, true); _socket.IOControl((IOControlCode)SIO_UDP_CONNRESET, new byte[] { 0, 0, 0, 0 }, null); _socket.Connect(IPAddress.Parse(address), port); //Start receive callback. Receive(); } //ServerSend sends to any EndPoint from THIS server. public void ServerSend(string text, EndPoint ep) { try { byte[] data = Encoding.ASCII.GetBytes(text); _socket.SendTo(data, ep); lastSentMessage = dataStore.UWServerSeconds; if (text.Length > sndMax) sndMax = text.Length; sndAvg.ComputeAverage((float)text.Length); //Console.WriteLine("TO NET: " + text); } catch (Exception ex) { Console.WriteLine("ServerSend Exception: " + ex.Message); } } //Client Send only sends to the connected Server. public void cSend(string text) { try { byte[] data = Encoding.ASCII.GetBytes(text); _socket.Send(data); lastSentMessage = dataStore.UWServerSeconds; if (text.Length > sndMax) sndMax = text.Length; sndAvg.ComputeAverage((float)text.Length); //Console.WriteLine("TO NET: " + text); } catch (Exception ex) { Console.WriteLine("cSend Exception: " + ex.Message); } } //Setup Async Callback private void Receive() { try { State so = new State(); _socket.BeginReceiveFrom(so.buffer, 0, bufSize, SocketFlags.None, ref so.epFrom, new AsyncCallback(_Receive), so); } catch (Exception) { } } //Receive Callback private void _Receive(IAsyncResult ar) { try { State so = (State)ar.AsyncState; int bytes = _socket.EndReceiveFrom(ar, ref so.epFrom); lastReceivedMessage = dataStore.UWServerSeconds; string smessage = Encoding.ASCII.GetString(so.buffer, 0, bytes); //Console.WriteLine("FROM NET: " + text); if (smessage.Length < maxMessageLength) { if (smessage.Length > rcvMax) rcvMax = smessage.Length; rcvAvg.ComputeAverage((float)smessage.Length); if (clientMode) { cQ.Enqueue(smessage); } else { if (!messageDictionary.ContainsKey(so.epFrom)) { messageDictionary.Add(so.epFrom, new Queue<string> { }); } messageDictionary[so.epFrom].Enqueue(smessage); } } _socket.BeginReceiveFrom(so.buffer, 0, bufSize, SocketFlags.None, ref so.epFrom, new AsyncCallback(_Receive), so); } catch (Exception) { } } } } Generally speaking I use it as such:
      public static bool running = true; static void UDPServer() { using (s = new UDPSocket(MessageDictionary, UWDataStore)) { s.Server("all", 37373); while(running) { //Servery Stuff Goes Here. //Like reiteratively dequeuing the Message Dictionary Queues and processing/replying to all commands/etc... } } } All processing of individual messages from clients is handled with Task.Factory tasks, and a reference to the server's socket varible (s), and the client's EndPoint is sent along the ride for use in replying to clients.  There's no game logic and there are no client replies that happen directly from within the UDP server's main while loop, mostly just connection status checking and reorganizing of the Message Queues into Tasks.
      Thanks again for making it this far.
    • By hafo
      I would like to invite you to submit your games to the IX F&S Play Indie Awards. The deadline is October 31th. It´s free to submit your games.
      F&S Play has established 1 award of 7,000 euros for the best Indie Game Category. The 10 finalists will also receive a free Booth for showing their games in the F&S Indie Zone.
      Check out the rules here: 
      F&S Play is the new name for the previously called AzPlay (Bilbao, Spain). It has become consolidated as one international reference for the promotion of new projects, awarding prizes every year to the most original, creative and innovative independent videogames of the moment. Over 1.100 projects from the 5 continents have been received during these 8 years and over 250,000 euros in prize money distributed. The integration of AzPlay in a festival as renowned as the Fun&Serious reinforces both events and consolidates the Fun&Serious in the international scene.
      More info about past Fun&Serious editions here:
      More info about past AzPlay editions here:

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!