Jump to content
  • Advertisement


  • Content count

  • Joined

  • Last visited

Community Reputation

307 Neutral

About Slather

  • Rank
  1. I've been trying to decide whether a light or dark negative space is more functional, and which looks better. I'm a fan of the silohuette style, but I think I'll go with a nightclub theme- mostly dark with bright colors in the foreground. Thank you for testing, Staffan! I wish I had a vista or win7 computer to test on... I've added a line to the installer script that request's an admin's status to install the game. Its a weak attempt for compatibility, for now. I'm going to look for a better install system (than NSIS) that requires less esoteric one-time-use scripting knowledge. There is no goal at the moment. The test level is where I'm puting all of the different creatures I'm making. I run performance tests, tweak Box2D, test AI behavior, tune gameplay controls, and fix bugs in the test level. Very soon I'll implement creature death, and have a enemy chase the player around. Expect future posts about waypoints and AI behaviors. I'd have a demo, but I just started using a recent version of Box2d. I was using the code directly in my project from version 1.4.3 or something. Now I'll be linking to up-to-date static libs from the repository. I needed a joint that my creatures can use to bite and carry objects, and the old version didn't cut it. The new one has a b2WeldJoint, which should work nicely. I added some music to the demo. My previous OpenAL/Ogg code was buggy, which didn't make sense because I started with demo code that worked fine! So I started over with the demo code and discovered that I was trying to open the Ogg stream using ov_open_callbacks() instead of ov_open(), which I found in the docs on the OpenAL site when I was trying to fix an (apparently) unrelated bug. I've fixed it now and added a track I whipped up in Reason. I put it together in a couple hours using stock samples in Dr.Rex, and liberal use of faders and automation. Anyone that's used Reason knows that its a hack job, but I'm ok with that. I think a low-key Pink Floyd vibe would be suitable for the exploration parts of gameplay.... Maybe this lively tune could play when the creature is first introduced to the "outside world" (when leaving the introductory birth-caverns). one lively song, one minute long
  2. Slather

    Hello again

    Here's to a quick recovery! God bless
  3. Slather


    Its been awhile, but progress is being made on my fishy prototype. I have a friend that's mentoring me to help me finish this project. He's a lead designer at a game company right here in town. I'm starting to use some techniques from agile development to make a schedule and track my progress. I have a tenative deadline at the end of June. I've never written a design document before, but I'm struggling through my first draft for Aquarius. You can see my incomplete design doc here. I think the idea of the doc is to establish every feature the game will have ideally, and the finished schedule will show what I can have done in any given amount of time. *schedule not included My latest build is just a level where I test anything new and lay out all the creatures so far. I've lined up each type of creature in child/parent sizes, and shown a few in groups. I haven't made half the creatures I want yet. Demo (windows). Controls.txt Mouse to aim. Use E and D to move forward and backward. LMB to move forward. RMB to bite. Mouse Wheel to zoom 1-6 zoom level (6 is the highest real-game zoom) ~ is autozoom, on by default Hold R to grow. Caution: growing is fast! Hold T to shrink. Caution: shrinking too small will crash the program! Q AI waypoints G grid W wireframe C collision shapes V extended vision type (off, normal, small circle). Currently quite crappy. M "map" just shows the background gradient. and your position in the world as a red dot. I know its misleading but its not a high priority and wont be available in the game. U toggle culling. Note: you can see if culling is enabled by looking for the waypoints of creatures that are not on screen, there's no real indicator. I toggle the culling radii Esc pause / menu F2 toggle fullscreen. Note: some textures may disappear. you have to restart to get them back. F5 screenshot F6 experimental, crappy "motion blur" screenshot. SPACE toggle an in-progress control panel for the world. In-progress and not functional!! Oh yeah, I've moved my site to www.soulcraftgames.com and Soulcraft Games will be the name of my futuristic indie company.
  4. Slather

    Propagation By Water, part 1

    I hate to break it to you, but the element is "Proliferation" not "Propagation", as in multiplying or breeding.
  5. Wow, its been another month already. I'm been making progress and killing bugs but I haven't finished a journal entry because I always feel like I'm explaining things in a way that isn't understandable or interesting. Anyway, I'll have gameplay-relevant entries soon. This one's about organization and deployment! Fun! Project Organization I finally organized my project folder to be much more simple. At the top level are the executable, DLLs, config file, and two folders: the "data" directory where all the game data is stored, and a "project" directory that stores everything related to the project. In the "project" folder I keep the source code/VC++ project, the game design folder where I plan the project and work on art assets and audio, the documentation folder (Doxygen), and the deployment folder. This setup makes it easy to exclude everything but the relevant files when I deploy the game. Deployment I finally have my deployment process streamlined. All I do is run a batch file and it takes care of everything before building the installer with NSIS. So far, it creates an filename list for the uninstaller, moves any screenshots out of the data directory (so the user doesn't install my screenshots, and I don't need to manually move them each time), and builds the installer. The uninstaller list is just a list of all the files in the program hierarchy that the uninstaller uses to cleanup. Any other files are left over after the uninstall, such as the log file and screenshots. In the NSIS build script, I exclude anything named "project" or any file with a .pdb or .ilk extension. The script automatically runs the VC++ redistributable and the OpenAL redistributable with the no-prompt option. Below, you'll my deployment folder. It has the script itself, the icons, the images used in the installer, the redistributables, the license agreement used in the setup, the filename list for the uninstaller (which is created with the installer in the same script), and the batch file that brings it all together in one command. This is the batch file: unList.exe /INSTDIR=C:\My_Stuff\PROJECTS\Aquarius move /y "C:\My_Stuff\PROJECTS\Aquarius\data\screenshots\*.*" "C:\My_Stuff\PROJECTS\Aquarius\project\design\screenshots\" "C:\Program Files\NSIS\makensis.exe" "C:\My_Stuff\PROJECTS\Aquarius\project\deployment\Aquarius.nsi" I use absolute paths to be clear, and the directory structure won't change anyway. It runs an app (you can find at the NSIS wiki) that makes a list of filenames for the uninstaller, then moves the screenshots into my project/design/screenshots folder, then builds the installer by calling makensis.exe with the script as an argument. Here's the NSIS script I use. If you want to start using NSIS, you could do worse than to start with this script and customize it to your project. Documentation I'm in the process of documenting my code with Doxygen. The config file for doxygen is loaded with comments that make it huge, and just repeat what the documentation says anyway. What I do is use the Doxywizard to create an initial config file (the last tab) and then manually copy+paste the abbreviated version into a text file. Its just much nicer to use the short version to make changes. I don't think the Doxywizard gives all the options it should (the "Advanced" tab is empty?), so this is what I do. I think documenting the code will help my understanding of what I've written, and make it possible to share the code or point to it as a reference. I plan to release the code for Aquarius once its sufficiently documented. I'm not going to try to make it "impressive", either. A lot of the code is being written to fulfill a single purpose, so I don't waste time writing generic code. It will all be in the docs.
  6. Slather

    The Life Aquatic

    Thank you for trying it on Vista for me. :) I plan to avoid tunneling problems by experimenting with the physics settings (frequency/iterations), designing creatures so they don't have thin polygons (not always possible), and setting the player's smaller bodies as "bullets" (CCD).
  7. Slather

    The Life Aquatic

    Here's the player's character at (almost) full size. The control scheme is like Asteroids with a cursor. The direction you move the cursor is the direction your character faces. The cursor's distance from the player determines the character's speed, and where you looking. You could previously zoom with the mouse wheel, but now the cursor distance controls that, too. The camera will zoom out when you move the cursor away, and will slowly zoom back in when the cursor is close to the character. I'm going to include two sensory systems to help avoid detection, and find prey. The first is already in the demo: its the series of dark blobs around the edge of the screen. I call them "vision blobs" or "extended vision". They let you "see" what's off-screen in the form of dark blobs. The size and opacity of the blob indicate the size of the object and distance from you. The second sensory device in still in the works, I call it "particle smell". The particles are mostly white, but if you're observant you'll see that some of them have a different color. This color could represent a kind of "visual smell" and tell you what's nearby. You could smell food, predators, friends... I wanted this to be a subtle clue that only the keen would notice, but I can't keep secrets from my journal :) Your character's sense of smell could become more sensitive as you grow, too. I've almost fixed the bonitis problem, but it can still happen if a creature's tail whips around too hard and the collision shapes tunnel. This happens because a half-grown fish's tail spasms like a freak when it moves. It's just a matter of tuning to make everything copasetic. I could remove the joint motors at the end of the tail to calm down the tail swing. I don't have Vista to test things out, but in the VC++ Linker/Manifest File options I disabled the UAC and bypassed the UI protection. So hopefully, you won't have to run it as an administrator. Those brown things aren't poops, they're seeds! If you grab one and let it touch a rock, it instantly sprouts a single giant leaf. Rocks are the only static objects I have at the moment, so that's why plants can grow out of them. All the bodies and joints necessary for leaves are very expensive and bring the game to a crawl in any large amount. I'm trying to find a way to do inexpensive plants...
  8. Slather


    Are you going to keep any networking code maybe make a multiplayer mode for Citizen?
  9. Slather

    BOOM! Update Three

    The game is presented well and has nice graphics. I realize how much work goes into a game of any size, so I hope my critique is well-received. I have yet to finish a game, so this is not meant to sound condescending. The check mark next to the "Play" menu item made me think that I could use the arrows to change the selection up/down. Also, I skipped the instructions the first play and didn't know it was a mouse-controlled game. I found I could use the arrows to move, but no button would fire. I recommend removing keyboard input for the gameplay if its not fully supported. Collision is a little off but didn't ruin the game. The app took mouse focus, but gave me no cursor to move. It wouldn't give back mouse focus until I Alt+Tabbed. After that I moved the window, but the app would not take back any focus, mouse or keyboard. Without key or mouse focus, and no close button (or standard app menu when you right-click on the taskbar item) I had no choice but to Ctrl-Alt-Delete and foce the program to close. A close button on the window would be nice. I made it to the third level and halfway through, it declared the game to be over without any indication as to why. The enemies don't shoot back, so what killed me? I think my shields were still full. Besides the usability flaws, its a nice Defender clone. Why is it 30MB? Because of the music?
  10. Slather

    Aquarius update

    Thank you:) I didn't want to delay this post anymore, so I decided to fix the bonitis bug afterward. Haven't figured out how to fix it yet... I'll head back to HQ, and revolutionize that side of the paradigm.
  11. Slather

    Aquarius update

    Demo Download(win32) Lately, I've been working on my top-down, sea-creature game. The basic idea is that you explore, find prey to eat, and avoid predators. Its really a labor of love. I've made a lot of progress since the last update but I'll post smaller updates instead of one giant entry. A typical play-through is planned to go like this: You are born. You use your senses to avoid predators. You're not fast enough to catch prey, so you eat plants. As you eat, you grow and become faster. You hunt down prey and keep growing. ...And that's all I'm realistically planning for now. The actual experience so far: You spawn at the origin. You see rocks, plants growing on them, and prey going by. You also see my test creature, the "Freakshow". You can't actually eat things yet, but you can bite off pieces. (its far from finished) There are no predators yet. I'll go into more detail later about everything. Also, know that if you hit 'R' to grow, the creature may suffer from what looks like Bonitis. Just quit and restart if any weirdness occurs.
  12. Slather


    The RTTI and typeid() bit sounds like a form of reflection. I often wonder if it's possible/worth it to do in C++, as apposed to writing a language (C#) that has it built-in.
  13. I just posted my sprite render script (for 3dsMax) here at ScriptSpot. I don't know if any gamedev journalers use Max or need rendered sprites, but here it is! More info here.
  14. Aquarius Demo (with Ninja Demo) Here's my water game prototype so far. There isn't anything to do except bother the snakes. Today, I did some profiling with the Shiny profiler, made the level update loop more efficient, and suddenly my app runs faster with vertical-sync on than without. What the hell? I don't know why yet, but I must be doing something very wrong with it disabled. So if you try the demo, run Aquarius with v-sync on. The ninja app has a slight delay in response time with v-sync enabled. They both use the same config file, so you have to change it when you switch, sorry. I didn't want to create a separate installer for the ninja test because its so small. Hopefully it installs and runs ok. Let me know if it doesn't? I've been playing a lot with the particle system in Aquarius (still working title). The particles are now little tiny circles, and theres a few different sizes stored in display lists. I've added culling, the ability to change the video settings from the menu, and I changed the snakes' behavior a bit. Oops, I forgot to included a list of the controls again. Aim with the mouse E, LMB - move forward D - move backward roll the mouse wheel - zoom in/out R - grow a little bit and get faster ( but not much ) W - toggle wireframe (weirdness with the collision shapes atm) C - toggle collision render P - toggle particle update Esc - back to menu, quit F2 - toggle window mode Pause - pauses just for you Video Settings The video settings can now be changed from the main menu. They're stored in the config file (which is now XML). I'll have to write a proper GUI_Page class to handle menu pages so I can put it on an Options page. When a setting is changed in the menu, a simple VideoSettings struct is updated, and the 'Apply Settings' button resets the video mode using SetVideoMode() (same as the fullscreen toggle). When I create that GUI_Page class, I'll have to make sure the app takes you back to the correct menu page. There is a bug that I can't duplicate: One time, when going from fullscreen back to windowed mode, the viewport stayed at the upper-left of the monitor- within the window. So I dragged the window to the upper left and back, and it was back to normal. Bizarre. Another annoyance is that going fullscreen moves Windows' folders around. I have no idea how to fix it. Culling I'm using a simple culling technique based on bounding circles. It takes the distance from an object to the screen center, and subtracts the bounding radius of the object from the bounding radius of the screen. I could test the object's radius against a rectangle for the screen, but it might actually be a little slower since the cost of this (extremely simple) technique is in the squareroot operation already needed to get the distance. There is a bit of wasted space around the screen (shown in the image). I haven't compared the operations for an AABB technique to this method at a low level, but I don't think there would be much to gain from using AABBs instead. Each object's bounding radius is calculated by finding the furthest vertex, or circle + radius, from the origin. This is done once, when the object's Collision shape is created. The objects are culled by placing only visible entities into a vector of Entity pointers each update. I loop through every object and call it's UpdateCulling() method, which I pass the camera's position and current radius. This method returns true if the object is within the radius, and is added to the vector of objects to render.
  15. Slather


    Here's nice chat about Get/Set. Of course, if you need to store different types of stats, I would do something silly like this: class stats { public: bool GetBool( std::string key ){ return mBool[ key ]; } int GetInt( std::string key ){ return mInt[ key ]; } float GetFloat( std::string key ){ return mFloat[ key ]; } const std::string& GetString( std::string key ){ return mString[ key ]; } void SetBool( std::string key, bool b ){ mBool[ key ] = b; } void SetInt( std::string key, int b ){ mInt[ key ] = b; } void SetFloat( std::string key, float b ){ mFloat[ key ] = b; } void SetString( std::string key, const std::string& b ){ mString[ key ] = b; } private: std::map< std::string, bool > mBool; std::map< std::string, int > mInt; std::map< std::string, float > mFloat; std::map< std::string, std::string > mString; }; class SomeClass : public stats //, ... { }; But that's just me.
  • Advertisement

Important Information

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

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!