How to write bad , unsuccessful games . Feel free not to read this

5.00 star(s) 1 Vote

User #1751331

Member
Oct 30, 2019
193
156
I love most of the creators especially on this site. ...
Good post. I read through it rather fast. Didn't notice anything I disagree with off hand.

There is probably a lot that could be added. Honestly, it would be nice to have a section that could be pinned on various topics were new people could find useful information on tutorials or a list of various posts on the site that will teach them better methods or creating.
Right now it tends to require a lot of search and luck at guessing the right words for most.

That said I'm not sure how many people would use them. How many developers actually new or used this site before starting a game or novel.

I considered creating a tool to allow building VN with renpy that would be more visually based sort of like UML in design. The tool would do most the programming if not all the programming for them. That way there would be less of these games that are ok but the game chugs along like a mule with no hind legs. It would also cut down on the number of buggy games.

As for story development. Yep, there are tons of places to learn. Unfortunately there are also a lot of bad spots also to learn.
If I was going to give people simple advice on this. Think of a basic story as simple as possible you want to describe with as few characters in it as possible. Create the general story from beginning to end. Story board it if possible. You don't need great looking pictures for that part. Hell I seen fantastic story boarding done by a person who used basic shapes to represent characters.Yep circles, triangles, squares....

When you do it think about what real people would do in that circumstance. Then try not to do the same thing over. People in real life adapt to stuff and chance how they approach stuff when it doesn't work out the way they want. People that don't are usually crazy. Give the person a character at the start of the novel that is relevant to the story in any large role. Try to make sure any actions they do follow with their primary character. People generally only change when they see a need to or have to.

The progression should be logical. A character shouldn't willingly get stripped in central park in front of a crowd then be afraid to show their tits in a wet t-shirt competition. If you are going to allow for some things to be done out of order you need to plan for when that happens so it makes sense.
 

lancelotdulak

Active Member
Nov 7, 2018
556
552
I'm just nitpicking your definitions and choice of words. I think you've clarified enough in this post for me to move on, haha. My whole point was you made it seem like picking up C/C++ and writing a game with it from scratch could be done in just a few weeks or month for the first time. Also, when I say game, I mean something with comparitive quality to those which can be found on here.

My purpose was to ensure anybody considering C/C++ from your post to reconsider what they're doing and using a more suitable language or tool. Abstraction isn't always a bad thing. I wouldn't recommend anyone learning how to code and then code an adult game in C/C++ from scratch unless you're really doing something revolutionary and have a lot of free time.
I didnt mean that at ALL. Someone who wants to program Can pick up the basics of c very quickly. C++.. well getting your head around some of the bizarre shit in it takes time. And a lot of us have serious criticisms of it. C is the language you learn because you love programming. C++ is the language you learn because you have to.
And i seriously think you can learn c as quickly as python etc

As for your tool. I could be wrong but i think they could do this in unity. I think in fact Unity might be easier once they get over the fear of "im using a professional game engine!"
 

gamersglory

Xpression Games
Donor
Game Developer
Aug 23, 2017
1,356
3,558
Good post. I read through it rather fast. Didn't notice anything I disagree with off hand.

There is probably a lot that could be added. Honestly, it would be nice to have a section that could be pinned on various topics were new people could find useful information on tutorials or a list of various posts on the site that will teach them better methods or creating.
Right now it tends to require a lot of search and luck at guessing the right words for most.

That said I'm not sure how many people would use them. How many developers actually new or used this site before starting a game or novel.

I considered creating a tool to allow building VN with renpy that would be more visually based sort of like UML in design. The tool would do most the programming if not all the programming for them. That way there would be less of these games that are ok but the game chugs along like a mule with no hind legs. It would also cut down on the number of buggy games.

As for story development. Yep, there are tons of places to learn. Unfortunately there are also a lot of bad spots also to learn.
If I was going to give people simple advice on this. Think of a basic story as simple as possible you want to describe with as few characters in it as possible. Create the general story from beginning to end. Story board it if possible. You don't need great looking pictures for that part. Hell I seen fantastic story boarding done by a person who used basic shapes to represent characters.Yep circles, triangles, squares....

