When I worked on Club Penguin iOS, management decided to switch from 2D to 3D shortly before Beta. Because of course they did.

We kept the 2D world but made the characters 3D.

So I wrote a 3D engine, spliced it in, toggling back and forth dozens of times per frame.

Good times https://twitter.com/fizzychicken/status/1282701693227094019
They decided to make the characters 3D so they could sell hats.

In 2D they'd have to render every character and hat combination as sprite sheets in 16 different orientations. But add real-time 3D to the engine, and you "just load a model".
At this time, a rogue engineer on the server team secretly wrote his own 3D client, and convinced one of the VPs to fire the entire client team for "failing to anticipate 3D/being incompetent."
It was a done deal. The client team was fired (we were mostly contractors, and the rogue engineer was an employee).

I reviewed the new "engine". It was just a 3D model on a height map. Did not run on iOS (Direct-X!!!), did not connect to the server! Did not render game assets!
I went to the producer and dev lead and said, "Wait wait wait! We've GOT an iOS client! It works! We're almost a year into (the second full rewrite), don't start over AGAIN. We can add 3D."
It took 2 or 3 months but we made it work. I wrote a 3D renderer and spliced it into the 2D renderer. We had 3D penguins with skeletal animation, walking through a 2D world, it all sorted, and they wore hats. Let's monetize!
But there was fallout. The dev lead resigned. The rogue engineer took over our team (remotely, from out of state) started firing people, then claimed he had to rewrite the game client from scratch in order to ship.
For months I worked under the new manager, while he lied and belittled me in meetings. He accused me of faking debug metrics like RAM usage (why?! how?!). I had to write extra code to prove him wrong. My boss.

He continued to write his own client on his own branch.
Producers and art directors would walk out of meetings with the new dev lead, swinging their fists at the air with rage. He was widely seen as a condescending prick.
Finally, the mixed 2D / 3D renderer was merged into main.

50 dancing penguins on screen.

An artist was tweaking the toon shading.

Designers were testing how much 3D content they could render before the frame rate dropped.

Beta in 4 weeks!
This is when the New Boss told us to "pull out all the stops. Work overtime. I don't care. Get it done."

I filed a time card for 50 hours. He emailed my agency and said, "This is false. He's not nearly productive enough to bill 50 hours. I'll approve it, but he's lying."
I resigned that day.

My understanding is that he did, indeed, scrap the entire client and rewrote it himself.

(Given what I saw of his code, that's not possible, so I assume he copied much of my team's code).

Anyway, don't work in games.
Oh I forgot: I had already licensed a portion of my iOS game engine to Disney FOR FREE. Because I was a fucking team player.
The day I joined I was told, "We need a demo in 12 weeks or we're all fired." We were porting from Adobe Flash to iOS.

I said, "Well, I have a shader-based mobile game engine. I'll just emulate Adobe flash on top of it." The (original) dev lead said, "That would be splendid."
So when the call came, 9 months later, to add 3D content the framework was already there. Lucky me! I again wrote an Adobe Flash compatibility layer.

(At this point I'm emulating portions of Flash's 2D and 3D APIs on my little OpenGL renderer)
On another tangent, I'm pretty sure @Atrix256 worked on this project for, like, five days. I don't know if he remembers that.

He lasted a week? Next Monday he didn't show up. No notice given, no resignation, we just never saw him again. And NOBODY BLAMED HIM. "Smart move."
This is the first crude test render. Before lighting, scaling, and orienting the penguins. Before toon shading, before they could walk between 2D elements and clip, and before Scaleform was rendering the UI. But hey - skeletal animation controllers and bone transform shaders.
Debugging bone matrices. I actually miss making games.
Real live players logged into the game server as 3D penguins. Still not scaled or lit properly. I tasked a junior engineer with rendering shadows under them ("Just draw a disk with a blur for now") and man was that a long discussion.
The big problem with 2D graphics on first-gen iPad was overdraw / alpha blending - the 3D was never a performance bottleneck.
The shipped game. Who knows, maybe some of my code is in there.
You can follow @agent_cooper.
Tip: mention @twtextapp on a Twitter thread with the keyword “unroll” to get a link to it.

Latest Threads Unrolled: