[Work in Progress] Make more data available for more accurate simulation - #17

Open
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation
Open

[Work in Progress] Make more data available for more accurate simulation#17
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation

Conversation

@daviscook477

Copy link
Copy Markdown

The main idea of this PR is to introduce a few more functionality to Communication Mod to make it more possible to fully recreate the game state from the JSON game state it sends to the child process.

The changes are:

  1. Introduce a new command "abandon" to immediately exit a run. This is useful if an AI agent gets itself into a state it cannot determine how to proceed by allowing it to completely discard that run and move on to the next one.
  2. Introduce some console commands to pause/play Communication Mod in order to allow for some additional debugging. Some examples of uses are to pause Communication Mod, modify the deck/relics or other things in the run, and then play Communication Mod in order to see how an AI agent reacts to a specific set of manufactured circumstances.
  3. Add the additional information to the JSON game state, specifically:
    a. always send intents even with runic dome - honestly this might be a bad change. I personally was having trouble figuring out what to do in recreating the game state without intents so I wanted to allow AI agent to just know them anyways and potentially discard any runs containing runic dome as invalid afterwards from any analysis. But I can understand objection to this change.
    b. isEscaping boolean on monsters
    c. a bunch of misc int and bool fields for monsters - very similar to how there are some misc fields that need to be provided to fully describe powers on the player/monsters, some monsters have additional data about themself that is needed to describe their behavior. this is all information that the player would have access to so it's not providing extra information (except for maybe nipDmg and biteDmp since the player only knows about those the first time the louse/darkling uses those move intents). these are quite important for some fights like time eater where it's important to know whether his heal to half-hp has been used or how many times the book of stabbing has used its multiattack so far (since that dictates how many multihits it does).

@ForgottenArbiter

Copy link
Copy Markdown
Owner

Hi, thanks for doing all this! While I haven't looked at all of the changes too carefully yet, I do have some initial concerns about two changes that modify existing behavior:

  1. Interpreting seeds that only contain numbers as longs can cause it to be impossible to enter certain seeds unless you know their numeric equivalent, and would probably surprise many users in the admittedly rare case that it becomes relevant. I think interpreting seeds as numeric would probably be better left to an option (defaulting off).
  2. As for revealing Runic Dome intents, I'm wary of breaking functionality for mods that may currently depend on the hidden intent, especially when providing some sort of alternative interface to use when playing Slay the Spire. It's true that Communication Mod does already show hidden information in some other situations and the user can choose whether to make use of it, but for this specific piece of information, again, I think again it would be good to add a toggle, either to show all hidden information (even if it just applies to Runic Dome for now) or to show Runic Dome intents.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@daviscook477@ForgottenArbiter
, '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

[Work in Progress] Make more data available for more accurate simulation - #17

Open
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation
Open

[Work in Progress] Make more data available for more accurate simulation#17
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation

Conversation

@daviscook477

Copy link
Copy Markdown

The main idea of this PR is to introduce a few more functionality to Communication Mod to make it more possible to fully recreate the game state from the JSON game state it sends to the child process.

The changes are:

  1. Introduce a new command "abandon" to immediately exit a run. This is useful if an AI agent gets itself into a state it cannot determine how to proceed by allowing it to completely discard that run and move on to the next one.
  2. Introduce some console commands to pause/play Communication Mod in order to allow for some additional debugging. Some examples of uses are to pause Communication Mod, modify the deck/relics or other things in the run, and then play Communication Mod in order to see how an AI agent reacts to a specific set of manufactured circumstances.
  3. Add the additional information to the JSON game state, specifically:
    a. always send intents even with runic dome - honestly this might be a bad change. I personally was having trouble figuring out what to do in recreating the game state without intents so I wanted to allow AI agent to just know them anyways and potentially discard any runs containing runic dome as invalid afterwards from any analysis. But I can understand objection to this change.
    b. isEscaping boolean on monsters
    c. a bunch of misc int and bool fields for monsters - very similar to how there are some misc fields that need to be provided to fully describe powers on the player/monsters, some monsters have additional data about themself that is needed to describe their behavior. this is all information that the player would have access to so it's not providing extra information (except for maybe nipDmg and biteDmp since the player only knows about those the first time the louse/darkling uses those move intents). these are quite important for some fights like time eater where it's important to know whether his heal to half-hp has been used or how many times the book of stabbing has used its multiattack so far (since that dictates how many multihits it does).

