Posted on 05/07/2013 - 14:23
Just a reminder that I'll be on vacation from the 8th until the 27th, so things will be pretty quiet here. I'll be checking email periodically, just to cover any major issues that come up, but development updates will be on hold until I get back.
However, I've put together a test build for beta users to try out while I'm away.
New Test Build
All beta users can get access to a special "Test" build that I've uploaded today, v0.970t. It represents the latest updates and improvements to the crafting system, item identification, and several other bug fixes. However, it's highly experimental at this stage, so be forewarned it may be unstable.
Click the text links below the download badges on the beta page to get the "Test" version.
The main updates in the "Test" build are:
- New Crafting System - The crafting system now uses item properties to determine crafting recipes, instead of specific item names. This means that many items now work as substitutes for other items. For instance, one can use t-shirts to kindle a fire, or rifle straps to make a splint, instead of just rags and a stick. Also, the crafting yield box now shows multiple output options, which you can choose from before confirming your crafting process.
- Item Identification - Items requiring specialized knowledge now become automatically identified when the player has the right skills. This includes things like berries and mushrooms with botany, prescription drug names and medic, and bullets/guns with ranged. Some recipes are still required to identify items, such as boiling water.
- Mouse-Scrolling on Map - It is now possible to scroll the map by clicking and holding the right mouse button, and dragging the direction you want to scroll.
To get the test version, click the text links below the download links on the beta page. The download button links still point to the 0.969b beta build, just in case the Test version turns out too unstable to play. Hopefully, this gives everyone the best of both worlds!
If it craps out, I apologize. I did my best to get something uploaded before I took off. However, I was able to play a fairly lengthy game before leaving, so I think you should be able to have a successful game with the test build. And I'm interested to see what everyone thinks of the changes.
If I don't get another chance to post before leaving, have a great couple of weeks, all!
Posted on 05/06/2013 - 17:31
I finished up the remaining item identification issues I mentioned last week, and I think most items are working as intended now. I decided to go through the item data this morning and update it accordingly, consolidating unidentified items with their identified counterparts into single items. With all the duplicate water, berry, and mushroom items that encompassed, I was able to reduce the game's item count by 8.
I also decided to try making prescription pills use actual generic drug names, so they should be less familiar to players (e.g. amoxicillin, hydrocodone). If players have the medic skill, they'll also see the type of drug in parentheses (e.g. antibiotics, painkillers). Non-prescription drugs will still have consumer-friendly labels.
Similarly, the .308 rifle and ammunition have skilled and unskilled names, using the ranged skill as a switch. Unskilled characters will see "hunting rifle" and "some bullets" instead of specific caliber and model info. Right now, this doesn't affect much, but once there are more firearms and ammunition types in the game, it might make things interesting.
For the rest of the day, I decided to try testing the new build out. I want to see if I can get it stable enough to upload alongside the current 0.969 beta build. If I can get it to behave, I'll have special, downloadable NEOScavenger_test versions up on the site for beta users to try out while I'm on vacation.
Nickboom mentioned that some players would probably enjoy tinkering with the new crafting system, and could use the time while I'm away to report their findings on the new system. That way, players who prefer the current beta can continue using it, but players who don't mind an unstable test build can try out some new features. Good idea!
Coincidentally, there are a couple bug fixes I made today which actually might make the experimental version more stable than 0.969. It appears there was a bug in the stacking code which caused some items to be miscounted or misplaced, in certain situations. There was also a bug which was causing item identification issues, and might also be causing the "benefits of being in camp" condition to get stuck on the player. I have a hunch that those two bugs alone may have caused a number of stability issues in 0.969. There may still be other issues afoot, though, especially with the new crafting and identification systems.
I'm going to take a break for dinner now, but I'll try to put in a bit more time afterwards to see if I can have the new build ready to upload tomorrow. Wish me luck!
Posted on 05/03/2013 - 17:07
I managed to get the encounters correctly using ingredients today, so it is now possible for me to specify either specific items as requirements for encounter choices, or generalized ingredients. I was able to make a "scout ahead" encounter choice offer the player any optical zoom item from their inventory as a choice, based on a single ingredient assignment.
There were two tricky bits, though. First, I had to write some special code to make sure encounters showed all possible items that fit the ingredient, rather than just the first one it finds. This is a bit different from how crafting recipes normally work, so it required some special case code within the encounter system.
The second problem had to do with encounters that remove items from the player. In cases where the player chooses an item to give away (e.g. giving the urn to Hatter), previously, I could just remove any item with a matching ID from the player. I knew what the ID was ahead of time, so it was pretty straightforward.
However, now that ingredients can be specified, I have to be careful which item I take away in those types of encounters. I have to make sure it's the same item the player chose to offer. (e.g. offering an item to pay for admission) It took a bit of time to set that up, but it appears to be working now.
The rest of the day, I worked on item identification. Since I'd like some items to be identifiable without crafting, I had to make some changes to the game data and systems.
So far, I've got two types of identification:
- Knowledge/Skill-based - Players with certain skills automatically identify items as soon as they see them. This goes for things like berries and mushrooms, when the player has a botany skill.
- Crafting-based - There are still some items that require crafting to identify. This might be identifying items with a manual or book, or it might be applying a special tool (such as an ATP detector to check water potability).
So far, I've got groundwork laid for both of those. But just as I was nearing the end of the day, I realized there were a few gotchas I hadn't considered. For one thing, I may also have to adjust or hide the monetary value of an item based on its identification state. Purified water isn't terribly valuable until one knows it's pure. Similarly, edible mushrooms could be anything until identified.
Another problem is that I may still need to make certain items default to identified based on where they came from. Water is a good example of that. When the player finds water in a bottle, it should be identified as pure (i.e. finding a sealed water bottle). However, finding it in a lake shouldn't be identified.
An alternate example would be buying food or drugs from a store. Even without the medic or botany skill, the store should have the items identified.
I'll have to dig into those on Monday.
Which reminds me, I'm going to be taking some time off soon. Starting Wednesday next week (the 8th), I'll be taking a break until the 27th. During this time, I'll still try to stay on top of emails and major crises (order issues, etc), but development is going to be on hold. It'll cause delays in the next build release, unfortunately, but I'm expecting the time off will really help refresh and re-motivate me. Just wanted to give everyone a heads-up! I'll be sure to post a reminder on Tuesday before I sign off.
Have a good weekend, all!
Posted on 05/02/2013 - 17:31
The problem with the quick recipes turned out to be pretty simple. It was basically only checking for tools when executing the quick recipe, and skipped over any consumed ingredient requirements. Once I added some code to grab the consumed ingredients, it seemed to work as expected.
Except for one thing. As I started testing the quick recipe for a rough splint, it was grabbing some pretty unusual objects. A stick was always in there, as expected, and it started grabbing clothes, rags, and plastic bags, which was fine. But then, as I kept trying it out, it started grabbing things like whiskey droplets, mechanic skills, and other decidedly non-rag-like items. What gives?
A little bit of investigation exposed the problem: the ingredient for tying up a splint was "not rigid, not large." I originally figured that'd cover things like clothes, rags, straps, and even things like necklaces. And at the same time, I figured it'd prevent things like rifles, sleeping bags, fur tunics, and pills.
However, it turns out that skills are neither large nor rigid. The same is true of whiskey. And would be for things like water, newspaper, etc. I needed a new property: solid (i.e. a physical object that's not liquid/gas). It took a few minutes to go through all the items, hooking up that new property, but once I did, it seemed to work ok.
I then took 15 minutes to add a random feature that's been on my back burner: right-click scrolling of the map. Someone mentioned it in the comments recently, and now that the game supports right-clicking, I figured why not? A few minutes later, and one could click and hold the right mouse button to start the map moving in the direction they dragged (rubber-band/joystick style, similar to Sim City 4). We'll see how folks feel about it in the next build!
After that brief sidebar, it was back to two crafting-related systems: encounters that support ingredients as well as specific items, and item identification.
The item identification is still TBD, but I'm considering which ways would allow the player to auto-identify certain things with the right skills or items, and use crafting to identify the rest. For example, many players feel that botanists should be able to immediately spot poison vs. safe berries, which makes sense to me. On the other hand, water purity is something one would have to test with tools, so requires some crafting.
Also, if the player lacked botany, perhaps one day I could add a book or manual that allowed identification via crafting which took longer than using the skill (which is automatic). I like the idea, I just need some more time to see how it fits into the code/data.
One other thing I considered was which items would need identification, and what tools could support it. Obviously, berries, mushrooms, and water are examples. However, some other players have suggested medicine, which I think would be cool. Not everyone knows what amoxicillin is, so having the medic skill would be advantageous if one found a prescription bottle. Then, OTC drugs could be auto-identified for everyone, and medics (or a manual) would be able to identify the prescription ones.
The same could go for ammunition types and ranged, or electronic items and electrician.
Finally, I spent some time on the encounter system, to see if I could get encounters to support ingredients as well as specific items. This is the solution I hope to use so that I can create new encounters faster. Some encounters can be really tedious to setup if they use a type of item that has lots of variations in the game (such as optical zoom). Being able to specify any optical zoom as a valid input would be much nicer than having to list the 7-8 items manually.
Plus, if I ever want to add more items with optical zoom later, I won't have to go back and re-edit every encounter in the game.
As of this evening, it isn't quite functioning yet. But it's getting there. I've got the editing tool just about ready, and the encounters should be validating the ingredients. Now, I just need to make sure the player can see available ingredients when appropriate in the encounter screen.
Quite a busy day, now that I look back. Hopefully, tomorrow is just as productive!
Posted on 05/01/2013 - 17:06
As mentioned yesterday, I've been working on upgrading the crafting page to support more than one possible yield per set of crafting ingredients. Since some groups of ingredients could logically produce more than one output (especially now that ingredients can be substituted), it made sense to let the user choose which output they intended.
So today, I think I managed to get the yield area to support multiple pages. Here's what it looks like right now:
You can make a lot of stuff with some rags and a stick.
This screenshot is showing that the current ingredients, a stack of rags and a stick, can be used to make a rough splint. If the user were to click the left or right arrows above the yield box, they would see the yield switch to a quality torch (2x rags used) and a crude torch (1x rag used), respectively.
In theory, this could also mean that dumping a crapload of items into the ingredients box could quickly add a whole bunch of recipes to a fresh player. In fact, I just tried that now, and got 8. So, cool!
Anyway, most recipes seem to be working now, so I've started looking at the quick recipes, to get them working in the new system. So far, those are only semi-working, since they're not pulling the correct ingredients into the crafting box yet. (They just give free treasure!)
Progress is being made, slowly but surely!
Posted on 04/30/2013 - 17:24
Today was mostly about ironing out the kinks in the new crafting system. Many of the new recipes were showing some odd behavior, so it was a matter of fixing typos in the data, or edge cases that I hadn't considered. Things like adjusting the size property of rags from medium to small, in order to distinguish rags from clothes. Or fixing recipes with zero restrictions, which were being interpreted as having the restriction ID 0.
Most of the work was slow, but steady. But then I ran into the latest snag: recipe prioritization.
Up until now, recipes have been sorted according to complexity. That is, recipes that are more complex will be preferred over less complex ones when the game is trying to figure out what the player is doing. For the most part, it's safe to assume the most complex outcome is what the player meant to do.
However, in this new system, very many recipes have similar complexities (i.e. number of input criteria/ingredients). And what's more, many of these similar recipes seem equally important. E.g. a rough splint or a quality torch could be made from 2 rags and a branch. In a case like that, it'd be wrong to exclude one of those as a possibility, since both are equally valid.
So my latest task has been updating the crafting screen to have multiple yield pages. Similar to how the available crafting ingredients slot has pages, I'm going to see if I can make the yield box have left and right arrows to flip pages. Then, if the recipe can produce more than one outcome, the player can flip pages until they see the outcome they want.
It should still prioritize in terms of complexity, and there shouldn't be a ton of possible outcomes per input (unless there are a ton of inputs). For now, it'll be limited to the first 10.
As of this evening, I've got most of the code drafted for it, and compiling. Tomorrow, I'll start testing, to see how it works out.
Have a good night, all!
Posted on 04/29/2013 - 17:19
I continued work on the crafting upgrade today, and yanked out a bunch of the "clever" crafting stuff I was trying Friday. As mentioned last week, the "clever" stuff I tried turned out to be a can of worms, and created problems without actually solving the issue it was designed for.
So after cleaning out the "clever," I was left with an upgraded crafting system that had the following features:
- All current recipes work in the new crafting system as they did before.
- Crafting ingredients are now based on item properties instead of item names/IDs. This means it is now possible to substitute similar ingredients in recipes. (e.g. a player can now use a plastic bottle instead of a soup can when crafting a noise trap, or use a hoodie as firewood instead of a branch)
- Recipes that seem like they should be reversible are now reversible, though some might require the same tool to disassemble. (e.g. player can create a noise trap from soup can, string, and small parts, and then "uncraft" that trap back into the can, string, and small parts.)
- Crafted items keep track of the ingredients that went into them. (e.g. if the player used a bottle to make a noise trap, and reverses the recipe, they get a bottle back instead of a soup can)
- Fewer redundant recipes in the quick recipe list and fewer for me to create behind the scenes. (e.g. I don't have to create recipes for lighting a torch with a lighter, a tiny campfire, a medium campfire, a crude torch, a quality torch, etc.)
- Recipes each have different times to complete. (e.g. lighting a medium campfire now takes 0.25 turns, a small campfire only 0.1 turns, whereas all recipes took 1 turn each before)
- Complex recipes may require multiple stages of crafting, which may seem unrealistic in some cases. (e.g. it is possible to craft a scoped, strapped rifle with all the parts at once, but not possible to add a scope to a strapped rifle without first disassembling the strapped rifle to combine everything).
The "clever" option was trying to solve #7, but it actually broke #3 and #5 in the process.
I still have quite a bit of testing to do, so it's far from ready. But at least a few test cases seem to be working now. The rifle seems to work both forwards and reverse, and I was able to make some campfires with wood vs. clothes as fuel, as well as some variant types of noise traps with bottles vs. cans.
None of the art is different, mind you. It'd be way too complex to come up with art for every possible substitute of every recipe. It'd be cool to have, but building a system to track which image to use when, not to mention drawing all the images, is a bit beyond my means right now :)
I also have yet to sort out how item identification works. I've intentionally skipped creating new recipes for item identification as I'm considering tackling that area as well. If it isn't too much of a pain, maybe I'll roll that change in with this update. If it looks like a hairy problem, though, I might just keep them as recipes for now, and reduce the recipe durations so they're at least less of a pain than 1-turn per ID.
There's some cool stuff on the horizon, I think! I look forward to seeing what it can do tomorrow, and possibly trying out a few new recipes!
Posted on 04/26/2013 - 17:30
A while back, you might remember me mentioning that my hard drive was on its way out. The clicking is unfortunately coming from my C: drive, where Windows is installed, so replacing it is a bit tricky. I've been putting off moving into a new C: drive for a while, since the clicking is only intermittent.
However, it got really bad a few times, and it seems to be more common lately, so I finally decided to make a push to get the new hard disk setup. And since I have a Windows 8 upgrade lying around, I decided to give it a shot.
Most of the morning was spent getting all the development software installed running on the new hard drive. Things like IDE and compilers, versioning software, text editors, various SDKs and libraries, etc. One of the trickier things was getting MySQL installed with PHP. I always stumble on that, due to one thing or another.
This time, it was a missing entry in the Windows PATH variable, making MySQL invisible to PHP. And worse, phpMyAdmin cached an error page, so even after I fixed the issue, I still thought it was broken until I tried refreshing phpMyAdmin in desperation.
Anyway, boring morning. But I'm in a mostly functional OS now. I've still got the old OS sitting in the tower, and I can switch to it via BIOS boot order swapping, just in case. It's less scary knowing that it's there if I need it :)
I did get back to work on the crafting conundrum mentioned yesterday. My first foray into the code was to see if I could get yesterday's "Option #1" to work. Basically, write new recipes for combining a strapped rifle with a scope, and a scoped rifle with a strap, so all possible routes to the strapped+scoped rifle are supported.
As it turns out, there are some gotchas there that I didn't anticipate. Namely, if one uses a strapped rifle and a scope to build a strapped+scoped rifle, the game stores the strapped rifle as one of the components that make up the final rifle. So later, when the user tries to disassemble it again, they get the strapped rifle and scope back, instead of a strap, scope, and rifle separately.
Since the main purpose of this approach was to prevent having to perform an additional crafting step when adding onto a partially-modified rifle, this drawback actually gains us nothing.
Fortunately, JustcallmeX commented on yesterday's news that the "Option #3" I described yesterday is actually the way things work now. And I totally forgot about that. If that's the case, it might make sense to go that route. The stuff I tried today would have the same problem anyway, but would be worse because of the extra (and redundant) recipes cluttering the quick recipe list. Basically, today's approach was more work for me, and more unintuitive for players, than Option #3, with no gain.
Option #3, to refresh our memory, is basically just saying that we can't combine a strapped rifle with a scope without disassembling the strapped rifle first. It'd be nice to fix that, but I haven't found a way to do so yet without causing more problems than it solves.
I'll give that a shot on Monday, and see how it feels. I'll also let this simmer on the back burner over the weekend, in case there's another solution. Sometimes, letting the brain wander reveals new approaches. We'll see!
Hope everyone has a good weekend, and I'll see you Monday!
Posted on 04/25/2013 - 17:20
I spent a few hours this morning pruning some spambot stuff from the website, updating plugins, and generally weeding the garden. Then, it was back to crafting, and getting some of the more complicated recipes to work. Specifically, the scoped, strapped rifle.
The rifle is one of the more unusual recipes, because it combines several types of crafting processes. First of all, it has two separate attachments that can be added in any order. Plus, these attachments require spare parts and tools to apply. And what's more, any configuration of modified rifle needs to be able to disassemble into its component parts again later. So what we have is a series of reversible recipes with complex ingredients.
In theory, I had a system that would deal with this. And in practice, it mostly works. The situation where it falls apart is when one is trying to combine a strapped rifle with a scope and parts, or vice versa. The modified rifle fulfills many of the necessary rules for the recipe, but has some qualities that invalidate it.
For example, the scoped, strapped rifle requires a rifle, medium thread (strap), scope, parts, and a tool. If we start with a strapped rifle, it fulfills the rifle part, but because the strapped rifle is considered "rigid," it fails the medium thread part (which must be non-rigid).
One way around this would be to simply create some additional recipes to cover the use of a strapped rifle (or scoped rifle) as an ingredient. It'd create some extra data-entry work for me, but I could live with that. The thing I don't like about it is that it would appear as a separate recipe in the quick recipes list (and the scraps of paper). The player may assume (correctly) that the strapped rifle and spare parts fulfills all the necessary ingredients when they click the quick recipe, but the game may not see it that way unless they specifically click the quick recipe that is meant for the strapped rifle input. Not ideal.
Another possibility is for the game to try and be clever about it. Since the strapped rifle knows which parts it contains (so it can be disassembled later), I can have the game use that part list while checking the recipe. Basically, if the primary ingredient list fails, the game can see if any of the ingredients are complex, and try again with the disassembled ingredients.
I actually worked on this approach for a bit, and it seems like it would work in theory, but also has some gotchas. For one thing, I'm not sure this will always be the right way to handle things. E.g. the tarp shelter can be disassembled into branches, string, and a tarp. But it shouldn't be a valid input for making a noise trap, which requires string. So that pretty much writes off this approach.
A third approach might be to actually design the recipes so that the strapped rifle must be disassembled first, and then reassembled with the scope at the same time. This would actually work reliably in the system as it's currently built, but seems really unrealistic. It'd also be a bit clunky/unintuitive. So there are major strikes against that approach.
So far, the first and third options are the only viable ones I see. Neither are attractive, though. So I'll have to mull this over tonight, and see if any additional approaches come to mind.
Posted on 04/24/2013 - 17:22
Most of the day was spent ticking property checkboxes on the 270-odd items in the game. The tool I built yesterday was definitely useful in speeding this process up.
One thing I noticed, at around item 136, was that I really needed to go back and redefine how things burn. Previously, I had two properties that controlled burning: "fireproof" and "easily ignited." My thinking was that "non-fireproof" was good enough to indicate that it burned, and "easily ignited" was meant for things like kindling.
However, there are quite a few items in the game that are not fireproof, but are also not very useful fire fuel. Blinkies, pill bottles, and shoes are some good examples. They burn, sure. But one wouldn't make a very good campfire out of them.
I decided to add a new property, "fire fuel." This would be the case for things like branches, hoodies, and backpacks, which aren't easy to ignite, but burn pretty well. Then, I could mark things like blinkies as non-fireproof, and they wouldn't be a potential ingredient for campfires. Similarly, things like plastic bottles (which aren't fireproof, but shouldn't make good firewood) wouldn't be sufficient for boiling water.
Most of the rest of the properties worked out pretty well so far, and I finished the remaining items by late afternoon. Then, I decided to add a few bits of code that I had forgotten when first building the new crafting system:
- Making each recipe deduct a custom amount of time, instead of all recipes requiring 1 whole move. (Good for quick recipes like shredding a t-shirt.)
- Made sure that crafted items had a durability that matched the input items. E.g. a 10% rifle and 50% scope now creates a 10% scoped rifle, instead of a 100% scoped rifle.
- Made sure composite items degraded into their component parts again (previously, I had only hooked up disassembly of composite items, not degradation).
I also did some tweaking to old items, mostly removing redundant entries.
Finally, I started testing and debugging the new code and data. It worked in some cases (woohoo!), but failed in others. I still have a few things to sort out, it seems.
Overall, quite a productive day, though. Hopefully, that trend continues tomorrow!