Tinkerer Innovator
Deployer Material Girl
An Interview with Serprex
| |
|
MotivationsWhat got you to start on OpenETG?PvP servers on original went down for a couple weeks. I’d been working on game engine in python before then while participating in War 7 Team Entropy to try to automate deck testing. Started wanting plain PvP testing server with low latency. ColorlessGreen/Fippe helped a lot early on, CG guided designing economy / balance. I didn’t intend to have users or anything initially. Packs were added while I’d left development with Fippe.
There are more than 4,000 commits to this game. Why have you invested significant time and energy into OETG for the past 10 years?Love for the game. Also let’s me demonstrate how I think software should be built: over optimized & minimal. Like Zanz used etg, openEtG makes a good portfolio piece.
Unlike Zanzarino who barely played the game for leisure, you play OETG leisurely, enter events, contribute art, tune players’ deck builds, chat with players, and help this community beyond programming service. Do you enjoy playing the game? If so, what aspect(s) do you enjoy most?I love/hate competitive pvp the most. I’m generally in shakes by the end of the first game. I’ve also been a bit antagonistic in the past about making the game generally enjoyable (this is something cg can be thanked for pushing against, since as he put it, he’d like to have a game with other people in it). It’s optimized for what I wish other CCGs would be: zero money grab, fast paced play, awkward decision making, low power creep, etc.
Question from Turlututu: Do you feel obligated to keep maintaining oetg?No. For my 18th birthday my mother gave me a copy of The Fountainhead. So I’ve been raised with very little concept of obligation to others for my work.
How important is community activity and feedback to your motivation to develop?I’d say more now than it used to be. I used to really want to keep the original forums alive with openEtG since I could see Flash on its way out pretty early on into development. But I eventually learnt that openEtG caters to a different crowd. It’s neat seeing new players learning openEtG without knowing the original.
In terms of development, I’ve become more conservative about new cards as meta has developed. It’s overall a good meta. But I don’t think anyone can say how some cards will impact meta or what the meta is without seeing lots of games play out. So pvp events guide development. It’s funny, recently Living Weapon was buffed, found Golem Defender combo last night. But that combo has always been there ever since cards in hands could have stats. No point developing over an unexplored meta.
Development Process and DirectionCan you briefly summarize this game’s engine? Originally it was in JavaScript & used inheritance (Weapon/Shield inherited Permanent, Permanent/Creature inherited Thing, cards in hand were card codes until I made those instances too). Now, Object Oriented Programming is honestly a big mistake. So I eventually switched engine to more entity component type of thing where everything was just a thing with integer properties & players were split out. This was optimized to be immutable so that cloning game state in AI was efficient. Turns out this transition, which took a couple years, perfectly matched Rust, which made the Rust rewrite very straightforward. So now the game engine is WebAssembly, AI runs in a WebWorker so that UI doesn’t lag while AI churns. Recently I reduced properties to 16bit because I thought it’d be funny. So statuses can only be between -32000 to 32000 now. Also removed the use of floating point arithmetic, AI used fixed point arithmetic. Lowered wasm blob size by a couple dozen kilobytes. Replay format shows that game is described by a series of actions, those actions cause events, events trigger skills, skills mess with stats. More info
here.
In early development (2014), there are amusing github commitments such as: I’m very frustrated and not doing anything right. What are the various challenges of developing this game? Yeah, early on there was a lot of drama. & I was going through my 20s. There was some point where I’d lost my job & was vending ice cream & had bought a house so got a job flooring since ice cream was consistent & would hammer nails into concrete all day to go home & get on a ladder with a heat gun peeling paint off of cedar with my family (don’t paint cedar, that wood needs to breath, stain it, house had 5 layers of paint because everyone before would keep throwing another layer of paint on this 100 year old house). Being in Canada doesn’t help much with seasonal affective disorder so around this time of year I’m waking up tired everyday. The programming is joy tho. I have a tendency to screw up boolean conditions (when or when not to put a !), mix up min/max.
In early development (2014), what was the development agenda?Match original behavior as much as sensible. Even after openEtG split there was oetg-v being maintained. Early development goals were to integrate original community.
In March, 2015, you updated the UI to the current look. Original players may drop by and comment about the UI differences between EtG and oEtG. What accounts for these differences?I never had a goal to match original UI. The updated UI assets you can thank Kae for. That UI redesign was also mostly pushed by ColorlessGreen. Same for ColorlessGreen rewriting card texts in 2020 to not be my programming rooted English. He also made the tutorial & designed the starter decks.
Are there any critical or interesting developments in the past 10 years you’d like to highlight (for the technical crowd). Examples: why does our game play so quickly compared to the original? Why are there no desyncs?The UI & game state are strongly decoupled. Network code has some hashing logic to try resync game state based on replay in case two players disagree on hashing (which should only happen if there was a disconnect). Everything is done over websockets instead of making frequent POST requests. This might surprise you, but I’m pretty good at this programming thing
. I learnt to program on a pretty old computer, even into late 2010s I was developing on a machine with less than a gig of ram. So I’ve always paid a lot of attention to performance & simplicity.
Do you ‘train’ the AI with treats, by whipping it, or other clever means?This code is the heart of it. Searching based on hand coded eval function originally written by Fippe. The treat the AI gets is being able to see your hand & know the results of RNG. Stop suggesting to take away its treats.
OETG is developed by homegrown contributions, is non-commercial, and is inclusive of community feedback. Therefore, it is both a visually and experientially eclectic game. Would you prefer it to stay that way?I’m a huge fan of dead pan humor & things being a bit funny. Hence why Eternity is a shovel & Time Barrier is a stack of pancakes. But we’ve had artists come by & make some really great assets for free. I cherish Ravi’s scribblemas. Before that we had a lot of cards with no art. & she just pumped out so much over a couple weeks. She didn’t intend for that art to be permanent, but Emerald Dragon is hilarious. Surgeon having blood stains is exactly the kind of thing I want in the art. It’s like how some people prefer the Beta art in Slay the Spire.
Is legacy pretty much mature? Any further plans?Yeah, it’s pretty mature. If original community was using it for tournaments maybe. & with Elements Revival that seems to attract more attention so at least the people who wanted the nostalgetic experience got that. I would like to make shards more attainable in Legacy, but that’s about it. There was some talk about having Legacy/Revival share an arena.
Custom play offers variation to the standard game interface. Is there anything here that you’d like to see further develop? Ex: multiplayerSo much. That’s one of my failed projects. The game engine can support arbitrary 1v1v1 2v2v2 2v3 whatever. I want Custom to expose that capability. But it’s a mess of managing team states.
What are the wilder ideas you’ve had but didn’t implement? Is it time for Endless mode? ColorlessGreen had a lot of ideas about achievements & custom boards & automated PvE events & alternate art. But my development process is too conservative on wanting to maintain minimalism. Endless mode was alright, but those types of modes never work, same in Slay the Spire, you get a perfect setup & then it just grinds endlessly. Or you don’t & you lose.
What future game developments would you most like to see?A year or two ago I was saying I considered openEtG mostly complete. & that’s still mostly true.
Anything around the corner?https://testetg.dek.im
Card Design
The first OETG cards were added Dec. 21, 2013. The dam of stagnant development was broken and 20-30 new cards were added within a week! Do you recall how these cards were initially selected?Early on I wanted it to be community managed. Sifted through CIA for ideas. Talked a lot with CG. But pretty quickly the two games had different metas. CIA is full of card ideas for Life because Life is so bad in original. But Life became one of the strongest elements in oetg with alphabond/patcell/rejuvfrogs.
Original Elements has added around 150 new cards since the original. We’re at 390-ish cards. What size card pool can we have?MtG has 1000s. There’s some redundancy. I try to make every card in openEtG matter. The goal is to have deck diversity. There’s quadratic complexity as every card interacts with every card. Having sets would help, but there’s no incentive to keep putting out cards since there’s no moneygrab. Sets would be able to have more metas stall/rushy etc. But PvP events etc can already do that by restricting cards etc.
Question from Pimpollo: There are several new cards added in openetg. What's the goal when creating and deciding new cards for the game?That’s changed over time. It used to be add whatever seems cool. Now it involves a lot more thought about what the meta needs & what minimal change would open up something interesting. Part of issue tho is meta diversity needs to be under control a bit. Stalls started getting pushed out of meta because there’s too many potential threats (fast wide, fast tall, PC spam, mill, sopa, creatureless, sov, triple digit poison, etc) so that highest EV for a deck was to go for its own wincon.
Question from Turlututu: Can you walk us through the decision process of adding new cards or adding abilities to existing cards? (i.e. how do you decide what effects they should have, how do you decide costs and elements, etc.)Important feature of a card is that it should be awkward with the other cards in its element, it should not give its element something that element is lacking as a feature, it should not be too fast, it should not be too splashable in rainbow. Cards should have multiple potential roles that make players reflect on who is the beatdown (stuff like making AoE be able to self target opened up having more counterplay vs Antimatter etc).
It does not appear any new cards added were ever removed from the game - only rebalanced. You mentioned technical difficulties to consider later on (i.e. Georesonator) and that deciding to add a card is an important decision. Why is it important? Do you regret any specific cards being added?Cards I keep tweaking are headaches. Most cards are getting to an alright place. Sabbath is still bad. I regret stuff like Inno being rare. I’ve thought that adding so many vanilla creatures early on may’ve been a problem, gargoyle being 6|3/salamander pushing out dragons. Maybe Ash Eater buff was bad. Quantum pendulums etc making EQ weaker. I’d like to get rid of quantum pillars. Quad pillars were too fast for awhile, maybe still are. Maybe geo was bad. But these things can be tweaked. Was considering what would happen if quantum pillar only gave 3 quanta ⅔ of time, & 2 quanta ⅓ of time. I might regret Clepsydra being able to target player. I wish I could make minimum deck size 40 & maximum duplicate count 4 or 5. Corpse Explosion is kind of pointless
You recently added 8 new shields. You thought of adding these shields more than 8 years ago. What happened in those 8-years and why was this the right time to add them?Wow I forgot these. I like the time DR one still most out of those. I’ve been trying to come up with some dragon synergies for years. What happened lately to bring up more shields is that 12 Lives made me feel like meta was way too fast. So it’s time to give something to all the stalls out there & get some QQ since I think stalls are the most controversial archetype out there (mill isn’t controversial, everyone hates it, I’m alright with it, but in a healthy meta you need to lose to mill when you don’t expect it, its just not that interactive by design so it can lack counterplay if its efficient).
Do you have any favorite cards from a ‘design’ perspective? If so, what do you like about them?Many. Eternity is art is great design (bury opponent’s creatures in the sands of time). Pink Jelly is amusing. Last second decision to make Embezzle mill on death accidentally made a whole archetype of millcat. Rico memes. I started on Entropy so it’s always going to be a bit of a favorite. Alchemist. But also working out Innovation was good, simple card for Time that had to be nerfed twice (+1 cost, mill self). Shell of Void is a punny & made a fun Give deck. Buffs like making Rustler free opened up neat immo decks. Rejuv gave Life soft PC. Whim from CIA section inspired Air to go into an efficiency direction. Command Skeleton is nice for being thematic & getting into skeleton synergies.
How can others help?Fippe and a few others have contributed to OETG early programming on (2014-2015). Since then you’ve been a one man show. What kind of coding help do you welcome the most and for what development purpose?For the most part programming isn’t the hard part. Art assets, UI design, etc, are skills I lack.
Is it difficult for a new person to jump in and contribute? Is there any gateway or low-hanging fruit help you would suggest to someone?I wouldn’t know. A few people have got it working. It might be harder now that it requires having postgres running. Basic animations like I’ve done for firebolt/lightning would be an easy way to start. Like Septima’s request to make shifters more visible. So yeah, UI improvements.
Question from Spex (anti-average): How annoying has it been to have people talk about UX/UI help and get no help for a decade?At least when people complain about UI I can shrug it off & tell them anti’s getting to it soon
™We have a new generation of players who never played original. OETG was largely built as an extension for those familiar with EtG. What help would you like from others to improve the game experience for new players?Thankfully CG already did this by making dozens of alts & writing up a guide on how to reach high ouei fast & did the tutorial at start & improved card text so people are less confused.
What are some non-technical help you wish to see in the community? Having something like
https://elementscommunity.org/wiki/Main_Page for oetg
Would you welcome more sound effects or even soundtracks? I imagine quests, Mages, and Demigods with musical accompaniment. What do you recommend to sound artists that may desire to add to the aural experience?Yes. Sounds were added a couple years ago by Sovereign who worked with antiaverage (spex). Late game quests would be neat. I tend to play games on mute so I’m the wrong person to ask.
More about youDo you have any ‘favorites’ in OETG? Favorite Element, card, AI target, deck, etc.Entropy.
Ricorocks. Arena1
Hobbies, interests, other games you play, favorite book, film, music, food, etc.?Programming. Diablo 2. Slay the Spire. I like Path of Exile a bit, but doesn’t work well on Linux. Been playing Risk of Rain with friends once a week lately. Poker. Watch a lot of Starcraft (watching it on other monitor while answering these). The Fountainhead. Synedoche, New York. of Montreal / Notwist are my favorite bands. I don’t have much of a sense of smell so can’t taste very well, but I like strawberry milkshakes & pancakes & tortellini. Here's a fuller list of of music I listen to:
Has any media, person, or experience significantly impacted you?ColorlessGreen, JoshDreamland. The Fountainhead. Life in general is pretty impactful.
You are a super OETG developer by night. What is your daytime job?https://serprex.github.io/resume.htmIs there anything personal to you that made its way into the game? Precognition is a picture of me punching myself in the head. Black cat / Byakko are pictures of Dagny my cat at the time. I have a black cat now.
You once told me, “There’s lots of things I’d like to know and dig into more”. What are you curious about and contemplating in life right now?When I was younger I’d read random wikipedia pages a lot but now I mostly just check what’s on
https://news.ycombinator.com/. Haven’t been reading much in last few years. Trying to lead a simple life.
What else would you like us to know about you?A girl’s gotta have her secrets.
Would you ever give ice cream biking a go again?I’ll never say I’m too good for work. At this time tho I’m more lucratively occupied.