@ForgottenArbiter

Copy link
Copy Markdown
Owner

Hi, thanks for doing all this! While I haven't looked at all of the changes too carefully yet, I do have some initial concerns about two changes that modify existing behavior:

  1. Interpreting seeds that only contain numbers as longs can cause it to be impossible to enter certain seeds unless you know their numeric equivalent, and would probably surprise many users in the admittedly rare case that it becomes relevant. I think interpreting seeds as numeric would probably be better left to an option (defaulting off).
  2. As for revealing Runic Dome intents, I'm wary of breaking functionality for mods that may currently depend on the hidden intent, especially when providing some sort of alternative interface to use when playing Slay the Spire. It's true that Communication Mod does already show hidden information in some other situations and the user can choose whether to make use of it, but for this specific piece of information, again, I think again it would be good to add a toggle, either to show all hidden information (even if it just applies to Runic Dome for now) or to show Runic Dome intents.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@daviscook477@ForgottenArbiter
, '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

[Work in Progress] Make more data available for more accurate simulation - #17

Open
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation
Open

[Work in Progress] Make more data available for more accurate simulation#17
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation

Conversation

@daviscook477

Copy link
Copy Markdown

The main idea of this PR is to introduce a few more functionality to Communication Mod to make it more possible to fully recreate the game state from the JSON game state it sends to the child process.

The changes are:

  1. Introduce a new command "abandon" to immediately exit a run. This is useful if an AI agent gets itself into a state it cannot determine how to proceed by allowing it to completely discard that run and move on to the next one.
  2. Introduce some console commands to pause/play Communication Mod in order to allow for some additional debugging. Some examples of uses are to pause Communication Mod, modify the deck/relics or other things in the run, and then play Communication Mod in order to see how an AI agent reacts to a specific set of manufactured circumstances.
  3. Add the additional information to the JSON game state, specifically:
    a. always send intents even with runic dome - honestly this might be a bad change. I personally was having trouble figuring out what to do in recreating the game state without intents so I wanted to allow AI agent to just know them anyways and potentially discard any runs containing runic dome as invalid afterwards from any analysis. But I can understand objection to this change.
    b. isEscaping boolean on monsters
    c. a bunch of misc int and bool fields for monsters - very similar to how there are some misc fields that need to be provided to fully describe powers on the player/monsters, some monsters have additional data about themself that is needed to describe their behavior. this is all information that the player would have access to so it's not providing extra information (except for maybe nipDmg and biteDmp since the player only knows about those the first time the louse/darkling uses those move intents). these are quite important for some fights like time eater where it's important to know whether his heal to half-hp has been used or how many times the book of stabbing has used its multiattack so far (since that dictates how many multihits it does).

@ForgottenArbiter

Copy link
Copy Markdown
Owner

Hi, thanks for doing all this! While I haven't looked at all of the changes too carefully yet, I do have some initial concerns about two changes that modify existing behavior:

  1. Interpreting seeds that only contain numbers as longs can cause it to be impossible to enter certain seeds unless you know their numeric equivalent, and would probably surprise many users in the admittedly rare case that it becomes relevant. I think interpreting seeds as numeric would probably be better left to an option (defaulting off).
  2. As for revealing Runic Dome intents, I'm wary of breaking functionality for mods that may currently depend on the hidden intent, especially when providing some sort of alternative interface to use when playing Slay the Spire. It's true that Communication Mod does already show hidden information in some other situations and the user can choose whether to make use of it, but for this specific piece of information, again, I think again it would be good to add a toggle, either to show all hidden information (even if it just applies to Runic Dome for now) or to show Runic Dome intents.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@daviscook477@ForgottenArbiter
, '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

[Work in Progress] Make more data available for more accurate simulation - #17

Open
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation
Open

[Work in Progress] Make more data available for more accurate simulation#17
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation

Conversation

@daviscook477

Copy link
Copy Markdown

The main idea of this PR is to introduce a few more functionality to Communication Mod to make it more possible to fully recreate the game state from the JSON game state it sends to the child process.

