91³Ô¹ÏÍø

Watch CBS News

12-hour Dungeons & Dragons livestream fundraiser for CHOP returns this weekend

Get ready for 12 hours of rolling dice, story adventures and monster slaying. This weekend, gamers from the Vanguard Dungeons and Dragons are hosting their second annual livestream fundraiser.

Last year's event raised nearly $18,000 for , a charity that supports the Children's Hospital of Philadelphia.

It's fantasy. It's captivating storytelling told by .

Founder Shawn Kitchin took CBS News Philadelphia inside the adventures of "The Shattered Obelisk."

"First-level basic adventure," Kitchin said.

Two years ago, Kitchin started an in-person gaming community in Newark, Delaware.

"How do we get people together to play a game I really love playing?" Kitchin recalled. "'Dungeons and Dragons' is essentially a narrative role-playing game."

Their monthly meetups at quickly took off, drawing creative minds to the table.

For those new to the game, think of it as fantasy storytelling — one player serves as the Dungeon Master, the narrator who guides the story. And that role? Kitchin has mastered it.

"I'm going to give you all the characters you're going to meet. I like doing voices," Kitchin said. "I do a bit of Scottish. It's not great."

The rest of the players roll dice to decide their characters' fates.

"As a group of adventurers and heroes, it's a perfect marriage," Kitchin said. "That's how we started the charity idea."

That idea became "Tabletop for CHOP: A Quest for Hope."

The Vanguard is taking D&D online for 12 hours straight again. Last year, they raised close to $18,000, and this year, they hope to top that.

"We decided to support this charity called Extra Life," Kitchin said. "It's all for gamers and streamers, and Extra Life itself really helps with the quality of life for what kids are going through at CHOP, whether it's never having a birthday party because they're through treatment all the time."

Here's the fun part: donors can control the game. For just $2, the dungeon master has to wear a fake mustache. For $2,000, they can cast Meteor Swarm, one of the most powerful spells in the game.

But for Kitchin, the mission runs deeper.

"It definitely changed and gave me a purpose that was so much different," Kitchin said.

Each roll is a reminder that their impact goes beyond the game.

"Stories matter," Kitchin said, "they can affect real-life change, and really help people out by just rolling some dice."

The 12-hour gaming marathon kicks off Sunday from 10 a.m. to 10 p.m. You can watch the stream on .

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });