Repository files navigation

kompatible

An api for hosting games on both Kongregate and Facebook. The full example is in index.php.

Example app: on Facebook | on Kongregate

To use just the kongregate api library, see: KongregatePlatform.php

Handling kongregate and facebook credentials.

You'll need your application credentials from both Facebook and Kongregate. You can get your Kongregate game credentials at /games/< username >/< game >/api. Then, depending on if the request is from Kongregate or Facebook, we will initialize our $kompatible object differently.

if (isset($_REQUEST['platform']) && $_REQUEST['platform'] == "fb") {
$kompatible = new FacebookPlatform($config['facebook']); } else {
$kompatible = new KongregatePlatform($config['kongregate']);
}

I've added a configuration file, config.json.example, for storing both credentials.

In your Facebook app settings, you'll want to add ?platform=fb to the end of your canvas address.

User login

Then we'll want to make sure the user is logged in. If they aren't, they will be redirected to the site specific login form.

$kompatible->login();

Once the user is logged in, we can access data through the $kompatible

$kompatible->getUserName();
$kompatible->getFriends(); //returns empty array for Kongregate

Load the Site Specific API

If your game needs to use the site specific javacript api (to submit stats, make purchase requests, etc) then we'll need to load those libraries:

$kompatible->loadLibraries();

Serving your game file

For flash games, you should customize the $kompatible->getFlashParams() function. These are the parameters to pass along to the flash game itself.

public function getFlashParams() {
$params = "&user_id={$this->user}";
return $params;
}

Then you can display the flash file in the page with:

$kompatible->displayFlashFile();

Getting friends

For both apis, there is a function for getting the friends list:

$kompatible->getFriends();

which returns a similar array for both cases: ("data" => array(array("name" => "username", "id" => "username")...))

Kongregate Microtransactions

KongregatePlatform.php is setup to check the api on first request to see if the user has purchased any items.

If they do, then we automatically mark all the items as used.

First, we get a list of all our available items from the server. (/games/< username >/< game >/items)

$kompatible->getGameItems();

We can get a users specific inventory:

$data = $kompatible->getKredsInventory();
$data['items']

If we want to mark all the items as used:

$kompatible->updateInventory();

Or if we want to use a single item on page load:

$kompatible->useKredItem($itemData);

The Kongregate microtransaction docs are here: microtransactions api.

Examples

index.php is the basic example with login and microtransactions

TODO

  • Add a generic version of the FB request dialog calls.
  • Comments
  • Better demo of platform features
  • Styling
  • Add tests

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests if you want
  • Commit
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2011 metal games, kongregate. See LICENSE for details.

About

An api for hosting games on both Kongregate and Facebook

Resources

Stars

12 stars

Watchers

32 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

kompatible

An api for hosting games on both Kongregate and Facebook. The full example is in index.php.

Example app: on Facebook | on Kongregate

To use just the kongregate api library, see: KongregatePlatform.php

Handling kongregate and facebook credentials.

You'll need your application credentials from both Facebook and Kongregate. You can get your Kongregate game credentials at /games/< username >/< game >/api. Then, depending on if the request is from Kongregate or Facebook, we will initialize our $kompatible object differently.

if (isset($_REQUEST['platform']) && $_REQUEST['platform'] == "fb") {
$kompatible = new FacebookPlatform($config['facebook']); } else {
$kompatible = new KongregatePlatform($config['kongregate']);
}

I've added a configuration file, config.json.example, for storing both credentials.

In your Facebook app settings, you'll want to add ?platform=fb to the end of your canvas address.

User login

Then we'll want to make sure the user is logged in. If they aren't, they will be redirected to the site specific login form.

$kompatible->login();

Once the user is logged in, we can access data through the $kompatible

$kompatible->getUserName();
$kompatible->getFriends(); //returns empty array for Kongregate

Load the Site Specific API

If your game needs to use the site specific javacript api (to submit stats, make purchase requests, etc) then we'll need to load those libraries:

$kompatible->loadLibraries();

Serving your game file

For flash games, you should customize the $kompatible->getFlashParams() function. These are the parameters to pass along to the flash game itself.

public function getFlashParams() {
$params = "&user_id={$this->user}";
return $params;
}

Then you can display the flash file in the page with:

$kompatible->displayFlashFile();

Getting friends

For both apis, there is a function for getting the friends list:

