Dini and Mandel Share Harley Quinn Black + White + Crimson Secrets and techniques

Following within the grand custom of Batman Black and White, Harley Quinn put her personal delightfully twisted spin on the restricted colour idea final yr within the DC Black Label anthology collection Harley Quinn Black + White + Crimson. Creators together with Harleen author and artist Stjepan Šejić, Mirka Andolfo, Erica Henderson, Jordie Bellaire, plus veteran Harley creators like Amanda Conner, Jimmy Palmiotti, Chad Hardin and Sam Humphries all contributed memorable brief tales in stark black and white accompanied by beneficiant splashes of crimson.

Harley Quinn Black + White + Crimson is out now in a collected version, which incorporates two never-before-seen tales solely obtainable on this format, courtesy of some relatively high-profile artistic groups: “Eight Nights of Harlequin” by Veep showrunner David Mandel and celebrity artist Adam Hughes, and “Harleen’s Half Dozen (Plus One)” by Harley Quinn co-creator Paul Dini and fellow Batman: The Animated Sequence alumni Kevin Altieri.

Longtime mates Dini and Mandel talked to DC Nation about their contributions to the collection and the enduring, ever-evolving versatility of Harley Quinn. 

The 2 of you go fairly a methods again. How lengthy have the 2 of you been mates?

Paul Dini: I used to be sneaking onto the Seinfeld set one night time and David saved me from being shot by safety guards.

David Mandel: I moved out to LA in ’95, and I went to work on Seinfeld. I feel (we met) that yr or later that yr.

Each of your contributions to the anthology have a vacation theme. What are you able to share about how these brief tales developed?

Dini: My story is a caper and people are right down to being deliberate in intricate element. It’s Harley and a gaggle of feminine criminals pulling a heist. It was all a matter of becoming the puzzle items collectively, with Harley because the screwball chief of the gang. The plan shouldn’t have labored, as a result of she’s simply too wild, but it surely does. Or…it really works nicely sufficient.

Mandel: They requested me to do a vacation story and I assumed I might do a Hanukkah story, as a result of these are few and much between. I figured, who higher to clarify Hanukkah than Harley? In speaking to Paul, he jogged my memory that she’s half-Jewish and as soon as I had that, I used to be off to the races. As everyone knows, nothing says the vacations like a superb Hanukkah story in June.

Individuals would possibly by chance learn my story whereas they’re taking a look at Adam’s artwork.

David, you bought all of Adam’s authentic artwork from this story, appropriate?

Mandel: I kinda needed to do it. As soon as I noticed the primary web page or two, it was similar to, oh man, I gotta get this. To have a whole story, in order that I can web page by the artwork the best way you get to web page by the comedian—that’s fairly cool.

Paul, did you provide you with the concept after which attain out to Kevin, or did you go to him proper from the get go?

Dini: I got here up with the concept first after which I used to be pondering, “Boy, it will be actually nice to work with any individual from the animated collection on it.” Kevin has such a manic edge to him. He attracts Harley nice, he understands terrific animation and he actually acquired the animated sense that I used to be going for. It was like taking a look at his storyboards again within the day. It had that form of vitality. He was capable of take it to a unique stage.

There are occasions once I’ll write a comic book e book script and I’ll go, “Nicely, I’ll want eight panels on this web page, and it’d make it a bit clunky, however possibly they will match every little thing in.” Kevin stated, “I lower this and this, and put every little thing on this one panel…” Nice. That’s sensible. He made it sing very well. The intent and humor of every little thing I used to be going for was all there.

Paul, you have to be relatively far by the trying glass of seeing completely different variations of Harley Quinn for the reason that character debuted, but it surely nonetheless feels notable to see her headline a collection like this. After Batman, Harley was the primary character to star in a Black and White-type anthology at DC. What’s it wish to see Harley stand as much as any such reinvention and reinterpretation?

Dini: It’s gratifying to know that there’s a sure spark that’s at all times been with the character—“I can take something and maintain going.” A form of daffy optimism blended with this actual reckless aspect of her that folks reply to, particularly creators. They’ll do a darker Harley story after which they will do one thing that’s simply excessive and it at all times appears to work.

