• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.

Stavros Kokkineas

Members
  • Content count

    35
  • Joined

  • Last visited

Community Reputation

111 Neutral

About Stavros Kokkineas

  • Rank
    Member
  1.   Well, no offence, but I personally think that none of the three proposals would fit in the Zelda Universe. Irrelevant to that, though, I think that it's generally kind of oblivious to decimate the central character like that at the end of a game when all the psychological attachments between the player and that character (which are the most important) have beed developed and solidified. Perhaps a Butterfly Effect or or a Tarantino videogame would be more appropriate for that kind of stuff, although I still think that watching a movie for 2 hours is completely different than controlling a character for 25 (also what would happen gameplay wise?). Tastes differ though so there could be some audience there for you. As for the topic (deriving ideas for stories from existing games) I believe there's no better way for someone to learn or improve himself as a writer, than by analyzing stories of famous and successful videogames and trying to improve on them. This is just a place where one could come and get inspired in ways to make his stories better.
  2. So, this is part of a procedure I do quite often so I can learn the basics about writing a videogame story (I've come to call it "Story Testing"). The idea is mainly about taking the theme (meaning style, gameplay mechanics etc.) of a game and the story (which means characters, general story or even dialogues) and think about interesting ways of how you could tweak or improve these elements to make a better game (obviously this is very subjective and a good story can differ greatly from person to person).        For example, I've been looking at some trailers for The Wind Waker HD (which will be released in October) and I've been thinking that a pretty cool character that's been missing from the game is the romance of Link's sister. I imagine him as a kind of a goofy guy (kid really) that after Link's sister has been taken he embarks on a journey of his own to save her. Link could meet him at certain points in the game (for example at Windfall Island) and he could act as a funny "wanna-be-of-help" character but that could give Link viable info on certain occasions.       Another idea, I've had since childhood, is a game where Wario (instead of Bowser) abducts princess Peach and asks a ransom from Mario to set her free.       Over the years I've had a great number of ideas of how a game's story could improve and I think it's a great exercise to think "outside of the box" and in the process become a better writer yourself. So, I'm posting this topic as an "inspirational ground" where we can use existing stories and characters to learn the essential principles of writing. If anyone else has some ideas that he thinks would make for a(n) (more) interesting game, or has some feedback for ideas already posted, please set your mind free below.
  3. Well, I most certainly understand the breakthrough that the game was in terms of atmosphere and liveliness, actually realism of the world. I don't believe any other game of that time does a better job at actually making you feel like you ARE in this world. It's very difficult, especially for a 2D game as the brain works in 3D. But the major achievement here, is the balance, the attention and the [i]incredible[/i] sense of exploring an actual planet. For a 2D game I literally cannot imagine something more true and real than Super Metroid. Actually, I believe it's one of the[i] very[/i] few 2D games that can even claim to have touched that feeling. I personally broke down the game mechanics so I can observe more clearly what made this game so great. I learn from it in the hope of one day maybe achieving something like this. I believe that Super Metroid is an encyclopedia of game designers as it contains almost all game design mechanics of the 2D era. From strategy, to platform, to shootting, to horror, general atmophere, aim and levelling up or upgrading your character. All the essence is there in a masterfully balanced and impeccable way. This is what does Super Metroid so great and this is why it is still fun today.
  4. Thanx for the answers -Werror did the trick. The code compiles but the function doesn't seem to work as SotL noticed. So as I won't probably be able to understand through experience, can someone explain to me what this line does? [code]for(auto const& tag : player)[/code] I mean it's not a regular for as there aren't three conditions but only one. So the loop just runs for all the keys of player? Does it just runs forever? Or do I have to just add the extra conditions?
  5. Ok, so what I really want to do in my life is become a game designer. I learn programming and drawing so I can become a good designer. But the most important thing I do to be a good designer is, well, play games. Play lots of them and write down all the elements that I can find and whether I believe they are fun or not according to how I felt as I gamer when I first encountered them. So I make this topic, with the first notes I've made and maybe some improvements I thought while playing that could make the game better. I create this topic as a gathered knowledge topic, meaning essentially, that i want your opinion and observations too about what you found great about Super Metroid's game design. Whether that's level design, game mechanics, story, atmosphere, whatever. Ok, so I begin: [u][b]Positive:[/b][/u] + Samus with the click of a button does an instant, quick movement that lets the player move in a different way in the environment (Jump). + The character has two morphs that essentially play the same. The only difference is that the player can go to particular places and interact differently with the environment with the second morph. (Morphball) + The character has special moves that allow him to search the environment so he can move on. Essentially trial and error without losing. (Character moves) + In many cases the player can see a path by where he could move on but if he doesn't have particular abilities he can't go there. (Backtracking) + Rooms have essentially two orientations. Vertical and horizontal. (Environment design) + Constant change between vertical and horizontal design to keep the feel and flow of exploring. (Flow) + The player is encouraged to search every inch of the rooms by being rewarded with new secret rooms or upgrades. (Game / Level design) * Maybe there should be more indications that a reward is there to more secret places. + Enemies that at first were harmful become harmless as the game progresses. (Feeling of achievement, Flow) +Enemies reward you for killing them, [i]but not always[/i]. (Game design) + Most enemies take 2-3 hits to die and Samus can shout rather fast. (Flow) + Enemies that take more hits at the beginning of the game to kill take much more less as Samus upgrades her beams. (Feeling of achievement, Flow) + Occasionally different tactics or beams to kill an enemy. (Enemy design, Flow) + Environmental and Logic Puzzles. (Game design) 1. In most Environmental puzzles you seem to be stuck in a room and try to find a way to break through by scanning or searching the room for breakable blocks, invisible walls etc. 2. In most Logic puzzles an obstacle is or appears between you and the next room. You have to figure out a way to destroy the obstacle or preventing from appearing at all. In some cases go through the obstacle before it obscures your way (Speed Booster). [u][b]Minus:[/b][/u] - Begin from save without full energy. Sometimes the player has too little energy and he has to kill enemies or find a refill room to be able to continue the game. [u][b]Personal thoughts / improvements[/b][/u] * Maybe there could be a scanning ability in the jump of Samus. For example if she jumps towards a wall, and there are breakable blocks, an instant change of sprites for these blocks could help the player find new routes. Exploration could be much more convenient.\ Ok, for the moment this is all I have written down. I will most surely add to these lists. Now if anyone else has observed something I didn't see he's more than welcome to point it out and I will add it to the list.
  6. Ok I put it in the build command before "-Wall", which I no idea what it means btw so If someone could explain I would be grateful [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img], and it does complie when I #include <regex>. I'll try washu's code and see the results. Thanx for the info! EDIT: Ok, now I a real problem with this line [code]auto const &tag : player;[/code] It ALWAYS says it needs an initializer before ':' . I suppose this initializes tag as a PlayerInfo variable with the contents of the player variable. So, why does it need an initializer before ':' and what kind of initializer am I supposed to declare?
  7. Ok, I'm using Geany. So do I add it at the build commands?
  8. Ok, so as I have said I'm making this text adventure game so I learn the basics of programming. After overcoming the problem of reading texts tat contain argument tags for the name, age, weight etc. of the character I know have another "problem". I want to have brach story trees in the game meaning that if the player makes for example the A choice a story is described, if he makes a choice B another story unravels and so on. Right know I have a repeating code which I don't like very much wich chenges the "flag" of the file and I use the flag to read the corresponding document that;s in the file. Meaning something like this: [code]void branches (char c){ cout << l << l; // Introduction if (flag == "Introduction.txt" && c == 'a') { flag = "Intro A.txt"; } else if (flag == "Introduction.txt" && c == 'b') { flag = "Intro B.txt"; } // Rebels After Start else if (flag == "Intro B.txt" && c == 'a') { NAME = "Aenaeas" flag = "Name - Ok.txt"; } else if (flag == "Intro B.txt" && c == 'b') { flag = "Name - Noone.txt"; } else if (flag == "Intro B.txt" && c == 'c') { getName(); flag = "Name - Ok.txt"; } // Rebels After Peblo else if (flag == "Intro A.txt" && c == 'a') { flag = "House_Not.txt"; } else if (flag == "Intro A.txt" && c == 'b') { flag = "Rebels_after_Peblo.txt"; } else if (flag == "Intro A.txt" && c == 'c') { flag = "Saritonae_Not.txt"; } else if (flag == "Intro A.txt" && c == 'd') { flag = "Limbordo_Not.txt"; } else if (flag == "Intro A.txt" && c == 'e') { flag = "Gavrama_Not.txt"; } else if (flag == "Intro A.txt" && c == 'f') { flag = "Castle_Not.txt"; } // Exit else { flag = "Exit"; } story(flag); }////////////// branches[/code] And this is just the first two choice inputs. Can anyone think of a clever system where I can kind of do the above process automated? I really can't think of really smart way of naming the files and understand what they are about and also have an automated read system according to current and previous choices of the player. Is there such a way or should I just change the design of the game?
  9. Ok, so I don't think I have c++0x but auto doesn't work also. [quote]Template.cpp:85:9: warning: ‘auto’ will change meaning in C++0x; please remove it[/quote] Also, Alvaro can please tell me what "-std=c++0x" is and where do I put it/ how I try it?
  10. I do have MinGW. Ok probably gonna try all the things you said. Thanks!
  11. @SotL: Thanks for all the help, I changed the code according to your suggestions. @Washu: When I include <regex> the compiler gives me: [quote]/usr/include/c++/4.5/bits/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.[/quote] That means that I have the previous standard?
  12. Ok, as I didn't really describe the universe i had in my head in my previous post I'd like to do it now: The main character is a man around his 30s, who wakes up in the cabinet as described in the previous post. After a while he starts listening a monstrous whispering in his head telling him he's a murderer. He also has a kind of premonition knowing dangerous thing that will happen but moments before they actually happen. Something like a sense of deja vu. Trying to find out what's going on he starts following animals which seem to want to lead him somewhere (wolfs, deers, butterflies). After a while and while has gathered a lot of pieces of his story it is revealed that his wife was murdered. Denying to believe that he was the murderer and while the voice in his head has become almost constant a creature emitting a red-light aura appears and starts to haunt him. He gets away and now the voice is telling him to go to the tower. Although he has never listened to the voice before he decides to go and find out whatever is happening. And that's all . [img]http://public.gamedev.net//public/style_emoticons/default/happy.png[/img]
  13. Ok let's give this another try. The man opened his eyes. He didn't remember anything. He got up. He could feel anxiety. What was going on? Where was he? He looked around him. He was in a wooden cabinet. Outside was night. He looked down on himself. He had blood on his hands. Blood! What had happened? He saw a piece of wood lying around by the wall. He grabbed it and walked outside. Total blackness around him, though he could see the red leaves of the trees. He started walking. Noises were heard from all sides of the forest. He was angry but he didn't know why. Why? Why was there blood on his hands and where was he? Suddenly a crack was heard really close to him. He turned around and readied his weapon. Two giant glittering eyes were looking straight at him. He clenched his hands around the wood, ready to attack anything that came his way. But then another crack was heard. A crack behind him. He turned on the side so he could see both his bullies. The glittering eyes got smaller and afraid. A wolf started crying and the cry slowly degraded until there was no more. The man was still looking at the side of the second crack. Noone was there. Nothing. No human, no animal and no beast. After a minute, that felt like an eternity, he decided to start walking again. What had happened? Why did the wolf leave and why didn't he remember anything? Again and again only one thing was on his mind: What is all this? He didn't know. But he was gonna find out. And he was going to do it reather soon. Ok, hope that's closer to what you're looking for.
  14. Ok, first of all thanks for your answers. Some answers I can give now: [quote] [left](By the way, you have a bug there. It should be: "[/left] [left][color=#282828][size=3]result += orText.substr([color=#FF0000]placeholderBegin[/color], length);[/size][/color][/left] [left][color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif][size=3]", unless I'm mistaken about what that snippet is trying to do) [/size][/font][/color][/left] [/quote] Well, actually placeholderBegin should be string::npos by then which is a bug. placeholderEnd is the right one as it essentially strores the end position of each tag, which means that the text appended in the 'result' string begins at the point of placeholderEnd till the next tag which is the position of placeholderBegin. [quote] [left][color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif][size=3]Because the code is sloppy in several ways, it's harder to see the mistakes. By re-writing the 'replaceTags()' code, it actually appears like your original code (your rewritten version of rip_off's code) didn't even work, so many mistakes were present. I can't be sure, however, since it was hard to read. I may have just been reading it incorrectly.[/size][/font][/color][/left] [/quote] I don't think it's sloppy. And the only bug I can find is the placeholderBegin being npos by the end of the while{} loop. Also, it does work as I tested it with your text several times. [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] The only sloppy think I can see is probably the try-catch commands and I essentially did those to train myself at exceptions. Otherwise I think it's pretty coherent code, almost identical to rip_off's. [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] I'll check out your code tommorow and try to unsloppy it. Can you be a little more specific at what did you find that was sloppy? [quote] [left][color=#000088][size=2]void[/size][/color][/left] [left][color=#000000][size=2]replaceTags[/size][/color][/left] [left][color=#666600][size=2]([/size][/color][/left] [left][color=#000088][size=2]string[/size][/color][/left] [left][color=#666600][size=2]&[/size][/color][/left] [left][color=#000000][size=2]tagged[/size][/color][/left] [left][color=#666600][size=2],[/size][/color][/left] [left][color=#000088][size=2]const[/size][/color][/left] [left][color=#660066][size=2]PlayerInfo[/size][/color][/left] [left][color=#666600][size=2]&[/size][/color][/left] [left][color=#000000][size=2]player[/size][/color][/left] [left][color=#666600][size=2])[/size][/color][/left] [left][color=#666600][size=2]{[/size][/color][/left] [color=#000088][size=2]for[/size][/color][color=#666600][size=2]([/size][/color][color=#000088][size=2]auto[/size][/color][color=#000088][size=2]const[/size][/color][color=#666600][size=2]&[/size][/color][color=#000000][size=2] tag [/size][/color][color=#666600][size=2]:[/size][/color][color=#000000][size=2] player[/size][/color][color=#666600][size=2])[/size][/color][color=#666600][size=2]{[/size][/color] [color=#000000][size=2] std[/size][/color][color=#666600][size=2]::[/size][/color][color=#000000][size=2]regex rx[/size][/color][color=#666600][size=2]([/size][/color][color=#000000][size=2]tag[/size][/color][color=#666600][size=2].[/size][/color][color=#000000][size=2]first[/size][/color][color=#666600][size=2]);[/size][/color] [color=#000000][size=2] tagged [/size][/color][color=#666600][size=2]=[/size][/color][color=#000000][size=2] std[/size][/color][color=#666600][size=2]::[/size][/color][color=#000000][size=2]regex_replace[/size][/color][color=#666600][size=2]([/size][/color][color=#000000][size=2]tagged[/size][/color][color=#666600][size=2],[/size][/color][color=#000000][size=2] rx[/size][/color][color=#666600][size=2],[/size][/color][color=#000000][size=2] tag[/size][/color][color=#666600][size=2].[/size][/color][color=#000000][size=2]second[/size][/color][color=#666600][size=2]);[/size][/color] [color=#666600][size=2]}[/size][/color] } [left][color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif][size=3]Just sayin' [/size][/font][/color][/left] [/quote] Thanx a lot Washu, a lot of new stuff. I'll check it tommorow and I'l post the results.
  15. Ok, first of all thanks everyone for your replies. This is the last time I write code for this particular use. I will use what I wrote to make sure the texts appear correctly before I apply them in my game. So, taking into consoderation rip_off's last reply, I changed the code to this: [code]#include <iostream> #include <string> #include <fstream> #include <map> using namespace std; const string el = "\n\n"; const char placeholderSymbol = '/'; // too long or good description? const string playerDetails[] = { "name", "age", "weight", "class", "race", "hair color", "pant size" //Does the compiler initialize these in Memory according to aphabetical order? }; // why playerDetails.length won't work? Because it's defined? const unsigned crowdOfDetails = sizeof(playerDetails) / sizeof(playerDetails[0]); typedef map< string, string> PlayerInfo; string makeArg (const string &attribute){ string result; result.push_back(placeholderSymbol); for (string::size_type i = 0; i < attribute.size(); ++i) //does ++i and i++ make ay difference in for? { char c = attribute[i]; if (c == ' ') c = '-'; else c = toupper(c); result.push_back(c); } result.push_back(placeholderSymbol); return result; } string readFile(const string &filename){ fstream stream; try { stream.open(filename.c_str()); if (!stream) throw " failed to open.\nPlease check the name of your file."; } catch (const char * str){ cout << "File '" << filename << "'" << str << "\n\n"; terminate(); } //calling terminate is right? return string(istreambuf_iterator<char>(stream), istreambuf_iterator<char>()); } PlayerInfo enterDetails (istream &input, ostream &output){ PlayerInfo result; string textArg, attValue; // const string &attribute; Why can't I declare it here and use it in the loop? Because it's a constant reference to an address of memory? for (unsigned i = 0; i < crowdOfDetails; i++){ // why can't I define i as a char and it must be unsigned int? const string &attribute = playerDetails[i];// Why do I get a warning here when I define crowdOfDetails and i as chars? - >RepName.cpp:86:44: warning: array subscript has type 'char' [-Wchar-subscripts] output << "Please enter " << attribute << ": "; getline(input, attValue); textArg = makeArg(attribute); result.insert(pair<string, string>(textArg, attValue)); } return result; } string replaceTags (string &orText, const PlayerInfo &playerInfo){ string::size_type placeholderBegin = 0; string::size_type placeholderEnd = 0; int length; string tag; string result; while ( (placeholderBegin = orText.find(placeholderSymbol, placeholderBegin)) != string::npos ){ length = (placeholderBegin - placeholderEnd) + 1; result += orText.substr(placeholderEnd, (length - 1) ); try{ placeholderEnd = orText.find(placeholderSymbol, placeholderBegin + 1); if (placeholderEnd == string::npos) throw "No ending '"; } catch (const char * str) { cout << str << placeholderSymbol << "' after position " << placeholderBegin << "\n\n"; terminate(); } length = (placeholderEnd - placeholderBegin) + 1; tag = orText.substr(placeholderBegin, length); PlayerInfo::const_iterator mapIt = playerInfo.find(tag); try{ if (mapIt == playerInfo.end()) throw "Uknown tag at position "; } catch (const char * str) { cout << str << placeholderBegin << ".\nPlease check the contents of your file.\n\n"; terminate(); } result += (*mapIt).second; placeholderBegin += length; placeholderEnd++; } // To add the ending of the 'orText' string to the 'result' string -> Any better way to do this? length = (placeholderBegin - placeholderEnd) + 1; result += orText.substr(placeholderEnd, length); return result; //now replaced text } void showText(const PlayerInfo playerInfo, const string orText, const string repText){ PlayerInfo::const_iterator mapIt = playerInfo.begin(); cout << "---------------------DEBUG-----------------------" << el << el; cout << "-----------MAPPINGS-----------" << el; while (mapIt != playerInfo.end()) { cout << mapIt->first << " -> " << mapIt->second << el; mapIt++;} cout << "-----------END OF MAPPINGS-----------" << el << el; cout << "-----------ORIGINAL TEXT-----------" << el; cout << orText << el; cout << "-----------END OF ORIGINAL TEXT-----------" << el << el; cout << "-----------------END OF DEBUG-------------------" << el << el << el << el; cout << "--------------OUTPUT--------------" << el; cout << repText << el; cout << "--------------END OF OUTPUT--------------" << el; } int main (){ string originalText = readFile("Rebels_after_start.txt"); const PlayerInfo playerInfo = enterDetails(cin, cout); string replacedText = replaceTags(originalText, playerInfo); showText(playerInfo, originalText, replacedText); return 0; } [/code] I tried to keep main() as simple as possible and do everything via functions. I came up with a lot of questions during development and research and I have implemented them in the code as comments (they were so many [img]http://public.gamedev.net//public/style_emoticons/default/happy.png[/img]), if you can answer/clarify any of that I would be grateful. Also the replaceTags() function as written by rip_off had one problem. If the player inputed the '/" character, the program terminated as on the next read it was impossible to find any tag. So I came over this by actually creating a new string where the output text is stored. The only problem is because the while loop ends before the last part of the string is written I have to repeat two lines of code. Is this acceptable? Can I overcome this without twitching too much the code or do I have to come up with another way of reading the file? Also using the <stdexcept> library to terminate a proram is preferable or is it better to create our own exceptions? Again thank you very much.