$kompatible->getFriends();

which returns a similar array for both cases: ("data" => array(array("name" => "username", "id" => "username")...))

Kongregate Microtransactions

KongregatePlatform.php is setup to check the api on first request to see if the user has purchased any items.

If they do, then we automatically mark all the items as used.

First, we get a list of all our available items from the server. (/games/< username >/< game >/items)

$kompatible->getGameItems();

We can get a users specific inventory:

$data = $kompatible->getKredsInventory();
$data['items']

If we want to mark all the items as used:

$kompatible->updateInventory();

Or if we want to use a single item on page load:

$kompatible->useKredItem($itemData);

The Kongregate microtransaction docs are here: microtransactions api.

Examples

index.php is the basic example with login and microtransactions

TODO

  • Add a generic version of the FB request dialog calls.
  • Comments
  • Better demo of platform features
  • Styling
  • Add tests

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests if you want
  • Commit
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2011 metal games, kongregate. See LICENSE for details.

About

An api for hosting games on both Kongregate and Facebook

Resources

Stars

12 stars

Watchers

32 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

kompatible

An api for hosting games on both Kongregate and Facebook. The full example is in index.php.

Example app: on Facebook | on Kongregate

To use just the kongregate api library, see: KongregatePlatform.php

Handling kongregate and facebook credentials.

You'll need your application credentials from both Facebook and Kongregate. You can get your Kongregate game credentials at /games/< username >/< game >/api. Then, depending on if the request is from Kongregate or Facebook, we will initialize our $kompatible object differently.

if (isset($_REQUEST['platform']) && $_REQUEST['platform'] == "fb") {
$kompatible = new FacebookPlatform($config['facebook']); } else {
$kompatible = new KongregatePlatform($config['kongregate']);
}

I've added a configuration file, config.json.example, for storing both credentials.

In your Facebook app settings, you'll want to add ?platform=fb to the end of your canvas address.

User login

Then we'll want to make sure the user is logged in. If they aren't, they will be redirected to the site specific login form.

$kompatible->login();

Once the user is logged in, we can access data through the $kompatible

$kompatible->getUserName();
$kompatible->getFriends(); //returns empty array for Kongregate

Load the Site Specific API

If your game needs to use the site specific javacript api (to submit stats, make purchase requests, etc) then we'll need to load those libraries:

$kompatible->loadLibraries();

Serving your game file

For flash games, you should customize the $kompatible->getFlashParams() function. These are the parameters to pass along to the flash game itself.

public function getFlashParams() {
$params = "&user_id={$this->user}";
return $params;
}

Then you can display the flash file in the page with:

$kompatible->displayFlashFile();

Getting friends

For both apis, there is a function for getting the friends list:

$kompatible->getFriends();

which returns a similar array for both cases: ("data" => array(array("name" => "username", "id" => "username")...))

Kongregate Microtransactions

KongregatePlatform.php is setup to check the api on first request to see if the user has purchased any items.

If they do, then we automatically mark all the items as used.

First, we get a list of all our available items from the server. (/games/< username >/< game >/items)

$kompatible->getGameItems();

We can get a users specific inventory:

$data = $kompatible->getKredsInventory();
$data['items']

If we want to mark all the items as used:

$kompatible->updateInventory();

Or if we want to use a single item on page load:

$kompatible->useKredItem($itemData);

The Kongregate microtransaction docs are here: microtransactions api.

Examples

index.php is the basic example with login and microtransactions

TODO

  • Add a generic version of the FB request dialog calls.
  • Comments
  • Better demo of platform features
  • Styling
  • Add tests

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests if you want
  • Commit
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2011 metal games, kongregate. See LICENSE for details.

About

An api for hosting games on both Kongregate and Facebook

Resources

Stars

12 stars

Watchers

32 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

kompatible

An api for hosting games on both Kongregate and Facebook. The full example is in index.php.

Example app: on Facebook | on Kongregate

To use just the kongregate api library, see: KongregatePlatform.php

Handling kongregate and facebook credentials.

You'll need your application credentials from both Facebook and Kongregate. You can get your Kongregate game credentials at /games/< username >/< game >/api. Then, depending on if the request is from Kongregate or Facebook, we will initialize our $kompatible object differently.

if (isset($_REQUEST['platform']) && $_REQUEST['platform'] == "fb") {
$kompatible = new FacebookPlatform($config['facebook']); } else {
$kompatible = new KongregatePlatform($config['kongregate']);
}

