<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mewsie.world/CoraTOWiki/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3APartySimulator.js</id>
	<title>MediaWiki:PartySimulator.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mewsie.world/CoraTOWiki/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3APartySimulator.js"/>
	<link rel="alternate" type="text/html" href="https://mewsie.world/CoraTOWiki/index.php?title=MediaWiki:PartySimulator.js&amp;action=history"/>
	<updated>2026-05-04T14:57:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://mewsie.world/CoraTOWiki/index.php?title=MediaWiki:PartySimulator.js&amp;diff=6404&amp;oldid=prev</id>
		<title>Noorisei: Created page with &quot;(function(){ var types=[&quot;Power&quot;,&quot;Magic&quot;,&quot;Sense&quot;,&quot;Charm&quot;]; var genders=[&quot;Girl&quot;,&quot;Boy&quot;]; var BOOSTS={   2:{normal:[20,20],beginner:[30,30],type:[20,20],royal:[30,50],special:[30,50],fixed:null},   3:{normal:[30,30],beginner:[40,50],type:[40,40],royal:[50,50],special:[50,50],fixed:null},   4:{normal:[30,30],beginner:[40,50],type:[40,40],royal:[50,50],special:[50,50],fixed:null},   5:{normal:[40,50],beginner:[60,80],type:[70,100],royal:[100,150],special:[100,150],fixed:null},...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mewsie.world/CoraTOWiki/index.php?title=MediaWiki:PartySimulator.js&amp;diff=6404&amp;oldid=prev"/>
		<updated>2025-12-13T02:18:20Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;(function(){ var types=[&amp;quot;Power&amp;quot;,&amp;quot;Magic&amp;quot;,&amp;quot;Sense&amp;quot;,&amp;quot;Charm&amp;quot;]; var genders=[&amp;quot;Girl&amp;quot;,&amp;quot;Boy&amp;quot;]; var BOOSTS={   2:{normal:[20,20],beginner:[30,30],type:[20,20],royal:[30,50],special:[30,50],fixed:null},   3:{normal:[30,30],beginner:[40,50],type:[40,40],royal:[50,50],special:[50,50],fixed:null},   4:{normal:[30,30],beginner:[40,50],type:[40,40],royal:[50,50],special:[50,50],fixed:null},   5:{normal:[40,50],beginner:[60,80],type:[70,100],royal:[100,150],special:[100,150],fixed:null},...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;(function(){&lt;br /&gt;
var types=[&amp;quot;Power&amp;quot;,&amp;quot;Magic&amp;quot;,&amp;quot;Sense&amp;quot;,&amp;quot;Charm&amp;quot;];&lt;br /&gt;
var genders=[&amp;quot;Girl&amp;quot;,&amp;quot;Boy&amp;quot;];&lt;br /&gt;
var BOOSTS={&lt;br /&gt;
  2:{normal:[20,20],beginner:[30,30],type:[20,20],royal:[30,50],special:[30,50],fixed:null},&lt;br /&gt;
  3:{normal:[30,30],beginner:[40,50],type:[40,40],royal:[50,50],special:[50,50],fixed:null},&lt;br /&gt;
  4:{normal:[30,30],beginner:[40,50],type:[40,40],royal:[50,50],special:[50,50],fixed:null},&lt;br /&gt;
  5:{normal:[40,50],beginner:[60,80],type:[70,100],royal:[100,150],special:[100,150],fixed:null},&lt;br /&gt;
  6:{normal:[50,80],beginner:[80,100],type:[100,150],royal:[150,200],special:[150,200],fixed:null}&lt;br /&gt;
};&lt;br /&gt;
var state;&lt;br /&gt;
&lt;br /&gt;
function q(s,c){return(c||document).querySelector(s)}&lt;br /&gt;
function ce(t,c){var e=document.createElement(t);if(c)Object.assign(e,c);return e}&lt;br /&gt;
function on(el,ev,fn){if(el){el.addEventListener(ev,fn)}}&lt;br /&gt;
&lt;br /&gt;
function init(){&lt;br /&gt;
  var countInput=q(&amp;#039;#sim-member-count&amp;#039;);&lt;br /&gt;
  var countValue=q(&amp;#039;#sim-member-count-value&amp;#039;);&lt;br /&gt;
  var grid=q(&amp;#039;#sim-member-grid&amp;#039;);&lt;br /&gt;
  var typeName=q(&amp;#039;#sim-type-name&amp;#039;);&lt;br /&gt;
  var typeImg=q(&amp;#039;#sim-type-image&amp;#039;);&lt;br /&gt;
  var expChip=q(&amp;#039;#sim-exp-chip&amp;#039;);&lt;br /&gt;
  var tmChip=q(&amp;#039;#sim-tm-chip&amp;#039;);&lt;br /&gt;
  var rulesBox=q(&amp;#039;#sim-rules&amp;#039;);&lt;br /&gt;
  if(!grid)return;&lt;br /&gt;
&lt;br /&gt;
  var ICON={&lt;br /&gt;
    Power:{Girl:&amp;#039;https://mewsie.world/CoraTOWiki/images/d/d3/Bunny_1st_Sprite.png&amp;#039;,Boy:&amp;#039;https://mewsie.world/CoraTOWiki/images/0/07/Buffalo_1st_Job.png&amp;#039;},&lt;br /&gt;
    Magic:{Girl:&amp;#039;https://mewsie.world/CoraTOWiki/images/0/0f/Sheep_1st_Job.png&amp;#039;,Boy:&amp;#039;https://mewsie.world/CoraTOWiki/images/1/14/Dragon_1st_Job.png&amp;#039;},&lt;br /&gt;
    Sense:{Girl:&amp;#039;https://mewsie.world/CoraTOWiki/images/1/10/Fox_1st_Job.png&amp;#039;,Boy:&amp;#039;https://mewsie.world/CoraTOWiki/images/f/f8/Lion_1st_Job.png&amp;#039;},&lt;br /&gt;
    Charm:{Girl:&amp;#039;https://mewsie.world/CoraTOWiki/images/6/65/Cat_1st_Job.png&amp;#039;,Boy:&amp;#039;https://mewsie.world/CoraTOWiki/images/d/db/Raccoon_1st_Job.png&amp;#039;}&lt;br /&gt;
  };&lt;br /&gt;
  function iconSrc(t,g){return ICON[t][g]}&lt;br /&gt;
&lt;br /&gt;
  state={&lt;br /&gt;
    count:4,&lt;br /&gt;
    members:new Array(6).fill(0).map(function(_,i){&lt;br /&gt;
      return{type:types[i%types.length],gender:genders[i%genders.length],level:50}&lt;br /&gt;
    })&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  function renderChiefOptions(){}&lt;br /&gt;
&lt;br /&gt;
  function renderMembers(){&lt;br /&gt;
    grid.innerHTML=&amp;#039;&amp;#039;;&lt;br /&gt;
    for(let i=0;i&amp;lt;state.count;i++){&lt;br /&gt;
      let m=state.members[i];&lt;br /&gt;
      var card=ce(&amp;#039;div&amp;#039;,{className:&amp;#039;sim-card&amp;#039;});&lt;br /&gt;
      var head=ce(&amp;#039;div&amp;#039;,{className:&amp;#039;sim-card-header&amp;#039;});&lt;br /&gt;
      var imgBox=ce(&amp;#039;div&amp;#039;,{className:&amp;#039;image-container&amp;#039;});&lt;br /&gt;
      let imgEl=ce(&amp;#039;img&amp;#039;,{alt:m.type+&amp;#039; &amp;#039;+m.gender});&lt;br /&gt;
      imgEl.src=iconSrc(m.type,m.gender);&lt;br /&gt;
      imgBox.appendChild(imgEl);&lt;br /&gt;
      head.appendChild(imgBox);&lt;br /&gt;
      var title=ce(&amp;#039;div&amp;#039;,{className:&amp;#039;sim-card-title&amp;#039;});&lt;br /&gt;
      title.textContent=&amp;#039;Member &amp;#039;+(i+1);&lt;br /&gt;
      head.appendChild(title);&lt;br /&gt;
      card.appendChild(head);&lt;br /&gt;
&lt;br /&gt;
      var row1=ce(&amp;#039;div&amp;#039;);&lt;br /&gt;
      row1.className=&amp;#039;sim-row&amp;#039;;&lt;br /&gt;
      var lblType=ce(&amp;#039;label&amp;#039;);&lt;br /&gt;
      lblType.textContent=&amp;#039;Type&amp;#039;;&lt;br /&gt;
      let selType=ce(&amp;#039;select&amp;#039;,{className:&amp;#039;sim-select&amp;#039;});&lt;br /&gt;
      types.forEach(function(t){var o=ce(&amp;#039;option&amp;#039;,{value:t});o.textContent=t;selType.appendChild(o)});&lt;br /&gt;
      selType.value=m.type;&lt;br /&gt;
      row1.appendChild(lblType);&lt;br /&gt;
      row1.appendChild(selType);&lt;br /&gt;
      row1.appendChild(ce(&amp;#039;span&amp;#039;));&lt;br /&gt;
      card.appendChild(row1);&lt;br /&gt;
&lt;br /&gt;
      var row2=ce(&amp;#039;div&amp;#039;);&lt;br /&gt;
      row2.className=&amp;#039;sim-row&amp;#039;;&lt;br /&gt;
      var lblGen=ce(&amp;#039;label&amp;#039;);&lt;br /&gt;
      lblGen.textContent=&amp;#039;Gender&amp;#039;;&lt;br /&gt;
      let selGen=ce(&amp;#039;select&amp;#039;,{className:&amp;#039;sim-select&amp;#039;});&lt;br /&gt;
      genders.forEach(function(g){var o=ce(&amp;#039;option&amp;#039;,{value:g});o.textContent=g;selGen.appendChild(o)});&lt;br /&gt;
      selGen.value=m.gender;&lt;br /&gt;
      row2.appendChild(lblGen);&lt;br /&gt;
      row2.appendChild(selGen);&lt;br /&gt;
      row2.appendChild(ce(&amp;#039;span&amp;#039;));&lt;br /&gt;
      card.appendChild(row2);&lt;br /&gt;
&lt;br /&gt;
      var row3=ce(&amp;#039;div&amp;#039;);&lt;br /&gt;
      row3.className=&amp;#039;sim-row&amp;#039;;&lt;br /&gt;
      var lblLvl=ce(&amp;#039;label&amp;#039;);&lt;br /&gt;
      lblLvl.textContent=&amp;#039;Level&amp;#039;;&lt;br /&gt;
      let inpLvl=ce(&amp;#039;input&amp;#039;,{className:&amp;#039;sim-input&amp;#039;,type:&amp;#039;number&amp;#039;,min:&amp;#039;1&amp;#039;,max:&amp;#039;400&amp;#039;,value:String(m.level)});&lt;br /&gt;
      row3.appendChild(lblLvl);&lt;br /&gt;
      row3.appendChild(inpLvl);&lt;br /&gt;
      row3.appendChild(ce(&amp;#039;span&amp;#039;));&lt;br /&gt;
      card.appendChild(row3);&lt;br /&gt;
&lt;br /&gt;
      grid.appendChild(card);&lt;br /&gt;
&lt;br /&gt;
      on(selType,&amp;#039;change&amp;#039;,function(){m.type=this.value;imgEl.src=iconSrc(m.type,m.gender);renderSummary()});&lt;br /&gt;
      on(selGen,&amp;#039;change&amp;#039;,function(){m.gender=this.value;imgEl.src=iconSrc(m.type,m.gender);renderSummary()});&lt;br /&gt;
      on(inpLvl,&amp;#039;input&amp;#039;,function(){var v=parseInt(this.value||&amp;#039;0&amp;#039;,10);m.level=isNaN(v)?1:Math.max(1,Math.min(400,v));renderSummary()});&lt;br /&gt;
  }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function computeType(){&lt;br /&gt;
    var members=state.members.slice(0,state.count);&lt;br /&gt;
    var fixed=false;&lt;br /&gt;
    for(var i=0;i&amp;lt;members.length;i++){&lt;br /&gt;
      for(var j=i+1;j&amp;lt;members.length;j++){&lt;br /&gt;
        if(Math.abs(members[i].level-members[j].level)&amp;gt;=100){fixed=true;break}&lt;br /&gt;
      }&lt;br /&gt;
      if(fixed)break&lt;br /&gt;
    }&lt;br /&gt;
    if(fixed)return&amp;#039;fixed&amp;#039;;&lt;br /&gt;
    var allAbove30=members.every(function(m){return m.level&amp;gt;30});&lt;br /&gt;
    var hasBeginner=members.some(function(m){return m.level&amp;lt;=30});&lt;br /&gt;
    var genderSet=new Set(members.map(function(m){return m.gender}));&lt;br /&gt;
    var typeCounts={};&lt;br /&gt;
    types.forEach(function(t){typeCounts[t]=0});&lt;br /&gt;
    members.forEach(function(m){typeCounts[m.type]++});&lt;br /&gt;
    var sameType=types.some(function(t){return typeCounts[t]&amp;gt;=4});&lt;br /&gt;
    var hasAll=types.every(function(t){return typeCounts[t]&amp;gt;0});&lt;br /&gt;
    var allSameGender=genderSet.size===1&amp;amp;&amp;amp;members.length&amp;gt;=4;&lt;br /&gt;
    var hasFourOrMore=members.length&amp;gt;=4;&lt;br /&gt;
    if(hasFourOrMore&amp;amp;&amp;amp;allAbove30&amp;amp;&amp;amp;allSameGender)return&amp;#039;special&amp;#039;;&lt;br /&gt;
    if(hasFourOrMore&amp;amp;&amp;amp;allAbove30&amp;amp;&amp;amp;hasAll&amp;amp;&amp;amp;!allSameGender)return&amp;#039;royal&amp;#039;;&lt;br /&gt;
    if(hasFourOrMore&amp;amp;&amp;amp;allAbove30&amp;amp;&amp;amp;sameType)return&amp;#039;type&amp;#039;;&lt;br /&gt;
    if(hasBeginner)return&amp;#039;beginner&amp;#039;;&lt;br /&gt;
    return&amp;#039;normal&amp;#039;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function renderSummary(){&lt;br /&gt;
    var t=computeType();&lt;br /&gt;
    var boosts=BOOSTS[state.count][t];&lt;br /&gt;
    var imgMap={normal:&amp;#039;https://mewsie.world/CoraTOWiki/images/d/d1/Normal_Party.png&amp;#039;,beginner:&amp;#039;https://mewsie.world/CoraTOWiki/images/b/b0/Beginner_Party.png&amp;#039;,type:&amp;#039;https://mewsie.world/CoraTOWiki/images/9/9d/Type_Party.png&amp;#039;,royal:&amp;#039;https://mewsie.world/CoraTOWiki/images/b/bb/Royal_Party.png&amp;#039;,special:&amp;#039;https://mewsie.world/CoraTOWiki/images/0/0c/Special_Party.png&amp;#039;,fixed:&amp;#039;https://mewsie.world/CoraTOWiki/images/a/ae/Fixed_Party.png&amp;#039;};&lt;br /&gt;
    typeName.textContent=t.charAt(0).toUpperCase()+t.slice(1);&lt;br /&gt;
    typeImg.src=imgMap[t];&lt;br /&gt;
    if(boosts){&lt;br /&gt;
      expChip.textContent=&amp;#039;EXP +&amp;#039;+boosts[0]+&amp;#039;x&amp;#039;;&lt;br /&gt;
      tmChip.textContent=&amp;#039;TM +&amp;#039;+boosts[1]+&amp;#039;x&amp;#039;&lt;br /&gt;
    }else{&lt;br /&gt;
      expChip.textContent=&amp;#039;EXP None&amp;#039;;&lt;br /&gt;
      tmChip.textContent=&amp;#039;TM None&amp;#039;&lt;br /&gt;
    }&lt;br /&gt;
    var r=[];&lt;br /&gt;
    if(t===&amp;#039;fixed&amp;#039;)r.push(&amp;#039;Fixed: level gap ≥100 between members&amp;#039;);&lt;br /&gt;
    if(t!==&amp;#039;fixed&amp;#039;){&lt;br /&gt;
      var members=state.members.slice(0,state.count);&lt;br /&gt;
      var hasBeginner=members.some(function(m){return m.level&amp;lt;=30});&lt;br /&gt;
      if(hasBeginner)r.push(&amp;#039;Beginner: at least one member ≤30&amp;#039;);&lt;br /&gt;
      var typeCounts={};&lt;br /&gt;
      types.forEach(function(tp){typeCounts[tp]=0});&lt;br /&gt;
      members.forEach(function(m){typeCounts[m.type]++});&lt;br /&gt;
      if(members.length&amp;gt;=4){&lt;br /&gt;
        var allAbove30=members.every(function(m){return m.level&amp;gt;30});&lt;br /&gt;
        if(allAbove30){&lt;br /&gt;
          if(types.every(function(tp){return typeCounts[tp]&amp;gt;0})&amp;amp;&amp;amp;new Set(members.map(function(m){return m.gender})).size!==1)r.push(&amp;#039;Royal: ≥4, one of each type, all &amp;gt;30, mixed gender&amp;#039;);&lt;br /&gt;
          if(new Set(members.map(function(m){return m.gender})).size===1&amp;amp;&amp;amp;types.some(function(tp){return typeCounts[tp]&amp;gt;=4}))r.push(&amp;#039;Special candidate: ≥4 same gender and may meet other conditions&amp;#039;);&lt;br /&gt;
          if(types.some(function(tp){return typeCounts[tp]&amp;gt;=4}))r.push(&amp;#039;Type: ≥4 of same type, all &amp;gt;30&amp;#039;)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    rulesBox.innerHTML=&amp;#039;&amp;#039;;&lt;br /&gt;
    r.forEach(function(txt){var d=ce(&amp;#039;div&amp;#039;,{className:&amp;#039;sim-rule&amp;#039;});d.textContent=txt;d.title=txt;rulesBox.appendChild(d)})&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function update(){&lt;br /&gt;
    countValue.textContent=String(state.count);&lt;br /&gt;
    renderChiefOptions();&lt;br /&gt;
    renderMembers();&lt;br /&gt;
    renderSummary();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  on(countInput,&amp;#039;input&amp;#039;,function(){state.count=parseInt(countInput.value,10);update()});&lt;br /&gt;
  update()&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if(document.readyState!==&amp;#039;loading&amp;#039;){init()}else{document.addEventListener(&amp;#039;DOMContentLoaded&amp;#039;,init)}&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>Noorisei</name></author>
	</entry>
</feed>