The changes are:

  1. Introduce a new command "abandon" to immediately exit a run. This is useful if an AI agent gets itself into a state it cannot determine how to proceed by allowing it to completely discard that run and move on to the next one.
  2. Introduce some console commands to pause/play Communication Mod in order to allow for some additional debugging. Some examples of uses are to pause Communication Mod, modify the deck/relics or other things in the run, and then play Communication Mod in order to see how an AI agent reacts to a specific set of manufactured circumstances.
  3. Add the additional information to the JSON game state, specifically:
    a. always send intents even with runic dome - honestly this might be a bad change. I personally was having trouble figuring out what to do in recreating the game state without intents so I wanted to allow AI agent to just know them anyways and potentially discard any runs containing runic dome as invalid afterwards from any analysis. But I can understand objection to this change.
    b. isEscaping boolean on monsters
    c. a bunch of misc int and bool fields for monsters - very similar to how there are some misc fields that need to be provided to fully describe powers on the player/monsters, some monsters have additional data about themself that is needed to describe their behavior. this is all information that the player would have access to so it's not providing extra information (except for maybe nipDmg and biteDmp since the player only knows about those the first time the louse/darkling uses those move intents). these are quite important for some fights like time eater where it's important to know whether his heal to half-hp has been used or how many times the book of stabbing has used its multiattack so far (since that dictates how many multihits it does).

@ForgottenArbiter

Copy link
Copy Markdown
Owner

Hi, thanks for doing all this! While I haven't looked at all of the changes too carefully yet, I do have some initial concerns about two changes that modify existing behavior:

  1. Interpreting seeds that only contain numbers as longs can cause it to be impossible to enter certain seeds unless you know their numeric equivalent, and would probably surprise many users in the admittedly rare case that it becomes relevant. I think interpreting seeds as numeric would probably be better left to an option (defaulting off).
  2. As for revealing Runic Dome intents, I'm wary of breaking functionality for mods that may currently depend on the hidden intent, especially when providing some sort of alternative interface to use when playing Slay the Spire. It's true that Communication Mod does already show hidden information in some other situations and the user can choose whether to make use of it, but for this specific piece of information, again, I think again it would be good to add a toggle, either to show all hidden information (even if it just applies to Runic Dome for now) or to show Runic Dome intents.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@daviscook477@ForgottenArbiter
, '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

[Work in Progress] Make more data available for more accurate simulation - #17

Open
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation
Open

[Work in Progress] Make more data available for more accurate simulation#17
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation

Conversation

@daviscook477

Copy link
Copy Markdown

The main idea of this PR is to introduce a few more functionality to Communication Mod to make it more possible to fully recreate the game state from the JSON game state it sends to the child process.

The changes are:

  1. Introduce a new command "abandon" to immediately exit a run. This is useful if an AI agent gets itself into a state it cannot determine how to proceed by allowing it to completely discard that run and move on to the next one.
  2. Introduce some console commands to pause/play Communication Mod in order to allow for some additional debugging. Some examples of uses are to pause Communication Mod, modify the deck/relics or other things in the run, and then play Communication Mod in order to see how an AI agent reacts to a specific set of manufactured circumstances.
  3. Add the additional information to the JSON game state, specifically:
    a. always send intents even with runic dome - honestly this might be a bad change. I personally was having trouble figuring out what to do in recreating the game state without intents so I wanted to allow AI agent to just know them anyways and potentially discard any runs containing runic dome as invalid afterwards from any analysis. But I can understand objection to this change.
    b. isEscaping boolean on monsters
    c. a bunch of misc int and bool fields for monsters - very similar to how there are some misc fields that need to be provided to fully describe powers on the player/monsters, some monsters have additional data about themself that is needed to describe their behavior. this is all information that the player would have access to so it's not providing extra information (except for maybe nipDmg and biteDmp since the player only knows about those the first time the louse/darkling uses those move intents). these are quite important for some fights like time eater where it's important to know whether his heal to half-hp has been used or how many times the book of stabbing has used its multiattack so far (since that dictates how many multihits it does).

@ForgottenArbiter

Copy link
Copy Markdown
Owner