I've added a configuration file, config.json.example, for storing both credentials.

In your Facebook app settings, you'll want to add ?platform=fb to the end of your canvas address.

User login

Then we'll want to make sure the user is logged in. If they aren't, they will be redirected to the site specific login form.

$kompatible->login();

Once the user is logged in, we can access data through the $kompatible

$kompatible->getUserName();
$kompatible->getFriends(); //returns empty array for Kongregate

Load the Site Specific API

If your game needs to use the site specific javacript api (to submit stats, make purchase requests, etc) then we'll need to load those libraries:

$kompatible->loadLibraries();

Serving your game file

For flash games, you should customize the $kompatible->getFlashParams() function. These are the parameters to pass along to the flash game itself.

public function getFlashParams() {
$params = "&user_id={$this->user}";
return $params;
}

Then you can display the flash file in the page with:

$kompatible->displayFlashFile();

Getting friends

For both apis, there is a function for getting the friends list:

$kompatible->getFriends();

which returns a similar array for both cases: ("data" => array(array("name" => "username", "id" => "username")...))

Kongregate Microtransactions

KongregatePlatform.php is setup to check the api on first request to see if the user has purchased any items.

If they do, then we automatically mark all the items as used.

First, we get a list of all our available items from the server. (/games/< username >/< game >/items)

$kompatible->getGameItems();

We can get a users specific inventory:

$data = $kompatible->getKredsInventory();
$data['items']

If we want to mark all the items as used:

$kompatible->updateInventory();

Or if we want to use a single item on page load:

$kompatible->useKredItem($itemData);

The Kongregate microtransaction docs are here: microtransactions api.

Examples

index.php is the basic example with login and microtransactions

TODO

  • Add a generic version of the FB request dialog calls.
  • Comments
  • Better demo of platform features
  • Styling
  • Add tests

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests if you want
  • Commit
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2011 metal games, kongregate. See LICENSE for details.

About

An api for hosting games on both Kongregate and Facebook

Resources

Stars

12 stars

Watchers

32 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

kompatible

An api for hosting games on both Kongregate and Facebook. The full example is in index.php.

Example app: on Facebook | on Kongregate

To use just the kongregate api library, see: KongregatePlatform.php

Handling kongregate and facebook credentials.

You'll need your application credentials from both Facebook and Kongregate. You can get your Kongregate game credentials at /games/< username >/< game >/api. Then, depending on if the request is from Kongregate or Facebook, we will initialize our $kompatible object differently.

if (isset($_REQUEST['platform']) && $_REQUEST['platform'] == "fb") {
$kompatible = new FacebookPlatform($config['facebook']); } else {
$kompatible = new KongregatePlatform($config['kongregate']);
}

I've added a configuration file, config.json.example, for storing both credentials.

In your Facebook app settings, you'll want to add ?platform=fb to the end of your canvas address.

User login

Then we'll want to make sure the user is logged in. If they aren't, they will be redirected to the site specific login form.

$kompatible->login();

Once the user is logged in, we can access data through the $kompatible

$kompatible->getUserName();
$kompatible->getFriends(); //returns empty array for Kongregate

Load the Site Specific API

If your game needs to use the site specific javacript api (to submit stats, make purchase requests, etc) then we'll need to load those libraries:

$kompatible->loadLibraries();

Serving your game file

For flash games, you should customize the $kompatible->getFlashParams() function. These are the parameters to pass along to the flash game itself.

public function getFlashParams() {
$params = "&user_id={$this->user}";
return $params;
}

Then you can display the flash file in the page with:

$kompatible->displayFlashFile();

Getting friends

For both apis, there is a function for getting the friends list:

$kompatible->getFriends();

which returns a similar array for both cases: ("data" => array(array("name" => "username", "id" => "username")...))

Kongregate Microtransactions

KongregatePlatform.php is setup to check the api on first request to see if the user has purchased any items.

If they do, then we automatically mark all the items as used.

First, we get a list of all our available items from the server. (/games/< username >/< game >/items)

$kompatible->getGameItems();

We can get a users specific inventory:

$data = $kompatible->getKredsInventory();
$data['items']

If we want to mark all the items as used:

$kompatible->updateInventory();

Or if we want to use a single item on page load:

$kompatible->useKredItem($itemData);

