
Oh... I suppose then: https://logicmag.io/06-model-metropolis/
Moderators: Bob the Hamster, marionline, SDHawk
Code: Select all
script,locate item,item,clr = true,begin
#needs a clear data script to prevent item corruption
#this "clear item data" needs to run before this script, but independently to prevent blocking outside flags.
if (clr) then(
clear item data
)
saveitemnumber := item
clear categories
switch (item) do(
case (0) read equipment item (@read coffeepot data, category:coffee)
#...
case (22) read garnish item (@read cinnamon powder data, category:flavor)
#...
)
true for all items
run new menu verification
saveitemnumber := 0
end
Code: Select all
script,clear categories,begin
menucat1 := 0
menucat2 := 0
menucat3 := 0
end
Code: Select all
script,true for all items,begin
switch (persuasionlevel) do(
case (persuasion:low) do(
generalpersuasionneed := generalprice / 2
persuasionfloat := (generalprice * 50),mod,100
)
case (persuasion:average) generalpersuasionneed := generalprice
case (persuasion:high) do(
generalpersuasionneed := ((generalprice * 150) / 100)
persuasionfloat := (generalprice * 50),mod,100
)
case (persuasion:elite) generalpersuasionneed := generalprice * 2
case (persuasion:perfection) do(
generalpersuasionneed := ((generalprice * 250) / 100)
persuasionfloat := (generalprice * 50),mod,100
)
case (persuasion:impossible) generalpersuasionneed := 1000
case (persuasion:inevitable) generalpersuasionneed := 0
)
#add script for checking security levels or equivalent (which will require a shop value search)
generalshelfsafety := generalshelfspace--(generalshelfspace / 10)
end
Code: Select all
script,run new menu verification,begin
if ((generalitem>=1) || (generalitemunit>=1)) then(
check item menu category (menucat1)
check item menu category (menucat2)
check item menu category (menucat3)
)
end
script,check item menu category, which, begin
switch (which) do(
case (category:coffee) menu subscriptions (2886, 2904)
#...
case (category:flavor) menu subscriptions (2889, 2921)
#...
)
end
Code: Select all
script,no allergies affected,begin
generalallergytype := allergy:none
generalallergyvalue := 0
generalallergytype2 := allergy:none
generalallergyvalue2 := 0
end
Code: Select all
script,consignment category block equipment, string override = 0, text override = 2060,begin
consignment parameters (1, string override, 71, text override)
end
script,consignment category block items, string override = 0,text override 1 = 2062, text override 2 = 2063,begin
consignment parameters (2, string override, 70, text override 1, text override 2)
end
#...
script,consignment parameters,type = 0, str1 = 0, disp = 0, txt1 = 0, txt2 = 0,begin
itemtype := type
reporttype := type #refers to shop window displays (formerly consignmentreport) (for equipment)
consignmentstringsdisplay := str1
generalconsigntext := txt1
generalconsigntextaft := txt2
generalconsigndisplay := disp
end
Code: Select all
script,consignment package type,pack = 0,begin
switch (pack) do(
case (0) item text (2060) #equipment (standard)
case (1) item text (2066, 2067) #individual unit
case (4) item text (2062, 2063) #bag
case (5) item text (2064, 2065) #bottle
#...
)
end
script,item text,txt1 = 0, txt2 = 0,begin
generalconsigntext := txt1
generalconsigntextaft := txt2
end
Code: Select all
script,set category menus, cat1 = 0, cat2 = 0, cat3 = 0,begin
menucat1 := cat1
menucat2 := cat2
menucat3 := cat3
end
script,read equipment item, scr1, cat1 = 0, cat2 = 0, cat3 = 0, begin
itemisequipment := true
set category menus (cat1, cat2, cat3)
consignment category block equipment
equipment sub categories (cat1)
equipment sub categories (cat2)
equipment sub categories (cat3)
no allergies affected
run script by id (scr1)
end
script,equipment sub categories, which, begin
if (which == category:coffee) then(
itemiscoffeemachine := true
)
if (which == category:conversion) then(
itemisconversiondevice := true
)
if (which == category:electronics) then(
itemiselectronic := true
consignment category block depreciated items
)
if (which == category:storage) then(
itemisstorage := true
)
if (which == category:blender) then(
itemisblender := true
)
if (which == category:juicer) then(
itemisjuicer := true
)
if (which == category:cooking) then(
itemiscookingdevice := true
)
if (which == category:dispenser) then(
itemisdispenser := true
)
if (which == category:tea) then(
itemisteabrewer := true
)
if (which == category:broken) then(
itemisbroken := true
consignment category block broken equipment
)
if (which == category:modded) then(
itemismodded := true
consignment category block modified
)
if (which == category:moddable) then(
itemismoddable := true
)
if (which == category:refurbished) then(
itemisrefurbished := true
consignment category block fixed equipment
)
end
Code: Select all
script,read garnish item,scr1,cat = 0,begin
itemisgarnish := true
set category menus (cat)
if (cat == category:flavor) then(
itemiscoffeeflavoring := true
consignment category block items
consignment package type (4)
)
if (cat == category:dairy) then(
itemisdairy := true
itemcanspoil := true
consignment category block items
consignment package type (5)
generalallergytype := allergy:dairy
)
if (cat == category:preserved dairy) then(
itemisdairy := true
consignment category block items
consignment package type (7)
generalallergytype := allergy:dairy
)
if (cat == category:spoiled dairy) then(
itemisdairy := true
itemisspoiled := true
consignment category block trash
generalallergytype := allergy:dairy
generalallergytype2 := allergy:spoiled
)
if (cat == category:processed dairy) then(
itemisdairy := true
itemisprocessed := true
consignment category block processed
generalallergytype := allergy:dairy
)
if (cat == category:ice dairy) then(
itemisdairy := true
itemcanmelt := true
itemisfrozen := true
consignment category block items
consignment package type (15)
generalallergytype := allergy:dairy
)
if (cat == category:melted dairy) then(
itemisdairy := true
itemcanfreeze := true
itemismelted := true
consignment category block trash
generalallergytype := allergy:dairy
)
if (cat == category:chiller) then(
itemcanmelt := true
itemisfrozen := true
consignment category block items
consignment package type (4)
)
if (cat == category:liqueur) then(
itemisliqueur := true
itemisalcoholic := true
consignment category block items
consignment package type (120)
generalallergytype := allergy:alcohol
)
if (cat == category:perks syrup) then(
itemiscoffeebean := true
itemiscoffeeflavoring := true
itemisperk := true
consignment category block items
consignment package type (119)
)
run script by id (scr1)
end
Code: Select all
script,special consignment pricing instructions, fract = 0, cent = 0,begin
fractionprice := fract #for trash items only (number required to make a dollar on consignment)
centsprice := cent #for processed items only (nominator over item unit value)
end
Code: Select all
script,equipment parameter essentials, it = 0, eqset = 0, eqactive = 0, eqinuse = 0, eqbought = 0, eqsold = 0, ittrend = 0, itcomp = 0,begin
generalitem := it
generalequipset := eqset
generalequipactive := eqactive
generalequipinuse := eqinuse
generalequipdaybought := eqbought
generalequipdaysold := eqsold
generalitemtrend := ittrend
generalcompareitem := itcomp
end
script,trying to buy, reg = 0, post = 0,begin
generaltrytobuy := reg
generaltrytobuypost := post
end
script,equipment have use shop item sell tags, have tag = 0, use tag = 0, shop tag = 0, item tag = 0, sell tag = 0, begin
generalhaveitemtag := have tag
generaluseitemtag := use tag
generalshopitemtag := shop tag
generalitemtag := item tag
generalsellitemtag := sell tag
end
script,item parameter essentials, it = 0, servit = 0, ittrend = 0, itcomp = 0,begin
generalitem := it
generalitemunit := servit
generalitemtrend := ittrend
generalcompareitem := itcomp
end
script,item have use shop item tags, have tag = 0, use tag = 0, shop tag = 0, item tag = 0, begin
generalhaveitemtag := have tag
generaluseitemtag := use tag
generalshopitemtag := shop tag
generalitemtag := item tag
end
script,component object essentials, obset = 0, obcap = 0, obcur = 0, obfull = 0, obempty = 0, obinst = 0, begin
generalobjectset := obset
generalobjectcapacity := obcap
generalobjectcurrent := obcur
generalobjectfull := obfull
generalobjectempty := obempty
generalobjectinstalled := obinst
end
Code: Select all
script,equipment shop settings, shop = 0, case id = 0, shop item id = 0, item price = 0, item shelf space = 0, item content capacity = 0, begin
if (current map == shop) then(
generalshopid := shop item id
generalprice := item price
generalshelfspace := item shelf space
shopcaseid := case id
dynamicshoplocation := shop
generalequipcapacity := item content capacity
)
end
Code: Select all
script,item shop settings, shop = 0, case id = 0, shop item id = 0, item price = 0, item quantity = 0, item shelf space = 0, item content capacity = 0, begin
if (current map == shop) then(
generalshopid := shop item id
generalprice := item price
generalinitialquantity := item quantity
generalshelfspace := item shelf space
shopcaseid := case id
dynamicshoplocation := shop
generalobjectcapacity := item content capacity
)
end
script,item trash settings, item price = 0, item quantity = 0, item shelf space = 0, begin
if (itemisused) then(
generalprice := item price
generalinitialquantity := item quantity
generalshelfspace := item shelf space
)
end
Code: Select all
script,item mean values, item price = 0, item quantity = 0, item capacity = 0, begin
meanitemprice := item price #useful info for consignments
meanitemquantity := item quantity
meanitemcapacity := item capacity
end
Code: Select all
script,special pawn conditions, pawn tag = 0, pawn type = 0,begin
generalpawnitemtag := pawn tag
generalpawntype := pawn type
end
script,item dimensions, itsiz = 0, itwt = 0,begin
itemsize := itsiz
itemweight := itwt
end
Code: Select all
script,item prime texts, to buy = 0, acquire = 0, inv = 0, begin
originalitemtext := to buy
generalacqtext := acquire
generalitemtext := inv
end
Code: Select all
script,equipment peripheral tags, plug = 0, filt = 0, begin
generalpluglocationtag := plug #this will be dynamic eventually
generalfilterdiscardtag := filt #this will change with multiple versions
end
Code: Select all
script,item temperature values, heat min = 0, heat max = 0, current heat = 0, begin
itembestheatminimum := heat min
itembestheatmaximum := heat max
itemcurrentheatvalue := current heat
end
Code: Select all
script,item condition bonus stats, flav = 0, comf = 0, addic = 0, qual = 0, hlth = 0, lvl = 0, csb = 0, dol = 0,begin
generalitemflavor := flav
generalitemcomfort := comf
generalitemaddictive := addic
generalitemquality := qual
generalitemhealth := hlth
generalitemlevel := lvl
generalitemcsbonus := csb
generaladdadollar := dol
end
Code: Select all
script,additional bonus special features, scene = 0, spc = 0, ent = 0, qual = 0, info = 0, csb = 0, begin
generalitemscenerybonus := scene
generalitemspecialbonus := spc
generalitementertainmentbonus := ent
generalitemspecialqualitybonus := qual
generaliteminformationbonus := info
generalitemspecialcsbonus := csb
end
Code: Select all
script, item flavor meter, sweet = 0, sour = 0, bitter = 0, earthy = 0, fruity = 0, acidic = 0, rich = 0, silky = 0, spicy = 0, salty = 0, choco = 0, meaty = 0, smoky = 0, eggy = 0, oily = 0, viney = 0, creamy = 0, woody = 0, wheaty = 0, nutty = 0, doughy = 0, moldy = 0, bubbly = 0, misc = 0,begin
generalitemsweetflavor := sweet
generalitemsourflavor := sour
generalitembitterflavor := bitter
generalitemearthflavor := earthy
generalitemfruitflavor := fruity
generalitemacidicflavor := acidic
generalitemrichflavor := rich
generalitemsilkflavor := silky
generalitemspicyflavor := spicy
generalitemsaltflavor := salty
generalitemcocoaflavor := choco
generalitemmeatflavor := meaty
generalitemsmokeflavor := smoky
generalitemeggflavor := eggy
generalitemoilyflavor := oily
generalitemvinegarflavor := viney
generalitemcreamyflavor := creamy
generalitemwoodyflavor := woody
generalitemwheatflavor := wheaty
generalitemnuttyflavor := nutty
generalitemdoughyflavor := doughy
generalitemmoldyflavor := moldy
generalitembubblyflavor := bubbly
generalitemmiscflavor := misc
end
script, item comfort meter, cool = 0, heat = 0, soft = 0, firm = 0, dry = 0, wet = 0, smooth = 0, velvet = 0, sharp = 0, carpet = 0, spongey = 0, prickly = 0, coarse = 0, sticky = 0, slimy = 0, cold = 0, hot = 0, tingle = 0, shock = 0, vibrate = 0, bubbly = 0, relief = 0, gross = 0, misc = 0,begin
generalitemcoolcomfort := cool
generalitemheatcomfort := heat
generalitemsoftcomfort := soft
generalitemfirmcomfort := firm
generalitemdrycomfort := dry
generalitemwetcomfort := wet
generalitemsmoothcomfort := smooth
generalitemvelvetcomfort := velvet
generalitemsharpcomfort := sharp
generalitemcarpetcomfort := carpet
generalitemspongecomfort := spongey
generalitempricklycomfort := prickly
generalitemcoarsecomfort := coarse
generalitemstickycomfort := sticky
generalitemslimycomfort := slimy
generalitemcoldcomfort := cold
generalitemhotcomfort := hot
generalitemtinglecomfort := tingle
generalitemshockcomfort := shock
generalitemvibratecomfort := vibrate
generalitembubblycomfort := bubbly
generalitempainreliefcomfort := relief
generalitemgrosscomfort := gross
generalitemmisccomfort := misc
end
Code: Select all
script,item saturations, flav = 0, comf = 0, addic = 0, qual = 0, hlth = 0, lvl = 0, csb = 0, begin
#Note: These values seem to be affected during brewing. Best to leave them at zero for now.
generalitemoverflavor := flav
generalitemovercomfort := comf
generalitemoveraddictive := addic
generalitemoverquality := qual
generalitemoverhealth := hlth
generalitemoverlevel := lvl
generalitemovercsbonus := csb
end
Code: Select all
script,item bonus display values,begin
append number (47,generalinitialquantity)
append number (27,generalprice)
display modification value shifts (28,generalitemflavor)
display modification value shifts (49,generalitemcomfort)
display modification value shifts (42,generalitemaddictive)
display modification value shifts (43,generalitemquality)
display modification value shifts (44,generalitemhealth)
display modification value shifts (29,generalitemcsbonus)
append number (45,generalitem)
append number (46,generalitemunit)
end
script,item null display values,begin
append number (47,generalinitialquantity)
append number (27,generalprice)
$28="n/a"
$49="n/a"
$42="n/a"
$43="n/a"
$44="n/a"
$29="n/a"
append number (45,generalitem)
append number (46,generalitemunit)
end
Code: Select all
script,altered state meta check, which = 0, begin
#The following section refers to special metadata for broken and trash items, as well as unique social and moddable items.
#These won’t apply to most store-bought items.
#I need to decide if I want a broken subcategory, or just make broken items their own item.
switch (which) do(
#...
case (compareitem:cream) do(
dairy spoil conditions (creamspoil, goodcream1, spoiledcream, 494)
)
case (compareitem:milk) do(
dairy spoil conditions (milkspoil, goodmilk1, spoiledmilk, 495)
)
#...
)
end
#...
script,dairy spoil conditions, tospoil = 0, gooditem = 0, spoil version = 0, spoil tag = 0, begin
itemtospoil := tospoil
generalgooditem1 := gooditem
generalspoileditem := spoil version
spoileditemtag := spoil tag
end
Code: Select all
script,overabundances,begin
#toosweet - for sugar
#toorich - for cream (all types)
#toosaturated - for milk (all types)
#toothick - for ice cream
#toosandy - for cinnamon
#toobitter - for powdered grass and old salt
#toonasty - for spoiled garnishes
#toostrong
#toospicy
#toocold
#toohot
#tooboring
#Note: This section connects to “Check Garnishing Tray.�
#I may want to redo how this works, especially with the customer response texts.
#if (itemisgarnish) then(
# generaloverabundance := toosandy
# $56="Too Sandy!"
#)
end
Code: Select all
script,dynamic shopping conditions,begin
#This section is for dynamic shopping
#Update to shopcaseid if this section is independent of shop scripts
dynamicitemisvalid := false
switch (generalshoplocation) do(
case (dynamicshoplocation) do(
if (generalshopitem == shopcaseid) then(
dynamicitemisvalid := true
)
)
)
end
Code: Select all
script,display modification value shifts, str = 0, value = 0,begin
clear string (74)
if (value >> 0) then(
$74="+%d"
)
else(
$74="%d"
)
string sprintf (str,74,value)
end
Code: Select all
script,record item special case, case = 0, attrib = 0,begin
itemspecialcase := case
specialattribute := attrib
end
Code: Select all
script,allergies affected, alg1 = 0, algval1 = 0, alg2 = 0, algval2 = 0,begin
generalallergytype := alg1
generalallergyvalue := algval1
generalallergytype2 := alg2
generalallergyvalue2 := algval2
end
Code: Select all
script,object name string, whichmain = 0, whichartc = 0, whichhold = 0, whichsub1 = 0, whichsub2 = 0, whichabbr = 0, scr = 0, begin
if (specialtextdisplay) then(
copy string (9, whichmain) #$9="Store Powder"
copy string (57, whichartc) #$57="is"
)
if (itemisholdover) then(
copy string (30, whichhold) #$30="Store Powder"
)
if (checktag (2203)) then( #prep item reports
copy string (11, whichsub1) #$11="Store Powder" (may need new string)
copy string (12, whichsub2)
)
#This section is for shop display slices (equipment)
if (checktag (2203)==false) then(
if (itemwindow1) then(
copy string (12, whichmain) #$12="Store Powder"
shopping item rewrite strings (generalcompareitem)
)
if (itemwindow2) then(
copy string (12, whichmain) #$12="Store Powder"
if (scr<>0) then(
run script by id (scr) #item bonus display values
)
)
)
#for end of day trends reporting
if (checktag (2637)) then(
copy string (2, whichmain) #$2="Store Powder"
)
#for standard shopping cart windows (consult old “record list,cur� for comparison strings)
if (checktag (2638)) then(
copy string (2, whichabbr) #$2="S.Powder x"
)
end
Code: Select all
script,finisher interactive text, conv1 = 0, conv2 = 0, begin
conversiontext1 := conv1
conversiontext2 := conv2
end
Code: Select all
script,read cinnamon powder data,begin
generalitemid := 22
item mean values (30, 50)
multiplelocations := true
item parameter essentials (
cinnamon,
servcinnamon,
cinnamontrend,
compareitem:cinnamon
)
trying to buy (trytobuy23, trytobuy23post)
item have use shop item tags (141, 142, 56, 25)
item shop settings (4, 8, groceritem8, 30, 50, 100) #shop, item id num, item id var, price, quantity, stock, capacity
item shop settings (27, 75, sassyitem75, 32, 50, 100) #shop, item id num, item id var, price, quantity, stock, capacity
item prime texts (119, 93, 47) #to buy, acquire, inventory
item dimensions (0, 0) #size, weight
item temperature values (0, 0, 0) #best heat min, best heat max, current heat
item condition bonus stats (2, 0, 0, 0, 0, 1, 0, 0) #flavor, comfort, addictive, quality, health, level, cs bonus, add a dollar
item flavor meter (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) #sweet, sour, bitter, earthy, fruity, acidic, rich, silky, spicy, salty, choco, meaty, smoky, eggy, oily, viney, creamy, woody, wheaty, nutty, doughy, moldy, bubbly, miscellanous
item comfort meter (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) #cool, heat, soft, firm, dry, wet, smooth, velvet, sharp, carpet, spongey, prickly, coarse, sticky, slimy, cold, hot, tingle, shock, vibrate, bubbly, pain relief, gross, miscellanous
item saturations (-2, 0, 0, 0, 0, 0, 0) #flavor, et al.
combobonusactive := false
altered state meta check (generalcompareitem)
special consignment pricing instructions (0, 0) #fraction, cent
#Shopping
$9="Cinnamon Powder" #special text display item
$57="is" #special text display article
$30="Cinnamon Powder" #holdover info
$11="Cinnamon" #prep item report a
$12="Powder" #prep item report b
$2="Cinnamon x" #shopping list
object name string (9, 57, 30, 11, 12, 2, @item bonus display values)
overabundances
dynamic shopping conditions
allergies affected (allergy:cinnamon, 2)
record item special case (cinnamonspiced, attribute:quality)
finisher interactive text (5147, 5148)
end
Yes, thank you for saying that. That's what I'm figuring out. I only bring it up because I prefer using global variables for all of my values since they're easy to recognize, but this game is a devourer of variables, so I've been advised to use a system that uses far fewer of them. The reason for using arrays makes perfect sense to me. Trying to keep track of what every value within the array represents is the part that causes me brain strain (since I can't assign the values names within the array, at least as far as I know). The fake array system adds to that bit of stress since I have to initialize each array before I can use it, and then I have to remember to close it whenever I no longer need it, which can have dubious results if I forget, or if I link its closure to the wrong thing. With globals, they either have a value of zero, or they have a value of something other than zero. It's pretty simple to track them.Bob the Hamster wrote:You mention wanting to do things the "right way" but that is only useful if it actually makes things easier for you. If it makes things harder for you, then it isn't the right way.
I think this is actually the type of functionality that can get me in trouble. The abilities I need right now are reading, writing, and transferring data from one source to another. I can't think of any other function I would need. Where arranging and reordering would come in handy is if I implemented some kind of system that reorders items based on quantity. And, to be clear, I don't think that's a bad thing to want. Perhaps if I can get used to this system, then I might implement a feature like that. For now, I just want to get my head around using slices for flexible data storage and access properly.SwordPlay wrote:arrays aren't fundamentally different from global variables.
they can just be arranged and reordered
I've been using KyleKrack's fake arrays scripts. As I said in the previous post, I understand the basics. Where I stumble is with the tracking of values and with managing the open and closed states of the slices they belong to. This defaults to my general apprehension with using slice order scripting. Any time parent and child elements are put into play, I tend to mess things up.SwordPlay wrote:here are some tips.
- you can access and manipulate data in an array the same as a global variable. there is no real difference, but you have to write your own script to do so.
the advantages are that you can store as many variables as you like
Yep, did that already.SwordPlay wrote:- try giving your slices a lookup code. this not only identifies parts of your array, but you can look in the slice debugger to see things more easily. also you can search for a lookup code!
Yeah, so this is where things start to go belly-up for me. I completely get what you're saying. The concept is as easy as pie. The problem is in the tracking. In a small game, this might be manageable. In this game? It's like aiming for a net . . . after jumping out of a moving plane.SwordPlay wrote:- use a hierarchical structure for your slice tree. create a root node to contain all relevant slices. you might have a root node for each item, location, character etc., with many data nodes each
I've been trying to think of it like a filing cabinet. Again, I get the concept. Just having trouble with the implementation.SwordPlay wrote:- somewhat more difficult is arranging your slices. don't think of it like an array, a list of variables, think of it as a tree with branches.
there are 2 approaches I can think of
1. parent to the most relevant slice. for example, an item (slice) in an item shop (root node) can be transferred to the player (root node) when they acquire the item
2. have all your slices exist in a list, and don't reparent them. but create a child for each item (slice) that denotes the owner. and update it as needed.
And . . . this is where I lose the thread. I'm fine with top-level slices. Once we get down to the children, things go sideways.SwordPlay wrote:you can write wrappers around your array bits quite easily, to check the ownership of an item (slice), either searching it for a child slice that represents the owner, or checking who the parent it.
or something like that
All advice is helpful. Except bad advice, which this isn't. I just need to figure out an organizational system that I can manage.SwordPlay wrote:arrays aren't really different from variables, but the big thing is being able to arrange them and add bits of data to them however/wherever you like.
sorry if thats not helpful.
I'm going to try one more thing first. Since my problem is not with understanding the concept but with focusing on the organizational elements, I'm going to attempt to bridge the difference between the practical and the Entrepreneur: The Beginning way.SwordPlay wrote:i dont recommend using the fake array scripts, because they are quite limited. you are better off writing your own scripts and arranging things in a tree structure.
if you want someone to look over your work, or help write it, hmu, i am interested.
My scripts often melt TMC's brain. Probably best I don't post them here. :pBird wrote:Dear Pepsi Ranger, could you give some example scripts, how your code looked before and after using fake arrays? We have to learn from your case.
Before redoing the game in a different engine, maybe you should quickly tie up loose ends as much as possible and release a playtest version of your OHRRPGCE project and garner feedback before you spend possibly several more years continuing to work on it. Working that long on a game and not even knowing if people will like it is kind of a big risk, IMO.