Hi, thanks for doing all this! While I haven't looked at all of the changes too carefully yet, I do have some initial concerns about two changes that modify existing behavior:

  1. Interpreting seeds that only contain numbers as longs can cause it to be impossible to enter certain seeds unless you know their numeric equivalent, and would probably surprise many users in the admittedly rare case that it becomes relevant. I think interpreting seeds as numeric would probably be better left to an option (defaulting off).
  2. As for revealing Runic Dome intents, I'm wary of breaking functionality for mods that may currently depend on the hidden intent, especially when providing some sort of alternative interface to use when playing Slay the Spire. It's true that Communication Mod does already show hidden information in some other situations and the user can choose whether to make use of it, but for this specific piece of information, again, I think again it would be good to add a toggle, either to show all hidden information (even if it just applies to Runic Dome for now) or to show Runic Dome intents.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@daviscook477@ForgottenArbiter
, '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

[Work in Progress] Make more data available for more accurate simulation - #17

Open
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation
Open

[Work in Progress] Make more data available for more accurate simulation#17
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation

Conversation

@daviscook477

Copy link
Copy Markdown

The main idea of this PR is to introduce a few more functionality to Communication Mod to make it more possible to fully recreate the game state from the JSON game state it sends to the child process.

The changes are:

  1. Introduce a new command "abandon" to immediately exit a run. This is useful if an AI agent gets itself into a state it cannot determine how to proceed by allowing it to completely discard that run and move on to the next one.
  2. Introduce some console commands to pause/play Communication Mod in order to allow for some additional debugging. Some examples of uses are to pause Communication Mod, modify the deck/relics or other things in the run, and then play Communication Mod in order to see how an AI agent reacts to a specific set of manufactured circumstances.
  3. Add the additional information to the JSON game state, specifically:
    a. always send intents even with runic dome - honestly this might be a bad change. I personally was having trouble figuring out what to do in recreating the game state without intents so I wanted to allow AI agent to just know them anyways and potentially discard any runs containing runic dome as invalid afterwards from any analysis. But I can understand objection to this change.
    b. isEscaping boolean on monsters
    c. a bunch of misc int and bool fields for monsters - very similar to how there are some misc fields that need to be provided to fully describe powers on the player/monsters, some monsters have additional data about themself that is needed to describe their behavior. this is all information that the player would have access to so it's not providing extra information (except for maybe nipDmg and biteDmp since the player only knows about those the first time the louse/darkling uses those move intents). these are quite important for some fights like time eater where it's important to know whether his heal to half-hp has been used or how many times the book of stabbing has used its multiattack so far (since that dictates how many multihits it does).

@ForgottenArbiter

Copy link
Copy Markdown
Owner

Hi, thanks for doing all this! While I haven't looked at all of the changes too carefully yet, I do have some initial concerns about two changes that modify existing behavior:

  1. Interpreting seeds that only contain numbers as longs can cause it to be impossible to enter certain seeds unless you know their numeric equivalent, and would probably surprise many users in the admittedly rare case that it becomes relevant. I think interpreting seeds as numeric would probably be better left to an option (defaulting off).
  2. As for revealing Runic Dome intents, I'm wary of breaking functionality for mods that may currently depend on the hidden intent, especially when providing some sort of alternative interface to use when playing Slay the Spire. It's true that Communication Mod does already show hidden information in some other situations and the user can choose whether to make use of it, but for this specific piece of information, again, I think again it would be good to add a toggle, either to show all hidden information (even if it just applies to Runic Dome for now) or to show Runic Dome intents.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@daviscook477@ForgottenArbiter
, '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

[Work in Progress] Make more data available for more accurate simulation - #17

Open
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation
Open

[Work in Progress] Make more data available for more accurate simulation#17
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation

Conversation

@daviscook477

Copy link
Copy Markdown

The main idea of this PR is to introduce a few more functionality to Communication Mod to make it more possible to fully recreate the game state from the JSON game state it sends to the child process.

The changes are:

  1. Introduce a new command "abandon" to immediately exit a run. This is useful if an AI agent gets itself into a state it cannot determine how to proceed by allowing it to completely discard that run and move on to the next one.
  2. Introduce some console commands to pause/play Communication Mod in order to allow for some additional debugging. Some examples of uses are to pause Communication Mod, modify the deck/relics or other things in the run, and then play Communication Mod in order to see how an AI agent reacts to a specific set of manufactured circumstances.
  3. Add the additional information to the JSON game state, specifically:
    a. always send intents even with runic dome - honestly this might be a bad change. I personally was having trouble figuring out what to do in recreating the game state without intents so I wanted to allow AI agent to just know them anyways and potentially discard any runs containing runic dome as invalid afterwards from any analysis. But I can understand objection to this change.
    b. isEscaping boolean on monsters
    c. a bunch of misc int and bool fields for monsters - very similar to how there are some misc fields that need to be provided to fully describe powers on the player/monsters, some monsters have additional data about themself that is needed to describe their behavior. this is all information that the player would have access to so it's not providing extra information (except for maybe nipDmg and biteDmp since the player only knows about those the first time the louse/darkling uses those move intents). these are quite important for some fights like time eater where it's important to know whether his heal to half-hp has been used or how many times the book of stabbing has used its multiattack so far (since that dictates how many multihits it does).