The Kongregate microtransaction docs are here: microtransactions api.

Examples

index.php is the basic example with login and microtransactions

TODO

  • Add a generic version of the FB request dialog calls.
  • Comments
  • Better demo of platform features
  • Styling
  • Add tests

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests if you want
  • Commit
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2011 metal games, kongregate. See LICENSE for details.

About

An api for hosting games on both Kongregate and Facebook

Resources

Stars

12 stars

Watchers

32 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

kompatible

An api for hosting games on both Kongregate and Facebook. The full example is in index.php.

Example app: on Facebook | on Kongregate

To use just the kongregate api library, see: KongregatePlatform.php

Handling kongregate and facebook credentials.

You'll need your application credentials from both Facebook and Kongregate. You can get your Kongregate game credentials at /games/< username >/< game >/api. Then, depending on if the request is from Kongregate or Facebook, we will initialize our $kompatible object differently.

if (isset($_REQUEST['platform']) && $_REQUEST['platform'] == "fb") {
$kompatible = new FacebookPlatform($config['facebook']); } else {
$kompatible = new KongregatePlatform($config['kongregate']);
}

I've added a configuration file, config.json.example, for storing both credentials.

In your Facebook app settings, you'll want to add ?platform=fb to the end of your canvas address.

User login

Then we'll want to make sure the user is logged in. If they aren't, they will be redirected to the site specific login form.

$kompatible->login();

Once the user is logged in, we can access data through the $kompatible

$kompatible->getUserName();
$kompatible->getFriends(); //returns empty array for Kongregate

Load the Site Specific API

If your game needs to use the site specific javacript api (to submit stats, make purchase requests, etc) then we'll need to load those libraries:

$kompatible->loadLibraries();

Serving your game file

For flash games, you should customize the $kompatible->getFlashParams() function. These are the parameters to pass along to the flash game itself.

public function getFlashParams() {
$params = "&user_id={$this->user}";
return $params;
}

Then you can display the flash file in the page with:

$kompatible->displayFlashFile();

Getting friends

For both apis, there is a function for getting the friends list:

$kompatible->getFriends();

which returns a similar array for both cases: ("data" => array(array("name" => "username", "id" => "username")...))

Kongregate Microtransactions

KongregatePlatform.php is setup to check the api on first request to see if the user has purchased any items.

If they do, then we automatically mark all the items as used.

First, we get a list of all our available items from the server. (/games/< username >/< game >/items)

$kompatible->getGameItems();

We can get a users specific inventory:

$data = $kompatible->getKredsInventory();
$data['items']

If we want to mark all the items as used:

$kompatible->updateInventory();

Or if we want to use a single item on page load:

$kompatible->useKredItem($itemData);

The Kongregate microtransaction docs are here: microtransactions api.

Examples

index.php is the basic example with login and microtransactions

TODO

  • Add a generic version of the FB request dialog calls.
  • Comments
  • Better demo of platform features
  • Styling
  • Add tests

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests if you want
  • Commit
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2011 metal games, kongregate. See LICENSE for details.

About

An api for hosting games on both Kongregate and Facebook

Resources

Stars

12 stars

Watchers

32 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

kompatible

An api for hosting games on both Kongregate and Facebook. The full example is in index.php.

Example app: on Facebook | on Kongregate

To use just the kongregate api library, see: KongregatePlatform.php

Handling kongregate and facebook credentials.

You'll need your application credentials from both Facebook and Kongregate. You can get your Kongregate game credentials at /games/< username >/< game >/api. Then, depending on if the request is from Kongregate or Facebook, we will initialize our $kompatible object differently.

if (isset($_REQUEST['platform']) && $_REQUEST['platform'] == "fb") {
$kompatible = new FacebookPlatform($config['facebook']); } else {
$kompatible = new KongregatePlatform($config['kongregate']);
}

I've added a configuration file, config.json.example, for storing both credentials.

In your Facebook app settings, you'll want to add ?platform=fb to the end of your canvas address.

User login

Then we'll want to make sure the user is logged in. If they aren't, they will be redirected to the site specific login form.

$kompatible->login();

Once the user is logged in, we can access data through the $kompatible

$kompatible->getUserName();
$kompatible->getFriends(); //returns empty array for Kongregate

Load the Site Specific API

If your game needs to use the site specific javacript api (to submit stats, make purchase requests, etc) then we'll need to load those libraries:

