|
timmeh
|
 |
« on: September 06, 2009, 01:24:38 PM » |
|
I've been interested in video game design and programming since I found RPG Maker about 6 years ago, and I'd been interested in designing board games well before that. RPG Maker is a little limiting though and I found Game Maker a short while afterwards (about 5 years ago). It didn't take me long to pick up, although I never really finished any full projects for a varriety of reasons. A few months ago I picked up a book on C++. I'd tried to teach myself before and failed, but this time I was determined. I've been teaching myself as much as I can as quickly as I can ever since. In doing so I've made a number of games and utilities, and I've decided to release them, open source, to get some constructive critisism. More recently (early October) I started work on a Rogue-Like game entitled "Tower of Azari". It's really progressed very well, thanks to the advice and support of the Bay12 community. I'm currently working on rewriting it from scratch, as my coding style has progressed a lot since I started it; it had become a tangle of old and new styles and was becoming difficult to manage. Below is a list of my projects, along with descriptions and links (in the spoilers). Download whichever games pique your interest, enjoy, and please come back to let me know what you think, and what I could do to improve them! If you know C++, the source code for every project is included in the download. Some of my more recent projects require PDCurses to compile; there are instructions in the "Tower of Azari" v0.30 README file on how/where to "install" PDCurses to work with my projects. In addition to the source code, I've included the Code::Blocks prject file, so if you're using Code::Blocks (or any other IDE that can open a Code::Blocks project file) you should be able to simple load the project, and all the files and linker/compiler settings will be loaded for you as well. I keep a "DevBlog" of my progress in a Wordpress blog as well as here, on the Bay12 forums. The only difference, is that discussion between releases takes place here on the forums, while the DevLog is reserved for announcements. You can find the DevBlog here. PROJECTS Tower of Azari Tower of Azari is a Rogue-Like project I've been working on since early October. It started out as a generic rogue-like, and has since developed into more of a rogue-like engine. Most of the information is loaded from text files, and eventually almost the entire game will be modifyable though those files, similar to Dwarf Fortress. I am currentnly re-writing Tower of Azari from scratch, since the old prject had become a tangled mess of new and old programming styles. It is progressing well, and looking far better than before. I've been able to add many new features I couldn't previously, and I'm rather excited about where my rogue-like project is going. This is by far the biggest project I've started, so a full description here would take up far too much space; I am however working on a revised design document, to give a fuller look at where I see ToA going. DevBlog Pagev0.30 Download - 588KB v0.303 .zip - 283KB v0.303 .7z - 210KB Note: Version 0.303 is a tech-demo, and is far from being fully playable. It has a lot of stuff to try, but it's still missing vital features like magic, ranged weapons, and enemies that can actually move... Version 0.30 is mostly functional, if a little buggy, so if you're wanting to try Tower of Azari for the first time try that one first. That being said, if you're interested in seeing where I'm taking it with the re-write, check out the newer version. Warlock Spell Parser I've recently grown rather fond of a browser-based game called "Warlocks". It's a very strategy-oriented game, that requires the player to try to anticipate their opponent's moves. Unfortunately, the sheer number of possible moves is incredible, and trying to figure out each possible move before weighing them is difficult. Warlock Spell Parser allows you to input your opponent's previous moves, and it outputs all the possible actions based off those moves, allowing you as a player to concentrate on deciding which is most likely, and how to counter it. Warlock Spell Parser was actualy originally distributed only on the "Warlocks" e-mail loop. The e-mail was rather long, and I'm not sure if it ever got sent out (No replies, may have been blocked by the mods or something), so I posted it here. A copy of the e-mail can be found below:
Hello, I started playing "Warlocks" on games.ravenblack.com yesterday, and had something I'd like to share, as a sort of thanks for all the work that must have gone into this awesome game. But first, a little back-story on the project (or you can just scroll to the bottom for the link and instructions...)
---===---
During my first game, I found myself often referring to the Quick Spell Reference table quite often, not just to see what spells were possibly and to double check the commands I was entering, but to compare to my opponent's last few moves, and see what they appeared to be doing.
After the first few turns, I realized I would almost always miss at least one of the possibilities if I tried to find all the possible moves in my head, so I started opening note-pad each round, and comparing my opponent's commands to the spell list, writing down each possible spell and going back to compare them to previous turns, to try and guess what he or she was thinking.
Of course, this got very tedious, very fast. So I spent this afternoon working on a small project of my own, that would help me narrow down my opponent's possible moves a little quicker, so I can concentrate on my strategy. Basically, I can input a sequence of gestures (say, "SD") and it brings up a list of all the spells that use that pattern of gestures somewhere.
---===---
When the program starts up, you will see a console window with: "WARLOCK SPELL-PARSER, vX.X By Timothy Sassone" printed across the top. Press any button to start the program.
At this point, you can type in any pattern you want (using the same notation at the website, with capitols for one-handed gestures and lower-case letters for two-handed gestures), then press enter and it will bring up a list of spells using those gestures. If you press enter without entering any gestures the program will display a full spell list.
When you're done looking at the spells, you can press any key to return to the input screen, so you can enter new gestures.
WARNING: WHILE THERE ARE NO VIRUSES IN THE PROGRAM (I wrote it, I ought to know...) I STRONGLY SUGGEST YOU SCAN THIS FILE, AND ANY OTHER FILES YOU DOWNLOAD, BEFORE YOU RUN THEM!!! Download (55.5KB): http://www.4shared.com/file/151161017/56d65401/WSP.html
Thanks again to all those involved in Warlocks, especially the developer(s)! Thanks as well to my first opponent, "larspcus2", for making my first game such an enjoyable experience.
Timothy Sassone Sudoku Solver Sudoku Solver is a none-too-creatively named utility I wrote that solves Sudoku puzzles. It's the first program I've written to use a graphical user interface, through wxWidgets. wxWidgets is a multi-platform library, so it should compile for Linux or Mac, should someone have the time to compile it for me. I didn't really know what I was doing, working with wxWidgets, so the code is rather messy, but it's functional. When the program starts you will see number-boxes in the shape of a Sudoku puzzle. It starts with an example puzzle already typed it (0s represent open squares), but you can enter your own as well. Once you've entered all the information you have, click the "Next Step..." button, and the program will run through several solving algorithms, filling in the squares along the way. Each algorithm is only run once though, so you'll have to click the button multiple tiles to solve the puzzle fully. Dwarf Caretaker Dwarf Caretaker is a text-based sim game based on Dwarf Fortress. You control a single dwarf, having them perform jobs, buy food, spar, etc. There aren't any real goals, but there are a number of random events tied to the various actions, and some that can happen at any time. This was the first game I finished on my own, without following a tutorial, so it's far from perfect, but I find it fun anyways. SPOILER WARNING: There is a Dwarf Fortress spoiler in Dwarf Caretaker, so if you want to discover Hidden Fun Stuff™ on your own in Dwarf Fortress, don't have your dwarf mine in Dwarf Caretaker. The rest of the game contains no spoilers, and mining won't usually, but one of the random event's related to mining does. After finishing "Craps 2.0" (see below) I decided I would design a game myself for my next project, instead of following a tutorial. I had some trouble coming up with a genre and theme, as Rogue-likes were a bit out of my league at the time, and I don't have the creative writing ability required make a decent text-adventure. While browsing for ideas I noticed a lot of fan games are attempts to merge common favorites, and decided I would make a Sims style game based on my personal favorite PC game (take a wild guess...). I didn't care for the name at first, but it's sorta grown on me... Minor ProjectsCraps 2.0 One of the first games I made was a text-based version of "Craps" (see below), made during a tutorial section in the book. I was a little unhappy with the result though, each time it looped it would re-print some of the instructions, as well as the "What do you want to do?" prompts, which ended up looking really bad and scrolling the console window. So I did a bit of googling and rewrote the program to clear the screen at the end of each loop and output the information in a smoother format. Download - 111KB Hurkle Hunt A remake of the (very) old DOS game. Or, at least, the version of it I found (now when I look for it I find newer versions with graphics...). Gameplay is simple. A hurkle is hiding somewhere on a 10x10 grid. You get 4 chances to pick a location to search, and the game lets you know which direction to need to look in (assuming you didn't find it). Something to remember, the top-left corner of the grid is 0,0. Download - 103KB Mugwump Hunt A far more complex and difficult version of the above game. You now have 25 turns to locate the mugwump, but there's a catch. The grid is now 100x100, and instead of a direction to look, you're given the distance to the mugwump. This is definately a game best played with some graph-paper nearby. Download - 103KB Snake Having gained a fair amount of experience with simple text-based games I decided to try one with graphics. This is an incredibly simple version of the game " Snake". The game isn't really finished, and I don't plan on continuing it since I learned what I wanted to about graphics. There are no dangerous tiles to avoid yet, and you can still move backwards into yourself, but it's playable, so I figured I'd release it. If the game doesn't work make sure you un-zipped it, it needs access to the .dat file to be able to load the graphics. Download - 27KB
|
|
|
|
skaltum
|
 |
« Reply #1 on: September 07, 2009, 01:32:51 AM » |
|
hmmmmm. i'll give this a try
|
|
|
|
skaltum
|
 |
« Reply #2 on: September 07, 2009, 01:41:50 AM » |
|
okay this is an interesting text base game. well done. you have spelt oppenent wrong by saying oppenant. ale appears to not cost any DB. it may be unintentional. the food purchase works fine. sparring is somewhat a challenge but thats a good thing. healing is quite good. i'll give you more feedback later.
[EDIT] waiting does not contribute to hunger and thirst.
|
|
|
|
timmeh
|
 |
« Reply #3 on: September 07, 2009, 09:13:43 AM » |
|
okay this is an interesting text base game. well done. you have spelt oppenent wrong by saying oppenant. ale appears to not cost any DB. it may be unintentional. the food purchase works fine. sparring is somewhat a challenge but thats a good thing. healing is quite good. i'll give you more feedback later.
[EDIT] waiting does not contribute to hunger and thirst.
Awesome, thanks! The ale problem definitely was unintentional, and has been fixed. It would check to make sure you had enough money, but didn't take the money afterwards. Waiting has been fixed, I sorta forgot and passed over it before. It has no real purpose at the moment, but I may add something in later. I've fixed everything you mentioned now, and I'll upload it in a bit... thanks again! [EDIT]: v0.4 Update: - Bug Fix - Ale was free
- Bug Fix - "Opponent" was spelled wrong
- NEW - Waiting now makes you hungry/thirsty and passes the time.
- NEW - You can now choose how difficult you want a fight to be. At the moment, easy is the same as moderate unless you have at least 3 toughness.
v0.5 Update: - NEW - Complete re-write to clean up code and make future developement easier.
- NEW - Winning a sparring match now increases toughness by 0.5 and happiness by 15, losing causes a loss of 15 happiness, and win or lose you get hungry and thirsty.
- NEW - When quiting you can choose to save and exit, exit without saving, or not exit at all.
- NEW - Heavy and Light work have been combined into "Work", and are options given to you after choosing to work.
New download link in the original topic, the next version (v0.6) is likely to have a much stronger resemblance to DF, such as food options like plump helmet or cat tallow biscuits and job options like crafting, mining, masonry, etc.
|
|
|
|
skaltum
|
 |
« Reply #4 on: September 07, 2009, 06:44:08 PM » |
|
okay i've tested the new version and i can say the improvements are good. the only problem is that while hunger and thirst can cap at 100 the player wont suffer any negative affects and i consider this an unfortunate exploit. the happieness also unfortunatly does nothing at one. i can understand these seing as it is a very early games. but heres the list of bugs i have found. *hunger and thirst dont kill the player *the save files cannot be loaded. (either that or i dont know how to) my bad. i didn't realise i had to type my dwarfs name again  heres a few suggestions i think might help *perhaps a death screen asking if you'd like to retry *perhaps every 5 years the fort could be attacked and you will be drafted to fight the enemy *a load system.*HP increases every 5 toughness maybe now i really dont mean to sound mean and of course it's and early game but heres my contribution anyway. P.S. i've read the readme included  p.s.s good work  keep it up
|
|
|
|
timmeh
|
 |
« Reply #5 on: September 07, 2009, 06:51:42 PM » |
|
Thanks! The hunger and thirst thing is definately a bug. I had it working before the re-write, guess I forgot it in the new version...  The death screen is definitely a good idea, and special events would be great! As far as toughness->HP goes, I'll see what I can do, I like the idea, and with the new code, I may be able to implement it without too much trouble. Thanks again! v0.6 Update: - BUG FIX - Player can die of starvation and dehydration again.
- NEW - The maximum damage to any wound is increased by 1 for every 3 levels of toughness..
- NEW - Death screen asking if you want to quit or restart.
- NEW - ASCII art title screen!
- NEW - Renamed and added choices to eat, drink and work to better represent DF.
- NEW - Leaving happiness at 1 can now result in your dwarf commiting suicide.
Link in original post. I think save compatability was trashed with this release, as the game now saves the number of turns you've been starving/dehydrated/depressed. Old games appear to load fine, and don't throw any errors on me, but may have some strange bugs later. Thanks for your help with this skaltum. Seriously, I've never really managed to get far with anything like this cause I always have trouble getting anyone to test-play them and give some decent critique, ideas and bug reports... Speaking of which, it's getting late on a school night for me, so while I won't be doing any more coding tonight, I should be able to at least have a couple special events planned and the implimentation figured out by tomorrow night.
|
|
|
|
skaltum
|
 |
« Reply #6 on: September 08, 2009, 08:22:10 AM » |
|
okay i'm testing it and so far the improvements are working. i have found an unfortunate exploit. on the death screen. if the player dies of starvation or dehydration the reset screen works fine but by pressing any other key than the ones specified it will take the player straight back to the status screen just after they die. unfortunatly this means the pump bug is still active  the body part HP increases correctly. works death screen. works starvation and dehydration will kill the player. works DB. still works bugs*the death screen can be cheated by pressing any key other than the ones specified **this leads to the pump bug still being active **and cheating death * i dont know if this is a bug or not but the dwarf doesn't seem to commit suicide. could possibly be that i wasn't depressed enough turns. *by holding any key other than the task ones on the status screen the dwarf will avoid any stat changes but will still age. *the sparing damage appears to be overpowered. i played moderate and dealt 14 dmg in a punch and got kicked for 19 dmg. with 19 toughness. and this is what i've found so far. and again good work  this is great work for a fledgling C++ game. p.s i've never coded in C++ before.
|
|
|
|
timmeh
|
 |
« Reply #7 on: September 08, 2009, 07:07:29 PM » |
|
okay i'm testing it and so far the improvements are working. i have found an unfortunate exploit. on the death screen. if the player dies of starvation or dehydration the reset screen works fine but by pressing any other key than the ones specified it will take the player straight back to the status screen just after they die. unfortunatly this means the pump bug is still active  the body part HP increases correctly. works death screen. works starvation and dehydration will kill the player. works DB. still works bugs*the death screen can be cheated by pressing any key other than the ones specified **this leads to the pump bug still being active **and cheating death * i dont know if this is a bug or not but the dwarf doesn't seem to commit suicide. could possibly be that i wasn't depressed enough turns. *by holding any key other than the task ones on the status screen the dwarf will avoid any stat changes but will still age. *the sparing damage appears to be overpowered. i played moderate and dealt 14 dmg in a punch and got kicked for 19 dmg. with 19 toughness. and this is what i've found so far. and again good work  this is great work for a fledgling C++ game. p.s i've never coded in C++ before.
New version, yay!  Fixed the bugs you found for me, and added random sieges (1/500 chance or so, but only if your toughness is at least 5). I reworked the combat, but I'm still not particularly happy with the lower-level numbers... that being said, the higher level combat is no longer quite so ridiculous  Thanks! v0.7 ChangesBUG FIXES: - Death screen now quits when any button other than those specified is pressed.
- Pressing button that isn't tied to an action on the main screen no longer passes time without stat changes.
CHANGES: - Combat rebalanced, easy/hard fights may be even easier/harder earlier on, but as you progress they get more and more balanced.
- Some combat text reworded to match the rest of the game's 3rd person setting.
NEW: - Damage reports in combat now let you know what wound was hit.
- Job related game-overs sometimes report a specific part as well.
- The fortress will be attacked from time to time, and if your dwarf is tough enough s/he will be drafted for it's defense.
|
|
|
|
chaoticag
|
 |
« Reply #8 on: September 09, 2009, 06:52:52 AM » |
|
Blocking causes my game to freeze...
|
|
|
|
Alexhans
|
 |
« Reply #9 on: September 09, 2009, 07:22:35 AM » |
|
10 Seconds?! NO!!! What have you done to us!!!  Anyway, an unhandled exception occurs when I spar. I punched twice and poof. Program is gone. I tried the other stuff and it seems to work fine but there's something wrong in the sparring section. I'm using Windows XP.
|
|
|
|
Alexhans
|
 |
« Reply #10 on: September 09, 2009, 07:51:43 AM » |
|
I'll comment on some things I've been corrected in the past by people who knew much more than me.
Why are the variables declared as global? That's a bad idea. You should declare variables within the scope you intend to use them.
There's some functions, like int Wound(int *wounds, int number) that you aren't using. It would be good to comment that so you know what is really relevant and what may be removed.
I see you using rand()... what seed are you using? I can't find one...
What do you know about classes? structs?
If you use a class you will be able to have all those variables belonging to it so you will only need to pass the class variable in the function instead of passing all of the separate variables: Before: Load(string name, long int &age, int &hunger, int &thirst, int &happiness, double &toughness, int &dwarfBucks, int &starving, int &dehydrate, int &suicide, int *wounds)
Load(cNameOfClass &localname);
You will be able to reduce the amount of paramateters passed on all of your functions and won't have to change them if you decide to add a new variable (e.g. Intelligence) to your class.
--------------- More trivial stuff: It is a good idea to give each file you save or use a specific extension to recognize it. e.g. ".sav"
A comment in the line above each function explaining what it does is a good idea too. So one can see what type it returns, what are the parameters and the name and have a brief description about it without having to read the code.
|
|
|
|
timmeh
|
 |
« Reply #11 on: September 09, 2009, 08:46:33 AM » |
|
Hmmm... I'll look into the sparring as soon as I finish school... I can move the variables around some. I didn't really have a full understanding of variable scope when I put them there, but that's really my only excuse  The Wound() function is being used in the actWork() function to give out the random wounds you can receive when doing more dangerous jobs, and I plan on re-writing it to allow me to use it everywhere else wounds are dealt before the next release. Dang you're right... I had been seeding it with the time, I guess I forgot to put that back in when I did the re-write... that'll definitely be fixed. I don't really know anything about structs, but I understand classes. I didn't realize I could do that though, so I'll look into changing that too. Oddly enough, I tried adding a suffix to save files when I first implemented them and got an error... I'll try again and see what happens. And comments... yeah... I really have not been making enough recently, I know... I'l probably go through and add comments to most of it before I re-release. [EDIT]: @Alexhans - I don't think punching twice was the problem, as once I told it to seed the rng with the time again I could punch twice. The problem appears to be with you or your opponent blocking, and the default seed had him blocking if you punched twice. Working on figuring out why... [EDIT2]: Never mind... I feel like an idiot now... can't divide by zero, so finding the remainder of rand()/int(tough/4) didn't work when tough/4 was rounded to 0... working on a solution now...
|
|
|
|
Alexhans
|
 |
« Reply #12 on: September 09, 2009, 10:39:42 AM » |
|
the unhandled exception is an Integer division by zero. [edit 11:55 GMT - 3]I didn't see your Edits...  Glad you found the mistake.
|
|
|
|
timmeh
|
 |
« Reply #13 on: September 09, 2009, 01:34:07 PM » |
|
Well, I've run into a bit of a problem... I've rewritten most of it to use a class for the dwarf instead of global variables, but for some reason the functions I wrote to change the dwarf's stats don't appear to be working... Example Function: int Dwarf::Happiness(int change) { happiness+=change; return happiness; } Example Call: cout << "HAPPINESS: " << character.Happiness(0); They pretty much all look like that, 'cept a couple use different variable types, and the wounds array one is a little more complicated. What bugs me, is that it returns the value just fine, in the example above, happiness is displayed just fine, but in this example: it doesn't actually change happiness... I'll look into it some more and edit this post when I figure it out... [EDIT]: Got it! I should have been passing a reference to the existing dwarf instance, not a new one, as I was apparently doing. Fixed that problem, new version should be up soon.
|
|
|
|
Alexhans
|
 |
« Reply #14 on: September 09, 2009, 03:19:56 PM » |
|
great  as a gameplay suggestion... wouldn't it be cool to have status names instead of just numbers? They would be more descriptive and more ambiguous. 80-100: Starving 60-80: Hungry 40-60: Somewhat hungry 20-40: Satisfied 1-20: full. You get my drift. Maybe it's not the wisest thing to do if you want to check the values in the console but it might be a good trait for the future.
|
|
|
|