When you do it think about what real people would do in that circumstance. Then try not to do the same thing over. People in real life adapt to stuff and chance how they approach stuff when it doesn't work out the way they want. People that don't are usually crazy. Give the person a character at the start of the novel that is relevant to the story in any large role. Try to make sure any actions they do follow with their primary character. People generally only change when they see a need to or have to.

The progression should be logical. A character shouldn't willingly get stripped in central park in front of a crowd then be afraid to show their tits in a wet t-shirt competition. If you are going to allow for some things to be done out of order you need to plan for when that happens so it makes sense.
This is something that would be interesting to have. Also adding Visual Scripting would be cool. And a way to keep track of story branching. A tool like this could cut development time down a lot. I think Ren'py has a lot more potential like this. It just needs more tools
 
  • Like
Reactions: lancelotdulak

lancelotdulak

Active Member
Nov 7, 2018
556
552
Your post sounds like great advice. That im trying to learn to keep in mind.

As for your tool.. i really think Unity would do the trick. I think a lot of novices are afraid of programming etc because hacks in the industry have created an aura around it to protect their jobs.. as hacks do. If you go into a programmers forum you'll find programmers are FAR more humble than people would think. r/programmerhumor you'll see it. Positively brilliant people VERY VERY aware of our flaws..
 

lancelotdulak

Active Member
Nov 7, 2018
556
552
This is something that would be interesting to have. Also adding Visual Scripting would be cool. And a way to keep track of story branching. A tool like this could cut development time down a lot
Unity will do half of what you said. for the other half.. visual basic.. its brilliant for rad (rapid application development)
 
  • Like
Reactions: User #1751331

gamersglory

Xpression Games
Donor
Game Developer
Aug 23, 2017
1,356
3,558
A way to port a Ren'py game over to Unity would also be great. The Visual Noval Plugin's in unity are pretty basic
 

User #1751331

Member
Oct 30, 2019
193
156
I'm saying that your description of a scripting language isn't consistent. ....
Python is a scripting language and you nkow it. Youre nitpicking because it's compressed. ...
Python itself is a language. The reference implementation of python is CPython. Which is what most people refer to as python.
Which is what I think lancelotdulak is getting at.
That said Kinderalpha is also right that CPython is just one among many implementations as python itself is simply a language.
The differences across implementations is quite large. CPython however is similar to a JIT but not the same. It can precompile the byte code into a file and run from it. Don't believe me check the documentation.



Hope that satisfies both of you!

UE4 vs Unity.
It's really an issue of user preference. I've used both. I used UE4 first. Both have great features and both have their downfalls.

As for game engines and learning C++
Trying to learn an advanced game engine when you are new to C++ is simply stupid.

Take a look at the doom 3 BFG source. Most advance C/C++ programmers will choke when they hit the task manager system.

That said looking at the programmers that came out of colleges back when I went to school vs the ones now. I would say we made far better programmers then forcing people who program to learn ASM then C before learning other languages. There were other languages also taught but the ones who learned them and actually learned how the code interfaced with the hardware became the better programmers. The more abstract the language the programmer learns on the more bloated and less efficient their code usually is. Not saying everyone is that way. But if you take 10 prorammers that learn using java or python and compare them to someone who learned ASM and C 9 of them will write bloated code vs the ASM and C programmer. Going from C/C++ to java is easy. Going from Java to C++ seems to be a lot harder for some people.

Even taking them and putting them through a course after learning python or java to improve they do only for a short time and tend to resort back to what they consider easier. In short the scripting language teaches bad habits because of the large number of libraries they can simply rely on rather than building their own code.

That said I do think learning a script language is easier for people. Just wish there was a way to do it without all the bad habits that come with it.
 
  • Like
Reactions: Droid Productions

User #1751331

Member
Oct 30, 2019
193
156
This is something that would be interesting to have. Also adding Visual Scripting would be cool. And a way to keep track of story branching. A tool like this could cut development time down a lot. I think Ren'py has a lot more potential like this. It just needs more tools
Guessing you seen the node editor in blender and other programs. I was thinking along that line.
The nodes could be clicked on to enter files such as background images and so on. Have various types of nodes for characters, menus, ... and so on.

That said if someone else decides to jump on this and do it. Great, I have so many projects on the plate right now no idea when I will get to another one.

That said my best advice is handle each node and state system. I posted one up on here today that could be used. It would make keep track and managing the code massivelly easier for the tool and debugging would be a thousand time easier visually looking for errors than trying to deal with nested if statements.
 

lancelotdulak

Active Member
Nov 7, 2018
556
552
Python itself is a language. The reference implementation of python is CPython. Which is what most people refer to as python.
Which is what I think lancelotdulak is getting at.
That said Kinderalpha is also right that CPython is just one among many implementations as python itself is simply a language.
The differences across implementations is quite large. CPython however is similar to a JIT but not the same. It can precompile the byte code into a file and run from it. Don't believe me check the documentation.



Hope that satisfies both of you!

UE4 vs Unity.
It's really an issue of user preference. I've used both. I used UE4 first. Both have great features and both have their downfalls.

As for game engines and learning C++
Trying to learn an advanced game engine when you are new to C++ is simply stupid.

Take a look at the doom 3 BFG source. Most advance C/C++ programmers will choke when they hit the task manager system.

That said looking at the programmers that came out of colleges back when I went to school vs the ones now. I would say we made far better programmers then forcing people who program to learn ASM then C before learning other languages. There were other languages also taught but the ones who learned them and actually learned how the code interfaced with the hardware became the better programmers. The more abstract the language the programmer learns on the more bloated and less efficient their code usually is. Not saying everyone is that way. But if you take 10 prorammers that learn using java or python and compare them to someone who learned ASM and C 9 of them will write bloated code vs the ASM and C programmer. Going from C/C++ to java is easy. Going from Java to C++ seems to be a lot harder for some people.

Even taking them and putting them through a course after learning python or java to improve they do only for a short time and tend to resort back to what they consider easier. In short the scripting language teaches bad habits because of the large number of libraries they can simply rely on rather than building their own code.

That said I do think learning a script language is easier for people. Just wish there was a way to do it without all the bad habits that come with it.
Please note i posted an example in C.. not c++. Not only that very basic C.. no classes, structures etc. Just hello world. theres no reason you can write a simple vn game in pure c as a way to learn. Theres a reason they taught c and asm.. both expose the basic core of coding. And as you said.. if you learn asm youre learning how cpu's work. All programming at its heart can be reduced to very simple logic and math. above that is obfuscation intended to increase productivity. And there is a LOT wrong with python etc. The purest script language ive seen is perl.. it is very c like and far more logical. Python imho is a fad.
 

User #1751331

Member
Oct 30, 2019
193
156
Unity will do half of what you said. for the other half.. visual basic.. its brilliant for rad (rapid application development)
I was thinking more along the lines of the node style system like you see in blender and so on.
But I get your point. As for menus I would rather use something like QT.
The idea is to use a very stable set of code that does each feature that most the people use in game and does it fast and efficiently getting rid of most if not all the coding developers do but still allowing them the same creative ability.
 
  • Like
Reactions: gamersglory

User #1751331

Member
Oct 30, 2019
193
156
Please note i posted an example in C.. not c++. Not only that very basic C.. no classes, structures etc. Just hello world. theres no reason you can write a simple vn game in pure c as a way to learn. Theres a reason they taught c and asm.. both expose the basic core of coding. And as you said.. if you learn asm youre learning how cpu's work. All programming at its heart can be reduced to very simple logic and math. above that is obfuscation intended to increase productivity. And there is a LOT wrong with python etc. The purest script language ive seen is perl.. it is very c like and far more logical. Python imho is a fad.
I didn't even look at your code. I simply was making a statement on the issues not about your specific code.
My favorite languages are C, ASM, C++.

I won't disagree python has it's issues. GIL, garbage collection method, developers overly worried about keeping old libraries rather than actually fixing the language. But those issue are more related to CPython and not other versions of it. Each version though has its own issues.

Take C/C++ compilers. GCC the assholes developing it intentionally made it so that no one could include it in a project directly.
However, you could use LLVM and clang and build it into a program and compile addons or extensions and mods for it. If you right the program correctly to allow it. However, LLVM doesn't have a complete standard library from what I recall. It's a work in progress and people end up using the library from GCC which is fine. But that creates an issue if you want to distribute the compiler with the libraries because of GPL. The option is you create an install program that downloads the libraries on install and thus you aren't distributing it you are using them as that. Which will still probably piss them off.
 
  • Like
Reactions: lancelotdulak

User #1751331