$kompatible->loadLibraries();

Serving your game file

For flash games, you should customize the $kompatible->getFlashParams() function. These are the parameters to pass along to the flash game itself.

public function getFlashParams() {
$params = "&user_id={$this->user}";
return $params;
}

Then you can display the flash file in the page with:

$kompatible->displayFlashFile();

Getting friends

For both apis, there is a function for getting the friends list:

$kompatible->getFriends();

which returns a similar array for both cases: ("data" => array(array("name" => "username", "id" => "username")...))

Kongregate Microtransactions

KongregatePlatform.php is setup to check the api on first request to see if the user has purchased any items.

If they do, then we automatically mark all the items as used.

First, we get a list of all our available items from the server. (/games/< username >/< game >/items)

$kompatible->getGameItems();

We can get a users specific inventory:

$data = $kompatible->getKredsInventory();
$data['items']

If we want to mark all the items as used:

$kompatible->updateInventory();

Or if we want to use a single item on page load:

$kompatible->useKredItem($itemData);

The Kongregate microtransaction docs are here: microtransactions api.

Examples

index.php is the basic example with login and microtransactions

TODO

  • Add a generic version of the FB request dialog calls.
  • Comments
  • Better demo of platform features
  • Styling
  • Add tests

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests if you want
  • Commit
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2011 metal games, kongregate. See LICENSE for details.

About

An api for hosting games on both Kongregate and Facebook

Resources

Stars

12 stars

Watchers

32 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

kompatible

An api for hosting games on both Kongregate and Facebook. The full example is in index.php.

Example app: on Facebook | on Kongregate

To use just the kongregate api library, see: KongregatePlatform.php

Handling kongregate and facebook credentials.

You'll need your application credentials from both Facebook and Kongregate. You can get your Kongregate game credentials at /games/< username >/< game >/api. Then, depending on if the request is from Kongregate or Facebook, we will initialize our $kompatible object differently.

if (isset($_REQUEST['platform']) && $_REQUEST['platform'] == "fb") {
$kompatible = new FacebookPlatform($config['facebook']); } else {
$kompatible = new KongregatePlatform($config['kongregate']);
}

I've added a configuration file, config.json.example, for storing both credentials.

In your Facebook app settings, you'll want to add ?platform=fb to the end of your canvas address.

User login

Then we'll want to make sure the user is logged in. If they aren't, they will be redirected to the site specific login form.

$kompatible->login();

Once the user is logged in, we can access data through the $kompatible

$kompatible->getUserName();
$kompatible->getFriends(); //returns empty array for Kongregate

Load the Site Specific API

If your game needs to use the site specific javacript api (to submit stats, make purchase requests, etc) then we'll need to load those libraries:

$kompatible->loadLibraries();

Serving your game file

For flash games, you should customize the $kompatible->getFlashParams() function. These are the parameters to pass along to the flash game itself.

public function getFlashParams() {
$params = "&user_id={$this->user}";
return $params;
}

Then you can display the flash file in the page with:

$kompatible->displayFlashFile();

Getting friends

For both apis, there is a function for getting the friends list:

$kompatible->getFriends();

which returns a similar array for both cases: ("data" => array(array("name" => "username", "id" => "username")...))

Kongregate Microtransactions

KongregatePlatform.php is setup to check the api on first request to see if the user has purchased any items.

If they do, then we automatically mark all the items as used.

First, we get a list of all our available items from the server. (/games/< username >/< game >/items)

$kompatible->getGameItems();

We can get a users specific inventory:

$data = $kompatible->getKredsInventory();
$data['items']

If we want to mark all the items as used:

$kompatible->updateInventory();

Or if we want to use a single item on page load:

$kompatible->useKredItem($itemData);

The Kongregate microtransaction docs are here: microtransactions api.

Examples

index.php is the basic example with login and microtransactions

TODO

  • Add a generic version of the FB request dialog calls.
  • Comments
  • Better demo of platform features
  • Styling
  • Add tests

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests if you want
  • Commit
  • Send me a pull request. Bonus points for topic branches.

Copyright

Copyright (c) 2011 metal games, kongregate. See LICENSE for details.

About

An api for hosting games on both Kongregate and Facebook

Resources

Stars

12 stars

Watchers

32 watching

Forks

Releases

Packages

Contributors

Languages