Game Dev Diary for "Daughters and the Exotic"

"
BearCares wrote:


This version was never meant for public consumption but this diary is about exposing e-thang about the process. Keep in mind if you listen to it that it's rough, unfinished, unmastered, unmixed. It's literally a rough sketch. The only thing you should listen for is its basic energy and melody.

Pony Up! Cathleen's Theme
https://soundcloud.com/user-518096741/pony-up-cathleens-theme

Cathleen a NPC shopkeep on the colony who loves anything having to do with the wild wild west. You can either visit her physical shop or order items remotely via the mobile manufacturing kiosk (MMK) while inside the dungeon. This was mixed to sound like it was coming out of a videogame or an old radio because this is the version of Cathleen's theme that plays when you order something remotely. A more robust sounding, warmer, expanded version would be appropriate for when you visit her shop in person.


I like how you have a mixture of 8bit and saloon jangle in there. Bit slow (maybe 10-20 bpm) for my liking, bit scratchy but definitely a neat sketch.

Class methods make sense. Imagine having to redo that every time? Nope.
I'm starting to wonder whether I should continue with coding this because blender game engine will force the open source license on anything I do. It's not that I have any plans to sell the game, it's just that I don't want it to be open source.

I also noticed that coding has become so fluid for me recently that I don't need flowgraphs or anything like that anymore. I can code faster than I can use flowgraphs. That greatly diminishes my dependence upon Unreal Engine for example.

You see, I'm getting a laptop. Still looking around. But after I get it I'm changing engines. Because of this I should probably start learning something that's non-python in the meantime in preparation for the transition into a more powerful game engine that doesn't force my project to become open source.

Any suggestions of a game engine?

In the mean time... I will still code things that come to mind. But I think I'm gonna focus on art assets from here on out. Till I get the new laptop.

Sounds like a plan.

No idea on game engines here (no surprise there). Someone who reads this might know, but as you know it's a small audience in this forum in general, like 10 people. This thread, even smaller, which is ideal for your journal. You'll ask elsewhere too I imagine, and pick the right one for the job.

You might get someone pop in here and say, all the same.



Even though I had the most fun I'd had in years playing an online game last expansion in Betrayal and I recognize that GGG has elevated their game and entered their stride design wise... I have decided to skip this league in order to work on Daughters. T_T

Have fun ladies and gents.


Random Item Creation + Crafting is Go
Today's triumph is the inclusion of a random item roller which was designed to be extendable? expandable? whatever... into an item crafter rather easily(I don't have a reason to put it in just yet). It took me 8 hours to conceptualize this code even though there aren't many lines. Actually, the conciseness of it is one of the reasons it took me 8 hours to get it right.

The basic theory behind this item creation scheme is based upon the Wheel of Fortune. Basically there is a wheel of mods for item type, item rarity, prefix, suffix, stats, etc, the code runs through all these mods in sequence and as the virtual needle hits each of those little stoppers on the wheel of fortune, so to speak, each stopper has its own weighted value which tells the wheel how much momentum it is meant to lose once crossing that mod's field. The wheel will continue to roll until it runs out of momentum no matter how many mods are

Rarer mods have lighter values, and common mods are much much heavier, increasing the likelihood that the wheel of item creation is going to stop on them.

Item crafting itself works a little bit differently than you might assume. Players will be allowed to remove mods from the wheel and add their own. Placing their chosen mods into RARE fields will be cheaper while placing them into COMMON fields will be more expensive. When players alter their mod wheels the wheels will remain that way for a certain amount of time, before decaying back to a LESS than average position for a while. And then finally returning back to is default setup.

Anyway that's how item creation and crafting works in Daughters. Basically. Of course I'm leaving a lot out of it. But here is the code:





Today is slated to be a learning day. Erm, found this amazing game artist who happens to be female, who has all these very good and relaxing game art tutorials. So I will watch those and code in some conditions for the battle system and mods. Like bleed, poison, etc.

Also, I have decided to get either GTX 1050 ti or 1080, depending on which ones run the coolest. I'm guessing it's the 1050. Darnit. But I can't get a faster one than that and also use it outside in the Mississippi heat, the way I want to. So I have to get the slower model unfortunately.

Other than that, I'm in the process of deciding between switching to UPBGE, Unreal4, CryEngine, and Lumberyard. Currently... leaning... I think... Lum..ber..yard...? I dunno. I dunno.

bai
"
BearCares wrote:
Erm, found this amazing game artist who happens to be female, who ...


You're getting ripped on by Charan, hopefully you're enjoying it/ learning and don't mind me making a face.

And that's all I have. You'll work it out.

"
BearCares wrote:
Placing their chosen mods into RARE fields will be cheaper while placing them into COMMON fields will be more expensive.


See, I'm not confident to criticise a game until it's all there and working. That sounds backwards - I'd suggest you be careful of going for too much novelty over what people expect. There's a forumla, and the best works fuck with it just enough, but not so much people don't recognise the form. Can't tell if that's what you're doing, or not, as all these pieces are just that - pieces. Not a bad thing, just is.








