////////////////////////////
// にゃんぷっぷー大量発生
//
// 2023.05.19 作成
// 2023.05.20 改行の数を調整
// 2023.05.20 0匹のパターン追加
// 2023.05.21 にゃんぷっぷー以外の絵文字追加
//
// 勝手にコピーして似たplay作っても大丈夫です。
// 基本的にはTHIS_TAG、NYANPUPPU_EMOJIS、ANIMALS、OBJECTSの中身を変えたら動きます。
////////////////////////////
let THIS_TAG = "#にゃんぷっぷー大量発生"
let NYANPUPPU_EMOJIS = [
":blobcataco:"
":blobcatartist:"
":blobcataww:"
":blobcatbigsob:"
":blobcatboopblush:"
":blobcatboopblush:"
":blobcatcofesip:"
":blobcatcomfy:"
":blobcatconfounded:"
":blobcatdroolreach:"
":blobcatevil:"
":blobcatflip:"
":blobcatfluffpout:"
":blobcat_frustration:"
":blobcatgooglytrash:"
":blobcatmeataww:"
":blobcatmeltnomblobcatmelt:"
":blobcatmlem:"
":blobcatnomblobdoggo:"
":blobcatnomwatermelon:"
":blobcatnomwatermelon:"
":blobcatnoplease:"
":blobcatnotamused:"
":blobcatoh:"
":blobcat_ok_sign:"
":blobcatpensive:"
":blobcatshrug:"
":blobcatsign:"
":blobcatstop:"
":ablobcatblink:"
":ablobcatblinkhyper:"
":ablobcatcoffee:"
":ablobcatcryingcute:"
":ablobcatheadbangfastultra:"
":ablobcatreachflip:"
":ablobcatsweatsip:"
":ablobcatwhackyfast:"
":blobcat_mudamudamuda:"
":blobcatsweatflips:"
":resonyance:"
":blobcatmeltlove:"
":blobcatreachmelt:"
":catblob_hug_blahaj:"
":catblob_hug_murakamisan_tutinoko:"
":meow0_0:"
":meowbaka:"
":meow_bite_ones_lip:"
":meowblue:"
":meowblush:"
":meowcomfycamera:"
":meowcomfychef:"
":meow_cowboy:"
":meowcry:"
":meowdisappointed:"
":meoweyespout:"
":meow_facepalm:"
":meowfacepalm:"
":meowfearful:"
":meowfingerguns:"
":meowflower:"
":meow_ghostbuster:"
":meow_ghostreach:"
":meowgreen:"
":meowhuggies:"
":meow_hungry:"
":meow_lord:"
":meowmelt:"
":meowmeltcry:"
":meoworange:"
":meowpensivepray:"
":meow_police:"
":meowpuffyheadphones:"
":meow_salute:"
":meowscream:"
":meowshh:"
":meowsleeping:"
":meowsneese:"
":meowsurprised:"
":meow_sushi:"
":meow_sushihamachi:"
":meow_sushiikura:"
":meow_sushi_murakamisan_tutinoko:"
":meowthinkingcool:"
":meowtilt:"
":meow_toot:"
":meow_trash:"
":meow_triumphant:"
":meow_umm:"
":meow_unamused:"
":meow_unamused2:"
":meow_unamused3:"
":meow_uwucry:"
":meow_waitwhat:"
":meow_whistle:"
":meow_whistle2:"
":meow_wine:"
":meow_wink:"
":meow_yikes:"
":meow_zippermouth:"
":ablobcatangel:"
":ablobcatnodmeltcry:"
":ameownod:"
":ameownodfast:"
":ameowthinkingsmirk:"
":blobcatrainbow:"
":meowcoffeespitting:"
":meow_hungry_anim:"
":nekobounce:"
":blabcatbea:"
":blabcatverified:"
":blabcatverifiedfake:"
":blobcat_murakamisan_blush:"
":blobcat_murakamisan_coffee:"
":blobcat_murakamisan_letterpack:"
":blobcat_murakamisan_no:"
":blobcat_murakamisan_yes:"
]
let ANIMALS = [
":grizzly:"
":crab_dancing:"
":polarbear:"
":poop_vomiting_saurus:"
":abunhdcry:"
":cool_doggo:"
":blob_murakamisan_tutinoko:"
":eggmurakamisan:"
":murakamisan_nurukopoppu_tyottotoorimasuyo2:"
":murakamisan_tutinoko2:"
]
let OBJECTS = [
":neko_scp_040_jp_Ikr_4185_cc_by_sa_3_0:"
":tetrapod1:"
":daruma:"
":taotie:"
":panjandrum:"
]
let FIELD_MARGIN = [4 4]
let FIELD_SCALE = [5 5]
let EMOJI_GENTEN = [3 5]
// let KAIGYOU = [6 7 7 7 7 5 5 5 5 4 4 4 4 2 2 2 2 1 1 1 1]
let KAIGYOU = [6 7 7 7 7 5 5 5 5 4 4 4 4 2 2 2 2 1 1 1 1 0 0 0 0]
var textMfm = ``
@genNyanpuppuNoKazu() {
// 0~20の数値を返す
return Math:rnd(0 20)
}
@genAnimalNoKazu() {
// 0~3の数値を返す
return Math:rnd(0 3)
}
@genObjectNoKazu() {
// 0~1の数値を返す
return Math:rnd(0 1)
}
@genDxy(n) {
var dxy = []
for (let i, n) {
let dx = Math:rnd() * EMOJI_GENTEN[0] * 2 - EMOJI_GENTEN[0] // [0 * 6 - 3 = -3] ~ [1 * 6 - 3 = 3]
let dy = Math:rnd() * (EMOJI_GENTEN[1] - 1) * 2 - (EMOJI_GENTEN[1] - 1) // [0 * 8 - 4 = -4] ~ [1 * 8 - 4 = 4]
dx = Math:floor(dx * 10) / 10
dy = Math:floor(dy * 10) / 10
dxy.push([dx dy])
}
return dxy
}
@getRandomNyanpuppus(n) {
var nyanpuppus = []
for (let i, n) {
let j = Math:rnd(0 NYANPUPPU_EMOJIS.len-1)
nyanpuppus.push(NYANPUPPU_EMOJIS[j])
}
return nyanpuppus
}
@getRandomAnimals(n) {
var animals = []
for (let i, n) {
let j = Math:rnd(0 ANIMALS.len-1)
animals.push(ANIMALS[j])
}
return animals
}
@getRandomObjects(n) {
var objects = []
for (let i, n) {
let j = Math:rnd(0 OBJECTS.len-1)
objects.push(OBJECTS[j])
}
return objects
}
@onClickButton() {
Ui:get("button").update({disabled: true})
var n1 = genNyanpuppuNoKazu()
var n2 = genAnimalNoKazu()
var n3 = genObjectNoKazu()
let nyanpuppus = getRandomNyanpuppus(n1)
let animals = getRandomAnimals(n2)
let objects = getRandomObjects(n3)
n2 += n3
let n = n1 + n2
let dxy = genDxy(n)
objects = objects.concat(animals)
let emojis = objects.concat(nyanpuppus)
if (n1 > 0) {
textMfm = `$[sparkle $[x2 $[tada $[fg.color=fc0 **{n1}**]] 匹発見!]]`
} else {
textMfm = `:blank:`
}
textMfm = `{textMfm}{Str:lf}$[position.x={FIELD_MARGIN[0]},y={FIELD_MARGIN[1]} $[blur $[scale.x={FIELD_SCALE[0]},y={FIELD_SCALE[1]} $[bg.color=8f0 :blank:]]]]`
var cntX = 0
var cntY = 0
for (let i, n) {
let x = EMOJI_GENTEN[0] + dxy[i][0] - cntX * 2
let y = EMOJI_GENTEN[1] + dxy[i][1] - cntY * 2 - 1
textMfm = `{textMfm}$[position.x={x},y={y} {emojis[i]}]`
cntX += 1
if ((i != (n - 1)) && (cntX >= 4)) {
textMfm = `{textMfm}{Str:lf}`
cntX = 0
cntY += 1
}
}
if (n1 == 0) {
for (let i, (cntY+1)) {
textMfm = `{textMfm}{Str:lf}`
}
textMfm = `{textMfm}$[position.x=-0.5,y={2.5+cntY*2} $[shake.speed=10s $[fg.color=888 **見つかりませんでした...**]]]`
}
if ((n1 > 0) || (n == 0)) {
for (let i, KAIGYOU[n]) {
textMfm = `{textMfm}{Str:lf}`
}
} else {
for (let i, (KAIGYOU[n]-1)) {
textMfm = `{textMfm}{Str:lf}`
}
}
let textForm = `{textMfm}{Str:lf}{THIS_TAG}{Str:lf}{THIS_URL}`
if (n1 == 0) {
//textMfm = `{textMfm}{Str:lf}:blank:`
textMfm = `:blank:{Str:lf}{textMfm}`
}
textMfm = `{textMfm}:blank:` // MFMがボタンに被らないように
Ui:get("mfm").update({text: textMfm})
Ui:get("post").update({form: {text: textForm}})
Ui:get("button").update({disabled: false})
}
@render() {
Ui:render([
Ui:C:container({
align: "left"
children: [
Ui:C:mfm({text: ""} "mfm")
Ui:C:button({
text: "再調査🔎"
onClick: onClickButton
} "button")
Ui:C:postFormButton({
text: "発見!"
primary: true
rounded: true
} "post")
Ui:C:text({text: "再調査ボタンが押せなくなった時はリロードしてください。"})
]
})
])
onClickButton()
}
render()