Member
Oct 30, 2019
193
156
Please note i posted an example in C.. not c++. Not only that very basic C.. no classes, structures etc. Just hello world. theres no reason you can write a simple vn game in pure c as a way to learn. Theres a reason they taught c and asm.. both expose the basic core of coding. And as you said.. if you learn asm youre learning how cpu's work. All programming at its heart can be reduced to very simple logic and math. above that is obfuscation intended to increase productivity. And there is a LOT wrong with python etc. The purest script language ive seen is perl.. it is very c like and far more logical. Python imho is a fad.
Also if you don't mind drop me a link to the code you are talking about. Just curious.
 

lancelotdulak

Active Member
Nov 7, 2018
556
552
It's in the thread above it's literally just hello world in straight ansi C

You know.. i think ive been giving some people bad advice. RE Gcc. Imho the best way to learn pure programming would be Linux GCC. And im not dissing python btw.. ive loved a lot of languages (Forth and perl come to mind) that are in the junkbin of history
 
  • Like
Reactions: User #1751331

Rich

Old Fart
Modder
Donor
Respected User
Game Developer
Jun 25, 2017
2,491
7,036
A way to port a Ren'py game over to Unity would also be great. The Visual Noval Plugin's in unity are pretty basic
I'm curious why one would want to port a Ren'py game over to Unity. (That's not intended to be pejorative or criticism - I'm genuinely interesting in knowing why one would want to do that.)

I actually wrote the basics of a Ren'py-like scripting systems for Unity 2-3 years ago. Essentially, at the time, I was thinking along the lines of Big Brother, which used a scripting system for a lot of its game flow. I got the basic scripting stuff working pretty well, but as you work deeper into it, there's just a ton of stuff you have to do if you want a really polished game.

Saves, for example - one of Ren'py's really, REALLY cool features is the whole "you can make a save at any time, and if the dev hasn't gone wakko, your version 3 save will work in version 4, even if the dev has changed the code." That's a really brilliant piece of work by PyTom that is difficult to replicate in something like Unity. That's one reason why a lot of Unity-based games only give you save opportunities at certain points.

Similarly, the ability to drop into Python at arbitrary points in a Ren'py game makes it extremely flexible. True, if one were doing a "real" VN scripting system in Unity, one could probably work out something there as well, but it'd be a lot of work to integrate.

My original reason for exploring Unity was the fact that it supported more runtime environments than Ren'py - I was particularly interested in its web support.

Anyway, I'd be interested in finding out more of what you and other people think on this. Not completely impossible that I could resurrect that project...
 

User #1751331

Member
Oct 30, 2019
193
156
I'm curious why one would want to port a Ren'py game over to Unity. (That's not intended to be pejorative or criticism - I'm genuinely interesting in knowing why one would want to do that.)

I actually wrote the basics of a Ren'py-like scripting systems for Unity 2-3 years ago. Essentially, at the time, I was thinking along the lines of Big Brother, which used a scripting system for a lot of its game flow. I got the basic scripting stuff working pretty well, but as you work deeper into it, there's just a ton of stuff you have to do if you want a really polished game.

Saves, for example - one of Ren'py's really, REALLY cool features is the whole "you can make a save at any time, and if the dev hasn't gone wakko, your version 3 save will work in version 4, even if the dev has changed the code." That's a really brilliant piece of work by PyTom that is difficult to replicate in something like Unity. That's one reason why a lot of Unity-based games only give you save opportunities at certain points.

Similarly, the ability to drop into Python at arbitrary points in a Ren'py game makes it extremely flexible. True, if one were doing a "real" VN scripting system in Unity, one could probably work out something there as well, but it'd be a lot of work to integrate.

My original reason for exploring Unity was the fact that it supported more runtime environments than Ren'py - I was particularly interested in its web support.

Anyway, I'd be interested in finding out more of what you and other people think on this. Not completely impossible that I could resurrect that project...
Unity is technically created using a modified version of mono they created. There is a entire history to getting to that point starting with .net and moving to standard mono.... long story.
There are a number of reasons for it and one of the biggest is performance. It's very much like CPython in the way it currently works in that it can be precompiled to bytecode before hand. In short there is already a scripting language there. Do you have the same level of access to it is the real issue.

One of the biggest reasons people might want to switch to unity is tools.

