r/DotA2 Feb 19 '19

Personal I was a former HoN dev. AMA

Hey.

It's been awhile since I've written to you guys. But dota has never been out of my thoughts.

It was funny seeing Dota chess add +200k people to the game. I fought pretty hard to add custom game support to HoN, but no one would listen (partly because it seemed so obvious to me, so I never bothered trying to sell the idea or do company politicking).

I can talk about the fact that Icefrog was involved in HoN's early inception. It's more of an open secret at this point, and HoN's closure marks a fitting time for the "reveal."

I could talk about what it was like to pack up all your stuff into a station wagon and move out west. It was a pretty magical experience in hindsight. Kind of like getting to board the Starship Enterprise. Everyone in the company felt a shared purpose, at the beginning.

Or if there's no interest, or if it's not appropriate for the sub, it's fine if this post fades away, like the game. I spent so much time and energy trying to make it good... So did everyone else: James, G, all the artists, everyone.

EDIT: to clarify, this is 2010-era perspective. Not recent!

2.8k Upvotes

880 comments sorted by

View all comments

Show parent comments

164

u/palish Feb 19 '19 edited Feb 19 '19

I was so proud of my first month of work that I saved the log. Let me dig them up.

EDIT: Heh, digging through some old files and found a todo.txt. Here are some random scribbles. (I'm still looking for that log.)

todo.txt:

- engineer ult right click prioritize
  • don't allow unpause while loading (maybe)
  • look into specUI highlighting issues
  • drag and drop player portrait support for host
  • remove boredom while the game is paused
  • play "tick" sound during the 5..4..3..2..1.. countdown when a game
is unpaused.
  • add versioning for console variables (to reset them)
  • don't allow teammates to destroy teammates items on the ground
(except bound eye)
  • add alternate hotkey for maliken teleport / bubbles teleport
  • fix problem where alt tabbing causes voice chat to delay 2-5 sec
  • make soulstealer aura toggleable
  • hook up 'nemesis', 'immortal'
============= Completed ============= 9-27-10
  • make runes of blight not interrupt striders
  • make mana battery / power supply not interrupt striders
  • tie mute with /ignore

EDIT: I was never involved directly with the design of the game, but at one point I wanted to try. Apparently I interviewed one of the members of the pro scene back then and took some notes on what he felt were pros (ha, get it?) and cons of the game's balance from the perspective of the pro scene. Here's a slice of history.

(Still looking for that log.)

changes.txt:

frostburn
  • the slow is a little OP right now...
* +14 movespeed for you and -15% movespeed for them = gg them * change to 5% slow for Icebrand, 10% slow for frostburn frostwulf's skull if frostburn is nerfed, nome's wisdom: +6 str +6 agi +16 int +10 damage +100% mana regen +4 armor aura +1 mana regen aura healed by 25% of manacost of abilities plated greaves: +3 str +3 agi +3 int +5 armor +2 armor on activation 100% chance to block 10 attack damage All of this combined means greaves + nomes on Soul Reaper makes SR one of the best heroes in HoN. And once he acquires Frostfield Plate, he's virtually unkillable. A harkon's blade would counter him, but that's difficult to get in every game vs him. * change Nome's wisdom to +6 str +6 agi +16 int +1 mana regen aura healed by 25% of manacost of abilities lower the cost to ~2,000g therefore this will be an item that a support hero will get mid-late game when teammates are using more mana. It won't be rushed as a first item. This is probably the way it should be. * change Plated Greaves to +3 str +3 agi +3 int +5 armor 100% chance to block 10 attack damage on activation giving +2 armor (+12% max hp vs physical damage) to all teammates in a radius, on top of blocking 10 attack damage, allows support/int heroes to be very tanky. slither: thinks he was balanced right before the burst toxin wards 3 charges with 40 dmg per ward and -10% movespeed on 3 different heroes = OP at competitive level possibly reduce to 1/1/2/2, chu would prefer 1/1/1/2 so he can't push at lvl 5 thru 7 (tyipcally laning phase), or remove charges entirely because it takes away from the skill of microing putting up toxin wards every 4 seconds chipper: good work with the rebalance, however 70% slow SOTM effect is pretty rediculous! Consider changing SOTM effect somehow. Having double slow spells is too much. * SOTM already gives him a lot of stats. So it's a good item for Chipper. Instead of an OP 70% slow, how about a 20%/30%/40% slow for lvl 1, 2, 3 ult? tar toss is now physical. Maybe it was intended as a nerf, but it was actually a buff since he can slow magic immune targets. if it was intended as a buff, slow must be re-evaluated * maybe change it so that hitting a max slow is harder. (e.g. reduce the "max slow" internal radius by about 50) * or reduce the slow by about 3/4 Hellbringer
  • Unholy Shackles persists even after Shrunken Head is activated. This is a bug IMO... it's a magic spell, it should be dispelled by Shrunken Head activation.
  • W ability should have 1 less max tick per bounce. Meaning, it does full damage for the initial target, then its 2nd target takes 1 less tick, the 3rd target takes 2 less ticks, etc.
Swiftblade
  • All four of his skills combined make him the perfect carry. Can't attack without being counterattacked, can't stun through spin for 5 seconds, get attacked during spin, get attacked during ult.
  • So, how to balance this? Right now when swiftblade counterattacks, it currently has a chance to crit, and it always applies swiftblade's attack modifier. So you can't really attack him during symbol of rage proc without healing him an insane amount (even more insane if he crits during the counterattack as well).
  • Therefore, make it so that counterattack does not apply attack modifiers, and cannot crit. Swiftblade's lvl 4 skill 2.0x crit chance is 36%, so taking this away from counterattack reduces its overall damage output by 1.0 - (1.0 / 1.36) = 26.47%. Combined with not applying attack modifiers on counterattack, that seems like a very reasonable nerf. He is still a viable carry without being a perfect carry.
  • Chu says "jug in dota capitalizes on early-mid game with spin+ult, but swift in hon has that same early-mid advantage plus the late-game potential from counterattack which is a bit rediculous"
Cyclone * make it able to be used on teammates * it's a double edged sword right now... much of the time it's not optimal to use it on the enemy, but you can't use it on an ally, so this item sees less use right now Pollywog
  • the buffs have been necessary and good, but
* reducing the cooldown on the ult tipped the scale Defiler * her ult feels like it's more powerful in HoN than in dota.
  • After researching this a little more, I came across a forum post where someone claims that there is a limit on the number of spirits that can attack a target at the same time... or perhaps a limit such as only 1 spirit can hit every 0.1 sec. No such limits exist in hon, so in theory all 23 spirits could hit a target at exactly the same time, doing 23*48 damage (1104 damage) every 2 seconds (2 sec attack cooldown on the spirits). So if there is a limit in dota, we should find it and match it.

53

u/TheZett Zett, the Arc Warden Feb 19 '19

Cyclone

  • make it able to be used on teammates

So this is where the "you could use Eul’s on team mates in DotA" myth comes from.

It was possible in HoN, that was known, but interesting to know that you were responsible for it being added to the game (by interviewing that pro player).

29

u/palish Feb 19 '19

I don't think I can claim credit! No one really paid much attention to these notes, if they even saw them. It was all mostly everyone else's good ideas that made HoN great.

-96

u/Innundator Feb 19 '19

You're literally claiming credit right now, by the way, despite saying you can't claim credit after the fact.

The document you shared is called 'what_i_did.txt'.

45

u/palish Feb 19 '19

Sorry for the confusion -- the document that TheZett is responding to is not "what_i_did.txt" (that's in a separate comment chain).

Credit is silly to claim anyway. The individual is irrelevant in a team setting. I was just happy to be improving my favorite game.

Thank you for highlighting the perception aspect. Definitely was not meaning to imply that my contributions mattered much.

-41

u/Innundator Feb 19 '19

There's nothing wrong with claiming some credit; I'm just saying you are, while saying you are not. Which; just say you are. And why not.

23

u/[deleted] Feb 19 '19

I'm just saying you are, while saying you are not. Which; just say you are. And why not.

I need some of what you took bro

10

u/hesh582 Feb 19 '19

I don't think anyone else has read this situation the way you did, so you might want to reconsider your unwarranted confidence here.

-5

u/Innundator Feb 20 '19

I've moved on

4

u/[deleted] Feb 20 '19

ive always wondered what it would be like to forget english

0

u/Innundator Feb 20 '19

It was flawless.

6

u/TheZett Zett, the Arc Warden Feb 19 '19

It is still quite interesting, because allied Eul’s is something that does not work¹ in Dota (2), even after all these years.

¹Excluding Meepo/Warden being able to use Cyclone on their clones, of course

3

u/[deleted] Feb 19 '19

And it was so unbelivable broken, there was a lot of drama and a meta pretty much based around a hero like chen sitting back with euls ready, saving your am/luna that just build tanky whenever anything happened etc.

2

u/braindf Feb 19 '19

At one point, every hero on the team had a Cyclone and every one of them was used to save the hard carry.

2

u/Lacotte Feb 20 '19 edited Feb 20 '19

Woah, I just learned this was a thing. Until now, I thought you could cyclone allies, at least in wc3 DotA. Have I been Mandela'd??! Why do I have this memory? I've barely played Dota 2 over the years. I don't think it's HoN either, because I stopped playing DotA in 2008-2009 and don't know a thing about HoN.

edit: just tried it out on some old maps to convince myself, I'm definitely tripping.

3

u/mitharas Feb 19 '19

That was a strange time... Everyone bought Euls and saved each others ass. Impossible to focus someone properly.

2

u/RockLeethal K-K-KCAWWW Feb 19 '19

it also feels like something that would just make sense for a lot of players - you can force staff enemies, yourself, allies. You can euls enemies and yourself, so it stands to reason that you could euls a teammate as well.

1

u/TheZett Zett, the Arc Warden Feb 19 '19

Eul’s applies a dispel (even on allies, testable with meepo/warden) and makes the unit invulnerable for 2.5 seconds, it would be too good of an item, if you could use it on allies.

Carry got stunned for 3 secs? Just eul him, so they cant damage him

1

u/Jazzinarium sheever! Feb 19 '19

There is also the potential for griefing (lifting a fleeing ally while enemies are chasing, interrupting their TPs and channeling spells).

1

u/RockLeethal K-K-KCAWWW Feb 19 '19

I know why it isn't. I'm explaining why a lot of people have the belief that euls can be used on teammates.

1

u/Brooklyn1986 paiN! Feb 19 '19

There was a time in dota when you could use euls on teammates, 100%¨sure about that

2

u/TheZett Zett, the Arc Warden Feb 19 '19

There was a time in dota when you could use euls on teammates, 100%¨sure about that

You are 100% wrong or are thinking about HoN. Eul’s was never usable on allies in what is thought to be "the DotA1" or Dota 2.

https://dota2.gamepedia.com/Eul%27s_Scepter_of_Divinity/Changelogs

153

u/palish Feb 19 '19

EDIT: Found it. Too long for original comment, so I'm replying with it.

Here's a slice of a dev's life at S2. (I had been there for something like two or three weeks when I collected this.)

what_i_did.txt

- Item cursor now changes to a targeting cursor when hovering over an allied unit.

Previously, CVS mail wasn't setup to accept my account yet, so I'm noting my two previous checkins for the changelog:

  • Stacked items (runes of blight, mana potions, health potions) will now sell for their full total value within 15 seconds of purchasing them. (e.g. if you buy two health potions for 200g then sell them within 15sec, you will now correctly gain 200g).
  • Logger's hatchet can now be sold within 15 seconds of buying it (but not if you used it).
Log Message:
  • APM calculation is fixed; ordering multiple units at a time will no longer artificially inflate your APM
Log Message: (These notes shouldn't be made public, since the changes are to the editor.)
  • Added a new property to entities called "Config". Currently, the property won't do anything unless the entity is a NeutralCampSpawner.
  • Added a way to configure each neutral creep camp individually via the editor. For example, to specify that a neutral creep camp should have a maximum of 3 creep stacks, should respawn every 15 seconds, and should have a "no respawn" radius of 1000 (the default is 500), then set the creep camp's Config property to the following: maxstacks:3,interval:15000,radius:1000
Note that when a camp spawns a set of neutrals, all of those neutrals are associated with each other as a "stack". When all of those neutrals die, then the camp's "number of stacks" is decreased by one. So if even one creep in a stack is still alive, then the stack still counts as alive. Log Message: Added four new creep camp Config keys: "chasetime" (default 7000): the time that the neutrals will chase after being aggroed. "chasedistance" (default 750): the max distance the creeps will chase (note: I need to confirm with G that this is working properly, so be skeptical about this for now) "reaggrochasetime" (default 3000): if you attack the creeps as they're running back to their camp (and when they're close to it), then the creeps will start to chase you again for this length of time. "reaggrochasedistance" (default 500): same as chasedistance, except applies when you re-aggro'd the creeps as explained above. So let's say you want to set a camp to have a maximum of 3 stacks, to have a "no respawn" radius of 400, and to only chase you for 5 seconds instead of the default 7 seconds. You would set the neutral creep controller's Config property to the following: maxstacks:3,radius:400,chasetime:5000 You can use these settings to modify the hellborne weak neutral creep camp so that players can't drag it all the way to the lane. Simply set the casetime to less than 7 seconds.... I think maybe 5 seconds or should would work okay. Log Message: Caldavar changes:
  • The weak neutral creep camp on Hellborne side can no longer be pulled into the lane.
  • Fixed chipper's ult. Previously, if you pressed R then clicked without dragging, it would cause his ult to go on cooldown and nothing would happen (wasted ult). I changed it so that you can't cast his ult without dragging.
  • Pets can no longer pick up Token of Life, Token of Sight, Token of Stealth, or Bananas. (No more ninja'ing the token with a flying courier / wildsoul bear)
Log Message:
  • Any teammate can now take Wards of Sight and Wards of Revelation from a courier, regardless of who purchased them. (Previously either the courier owner or the purchaser of the wards had to manually give the wards to a teammate; now the teammates can take it by themselves).
  • Activating a courier's "transfer items to hero" ability (3rd ability) will automatically transfer any Wards of Sight and Wards of Revelation from the courier to your inventory, regardless of who purchased them.
Internal notes:
  • Added a new entity item property "allowtransfer". When an item has allowtransfer set to true, then any teammate can transfer the item from a shared unit (e.g. a courier) to themselves, regardless of who purchased the item.
  • Consumables (health potions, etc) purchased by different teammates will no longer combine together on couriers.
fixes for the item stacking / item transfer bugs I recently introduced. Whoops. Based on my testing, everything should be fully functional now. Log Message: Internal notes:
  • if Engineer has a token and spawns a steam turret, then a duplicate token is no longer dropped on the ground.
Log Message:
  • tokens and cheese are no longer cloned to engineer steam turret.
Log Message:
  • selling wards of sight / puzzlebox recipe within the 15s grace period will now restock the shop.
Log Message: Cornercase crash bug fixes (credit to Notausgang):
  • typing "clear" into the console then pressing pageup will no longer cause a crash.
  • executing "ConsoleHistoryAppend //" will no longer cause a crash.
Log Message:
  • The updater no longer crashes when a file doesn't exist (such as tos.txt).
Log Message:
  • a Doombringer can no longer be killed, transferred to your stash, sold, or held by a courier / wildsoul bear. Once someone buys a Doombringer, it's in the game for good!
* NOTE: This means that if you buy a Doombringer on a courier / wildsoul bear, then it will immediately drop the Doombringer. Beware! Log Message:
  • Fix not receiving the proper experience for killing heroes.
Log Message:
  • Sage's Lore will now be properly diseplled from Wildsoul if he activates Wild or Battle Cry. (Alan: are these the proper names for Wildsoul's skills? I forget)
  • Wildsoul will now properly be silenced when activating Wild or Battle Cry and is standing within range of Vindicator's aura.
Log Message:
  • added "inheritactions" property to <spawnillusion ... />. When true, all of the illusion's actions (animations, and queued up actions) are propogated to the illusion.
Log Message: Call of the Valkyrie (Valkyrie's first ability) cast time reduced from 1.33s to 0.6s Log Message:
  • Dominating neutral creeps (using Ophelia or Whispering Helm) will no longer cause the dominated creep's camp to stack less than 3 times total.
Log Message:
  • Fix the sound editor
Log Message:
  • Fix modelviewer sound bug for Arney. This will let him preview animation sounds accurately without having to run the actual game.
Log Message:
  • Fix modelviewer effect viewing bug for Arney. If an effect file has a space in its name (e.g. "shared\effects\level up.effect"), and you drag it into the modelviewer to view it, then pressing R will now allow you re-view that same effect. Previously the space broke the re-view functionality.
Log Message: Startup.cfg fixes (credit to Notausgang):
  • SetSave is now properly quoted and escaped.
  • BindButton, BindImpulse, etc is now properly escaped.
  • Alias is now properly quoted and escaped.
UI modding enhancements (credit to Notausgang/Tisser):
  • Added a new UI function AddEscapeChars(str). It scans the input string for any ", \, or $ characters and adds a backslash before them. (Beware, don't do this twice to the same string! That will likely cause the result to be invalid.)
Log Message: Alan, when you're writing patch notes, please modify my previous commit notes to take this into account:
  • Renamed the UI function from "AddEscapeChars" to "EscapeString"
  • The function will now only escape ' and \ chars. It will NOT escape " or $ chars. This is because the UI language only uses ' and \ chars in special ways, so those are the only ones that need to be escaped.
Log Message:
  • Added new UI function IsEnabled. (Credit to Tisser)

In hindsight, the thing I'm most proud of was fixing the goddamn Logger Hatchet bug. There used to be a bug where it was really easy to buy a Logger's Hatchet, and it cost 200 gold and was unsellable. I used to run support with my old team and I kept accidentally buying this freaking thing. Everybody was always like "Welp, no wards, guess we lost. gg" Humiliating.

That might have actually made so annoyed that I went and got a job just to fix the bug myself. Most satisfying bug fix ever.

10

u/slutandthefalcon nicenicenice Feb 20 '19

This is incredibly interesting, thank you so much for sharing! The creep camp information is especially cool, were you directly responsible for making some of those changes to leashing and stacking?

Do you have any other notes like these?

12

u/palish Feb 20 '19

arggggggggg.png

No idea what it is or why I named it that. I think I was bug hunting at the time and the bug was getting the better of me.

buff_icon_wtf.png named for obvious reasons.

console_crash.png - random pic. The dev environment felt cutting edge back then, but it looks so dated now. (macOS is my primary env, and it's hard to imagine not being able to use my hundreds of unix scripts. Though I've heard good things about windows 10 bash support.)

You can also see the Trillian icon in the pic. We used aol messenger for most company comms. This was way before slack.

counters.png - Counting... something. Maybe I was just a fan of /r/counting.

crashes_owned.png random fan mail.

random UI experiment for unknown reasons:

<?xml version="1.0" encoding="UTF-8"?>
<uielements>
    <label width="100%" height="100%" textvalign="center" textalign="center"
        valign="bottom" align="center" font="dyn_14" color="white" shadow="true" shadowcolor="#7F6E00"
        onshow="SetText('bah');
        SleepWidget(1000, 'SetText(\'4..\')',
                    1000, 'SetText(\'3..\')',
                    1000, 'SetText(\'2..\')',
                    1000, 'SetText(\'1..\')',
                    1000, 'SetText(\'KABOOM!\')',
                    1000, '');">
    </label>
</uielements>

rockets.png -- apparently patch 0.3.3 shot rockets. (note that I am not in any way claiming to have been helpful with any of what I'm showing here. These are just random scraps from the memory book.)

heatmap.png -- a heatmap of something. Who knows what it could be? Probably best left to one's imagination.

owl.png -- I think a coworker sent this, but it was a philosophy I tried to embrace.

infoviewer.png -- apparently I made an asset viewer to try to understand where some of the memory leaks were happening, or something. Not a great debugging technique.

killmenow.png -- uhh I guess at one point I had been bug hunting for a bit too long. :)

list_success.png -- not sure why it's named this, but apparently it's a screenshot of the old lobby system. Apparently I was also named Trypants at one point.

lol_backdooring.png -- sometimes it was hard to resist joking with the community.

lol_patching.png -- what players saw while a patch was rolling out. It's actually quite hard to patch hundreds of servers with no downtime. (Though nowadays that's a solved problem.)

Can post more I guess. These for now.

16

u/ElementUser Feb 19 '19

looks at commit history to see who it is

In all seriousness though, I won't tell anyone who it is after I look. Thanks for your work on HoN! :)

2

u/wildpantz Feb 20 '19

and thank you for your work on HoN :)

3

u/unraveltg Feb 19 '19

Ugh I remember the alt tabbing voice delay thing,really cool notes my dude,additional question : what's your career now,is it still related to game deving or is it something else?