"
erdelyii wrote:
"
BearCares wrote:
Erm, found this amazing game artist who happens to be female, who ...


You're getting ripped on by Charan, hopefully you're enjoying it/ learning and don't mind me making a face.

And that's all I have. You'll work it out.

"
BearCares wrote:
Placing their chosen mods into RARE fields will be cheaper while placing them into COMMON fields will be more expensive.


See, I'm not confident to criticise a game until it's all there and working. That sounds backwards - I'd suggest you be careful of going for too much novelty over what people expect. There's a forumla, and the best works fuck with it just enough, but not so much people don't recognise the form. Can't tell if that's what you're doing, or not, as all these pieces are just that - pieces. Not a bad thing, just is.






Lol, Charan is ripping on me? Where at? Guess I have to look for it now.

And no, it's not backwards. Maybe it sounds backwards, but it's not backwards when you think about it. Rare fields are less likely to be rolled. So placing your desired mods into those fields is cheaper. Like in PoE if you could say, replace your odds of getting a Unique item of your choice, with the odds of getting a Mirror of Kalandra - the crafter that allows you to do what would charge how much? They could give you that for an wisdom scroll fragment, because you're never going to see that Mirror and by extension, that unique item of your choice.

On the other other hand if you can replace the odds of getting a unique of your choice with the odds of getting a chance orb for the next 5 hours. Then you'd probably have to pay at least an 200 exalted orbs for that. I'd say. But yeah one of the cool things of doin fo yo self is that I don't have to take a vote on any of this.
Last edited by BearCares on Mar 10, 2019, 1:18:58 PM
"
BearCares wrote:

Hey BearCares. I am not familiar with Python, but I have a few nitpicky code changes for you to consider here:

You could probably replace your statement (elif i != 'nothing':) with simply (else:). If i == 'nothing' is false, then you already know that i != 'nothing', so there is no reason to explicitly check for it; technically, you have already checked for it by checking for its inverse. If one is true, then other is false, and vice versa. So, you could just check for one.

Similarly, you could probably change (if xi <= 0:) to (if xi < 1:); the meaning of the condition is the same, but it gets rid of one character of code (yay) and should remove one extremely basic, inconsequential CPU operation. Just another option.

(larger concerns below)

Whoa, are you using recursion in this function (calling item_forge() from within item_forge())? If so, that is pretty fancy. Are you aware of the potential performance overhead that recursion can cause, especially if you are declaring variables and executing loops within a recursive call chain? Have you tracked the execution of this function, with text output or something, to see how it executes?

Also, while I am intrigued by your wheel-of-fortune item creation concept and think it has merit, the process of sequentially "rolling" through mods in a "mod wheel" might have a rather high performance cost, and for each new mod you add to a particular "mod wheel", you might be further reducing performance (if I am understanding the concept correctly). If this function is not going to be executed that often, then it may be no big deal, but if it is going to be executed often, then you may want to consider a more light-weight, less iterative, approach in the future, if possible. Consider the worst case scenario of maximum momentum thus maximum "spin time" and question whether or not the performance hit your program is taking is serving to improve the item generation results or hurting performance without providing a tangible outcome improvement. When I read "runs through all these mods in sequence" and "The wheel will continue to roll until it runs out of momentum no matter how many mods are", I am concerned that performance is not being considered at all.

Anyways, I like your thread! Good luck on your design and implementation endeavors!
Spoiler
I have a small text-based game that I have been messing with on and off (mostly off) for a couple of years; it is quite terrible, but, under-the-hood, it does do a few things that I am proud of, like releasing dynamic memory when enemies are defeated, consumable items are used-up, and status effects expire (or I should say status effect, because there is only one so far). Also, I made sure that homogenous game items, such as Health Potions or Drinking Water, could be stackable; the objects are dynamically created, so they occupy their own memory resources; but, when one Health Potion is combined with another, such as in the player's inventory, one of the Health Potions becomes a "stack" of 2x, and the other gets its memory released, and the "stack" of 2x is really just a single object in memory with a private integer counter representing its number of uses (why have multiple objects that all do the same exact thing taking up separate memory spaces when you can instead have one object in memory that represents multiple objects and can provide the same functionality?). In my cute little game, memory consumption is highest at the start, when I generate all the enemies and item objects (which there are very few right now), and then they are steadily freed through gameplay, which is kind of cool in a nerdy way.
TY to those who called me out on my BS on these forums. There is no benefit to being so selfish as to fail to acknowledge others' differing beliefs of what "should be" or believe your own opinions so supreme as to be factual and thus dismiss others' opinions as being somehow a lie or delusional.
"
Perfect_Black wrote:
"
BearCares wrote:

Hey BearCares. I am not familiar with Python, but I have a few nitpicky code changes for you to consider here:

You could probably replace your statement (elif i != 'nothing':) with simply (else:). If i == 'nothing' is false, then you already know that i != 'nothing', so there is no reason to explicitly check for it; technically, you have already checked for it by checking for its inverse. If one is true, then other is false, and vice versa. So, you could just check for one.

Similarly, you could probably change (if xi <= 0:) to (if xi < 1:); the meaning of the condition is the same, but it gets rid of one character of code (yay) and should remove one extremely basic, inconsequential CPU operation. Just another option.

(larger concerns below)

Whoa, are you using recursion in this function (calling item_forge() from within item_forge())? If so, that is pretty fancy. Are you aware of the potential performance overhead that recursion can cause, especially if you are declaring variables and executing loops within a recursive call chain? Have you tracked the execution of this function, with text output or something, to see how it executes?

Also, while I am intrigued by your wheel-of-fortune item creation concept and think it has merit, the process of sequentially "rolling" through mods in a "mod wheel" might have a rather high performance cost, and for each new mod you add to a particular "mod wheel", you might be further reducing performance (if I am understanding the concept correctly). If this function is not going to be executed that often, then it may be no big deal, but if it is going to be executed often, then you may want to consider a more light-weight, less iterative, approach in the future, if possible. Consider the worst case scenario of maximum momentum thus maximum "spin time" and question whether or not the performance hit your program is taking is serving to improve the item generation results or hurting performance without providing a tangible outcome improvement. When I read "runs through all these mods in sequence" and "The wheel will continue to roll until it runs out of momentum no matter how many mods are", I am concerned that performance is not being considered at all.

Anyways, I like your thread! Good luck on your design and implementation endeavors!
Spoiler
I have a small text-based game that I have been messing with on and off (mostly off) for a couple of years; it is quite terrible, but, under-the-hood, it does do a few things that I am proud of, like releasing dynamic memory when enemies are defeated, consumable items are used-up, and status effects expire (or I should say status effect, because there is only one so far). Also, I made sure that homogenous game items, such as Health Potions or Drinking Water, could be stackable; the objects are dynamically created, so they occupy their own memory resources; but, when one Health Potion is combined with another, such as in the player's inventory, one of the Health Potions becomes a "stack" of 2x, and the other gets its memory released, and the "stack" of 2x is really just a single object in memory with a private integer counter representing its number of uses (why have multiple objects that all do the same exact thing taking up separate memory spaces when you can instead have one object in memory that represents multiple objects and can provide the same functionality?). In my cute little game, memory consumption is highest at the start, when I generate all the enemies and item objects (which there are very few right now), and then they are steadily freed through gameplay, which is kind of cool in a nerdy way.


Whoa cool post black. I would like to see your cool little project. And the points that you make about memory optimization are well taken. However, I'm not advanced enough to understand that level of coding. Which is part of the reason I posted this butt naked code for the world to criticize if it wants to. Thank you.

I'm not sure about the performance cost but it runs pretty well so far. Actually the game is different from PoE in the sense that there are much fewer trash mobs or trash items. So in general there will be fewer item rolls happening at once. Unlike PoE where you can have 50-100 items dropping within seconds of one another. That said, I'm always open to better optimization methods as I said.

As far as elif is concerned, you are probably right about that one - I lack the knowledge to affirm or deny what you're saying - but I chose to play it self with an elif rather than an else due to the recursive nature of the method AND the fact that it uses the dreaded WHILE loop. I try to avoid while loops but this time it SEEMED appropriate - that said I am still very wary of a wild while loop going out of control so I just thought I'd stick with the more familiar to me elif - than the seemingly more binary else. But you may actually be right. I just didn't want to test around too much and lock up blender over and over - because I did end up locking up blender a number of times with this while loop before I figured things out more.

Finally, you would have been right about the xi < 0 except that at the moment some of the numbers are using floats and I haven't used the floor command so I figured a legit wheel of fortune roll should be below 0 rather than simply stopping at 0.9. And yes I have been checking the console a lot along the way.

And another thing, I was just going to store my items in a text file. I'm not sure what the memory implications of that are.Also, I'm not sure whether I'll move to UPBGE, or that new Verge3d implementation, or maybe switch to CryEngine or Lumberyard Engine. Lumberyard is interesting because it has streamlined networking component which would be good if I wanted trading to be a central part of the game. But I dunno.
I won't update again before the 18th. The complexity of the project requires a lot of brain power. It's not that any one task is too difficult, but the tying them all together. It's like puppeteering a game of patticake between a sea of octopuses. Sure it's fun as hell, but also... well let's jsut abandon this metaphor pfft

Good news, I never mentioned this but my metabolic issues were causing me severe arthritis. I couldn't really walk without a cane for the past 5 months. But now my feet have been feeling better and I was walking around without a cane for hours today. SO all the fasting and dieting has helped.

That said, programming while on a 3 day fast is a sum bitch. But what's even more difficult is doing art. So that's why I'm not updating before the one week mark this time.

later

Report Forum Post

Report Account:

Report Type

Additional Info