@ForgottenArbiter

Copy link
Copy Markdown
Owner

Hi, thanks for doing all this! While I haven't looked at all of the changes too carefully yet, I do have some initial concerns about two changes that modify existing behavior:

  1. Interpreting seeds that only contain numbers as longs can cause it to be impossible to enter certain seeds unless you know their numeric equivalent, and would probably surprise many users in the admittedly rare case that it becomes relevant. I think interpreting seeds as numeric would probably be better left to an option (defaulting off).
  2. As for revealing Runic Dome intents, I'm wary of breaking functionality for mods that may currently depend on the hidden intent, especially when providing some sort of alternative interface to use when playing Slay the Spire. It's true that Communication Mod does already show hidden information in some other situations and the user can choose whether to make use of it, but for this specific piece of information, again, I think again it would be good to add a toggle, either to show all hidden information (even if it just applies to Runic Dome for now) or to show Runic Dome intents.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@daviscook477@ForgottenArbiter
, '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

[Work in Progress] Make more data available for more accurate simulation - #17

Open
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation
Open

[Work in Progress] Make more data available for more accurate simulation#17
daviscook477 wants to merge 7 commits into
ForgottenArbiter:masterfrom
daviscook477:make-more-data-available-for-more-accurate-simulation

Conversation

@daviscook477

Copy link
Copy Markdown

The main idea of this PR is to introduce a few more functionality to Communication Mod to make it more possible to fully recreate the game state from the JSON game state it sends to the child process.

The changes are:

  1. Introduce a new command "abandon" to immediately exit a run. This is useful if an AI agent gets itself into a state it cannot determine how to proceed by allowing it to completely discard that run and move on to the next one.
  2. Introduce some console commands to pause/play Communication Mod in order to allow for some additional debugging. Some examples of uses are to pause Communication Mod, modify the deck/relics or other things in the run, and then play Communication Mod in order to see how an AI agent reacts to a specific set of manufactured circumstances.
  3. Add the additional information to the JSON game state, specifically:
    a. always send intents even with runic dome - honestly this might be a bad change. I personally was having trouble figuring out what to do in recreating the game state without intents so I wanted to allow AI agent to just know them anyways and potentially discard any runs containing runic dome as invalid afterwards from any analysis. But I can understand objection to this change.
    b. isEscaping boolean on monsters
    c. a bunch of misc int and bool fields for monsters - very similar to how there are some misc fields that need to be provided to fully describe powers on the player/monsters, some monsters have additional data about themself that is needed to describe their behavior. this is all information that the player would have access to so it's not providing extra information (except for maybe nipDmg and biteDmp since the player only knows about those the first time the louse/darkling uses those move intents). these are quite important for some fights like time eater where it's important to know whether his heal to half-hp has been used or how many times the book of stabbing has used its multiattack so far (since that dictates how many multihits it does).

@ForgottenArbiter

Copy link
Copy Markdown
Owner

Hi, thanks for doing all this! While I haven't looked at all of the changes too carefully yet, I do have some initial concerns about two changes that modify existing behavior:

  1. Interpreting seeds that only contain numbers as longs can cause it to be impossible to enter certain seeds unless you know their numeric equivalent, and would probably surprise many users in the admittedly rare case that it becomes relevant. I think interpreting seeds as numeric would probably be better left to an option (defaulting off).
  2. As for revealing Runic Dome intents, I'm wary of breaking functionality for mods that may currently depend on the hidden intent, especially when providing some sort of alternative interface to use when playing Slay the Spire. It's true that Communication Mod does already show hidden information in some other situations and the user can choose whether to make use of it, but for this specific piece of information, again, I think again it would be good to add a toggle, either to show all hidden information (even if it just applies to Runic Dome for now) or to show Runic Dome intents.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@daviscook477@ForgottenArbiter