... that I intend to market commercially, probably on GOG and Steam (if possible), when I've completed it. ...
Yeah, yeah, we'll cross that bridge if we get there.
Since I couldn't figure out that command, I dropped my robes so I could go streaking across the Imperial City. Afterwards, I couldn't figure out how to pick them back up? When I use the look command I see them on the ground though.
The dungeon is meant to be explored...What dungeon?
The surface, currently only serves at the starting areaWhat surface? I have no bearings as to where I am when I begin the game.
In older 90s dungeon crawlers, the "surface" could be seen as the town or a safe respite from the monsters.Cool, I didn't do much when it came to playing 90's dungeon crawlers. Assuming that anybody coming in to this has any idea what to do is a fast way to shoot yourself in the foot.
I intended to build on the significance of the Celestial in the tutorial.Tutorial?
The sewers and the floors below that are where the interesting action are. Type "descend" to enter the sewers!See those are instructions that make more sense. But there is nothing to indicate that 'descend' is a command that makes any sort of sense.
The greatest challenge with the text adventure though, is the concept in the games industry of "show, don't tell." Being that the only real way of showing a player something in a text-adventure is by telling, it has lead to encouraging me to focus on making certain bits of information pop out, and thus empathesize that it is important, while trying to avoid information overload (which is hard as many of the gameplay systems are quite deep and trying to reduce that complexity is very hard, without simplifying the systems themselves).
I heavily designed and tweaked the actual areas in the dungeons and thoroughly tested them, but didn't think about testing the surface area, as I was so used to just typing descend and going in
case ("tower") {
if (ListContains(ScopeVisible(), ShieldTower)) {
msg ("You already own a tower shield.")
}
else {
if (player.SoulShards > 399) {
msg ("<br/>You purchase a tower shield.")
player.SoulShards = player.SoulShards - 400
AddToInventory (ShieldTower)
}
else {
msg ("You don't have enough soul shards. You need 2000 but you currently only have: " + player.SoulShards + ".")
}
}
}
Oh, I didnt know the quest extension was a renamed zip.Hackers like me like to look at files to see how they work. When I opened it in a hex editor the first two bytes equated to 'PK' which is a dead giveaway for a ZIP (https://en.wikipedia.org/wiki/Zip_(file_format)#File_headers) archive. 28 bytes afterward and you get the filename "game.aslx" which confirms, 100% this is a ZIP archive. Open it in an archive decompressor and you know the rest.
Also, quest doesn't allow for greater than or equals, just greater than or less than. That's why my code is partially designed the way it is.
Note sure if this is hand coded but this is clearly the result of copy/paste. I would recommend using a function to print this message that takes three parameters, cost/available currency/item name.
Also, quest doesn't allow for greater than or equals, just greater than or less than. That's why my code is partially designed the way it is.
if !(a < b) {}
if (player.SoulShards < item.price) {
msg ("You don't have enough soul shards. You need " + item.price + " but you currently only have: " + player.SoulShards + ".")
} else {
msg ("<br/>You purchase a " + item.name + ".")
player.SoulShards = player.SoulShards - item.price
AddToInventory (item)
}
You'll know you were killed via XP drain if you get the message = "The creature drained you of your entire lifeforce, and you die instantly."
Hah! Yikes. I was just about to say something about that. How about not less than?Code: [Select]if !(a < b) {}
If the Primal Chaos creatures are so powerful, why not limit them so the player can't encounter them at level 1. Maybe wait until they go deeper into the dungeon. Plus, you don't want to reward the player too much too quickly if they manage to kill one early on by luck.
(cast "spell" at "target) = Casts a combat spell at an enemy target.
It is the year 1023, two centuries after the collapse of the Old Empire. Wierd, warped and horrific to behold creatures have been spotted leaving the Capital City of the Old Empire, and have ravaged the nearby countryside. Day by day, the creatures get bolder and more aggressive, which has led to the sovereign of the current monarchy to deploy the army and protect the citizenry. The army has sent scouts to the Old Empire's Capital City and has discovered that the creatures are leaving via a stairwell leading to the sewer system. The army tried collapsing the stairwell, but the next day the stairwell was back as if nothing had happened. Thus, they sovereign of the land put out a call to adventurers to enter the sewer system, stop whatever is causing the creatures to come out and those that succeed will be granted a generous reward, knighthood, and a title to a large chunk of land! Thus, hundreds of adventurers have flocked to the Old Empire's Capital City, the promise of a generous reward on their mind, compelling them to enter. Unfortunately, none have returned and although the army is able to hold off the current creatures coming out, if something isn't done soon, they will be overcome.
> buy
What would you like to buy from me today? (consumables), (training), (weapons), (armors), (shields), or (spells).
> consumables
Would you like to purchase (healing) potions, (mana) potions, enchanting (orbs), or enhancement (kits).
> mana
How many mana potions would you like to purchase; please enter a number. Price per is 50.
> 2
> salvage round shield
Error running script: Error compiling expression '(player.TempEnchantShardValue * 0)': ArithmeticElement: Operation 'Multiply' is not defined for types 'Object' and 'Int32'
You encounter a Primal Chaos Wasp!
Their current health is = 18.
> cast arcane zap at primal chaos wasp
You cast arcane zap at the Primal Chaos Wasp, and you penetrate their spell resistance. You blast them for 6 damage and reduce their health to 12.
> cast zap at primal chaos wasp
The Primal Chaos Wasp's spell fails to bypass your spell resistance.
Melvin the human sorcerer (wearing his robe, he is more modest than his cousin)lol
You skillfully dodge out of the way, and the moment it lands on the ground, you smash it with your " + player.EquippedWeapon + "; killing it!
In the code, #object# allows you to use a generic variable for interacting with objects in a scene. And if you don't have #object# in the actual command, then you can't use that variable.
Thus, if you have a lot of monsters, you would have to duplicate code every time for each monster. By using #object# it reduces code redundancy by a lot.
An alternative solution would be that if you flee from a drainer or boss, then the next monster encountered is a Tough, Quick, or Spellcaster. As you were using flee from object constantly to avoid drainers and kept getting them, this could potentially resolve your issue in a different manner. If you didn't have to use the command as often, would the command still feel wordy?
However, I'm also trying to avoid spending all my time refactoring, which is a trap that some developers fall into...
Take variable declaration; in C++ you can declare local variables in a function, member variables of a class, global variables, and variables local to int main(). In quest, you can only declare local variables in a function call OR member variables; you cannot declare variables into the "main function" and you cannot declare global variables.
You also cannot declare constants. And in C++, constants are great for declaring a variable once, setting its value, and then copying it to multiple places and then when you need to change it, just change it once in the constant and its applied everywhere. Can't do that here.
A lot of the other things that you take for granted in C++ are not found here in Quest. You are very limited in the kinds of function calls you can perform and the return value portion of a function call is EXTREMELY finicky.
Prices of items either have to be typed in or stored in a member variable. And debugging a class when it has over 100 member variables is a real chore. Also, the interface gets really cluttered when you have too many objects. Also, the quest engines chugs if you have too many member variables and classes. So I try to keep this down by declaring the value as a numerical constant (as compared to a variable constant, as you can't do those). In some cases I will use temporary variables, but I try to, again, use them sparingly. If quest / javascript allowed me to do variable declaration outside of classes and functions I would do it, as that would make my life immeasurably better, but I can't.
Again, trying to reduce code replication with function calls is great, but I don't want to spend all my time fixing code that I do not forsee myself adding to in the future. The code I have refactored is code I will be working with quite a bit in the future. But things like buy/sell code or player update scripts, I won't likely touch again, and thus refactoring them would make the codebase look nicer but not really improve my workflow at all.
That is true if I intended to add a new weapon. I do however intend to add new spells, which is why I completely overhauled the spellcasting system. With the old system, I had to place information in about 12 different places. Now, I only need to put it in 4 places. So I definitely agree making it less replicating for adding stuff is important!
// Array of ints as a variable
var arrayOfInt = [ 5, 10, 15, 20 ];
// Array of objects as a const
const arrayOfObjets = [
{ name: 'Sword', cost: 500, damage: 10 },
{ name: 'Two Handed Sword', cost: 1000, damage: 20 }
];
So if you do it like this, the function call BORKS, and returns no value, and instead sets your current shards outside of the function call to 0, and spews an error about the function call not returning a value.
SpellPurchase(player, spell)
msg ("You purchase the spell and your current soul shards are = " + player.SoulShards + ".")
You find a stairwell leading down, and thus can enter the sewers from here.
You enter a diamond-shaped room. It's brick walls are stained brown, by years of fecal matter. It's ceiling is shored up by wooden beams, barely keeping the sagging ceiling from collapsing entirely. It's wet floors slope towards a center point in the room, where a sewer grate empties the sewer waters from the room. There is a massive wasp hive here, that appears dead, as you don't see any wasps coming out of it. There is a large iron-bound chest here.
You discover a shrine!
It's health is currently = -13.
> setup camp
You cannot setup camp while under attack.
> attack
What type of attack will you perform:
(strike) [Highly accurate, but low damage attack]
(overpower) [Highly damaging, but low accuracy attack]
(bash) [Bashes target quickly with your shield; low damage but high accuracy]
(slam) [Slams target with your shield; high damage but low accuracy]
(backstab) [Sneak attack a target, if conditions are met; else, turns into attack.]
(cancel) [To abort your action for whatever personal reason you have.]
Error running script: Error compiling expression '(player.TotalAccuracy + getrandomint(1,10) + player.TempAccuracyModifier) > (object.Dodge + getrandomint(1,10))': ArithmeticElement: Operation 'Add' is not defined for types 'Object' and 'Int32'
Would you like to attack Spellbook again, with the same type of attack? (yes) or (no)
The idea behind it is that in many games, with sound, you often have little bits of ambient sound effects, or visual effects to add to the immersion. As I currently lack a sound designer and not sure that adding sound to a text-adventure would be a good idea in the first place, I settled for a timer-based ambience related event.
I agree that they do interrupt play at random intervals, but thus far haven't figured out a better way to do it. Maybe the moment after you kill a monster. Or maybe after you finish investigating something. Its something I do want; ambience that is, rather than annoying text popups.
Well, as the frequency is one per 30 seconds, a factor of ten would imply 5 minutes.
Though if I were to be able to eschew with the timer altogether, and go with specific intervals where a random ambience would occur, that would be more ideal imo.
Well, technically, three of the events for each section DO cause an interaction with the player. There is an ambience event where a tarantula and a scorpion battles it out. Most of the time, it will be harmless. However, if you have Arachnophobia, then you get a unique interaction (as they are both arachnids) depending on if you are in combat or not; if you are in combat, they freak you out and you drop your guard and the enemy gets a free hit on you. Though, I'm thinking myself that that might not be a great mechanic in of itself... especially with interactions with when the player has Haste active and should get another attack in before the monster can retaliate.
Uploaded hotfix 3. Makes the ambience system trigger in two circumstances; room generation and monster death. This means it won't be on a timer anymore and if you get a phobia event, then the monster gets a free attack, at the start of the encounter, rather than break other functionality. Hope this solves some of the annoyances with the ambience system!
Its even harder if a player is used to being attacked by the developer... which is a common occurrence with indie titles unfortunately. Like, the last three titles I tried giving constructive criticism for on Steam, I got attacked by the developer for posting my observations.
Even I could figure out how to build analytics into it, that would be a massive amount of feature creep. I'm trying to reduce the amount of the feature creep XD.
No, I'd say my lack of motivation is because creating a new section, is like a 25 step process (creating a spell tier is about a 12 step process), and is extremely error prone, and I hate hunting for logic errors.
{once:Once upon a time}
Always displayed text goes here
{once:Once upon a time
}Always displayed text goes here
Would you like some {command:help}?
You enter a hexagonal-shaped room. It's brick walls are stained brown, by years of fecal matter. It's ceiling has partially caved in, yet no light from above filters in. It's floors are covered in the dessicated, webbed remains of many critters. A large spider (web), with a sizeable spider in it, is attached to several walls. The (corpse) of an adventurer that met a grisly demise, is slumped against a wall. You discover a Stairwell leading down, allowing you to (descend) to the next floor here.
A pack of regular sized sewer rats, leaves the room, squeaking in terror!
You encounter a quick, Giant Mantis! It looks like a oversized preying mantis. It is covered in smooth, olive green carapace. One of it's right back legs are missing.
Thus, they sovereign of the land put out a call to adventurers to enter the sewer system, stop whatever is causing the creatures to come out and those that succeed will be granted a generous reward, knighthood, and a title to a large chunk of land! Thus, hundreds of adventurers have flocked to the Old Empire's Capital City, the promise of a generous reward on their mind, compelling them to enter. Unfortunately, none have returned and although the army is able to hold off the current creatures coming out, if something isn't done soon, they will be overcome.
Would you like to know more about a specific topic? Topics currently available are = (empire of the fallen), (old king), and (rebels); any other input cancels.
The Empire of the Fallen, was given such namesake, as many of it's nobles dabbled in demonic magic, or made pacts with demonkind, and thus they willingly traded their souls for greater power. The Fallen, were quite dangerous in their own right, but also commanded a variety of powerful demons to do their bidding, such as the lowly imp to serve as their messengers or the more powerful balors to serve as their personal champions.
You enter a hexagonal-shaped room. It's brick walls are stained brown, by years of fecal matter. It's ceiling has partially caved in, yet no light from above filters in. It's floors are covered in the dessicated, webbed remains of many critters. A large spider (web), with a sizeable spider in it, is attached to several walls. The (corpse) of an adventurer that met a grisly demise, is slumped against a wall. You discover a Stairwell leading down, allowing you to (descend) to the next floor here.
A pack of regular sized sewer rats, leaves the room, squeaking in terror!
You encounter a quick, Giant Mantis! It looks like a oversized preying mantis. It is covered in smooth, olive green carapace. One of it's right back legs are missing.
The Giant Mantis is heavily wounded.
You suffer 5 bleeding damage and have 4 rounds remaining.
You took too much damage and succumbed to your wounds. You are dead!
You took too much damage and succumbed to your wounds. You are dead!
Word Origin & History
handsome c.1400, handsom "easy to handle, ready at hand," from hand (n.) + -some. Sense extended to "fair size, considerable" (1577), then "having fine form, good-looking" (1590). Meaning "generous" (in handsome reward, etc.) first recorded 1690.
Would you like some {command:help}?
A bout of training provides 100 XP for 100 soul shards.
How many bouts of training do you want to have; please enter a number?
"You don't have enough soul shards. You only have " + player.SoulShards + " soul shards. You need " + (Satchel.TempValue * 100) + " soul shards!
"
Do you want to continue training? (yes) or (no)
I noticed my character was picking up the level 7 spells on the first level of the sewers.
Are the compass and objects tab needed for future use in the game? If not, I would recommend considering replacing them with a tab that shows current buffs on the player and their turns until expiring. That would keep me from having to dig through the menu system just to see how long until I need to recast haste or rejuvenation or what not.
Interstingly enough I noticed every room that I entered had an initial bad guy and some sort of 'risky' thing to attempt to manipulate. You could consider coding it so that sometimes you enter a room that actually has nothing interesting in it, or sometimes doesn't have a monster but has something interesting, or maybe ocassionaly a bland vanilla room.
Where in the quest design interface does it talk about removing parts of the interface, such as the compass? Knowing where to look for the information would help me a lot!
... randomness and fun are two different thingsDeterminism and fun are also two different things. ;)
People have fun when they feel like they are in control of the situation within a game.When they're in complete control of a situation, they are bored.
Or take Darkest Dungeon, you can have an extremely well prepared and well designed group with proper skills, but the RNG can decide to kill off three of your characters, within the first round of combat, before you have a chance to do anything.
Im doing controlled randomness... so I don't understand why there is a problem.Interesting. I never said there was a problem. ;)
1. Attack/Dodge rolls are based on a d10 random roll + modifiers. So if a creature is 10+ your maximum total, you aren't going to hit it/it will always hit you.
4. You have a time limit.... what?
I could reduce the rate of progression, so that a player has to grind more to be able to progress, but dunno if encouraging more grinding is a good idea.I have generally enjoyed games that have a bit of grind. Makes levelling up more of an accomplishment.
You start with 1,000 turns. Killing bosses and primals will add more turns. If you run out of turns it is gameover.
Well as for GOG, they are pro non-DRM. I'm also pro non-DRM, so that works with my ethics. The reality of DRM is that 95% of the time it only hurts legitimate, paying customers, and doesn't actually prevent piracy. The 5% of the time that it does prevent piracy, also makes playing the game a living hell for the paying customers. So having no DRM for my games is ideal.
That could likely be discussed with GOG. They have to first accept it though, and as I do want them to accept it, I'm focusing on polishing V8, as it does have a significant amount of good content in it.
If you make it to publishing and start selling decently, it would be a crappy feeling watching people distribute cracked versions of your published game everywhere.
Demo; they don't trust the vendor of a product, particularly in industries where scamming customers of their CC number is commonplace or where false advertising is rampant... like in AAA games.Uhh, what? That makes no sense. AAA games vendors are the ones who least need to scam, and the ones who would be hurt most by trying it. I think you're just harbouring a grudge against big name game companies.
That is very true, but would need to have a way to host a server to do that. I doubt textadventure.uk would allow me to put a paid product on their servers for people to pay on. Then again I've not asked either. Maybe I should.
An interesting discussion. I'll look into it.
If I were to do it on GitHub though, wouldn't I have to learn how to use GitHub first...?
Alchemy is feature creep. I dunno, but it does seem like crafting seems to creep into pretty much every game these days, and I'm unsure if the game would benefit from a crafting system, or if my current ways of providing progress to players is sufficient. Thoughts?
There is a (crematorium) here; a device used to cremate corpses.
You see, a gigantic metal device, known as a crematorium, and it is used to cremate dead bodies into dust.
You suffer 0 poison damage and have -1 rounds remaining.
how do you "Show" rather than "Tell"Yes!
So, how do I explain to a player how the game works, what are the rules of the game, and what are a player's options, without a massive text dump?Exactly the question you need to be asking.
maybe I'll redesign the tutorial and move the 2nd iteration of the tutorial into the "help" command. Though that'll mean I need a new tutorial...Not necessarily. If you can design sufficient feedback into the game, and limit options early on, you should be able to progressively teach people how to play your game just by having them play.
As a result, the tutorial can be completed fast, if you choose "Conclusion".This is not intuitive. I was guessing that at the end, but even after trying it, I wasn't sure if it worked that way. There was insufficient feedback.
That is completely logical and working as intended. Remember, you start off as a Quickling; these are designed for the Stealthy Playstyle (backstab/pickpocket), and you were trying to do the Melee Playstyle (strike/overpower).I think a more logical default would be a melee character. I think that's what most people would expect as a default.
If you backstab a foe with a Shortsword, you would deal x8 damage (base value is 32 damage).There was no obvious in game feedback to teach me this sort of thing.
IF you had chosen "Conclusion" it would have taken you to Character Creation and let you choose a different race, than a Quickling.I don't recall that happening. Maybe it behaved differently due to my bad response earlier?
More... Work work work.https://www.youtube.com/watch?v=_YBvP6j8cJ8 (https://www.youtube.com/watch?v=_YBvP6j8cJ8) ;)
They say if it was more like their best selling games, then they might sell it. Well, I took a look at their best sellers, are the recurring theme was = graphics, sounds, gui, NOT text adventure. So, I'm reading between the lines that they think that CoC is a great game, but not as a Text Adventure, and they'd be happy to do business with me if CoC developed into something more akin to their best selling games.
Well, I stand by my game; it is fun, immersive, and mechanically deep and interesting.This sounds curiously prideful.
But, I did not know if there was a market for it. Now I do.I would claim you still don't.
It was valuable to create it and I've learned much about bughunting, developing, designing, refactoring, and creating an immersive game.Absolutely. I wholeheartedly agree with this.
I am a pessimist and I always expect rejection. I assumed it was going to get rejected and it did.I expected rejection too. ... on the first round, and maybe a few more.
You are right it is a learning experience but what am I trying to learn or refine? I don't even know why it is rejected other than the assumptions I have of why it was rejected.Then you need to learn how to learn this ;)
Honestly, the past few months with the text adventure has been rough and in some ways I'm relieved it got rejected.Curious. Fear of success. That is a real thing.
The Quest program has been screwing with me a lot lately. It's been deleting my code, changing print message to expression, crashing unexpectedly and producing tons of wierd unexplainable problems.Sounds like you're looking for an excuse to ditch your current development method and leave the Quest engine behind.
As for what can be done better? I honestly think it would be better as an Ascii or tile based game, than a text adventure. I've felt limited in the games potential by lacking a good gui and by lacking a concept of range or distance to make playing a Spellcaster feel fair. I found the lack of sounds or music really hurt immersion and made gameplay feedback to player actions very hard to do. I found that having generic monsters with only a single for in a room or simple fights made the game feel repetitive in a bad way. I felt I allo too much feature creep of unnecessary things, like custom item renaming. Also I've been thinking of making a larger game world anyway where you could explore more of the old empire and not just the capital city. A lot of stuff i don't think is possible with a text adventure.
Edit: two thing that I thin I could have done better is to have designed the game with a tutorial in mind as building one in was a huge chore and I feel that if I had written up detailed comments in my code I cou have likely reduced the number of logic errors I ran into.
Well I got a reply from them about an hour ago, and as expected the reasons it was passed up was: graphics, sounds, gui, and not a text adventure.Yeah, I don't think it being a text adventure is the real problem. Even if they list "graphics", and "gui", I don't think that precludes a text-adventure. Maybe you just need to present the game's interface a little differently.
So, if I can figure out a way to translate all the good things from CoC to a different game, then they'd likely accept itSorry if this sounds harsh, but that sounds overly hopeful, with a hint of denial. A graphical remake might also be rejected, especially on a first try. There's a good chance there is more they haven't told you. I think the rejection based on graphics or gui is just too easy and convenient of an excuse for them. I think they're coping out and giving you an easy surface level reason, rather than get into the uncomfortable nitty-gritty details.
There is about 200+ hours worth of game development left. . . . I've actually moved on from its development
I have no more interest or drive in completing Cataclysm of Chaos