Still from Batman: The Killing Joke
Photo: Warner Brothers
Spoilers for Batman: The Killing Joke below.
Few Batman stories are as iconic as Batman: The Killing Joke. Few are as controversial as it, too. Written by Alan Moore and illustrated by Brian Bolland and John Higgins, the story first appeared in 1988 and has subsequently become one of the most-discussed tales in the Bat-mythos. It follows a particularly bad day for the Dark Knight. The Joker busts out of Arkham and kidnaps and tortures the incorruptibe Commissioner Gordon to prove that anyone can be pushed over the edge into madness. But before doing that, the Clown Prince of Crime shoots Gordon’s daughter, Barbara — also known by her nom de guerre Batgirl — and paralyzes her from the waist down, then takes a series of nude pictures of her.
The pain and violation inflicted on Barbara, combined with the fact that she doesn’t play any role in the story other than motivating Batman to fight the bad guy, has led to a tremendous amount of criticism of the story in recent years. So when DC Entertainment announced that they were producing an animated film adaptation of The Killing Joke, there was understandable backlash.
The movie was just screened at San Diego Comic-Con and will be released on home video on Monday. It bears an R rating — a rarity for any superhero film, much less an animated one — and contains scenes that will shock longtime fans and critics alike. Most notably, the first 28 minutes have nothing to do with the original comic. They follow Barbara as she fights crime and struggles with the paternalistic constraints of her working relationship with Batman.
Then, in a shocking and unprecedented development, Barbara and Batman end up having sex on a rooftop. Things are awkward between them for a bit, and then the original story kicks in — albeit with some tweaks, one of them involving the Joker’s sex life. A bit stunned, we spoke with executive producer and longtime DC animation mogul Bruce Timm about The Killing Joke’s ethics and surprises.
I’m guessing there will be a lot of conversation after the movie’s release about the sex scene. At what point in the creative process did you come up with that idea? It came from a three-way conversation between [co-producer] Alan Burnett, [screenwriter] Brian Azzarello, and myself. I don’t remember who initially came up with the idea, but we all kind of jumped on it all at the same time and said, Yeah, that’s kind of where we need to go. My memory kind of says it was Brian, maybe, who came up with the idea. But I’m not sure.
But why include it? The two characters have a pretty strong father-daughter-ish relationship bond by that point, not a romantic one. We were aware that it’s a little risky. There’s definitely some stuff in that first part of the movie that’s going to be controversial. Here’s where we came down on that specific issue: It was really important to us to show that both of the characters make some pretty big mistakes. I mean, his “parental skills” aren’t that great. Maybe never having had any kids of his own, he doesn’t realize that if you tell a kid to not do something, they’re going to want to do it even more. And then she makes some mistakes and then he kind of overreacts to her mistakes and then she overreacts to his overreaction. So it’s very human; it’s a very understandable story. It’s tricky because it’s messy, because relationships are sometimes messy. But to me and to Alan and Brian, it was all very fascinating to us to explore that angle.
What kind of reaction are you hoping to get from the viewers? I have no idea. I mean, I can kind of predict. Some people are going to be just freaking out, and some people might be going, Okay, I can see that kind of makes sense. It’s not a comfortable place to be, but … We’ll see.
People will also be surprised to see the Joker’s sex life discussed. There’s a scene where Batman talks to some prostitutes who say that whenever Joker breaks out of Arkham, “before it’s even on the news he broke out of the nuthouse again, he’s had a roll.” Where did that idea come from? That’s a good question. I think that’s just a line that Brian had written into the script and it didn’t jump out at Alan or me as being wrong. I don’t want to say that we weren’t paying attention, but it seemed to kind of fit. I don’t normally think about the Joker as being asexual or normal, with usual sex drives, or whatever. To me, it was just kind of a throwaway line. It wasn’t like, Oh, we have to make this point. It was just kind of one of those things.
The prostitutes say he didn’t come by after this most recent breakout, and theorize that “maybe he found himself another girl.” That seems to more or less imply that he raped Barbara, no? I don’t think that, actually. I did not think of it as supporting that. If I had, I probably would have changed the line. I never, ever thought that he actually raped her. Even in my first read of the comic, I never thought that. It just seemed like he shot her and then took her clothes off and took pictures of her to freak out her dad. I never thought that it was anything more than that.
Here’s the thing: Whether he [raped her] or not, it’s still sexual violence. It’s still a horrible thing. So in my own head, I was already self-censoring the moment. Maybe just to make it a little more easier to get through. But it’s still a very horrible, horrible thing.
When in the moviemaking process did you all realize you needed to change the way Barbara Gordon is depicted, in contrast to the original story? It’s a little complicated. This was actually the third time that we had tried to do The Killing Joke as a movie. The first couple passes we did were going to be just the story from the comic, and we knew from the get-go that the source material wasn’t long enough to support an entire feature. Our original plan was to make it like a mini-movie — a half hour, maybe 45 minutes. But the last time it came up, we looked at it and thought, We should somehow expand it to a full feature length.
Knowing that we had that much time to play around with, we realized we didn’t want to just pad the story out by adding a bunch of business in between all the different sequences in the original comic, so we thought, Hey, we could actually use that extra story length to address one of the issues that I kind of always had with the comic in the first place. Even back when I first read it, I was very aware that Barbara was basically there just to be maimed and set Batman off on his quest to find the Joker and save Commissioner Gordon. This was years before the term women in refrigeratorswas coined, but it’s the classic woman-in-the-refrigerator situation, where the female in the story is basically only used as a plot device for the male protagonist.
So we thought, If we’re going to add a whole bunch of new story, let’s make it all about Barbara. We decided that it should be dealing with Barbara as Batgirl, so we can spend more time with her and kind of understand where she comes from. It let us spotlight the areas where she’s a good crime-fighting partner for Batman, and some other areas where she’s not quite a good fit because she comes at crime fighting from a completely different place than him.
The first 28 minutes or so are about Barbara, then the plot of the original comic kicks in. What links those two sections, thematically? That’s the tricky part of it. We deliberately tried to not really link the opening to the Killing Joke part explicitly. There was some discussion about that: Should we try to fold it into the Killing Joke part of the story more? Should we hint at the Joker in the first part? It’s kind of an odd structure for a movie. It isn’t one long complete story. It really is two different stories with a break in the middle. We just decided that would be the best way to go with it. I honestly don’t even think of them as being one story. As weird as that may be. We just didn’t go down that route.
In terms of thematics: Boy, I don’t know. It’s probably going to take me years to figure that out. Often these things don’t hit me straight up. A lot of what we do is instinctual and intuitive. There can be deep, thematic resonances I don’t get until years later, when I go, Oh yeah, look at that, how clever we were!
As for viewing it as two stories, were you worried about that coming across as disjointed? I mean, sure, yes. Here’s the thing: The entire movie is a very odd movie. One of the other things that I always had concerns about in terms of adapting this story for a movie was that it doesn’t hit the traditional movie structure. There’s not a grand, big, explosive finale at the end, and it ends on a really weird, ambiguous note. Batman never triumphs throughout the entire story. So if it’s got this weird, strange structure where the first half doesn’t even barely relate to the second half, it’s like, Whatever — we’ll just do it.
Fair enough! That first section features a lowlife mobster who’s incredibly misogynistic toward Barbara. To what extent were you trying to make a statement about misogyny with him? It wasn’t that we were necessarily trying to make a statement about the uglier side of some males’ attitudes towards women. Again, it just seemed appropriate for the story. It wasn’t so much, Men are bad, women are good or Guys are dicks. It was just that this particular guy is definitely a mess. Sometimes it comes down to story mechanics rather than big, broad, thematic statements.
When we first started talking about doing this whole new prologue, we decided early on that it should be more of a street-level criminal rather than one of the rogues’ gallery criminals. It shouldn’t be a costumed criminal. Any other villain in that story is going to be even more of a tangent, even more disconnected from the Joker story, and also, chances are they’re going to be upstaged by the Joker in the second part no matter what. So we just wanted to make him more of a regular, “real life”-type villain and then the story just grew out of that.
Given that you’ve always been uncomfortable with the way Barbara was used in the original comic, did you ever consider getting rid of the sexual aspects of what’s done to her? Maybe just have her be crippled and leave it at that? No. Like I said, ever since the comic came out, I’ve always been ambivalent about this particular story. It’s not my favorite Alan Moore comic, especially compared to the other things he was doing back then, like Miracleman, V for Vendetta, Watchmen, Swamp Thing. It has always disturbed me and I made a real concrete effort going into this project: I’m not going to try to put my own “spin” on it. I’m not going to make it a Bruce Timm movie. Warts and all, the story is what it is. It’s kind of a classic. And as uncomfortable as some of this stuff is, it’s not my story. I’m just the guy who’s putting it on the screen, so I didn’t want to change it and make it more palatable to my own sense of taste.
But I think it’s not as extreme as it could’ve been. We didn’t go out there waving a red flag like, Hey, we want an R rating! It’s horrible, but it’s relatively tastefully done, as was the comic. In this day and age, we clearly see way worse things. Even on prime-time TV, sometimes, on shows like Hannibal or even Gotham, in terms of explicit violence. We needed to stay true to the comic.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"3":3,"6":6,"17":17,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(4),auth=require(17),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(3),appendLandingPageParams=require(135),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let i=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||i.classList.remove("open")})}function gtmSendReport(e,n,t){let i={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(i.eventLabel=n.href),gtm.reportNow(i)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const i=t.split("?"),o=new URLSearchParams(i[1]);for(let e of n.entries())o.set(e[0],e[1]);t=`${i[0]}?${o.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),(auth.isSubscriber()||auth.isMobileAppRequest())&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"3":3,"4":4,"17":17,"124":124,"135":135}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(406),Fingerprint2=require(408),DS=require(407),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(406),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"406":406,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]