It was a very productive full week, tackled some edge issues
Started by messing up the gold dynamics, we have an entirely new system now where the engagement with the monster affects the gold drop, especially for low level players, it makes so much more sense for them to fight harder monsters, the longer the fight the better the gold income - For veteran players, I've been increasing the base modifier for the gold drop gradually too, while nerfing boosters etc.
Tackled a very major UI issue, mainly an html shortcoming, if an entity is updating, clicks to that entity never register anywhere, in my opinion it's a long standing browser/chromium shortcoming. So for 3 years now, if your inventory was updating, or a character was continually updating, you couldn't click/interact with them, it was beyond imagination annoying, at least for me. On the weekend, I decided to tackle this problem once and for all, at first developed mimicker dom entities, for anything clickable, these acted like fixed position overlays, it was a classic case of developing before thinking, it didn't work with the inventory, as it was almost impossible to make drag and drop function as it used to function. I then decided to just re-visit each major interface, and modify them to only update things that changed. For example for the inventory, if it's open, instead of the entire inventory updating on every change, now items change singularly. Integrated this approach to the focused characters too, even if they continually spam something, like equip/unequip, you can click on their other items, click on the Invite/PM buttons etc. Conditions are still re-rendered at every update, so you can still observe this click issue - but important stuff has been patched
There were more edge UI improvements too, items on the "All Merchants" page render all the information, similarly, items on the /character and /player URL's now render item stat types/properties too
The "DUNGEON" server design is progressing as well, I originally wanted to make Adventure Land a very PVP oriented and chaotic game, it evolved more into an idle PVE game, I see the Dungeon as an opportunity to introduce (or force) more direct engagement
Other Changes:
- Monsters no longer level up during engagements - Incoming damage multiplier for party contribution reduced from 0.4 to 0.3 - Items stacking limit can now be lower than 9999 - .s property determines the limit - Citizen Luck/Gold buffs and dynamics nerfed - Chests go stale (no gold bonus) if you don't loot them in 10 minutes
New System: Charging Items - currently only the Warp Vest and the Power Glove's and only Ancient Computer passively and randomly charges these items
Warp Vest and the Power Glove's received their abilities, Warp Vest can warp to anywhere in the game, yet it takes ~an hour to charge, and after 100% charge, ~20 hours to gain additional charges - Power Glove's take ~120 and ~90 hours to fully charge, when you unleash the power, you get a high attack speed buff for some seconds, it's like an on-demand and overloaded Sugar Rush. As a reminder, Power Glove is a rare drop from the Konami Quest (just enter the code and grind)
Two new set definitions, "The Legends" and "Rage and Fury" - first includes Star Killers, Warp Vest, the latter includes Fury and Sucker Punch
Fixed the last remaining entities/monsters issue after the recent change, this mainly plagued the appearance of monsters in the browser (unfocusing and focusing the page), they halted for a while before moving again
Fixed combination damage, you can no longer trigger combination damage by stacking your players on top of someone else and including them in the damage - However this still works during coop fights (Checks character.s.coop.id)
Nerfed the +1000% Gold/Luck citizen buffs, should've done it earlier
New Item: Stompy's Nose Ring
Snowman, Love Goo no longer affected by damage return, they should also level slower
Fixed the Shiny item system (grade condition was missing), lowered the %'s too
Overall, a slow week, lost 2-3 days to some other stuff
It was an exciting week in terms of exciting issues, first one was a hoard of uncontrollably growing monster pack caused by the new routine that can kill monsters with damage return, the condition spawned a new monster each time it was death before a projectile can hit it. Second one was more major, discovered by Biene (Dre4mc4tcher on Discord) - the upgrades never failed on the new Europas Dungeon server. When an exception occurred before the post upgrade cleanup, it caused the previous upgrade item to be restored after a failure. Thankfully he reported it and we avoided our first rollback. Planning to make April 1st a planned rollback day, the game will shutdown at one point and everything will rollback to midnight
The T-Shirts are finally released
New System: Platinum / Gold / Bronze Ingot's/Nugget's can be used to produce Shiny items from +0 upgradeable items (FreezePhoenix's idea on Discord)
Took the Europas Dungeon server for a test run, I think I'm going to use the new "Doorway Protector" mechanic for the Pirate Ship instead - the attraction of the Europas Dungeon should be hard to kill monsters and pvp / last hit gets the loot mechanic
Small Changes:
- Fixed an issue that caused characters to get stuck at 0.5 alpha - Trade History is improved, recurring purchases now stack too - Vampire Rat's now drop nuggets instead of ingots - Items from Glitches are now Glitched items - Legendary scrolls drop from Emerald with a very low% - Items can now stack inside chests
A very productive 4 days after the last update, really hope I can keep this pace up, here's a long list of changes:
Projectiles can now be avoided if the `.m` attibute of the target changes or the target moves away more than ~72 pixels (to be improved later on, higher for healing) - `.m` attribute changes on transport/teleport
Improved the "hit" event documentation and added "action"/"incoming"/"target_hit" game/character events
New system: Penalty Cooldown, when you equip an item, `character.s.penalty_cd` is incremented 120ms - when you attack, your cooldown is increased by this cumulative (but decaying) amount - I suspect the dynamics might change with feedback
New Item: Frost Bow
New Projectiles: Fire Bow, Frost Staff, Harbringer, Oozing Terror
Fire, frost weapons, harbringer now have 2 looks on characters - one resting and one active look
This is internally a major change, significantly refactored how players/monsters (aka. entities) are sent and processed, they are now bundled with `start` and `new_map` socket events, so there's no vision delay when you first enter a map - Also, more importantly, when you focus an unfocused browser tab, parent.entities no longer become empty momentarily, it's always populated now, this change might break some things with a low probability
Save code works in bank if you don't change the slot name
Improved Dragold, new skill charging UI, multi burn has a different projectile, added armor/resistance, nerfed the multi burn damage and interval
Monster state restoration fixed (when the monster teleports back to its spawn), previously the contribution was reset for bosses, and the announcement was re-sent
When the server restarts, monsters that drop to 1HP no longer provide 100% drop and count as 1 kill, their drop is proportional to their hp and they count as 2.2X of their progress - so if a boss is only at 10% - it counts as a 0.22 kill - if it's at ~50% - it counts as a whole kill - going to document all these arbitrary multipliers at one point
Added "death" game events
New code function: get_focus
Increased Fire Roamers' essence drop rate
Monsters can now die from burn too
Both monsters and players can now die from damage return
New public character property: `.pdps` - exact metric that's used to calculate party share %
Evasion now contributes to both `.pdps` and coop points, burn contributes to `.pdps` A lot of other small changes as well (for example traps can now kill players)
Phew, it has also been 1 year in Early Access, was planning to do a review of year, but better not demotivate myself, doesn't feel like it was a productive year :)
Dragold ended up being too strong, every 15 seconds, hurls a fireball to everyone who fought against him, even if he isn't in an active fight. These fireballs each deal 5000 damage before reductions and apply a burn with 100% chance. Definitely going to use this mechanic again but going to calibrate it so it's easy to detect and possible to evade (like running away before it happens)
Apart from the Chinese New Year event, it wasn't a very productive 2 weeks. The Pirate Ship zone design iterated a bit. Spent most of it researching new cloud technologies, there's a high probability I'm going to rewrite the backend of Adventure Land in JS before open sourcing, currently it's in Python. After Python 2.7's end of life, it doesn't make sense to continue with Python any more. Also Google Cloud, in my opinion, made a lot of illogical choices when they re-made everything with Python 3.7. It's not an easy to use, turnkey, "app engine" any more, you have to deal with each service manually, each of them are like unique programmer dementors, waiting to suck your soul. Originally, App Engine was a beautiful product anyone could use to practically develop almost anything, currently they made the barrier of entry extremely high. For this reason it makes sense to rewrite Adventure Land with NodeJS/App Engine. The logic is, if it's all in JS, at least it will be less complicated, someone wanting to develop their own MMORPG won't need to deal with an additional language on top of everything.
Holiday season was a bit of a holiday season for me too, but started re-visiting the ideas around daily events and attractions - here's the current draft:
Daily Events: [2X Each Day ~30mins each] [8PM-9PM] - Goo Brawl [PVE] - A/B Testing [PVP] - Come up with more [TODO]
Daily Zones: [9PM-12PM] Monday - Mansion Mystery [Roguelike-ish] [Done] Tuesday - The Castle [Done] Wednesday - Cloudland Thursday - Dracul's Lair Friday - [?] Saturday - The Island with the Tall Tower Sunday - Pirate Ship [PVP] [Done]
Everyday [12PM-1AM] - [PVP] A multi-level dungeon opens for 1 hour
So basically, the plan is to start the day with 2 small game-like daily events from 8pm to 9pm, then a limited time zone opens for 3 hours, the dynamics of the zones will hopefully be unique to encourage more on-screen and assisted gameplay
From 12PM to 1AM, plan to introduce a dungeon that is a bit like an underground tower or silo, a PVP zone, it might have it's own special server too, so while the PVP is of the safe kind, the risk/reward dynamics could encourage strong characters, code or collaborative gameplay
Each of these zones and daily events are going to open up new paths to introduce new items, but I feel like the 12PM to 1AM zone could be the main source of the endgame exchangeables - especially for the weapons, while the rest could be for unique armors and accessories and such
So the coming weeks will likely be progressing on this draft and completing/concluding things from earlier weeks, like the cosmetics system, pets system, minor changes like the achievement counting dynamics and so on
Started completing incomplete things. Added the Fire Bow and the Fiery Gloves, the gloves make a minor set with the shoes.
Added "Burn" and the "burned" state, it's currently not finalized or documented. Basically if you trigger the burned state, the target takes damage over time for 5 seconds, close to your initial damage each second - When it gets re-triggered, the intensity can increase but not much
Winterland and Desertland received "burn_multiplier"s and "freeze_multiplier"s
Added code slot persistence, when you load a code, the slot is persisted and appears when you try to save, however, if you load a code, then immediately undo it from the editor, the change isn't automatically picked up
Fixed the game_log / number logging issue on the game clients and item ability %'s can now stack, for example dual wielding Fiery Swords on a Warrior will double the Burn%
These 2 weeks have gone by really fast, it was mostly filled with patches and small fillers apart from the launch of the Holiday Season event. I went through some personal challenges, had the chance to work on a major problem I had and leave it behind, currently feeling pretty good, gaining a lot of momentum lately too
Really proud of this new interface that explains each aspect of the event with Code examples, going forward each event, special mechanic, special zone is going to include a similar info button that explain the dynamics with Code examples
There's visual progress on the Pets front as well :)
Some of the notable additions:
- Monster info now includes the "Base Gold" drop rate, the data is in "G.base_gold" - The NPC Mr. T is now named Cole instead - game.on("event") - Underlying methods of show_json are now able to show the attributes like .x/.y - which are getter/setters of PIXI objects - Special monsters can now resist being stunned with 50% chance, probably going to make it transparent in the future and introduce it as a "Skill Resistance"
Worked on the CLI a bit, the memory leak is solved - only problem remaining is the low performance of the vm environment, added a way to offload computation to the master.js file that runs the CLI characters - once I complete the external smart_move, I'll release the CLI
Started refining the Code/Skills interaction, replacing existing functions with better named functions that have clearer/singular purposes, existing functions will keep on working. There's a new accompanying Code article too. Started promisfying use_skill
Going to release the Holiday Season event this week
Upcoming changes:
- destroy_item becomes destroy - New code function: is_in_range(target,skill) - New code function: is_on_cooldown(skill) - New attributes on G.skills: range_multiplier, range_bonus, cooldown_multiplier - Possible breaking change: .range values such as "1X+32", "3X" are no more - use_skill will accept an array of objects for multi-target functions
Improved the cosmetics system further, it's hard to settle with a feature-set for the cosmetics system, It's read for release at this point, however I'll probably spend at least one more week on it. It's also hard to decide on the delivery of the cosmetics, we currently have 5 premium items, if all of the cosmetics drop from these items, it becomes a very rng-heavy delivery. It might be a good idea to separate different things to different packs.
There's a new item called the "cxjar" - basically if you liquify a cosmetics entity and put it into an "emptyjar" it becomes a "cxjar", for example bats will drop "cxjar"s including bat wings with a very low %. In addition, it will be possible to receive cosmetics from exchanges too!
Some progress on pets as well, I think the puppy licenses and that one "kitty1" item that dropped from a "glitch" is going to increase in value soon :)
New Feature: Citizen Aura's - Kane grants +1000% Luck and Angel grants +1000% Gold to start with, whenever they are nearby. The auras only last 12 seconds
At the next update, there'll be a new "chest" opening Game event, the data includes a lot of details, the +Gold% of a character now only applies if you are close to the chest, and if you are in a party, only the looters +Gold% applies
To counter some abuse scenarios, magiport and blink now act like you spent 30 seconds in the abyss, so all of your buffs age 30 seconds too, otherwise It'd be possible to stack chests, designate a character as an aura boy and only loot chests with the +Gold aura
Another small change, "compound" now returns a Promise (game needs to be updated first, so not now now, probably within this week)