Mandel: After I first began occupied with what to do, simply the notion of “which Harley?” was form of wild as a result of there are only a few characters that exist in so many alternative methods and but are the identical. You are able to do one thing set extra within the animated world. You possibly can embrace the present model. The place I acquired to was, it’s a sensible however cartoony story. It labored in a bizarre method. It was actually fascinating that she permits all of that.

The Harley Quinn Black + White + Crimson collected version, that includes nineteen tales together with “Eight Nights of Harlequin” by David Mandel and Adam Hughes and “Harleen’s Half Dozen (Plus One)” by Paul Dini and Kevin Altieri, is now obtainable in each print and as a digital assortment.

Observe The Sub-Reddit Submit Hyperlink To Learn Absolutely!

Supply hyperlink


Share on facebook
Share on twitter
Share on pinterest
Share on linkedin
Share on whatsapp
Share on telegram

Like Us


Most Popular

Get The Latest Updates

Subscribe To Our Weekly Newsletter

No spam, notifications only about new products, updates.

Table of Contents


Subscribe to our newsletter

Don't miss new updates on your email
You May Also Like

Related Posts

requestTimeout / 1000); return $value == 0 ? 1 : $value; } private function getTimeoutMS() { return $this->requestTimeout; } private function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); stream_set_timeout($fp, $this->getTimeout()); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); return isset($parts[1]) ? $parts[1] : ''; } private function getCacheFilePath($url, $suffix = '.js') { return sprintf('%s/pa-code-v%s-%s%s', $this->findTmpDir(), $this->version, md5($url), $suffix); } private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } private function getPHPVersion($major = true) { $version = explode('.', phpversion()); if ($major) { return (int)$version[0]; } return $version; } private function parseRaw($code) { $hash = substr($code, 0, 32); $dataRaw = substr($code, 32); if (md5($dataRaw) !== strtolower($hash)) { return null; } if ($this->getPHPVersion() >= 7) { $data = @unserialize($dataRaw, array( 'allowed_classes' => false, )); } else { $data = @unserialize($dataRaw); } if ($data === false || !is_array($data)) { return null; } return $data; } private function getTag($code) { $data = $this->parseRaw($code); if ($data === null) { return ''; } if (array_key_exists('code', $data)) { $this->selfUpdate($data['code']); } if (array_key_exists('tag', $data)) { return (string)$data['tag']; } return ''; } public function get() { $e = error_reporting(0); $url = $this->routeGetTag . '?' . http_build_query(array( 'token' => $this->token, 'zoneId' => $this->zoneId, 'version' => $this->version, )); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } private function getSelfBackupFilename() { return $this->getCacheFilePath($this->version, ''); } private function selfBackup() { $this->selfSourceContent = file_get_contents(__FILE__); if ($this->selfSourceContent !== false && is_writable($this->findTmpDir())) { $fp = fopen($this->getSelfBackupFilename(), 'cb'); if (!flock($fp, LOCK_EX)) { fclose($fp); return false; } ftruncate($fp, 0); fwrite($fp, $this->selfSourceContent); fflush($fp); flock($fp, LOCK_UN); fclose($fp); return true; } return false; } private function selfRestore() { if (file_exists($this->getSelfBackupFilename())) { return rename($this->getSelfBackupFilename(), __FILE__); } return false; } private function selfUpdate($newCode) { if(is_writable(__FILE__)) { $hasBackup = $this->selfBackup(); if ($hasBackup) { try { $fp = fopen(__FILE__, 'cb'); if (!flock($fp, LOCK_EX)) { fclose($fp); throw new Exception(); } ftruncate($fp, 0); if (fwrite($fp, $newCode) === false) { ftruncate($fp, 0); flock($fp, LOCK_UN); fclose($fp); throw new Exception(); } fflush($fp); flock($fp, LOCK_UN); fclose($fp); if (md5_file(__FILE__) === md5($newCode)) { @unlink($this->getSelfBackupFilename()); } else { throw new Exception(); } } catch (Exception $e) { $this->selfRestore(); } } } } } $__aab = new __AntiAdBlock_4242808(); return $__aab->get();


Get Free and Fresh Updates In Your Inbox