While Renpy is nice it has it's issues. I think Renpy's biggest issue is over kill. For very new users its a great way to learn.
But I don't think it gives the flexibility that some more advanced developers could make use of. It gets to feeling like one is jumping through hoops just to use python to the best extent it can be. The primary way it is built over encourages the use of if else statements.
 
  • Like
Reactions: lancelotdulak

Rich

Old Fart
Modder
Donor
Respected User
Game Developer
Jun 25, 2017
2,491
7,036
Unity is technically created using a modified version of mono they created. There is a entire history to getting to that point starting with .net and moving to standard mono.... long story.
Yup. Well aware of that.

There are a number of reasons for it and one of the biggest is performance. It's very much like CPython in the way it currently works in that it can be precompiled to bytecode before hand. In short there is already a scripting language there. Do you have the same level of access to it is the real issue.
Of course, I could point out that C# is compiled to an intermediate bytecode, just the way that Python typically is, but I'm not going to argue that C# is, in general, more performant than Python.

One of the biggest reasons people might want to switch to unity is tools.
No argument - Unity has the advantage of being developed by a large team, as opposed to the few people working on Ren'py.

While Renpy is nice it has it's issues. I think Renpy's biggest issue is over kill. For very new users its a great way to learn.
But I don't think it gives the flexibility that some more advanced developers could make use of. It gets to feeling like one is jumping through hoops just to use python to the best extent it can be.
Okaaaaaaay. I guess I never felt that way - I use Python extensively in some of my Ren'py work. But I'll respect your opinion. The main thing (in my own opinion) that Ren'py doesn't provide is full access to the underlying PyGame. PyTom started developing Ren'py with PyGame/SDL, and when SDL2 game out, did a custom fork of PyGame to use SDL2 features, since PyGame was very slow to adopt SDL2. That does, in fact, limit some advanced things one could otherwise do. I know PyTom is working on a significant update to the graphics engine along with the conversion to Python 3 - it'll be interesting to see what comes of that.

The primary way it is built over encourages the use of if else statements.
I think I'm going to disagree with you there. (Respectfully.) I don't think this has anything to do with the way Ren'py is built - I think it's more the fact that you see a lot of games developed by people who are not advanced, adept programmers.

You are completely, 100%, totally right that Ren'py is much, MUCH more approachable than Unity for people that have little or no programming background. You are also correct that there are things that Unity can do that Ren'py simply cannot, largely (IMHO) because Unity was built from scratch to support 3D, while Unity was not. So, perhaps this is a bit of an "apples and oranges" discussion - IMHO, Unity was targeted at rather and different market (meaning user base) than Ren'py. Having used both, I think that both probably meet their own goals - it's just that their goals are different.

But this is where I have the slight stumbling block with the idea of "converting a Ren'py game to Unity." If you take a game that is well-suited to Ren'py, I doubt that there are many advantages to re-implementing it in Unity. On the other hand, if you have a game that isn't well-suited to Ren'py, then perhaps there would be benefit in starting over in Unity. If that's what you mean by "converting," then OK, absolutely.

Or maybe it's just too late and I've had one too many glasses of Cabernet to follow you. LOL.

Anyway, don't take any of this to mean that I'm saying that Ren'py is "better" than Unity - not at all. They each have their strengths, they each have their target market, and within their target market, I think they're pretty darn good. At least, that's my own opinion.
 

User #1751331

Member
Oct 30, 2019
193
156
Yup. Well aware of that.



Of course, I could point out that C# is compiled to an intermediate bytecode, just the way that Python typically is, but I'm not going to argue that C# is, in general, more performant than Python.



No argument - Unity has the advantage of being developed by a large team, as opposed to the few people working on Ren'py.



Okaaaaaaay. I guess I never felt that way - I use Python extensively in some of my Ren'py work. But I'll respect your opinion. The main thing (in my own opinion) that Ren'py doesn't provide is full access to the underlying PyGame. PyTom started developing Ren'py with PyGame/SDL, and when SDL2 game out, did a custom fork of PyGame to use SDL2 features, since PyGame was very slow to adopt SDL2. That does, in fact, limit some advanced things one could otherwise do. I know PyTom is working on a significant update to the graphics engine along with the conversion to Python 3 - it'll be interesting to see what comes of that.



I think I'm going to disagree with you there. (Respectfully.) I don't think this has anything to do with the way Ren'py is built - I think it's more the fact that you see a lot of games developed by people who are not advanced, adept programmers.

