This entire week was dedicated to the dueling mechanics, since Duelland is an instance of a map and not a singular map the changes included some new instance mechanics and fixes too
Duels are between any 2 parties or individuals, they are flexible. Participants are restored to full hp/mp and a clean status state. After the duel, they are restored to their original positions and to their original states
Currently duels can be engaged with the /challenge chat command - either with name or by targeting someone
Technically, each duel is added to the server data, i.e. parent.S - If there's a duel in parent.S.duels - the transporter NPC lets anyone join and spectate the duel, during the duel, the instance data, i.e. parent.I is populated, parent.I.A includes the challenger party, I.B includes the acceptor party, each entity of the array is updated secondly with coordinates and other info like hp/character type (Going to document these soon)
This week was a "work freely" kind of week, while the dueling logic was complex, it was a 3 days job, so overall the performance of the week wasn't high, going back to working more structured in Week 14. As an important bit of info, acquired Google GCP Startup credits, so future servers will likely be hosted on the Google Cloud Platform (the backend was already on App Engine). Thanks to these credits, don't have to worry about costs as much
Wanting to concentrate on an improved Guide, Documentation and Tutorial for Week 14 - at least make some progress - as these 3 seem like prerequisites for growth
Early Access: Week 12 in Review
Started the week by working on the CLI version of the game, it's now integrated with the game and can reconnect when disconnects happen - each character is now a node worker thread - I'd say it's ready for initial release and testing - however, still need to decide how to introduce official CLI gameplay, there might be a cost or a debuff, or maybe an in-game requirement/quest similar to proof of work systems
Most important change this week is the introduction of Giveaways - You need a special hat to run giveaways, Hat of Generosity, when you put this hat on and attempt to list an item for sale, you can run a giveaway similar to how you list your items for sale - and if you are running a giveaway - the hat appears on your character so other characters now there's a giveaway to join - Had a lot of fun with giveaways on Monday - it was a nice ending to the Easter event
On a personal note, I was running a very strict work schedule for a while, waking up at 6:45, working 8 to 5 - If you have well defined tasks to complete, a strict work schedule works wonders - but lately this wasn't the case - from time to time, I break this cycle to work more freely, and this week it was broken, the first fruit was the giveaways system, which I wanted to add for a while
The priority for the game is the documentation and the tutorial system, but I don't really have much motivation to continue those at the moment, so I'll probably try and add more fun things for a while and hopefully get a burst of motivation to complete the tutorial/documentation in a short amount of time later on
My project for week 13 is Duelland and the Duelling system
Changelist:
- Monsters can now have initial conditions - added the "fullguard" condition to Wabbit
- Fixed a very edge issue which caused heals to inflict pvp damage in pve servers (Thanks to dusty on Discord)
- Cleaned up most of the console.log's thanks to the CLI version which prints them all to the terminal
- "ghatb", "ghatp" - Hat of Generosity items and the Giveaway system
- Rabbit's Foot now cost 480 fun tokens
Early Access: Weeks 9,10,11 in Review
Started Week 9 by continuing the cosmetics efforts from Week 8 - Added eyewear to the list of possible face modifications - Integrated new cosmetics to character thumbnails that appear on the party list and the character selection screen
I had a trip planned that spanned Week 9 and Week 10, I originally planned to continue working on the game during this trip, yet this proved to be impossible, I mainly wish I took my mechanical keyboard with me, the faulty and icky butterfly keyboard of my Macbook made it torturuous to do any work, as the "Y" / "O" keys don't register most of the time :|
On Week 10, we had one catastrophic event where Europas servers went offline - after inspection - seems to be a dataserver issue where the server was actually disconnected from the network momentarily
Added a new system where noteworthy events appear on the top/right part of the screen, near where the party list appears, during the Easter, this new UI counts down minutes to the Wabbit spawn, and takes you to Wabbit with smart_move - Also integrated Franky and Snowman, whenever they are engaged, the engagement appears for every player on that server - This new UI will come in very handy when daily events are implemented
Added a new 20 second server shutdown cooldown, and when this cooldown starts, every engaged monster drops to 1 HP so all engagements can be completed - The last thing I want is to upset players, so this new mechanic ensures no progress is wasted during somewhat frequent yet irregular game updates
Changelist:
- Reflected magic damage is now reduced by the attacker's resistance too
- Several fixes to the new send_cm logic that also sends local messages, seems stable now
- 4 New Easter themed items and set bonus
- New Mechanic: Defeating a monster granting a buff
- New System + UI: Snowman, Franky, Wabbit engagements appear near the Party UI
- New System: Shutdown cooldown and engaged monsters dropping to 1HP
- Golden Bat spawn no longer broadcasted
- Fixed desertland's spawn/map issues
- New variable in parent: I - including instance data, only used in Tavern
- New variable in parent: S - includes server event data - S.wabbit, S.snowman, S.franky can be populated
- Special monsters now level up 20 times slower
- New game event - "shutdown" - Documented at DOCS
Event: Easter
Our Easter event is live! The eggs drop globally, collect them, craft them into a basket and exchange them for rewards!
The Wabbit can spawn in any place - defeating the Wabbit grants the Easter buff for +100% Luck for 24 hours!
Early Access: Week 8 in Review
Updated the server-side attack routines, the main purpose was to be able to Return promise's from the attack() functions - which requires every response to be refactored and documented - along with this change, also added a way to easily compensate for ping delays and increase dps! The new attack documentation and event documentation includes all possible scenarios like reflection, damage return, mobbing, stacked damage and so on - If I missed any, feel free to let me know
New character property: character.ping - calculates an average value for your character's ping, mainly by recording the network round-trip of the attack events
2 new ranger skills: Hunter's Mark and Piercing Shot - Thanks to Spadar's design on Discord/#new_ideas - From early feedback, it seems Piercing Shot needs some balancing :)
After Big Dad's suggestion on Discord, modified the Code/character object to lock most of its read-only variables and log an error if someone tries to change them manually. It's an issue newcomers stumble onto frequently, this change will solve the issue practically and prevent confusion
NexusNull on Discord discovered and reported an endgame bug which allowed him to buy anything by making his gold amount to become NaN. After the discovery and patch, re-visited all server routines once again. Hopefully something like this won't happen again but I personally believe there will always be exploits, when they happen, and if they get abused, there's a system to roll the game back to a previous point in time. We are lucky to have players like him onboard that report instead of abuse so we can continue playing without a rollback.
send_cm can now send local messages, so if your characters are all on Steam, or if they are all on Web, they can communicate with send_cm, even if they are on different servers!
Nearing the end of the week, started working on the Cosmetics system, it's going really well, prototyped the interface and possible customisation options
Changelist:
- character.on("attack") event
- character.on("heal") event
- game.on("attack") event
- game.on("heal") event
- Updated attack() function and documentation
- Monster attacks now emit regular "hit" events too
- Ranger Skill: Hunter's Mark
- Ranger Skill: Piercing Shot
- character.ping
- Code function: reduce_cooldown()
- send_cm now sends local messages too
- Nerfed Energize's party % contribution
- Party character limit is now 9!
- Updated Ent's drop table
Early Access: Week 7 in Review
Most notable achievement this week is the working tutorial prototype with task + step completion animations, has a new accompanying internal system that adds a secondary database object for all user accounts, going to use this new internal system in future for mails too - this system was needed as the main user object gets locked when you enter the bank. Currently the tutorial has 4 steps, the actual challenge will be coming up with useful, rewarding tutorial steps and individual tasks with accompanying explanations/information
There's a new Rogue skill called Mental Burst, thanks to SpadarFaar's idea on Discord, it's the first skill with a stat requirement, requires 64 Intelligence as the skill is quite powerful - It has it's own cooldown and if the target is defeated, the damage dealt is combined to MP. The damage is "magical". After the HP increases, Rogue's were relatively weakened, this skill improves their standing
There's a new monster called Ent, thanks to Pluet's idea on Discord, it has a new monster ability, Tangle, slows down it's target with roots, has 8 million HP - suitable to be farmed with large parties - drops a new item, Wooden Sword
There are 2 important bugfixes, thanks to Tigga on Discord for reporting them and providing reproduction data/info - The first one is related to how the Bank used to normalise data, it was possible to lose items by sending invalid data. The second one was an elusive movement bug, normally you shouldn't be able to get your character stuck, but stuck characters were rarely being reported. They were caused by some old-method animation routines that modified x/y values of characters directly - basically using Stomp when you were touching a wall - and sending a move command right after
One important change on entities (monsters and characters) is the new .visible property, egehanhk on Discord reported that if you cache a target, and move to another map, that cached entity/target acted like it was still on the map, basically there was no way of knowing it was a stale entity, this new .visible property solves that problem, as the value becomes false when the entity is destroyed / it's no more visible
Changelist:
- New styling for Code's Learn section
- Updated Save/Load Code Interface
- Bank fixes - better data normalisation
- An image assets gallery to inspire new ideas (on Discord)
- New tutorial system - (X.tutorial)
- Refactored animation routines to prevent stuck characters
- New functional property on entities .visible (Character/Monster Reference)
- New skill: Mental Burst (G.skills)
- New monster: Ent (G.monsters)
- New monster ability: Tangle (G.skills + G.conditions)
- New item: Wooden Sword (G.items)
Early Access: Week 6 in Review
Most major change this week is the new JS Promise system, first examples are the buy and upgrade functions, instead of returning no value, they now return Promise's - which provides an alternate and easier way to detect the completion of actions. For those who don't know, when you call the buy() function, it sends a buy command to the server, which completes the action and responds, so almost none of the game actions are instantaneous, they are async - If your ping is 100ms, a buy() command usually completes in 100ms
One side advantage of refactoring the entire codebase and server responses is making everything more easier to translate - once this refactoring is complete, almost every game response will be inside the "game_response" socket event
Added the Wanderer's 5-piece Armor set, pieces are scattered across the Town, Cave of Darkness, Spooky Forest, Spooky Town, Winterland - It's the first actual set with bonuses! Second one will likely be a pirate set
Stress tested the game to find performance issues, couldn't find the causes yet, but players who hop servers too much are reporting the game slowing down on Steam after a while, possibly has another cause, also it's a good time to remind the "/pause" chat command
Started but didn't complete "duelland" - a new map for duels, to be able to safely test pvp fights between 2 parties
Started collecting Linux-related problem solving tips at: https://adventure.land/linux
Improved smart_move - it now has a new ability called "Baby Steps" - when it's close to the target, it starts considering smaller moves, to get into and out of tight spots easier (thanks to Seth's reminder on Discord and nerd's secondary bug report) - It was a long standing and half-ignored issue, glad to leave it behind
Most exciting idea this week - From Jilaris on Discord
Achievements are always heavily requested, Trexnamedtom originally drafted the first proposal for achievements, and once we move on to game-level achievements, his draft will likely still be the starting point -but- the main problem with achievements, and the reason they aren't in-game yet, is the effort to return ratio (in terms of development)
Jilaris suggested adding simple achievements based on how many monsters of a type you've killed, for example for killing 1,000 Goo's, you would get permanent 10 HP's, for 10,000 Goo's, 10 permanent MP's, for 100,000 Goo's, 1 permanent attack and so on. His idea really clicked with my vision for the game, and it's both simple for me to integrate, and at the same time, simple for players to understand. Furthermore, I believe it would add a new purpose to the game - for early achievements, it would nudge players to go after other monsters and at the same time, reward those who just like to stay in one place - as a bonus, promotes partying
Planning a Pokédex-like item for the addition of this new system
Lately, from #feedback on Discord, one of the common concerns have been how the game doesn't force you to go after stronger monsters and how you could just grind a monster you can one-shot. While this new system isn't the ultimate solution for this problem, it will add meaning until new, higher hp and harder monsters are added
Some thoughts on a CLI client and gameplay
Re-experimented with running Adventure Land in the command line, thanks to the existing modifications that enable running characters as bots (the start_character system) - it was possible to directly run the game with minimal modification. As a proof of concept it works. It's exactly like running an iframe character in a very lightweight browser.
There are several problems that come with CLI characters: -(1) Makes it easier for future botnets to leech the game -(2) Potentially reduces the enjoyment of regular players -(3) Makes it easier for a regular player to run separate accounts -(4) Could conflict with ALBot (which started as an official project with our community member NexusNull) and potentially other player-made game clients, due to future roadblocks aimed to hinder (1) and (3)
To address (2) - I aim to add an observer interface for CLI players to observe their characters (potentially change their code remotely), and hope to have the mail system ready by that time, so even though they mainly play from CLI, they can (and will likely be required to, every 2 days) visit their characters, observe them, reply to mails and so on - this way, a player who stumble onto a bot character can interact with the person behind the bots
Currently this undertaking isn't a priority, the priority is still the early player experience, documentation and new game content - but there's something cozy about running your character from a Raspberry PI, it continually comes up, and to be honest, if I can meet my requirements for (2), it would be how I run my characters too
Changelist:
- Codes are now run at the global scope inside their iframes
- "level_up" Character and Game events
- New character events
- Moved handle_death() and on_cm() to runner_compat.js
- Promise system, internal push/resolve/reject_deferred functions
- Improved the character# limitations enforcer system (thanks to a bug report from "Big Dad" on Discord)
- Updated SKILLS UI with new top buttons (thanks to a reminder from "Big Dad" on Discord)
- Fixed a bank deposit/withdraw issue where sending a non-integer amount would wipe out all your gold (thanks to NexusNull)
- Updated buy(), upgrade() functions, added new documentation interface
- New locate_item(name) runner function, returns -1 if the item isn't found
- Added the "irregular" flag to "cyberland" - also added a door out to "main"
- Fixed show_json - non-object arguments was throwing exceptions after recent changes
- Improved internal performance logging and metrics, planning on slowing down characters a bit and increasing xp/gold ratios instead
- Wanderer's Set
Early Access: Week 5 in Review
Most challenging and important part of the indie development journey is managing yourself, it's easy to get crushed under the responsibilities, the ever increasing workload, new things popping up every week. To keep up, I was planning to switch to a strict work schedule, and on 28th of February, I managed to correct my sleep schedule and started working from 8am to 5pm on weekdays, and 8am to 12pm on weekends. So far so good.
Prettified the DOCS and completed the Character / Monster references, both "Available Functions" and the "Game Data" reference now render as a list, when they rendered as individual buttons, they were really hard to consume - Also each new page hide the ones before and they are re-shown when you close the page
Working on new content, Jayson prepared a new Pirate Ship, our freelancer Ellian prepared the new item images, first set will hopefully be live this week, it will be a scattered random drop, as requested by the community
Slacked a bit by working on new achievement, level up animations on Sunday and Monday, also re-visited Music and SFX, disabled directional SFX, it's stored at "options.directional_sfx" - Might add a way to disable all ambient SFX in the future, changed the Hit and Use sound selections, the new ones, in my opinion, are more serene and less intrusive, also lowered the default music level.
Discord was heated this week too, thanks to the feedback, I've decided to reduce the gold drops of easy monsters, and boost the XP rates of challenging monsters in the future. Adventure Land was "farm anything you want" by design, there's an internal system that ensures this, by adjusting the gold drops. I don't think the changes will be major ones, they'll likely be along the lines of 20%-30% of increases and reductions.
The major change this week is the increase in HP - Strength now gives 4 times more HP, while Vitality gives more than 2 times HP. Vitality is also now more effective at low character levels. Additionally, each point in Strength increases Armor by 1 now (previously 0.5). These changes are aimed to increase the duration of PVP fights and increase the PVE endurance of characters
Keep in mind that all game dynamics are subject to change and nothing is final
Early Heads Up:
I'll be traveling from 29th of March to 10th of April - Progress will be slow during these dates
Changelist:
- Boosted the party contribution of Priest's by 36%
- HP gain by Vitality formula changed
- HP gain by Strength formula changed
- Armor gain by Strength formula changed
- Item "hp" values are multiplied by 1.75
- leave_party() Code function
- New elixir crafting recipes (Trexnamedtom)
- options.directional_sfx
- Improved instances and teleporting monsters
- There's a new runner_compat.js - moved auto_reload() there
- Refactored G.itemsets to G.imagesets - As actual item sets are in G.sets, it was confusing
- Monster object now has more properties adopted from G.monsters, documented in DOCS
- Taunt cooldown fixed, refactored other hardcoded cooldowns to reference G.skills instead
- Monster ability definitions refactored and documented
- Improved the game_stringify function, which show_json relies on
- Arctic Bee pack is a starter pack now, has the "grow" attribute
- All monsters and characters have "in"(instance) and "map" attributes now
- Characters now have a "bg" layer, to render animations below the character sprite
- There's a new system called DTM, i.e. draw_timeout modifier, it's a multiplier, >1 if the animation event/timeout was delayed, to render animations easier for any fps level, currently the game is mostly hardcoded to 60fps, some animations have custom calculations but it's very impractical to implement such routines, at one point going to refactor all animation routines with this new practical logic
- Level 70+ level ups are now announced server-wide
Early Access: Week 4 in Review
Week 4 was mostly resting, took 3 days off. Didn't get much done but feel energized for this week.
Finally refactored "Free Character" to "Stop Code" - Also added a "Stop Code" button to the main menu if "Pro Mode" is off, new players sometimes get their Code's in an infinite loop and have a hard time figuring things out, these changes hopefully make it easier
Added the craftable Tri-Stone rings, with 1% chance, they become a Dark Tr-Stone at the +1 compound operation, the value of vitality scrolls increased over the weekend
Introduced the new, misc zone, Cyberland!
At the teleporter lady, you can press ',' (Comma) and enter transport("cyberland") - it's the only way to enter, and logging out from the mainframe gets you out, be careful tho, it's a lethal zone
Fixed an issue where 3shot/5shot wasn't working for characters that are started with the "/start" chat command or "start_character" in Code. Improved some other routines in the process
The #new_ideas channel in Discord thrived. ReximusPrime shared a well-thought humanoid boss, Bomber suggested new inspiring set items - It's clear that item diversity is needed. Planning on introducing new random drops, T1/T1.5/T2 armors, weapons to add more color to the game without upsetting the endgame balance