You are completely, 100%, totally right that Ren'py is much, MUCH more approachable than Unity for people that have little or no programming background. You are also correct that there are things that Unity can do that Ren'py simply cannot, largely (IMHO) because Unity was built from scratch to support 3D, while Unity was not. So, perhaps this is a bit of an "apples and oranges" discussion - IMHO, Unity was targeted at rather and different market (meaning user base) than Ren'py. Having used both, I think that both probably meet their own goals - it's just that their goals are different.

But this is where I have the slight stumbling block with the idea of "converting a Ren'py game to Unity." If you take a game that is well-suited to Ren'py, I doubt that there are many advantages to re-implementing it in Unity. On the other hand, if you have a game that isn't well-suited to Ren'py, then perhaps there would be benefit in starting over in Unity. If that's what you mean by "converting," then OK, absolutely.

Or maybe it's just too late and I've had one too many glasses of Cabernet to follow you. LOL.

Anyway, don't take any of this to mean that I'm saying that Ren'py is "better" than Unity - not at all. They each have their strengths, they each have their target market, and within their target market, I think they're pretty darn good. At least, that's my own opinion.
I think there was a bit of a misunderstanding regarding c#. Unity uses C# but with mono and it started off as .net using C#. I'd certainly agree the mono version is faster than python. That said I couldn't say one way or another about the .net version. I don't hate many things .net is one thing I hate. I'll spare you the details.

The SDL issue isn't that big of deal. Sure you are going to have a bit of an issue if you want to use later versions of opengl or vulcan but I haven't seen to many on here that will ever be at that point.

I was more looking at the layer system he created as tools for the newer programmers such as scenes and character class and so on. While yea they are good for a person new to programming to learn some basic stuff. After about a week one of any decent course in programming they get more in the way and just encourage bad habits.

Granted this is just my personal opinion but it would been better if he just left it pure python and that way you wouldn't require telling the code you are switching to use python and bunch of stuff and the code would have integrated far more easily.

Well there is no one game engine that fits all games. Different tools for different jobs.
 

BigBaboon

Newbie
Aug 16, 2019
18
28
Nice article! I bookmarked this thread. I add some very useful links about story design:

same articles with interesting discussion:
another -

and some 3delight render (heavily PSed;))
maybe i finish this game project
 

TessSadist

Well-Known Member
Donor
Game Developer
Aug 4, 2019
1,298
5,537
I just wanted to say thank you for this thread. I am very intimidated about the tech/programming elements of trying to just put together a fun story or two I've always wanted to try for fun. Reading some of this is still a little daunting, but I also feel pretty empowered that it's not as unapproachable as I assumed, especially considering that in my own life seemingly 95% of programmers I have ever met were male. I can only think of one female dev on this site for sure (the woman who did Good Girl Bad Girl) so that's my only real world example for now.

I have asked only two very basic questions on this site in the programming/dev forum, and both were answered so well and completely that I feel very lucky to have found this website. This thread is super useful too, and I wish there was a more specific resource for newbies to research and explore.

I also feel fortunate to make pretty decent money in a pretty fun job so I'm not super die hard about trying to monetize anything I actually create down the road. It's definitely more about having fun and exploring my own creative outlets in areas that are not so easily "out there" in normal public discourse so to speak. Having said that, if it turned out I was having more fun writing/creating art/programming than what I do now, who knows? I spent last weekend about 10 straight hours just writing character/narrative arcs and trying some sample scene art on Daz (new to this of course ugh) and the time flew by and never felt like work, so I thought that was a good sign. (so far at least hee hee)

Minor plug for advice: If anyone can suggest a fairly original G8 type Daz male character (20-25 Y.O.) (he would be a handsome - more handsome than cute - and bright character but from a humble background and some rough origin backstory so his character arc would start from a place of low confidence, some trust, resentment, and anger to overcome, etc.) Ideally a little rougher/scruffy looking early but cleans up very well to almost elegant/handsome as I would like the character visually to possibly somewhat change as well depending on choices... so being able to tweak things well like facial hair, body shape, etc...ideally not someone used very often in prior games. The character would also have very distinct narrative tracks in being more dominant, neutral, or submissive in how they act so that might be reflected somewhat visually as well.

Thank you!
 
5.00 star(s) 1 Vote