diff --git a/.gitignore b/.gitignore index bb942e86..29644655 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ game/cache/ project.json android.json *.keystore +*.pem # Ren'py logs traceback.txt diff --git a/android-presplash.jpg b/android-presplash.jpg index d5065958..4af5b8fd 100644 --- a/android-presplash.jpg +++ b/android-presplash.jpg @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2070b44b629d06f348f69b343ce6c68dc726fcd69651ae69f14d344bc39aaaa -size 225181 +oid sha256:cdd41f942ef276949834fe85534b7e27c8b20bc1d935fabfba664314c214f611 +size 213055 diff --git a/game/characters/.gitignore b/game/characters/.gitignore new file mode 100644 index 00000000..7375510b --- /dev/null +++ b/game/characters/.gitignore @@ -0,0 +1,2 @@ +# We don't want to include PNGs in GIT +*.png diff --git a/game/characters/genie/outfits/robes_beard.webp b/game/characters/genie/outfits/robes_beard.webp deleted file mode 100644 index f32a1c67..00000000 --- a/game/characters/genie/outfits/robes_beard.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a53dffc1c42a1fe081df634cbcdcd0991979dcade9f3d992fefba90ad0ee3057 -size 6166 diff --git a/game/characters/luna/chibis/inspect_body_lean/breast_nude_01.webp b/game/characters/luna/chibis/inspect_body_lean/breast_nude_01.webp deleted file mode 100644 index 3f905ec3..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/breast_nude_01.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:48e5ce87ea7b08190f456de886868a0f4586622512607f28a2ba09abbac8711c -size 37730 diff --git a/game/characters/luna/chibis/inspect_body_lean/breast_nude_02.webp b/game/characters/luna/chibis/inspect_body_lean/breast_nude_02.webp deleted file mode 100644 index d09f4d26..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/breast_nude_02.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b90f435b6adcd80aa33f9ee438e3377983156715a0774c16fcd44bd32247ae19 -size 37672 diff --git a/game/characters/luna/chibis/inspect_body_lean/breast_nude_03.webp b/game/characters/luna/chibis/inspect_body_lean/breast_nude_03.webp deleted file mode 100644 index b2f7fabd..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/breast_nude_03.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:975b4c2cd0ddb0b8d0182d7bbe37f258e6cbf4535ff3790e11ef146ffb8eaec0 -size 37668 diff --git a/game/characters/luna/chibis/inspect_body_lean/breast_nude_04.webp b/game/characters/luna/chibis/inspect_body_lean/breast_nude_04.webp deleted file mode 100644 index 0d9ce630..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/breast_nude_04.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:524f94286027f46e82677fda613650da74a331705ff1367188394bf64318bb0e -size 37714 diff --git a/game/characters/luna/chibis/inspect_body_lean/breast_nude_05.webp b/game/characters/luna/chibis/inspect_body_lean/breast_nude_05.webp deleted file mode 100644 index f303604f..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/breast_nude_05.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7d06e59b6700ffedfa1b5787ff9f072effb5bab01cf812200ecf243b0c5d3cab -size 37702 diff --git a/game/characters/luna/chibis/inspect_body_lean/breast_nude_06.webp b/game/characters/luna/chibis/inspect_body_lean/breast_nude_06.webp deleted file mode 100644 index bd76a0f7..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/breast_nude_06.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2f30d2ce70a8860652bdbc4db73d2c54205ebfceebd61f4059b915fdc2fba581 -size 37634 diff --git a/game/characters/luna/chibis/inspect_body_lean/idle_nude_01.webp b/game/characters/luna/chibis/inspect_body_lean/idle_nude_01.webp deleted file mode 100644 index 768bcf5f..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/idle_nude_01.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:32e4ea4c978a58fdd145d600b2d299a81106c001d7c1ac7a12641ec56ea0b3a8 -size 37620 diff --git a/game/characters/luna/chibis/inspect_body_lean/idle_nude_02.webp b/game/characters/luna/chibis/inspect_body_lean/idle_nude_02.webp deleted file mode 100644 index e2be7a8c..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/idle_nude_02.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2225be884c36e8a5528d7379b99608d51a3ec9f4b09df235511e18b925c3b6fd -size 37584 diff --git a/game/characters/luna/chibis/inspect_body_lean/vag_nude_01.webp b/game/characters/luna/chibis/inspect_body_lean/vag_nude_01.webp deleted file mode 100644 index 768bcf5f..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/vag_nude_01.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:32e4ea4c978a58fdd145d600b2d299a81106c001d7c1ac7a12641ec56ea0b3a8 -size 37620 diff --git a/game/characters/luna/chibis/inspect_body_lean/vag_nude_02.webp b/game/characters/luna/chibis/inspect_body_lean/vag_nude_02.webp deleted file mode 100644 index b6321ebb..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/vag_nude_02.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7a469e897fc340c855929f6220d238d10acb35470e5afbd481eaeff475ea8310 -size 37540 diff --git a/game/characters/luna/chibis/inspect_body_lean/vag_nude_03.webp b/game/characters/luna/chibis/inspect_body_lean/vag_nude_03.webp deleted file mode 100644 index e2be7a8c..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/vag_nude_03.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2225be884c36e8a5528d7379b99608d51a3ec9f4b09df235511e18b925c3b6fd -size 37584 diff --git a/game/characters/luna/chibis/inspect_body_lean/vag_nude_04.webp b/game/characters/luna/chibis/inspect_body_lean/vag_nude_04.webp deleted file mode 100644 index 50ff5060..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/vag_nude_04.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a326daccc1f8fe21050aa72b5a78450635710483a81927cfbaff1d5e25f63fa5 -size 37588 diff --git a/game/characters/luna/chibis/inspect_body_lean/vag_nude_05.webp b/game/characters/luna/chibis/inspect_body_lean/vag_nude_05.webp deleted file mode 100644 index 4e09f87c..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/vag_nude_05.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1cb754c3dd5af052c72fbbb3f213bccce2c2a21da493ddb47e970e89281384bd -size 37590 diff --git a/game/characters/luna/chibis/inspect_body_lean/vag_nude_06.webp b/game/characters/luna/chibis/inspect_body_lean/vag_nude_06.webp deleted file mode 100644 index 567727ed..00000000 --- a/game/characters/luna/chibis/inspect_body_lean/vag_nude_06.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dffa476a9b445eecd5dba49c22ace8795fc5f9862ba2f631bbad79fc5ed7c2a3 -size 37602 diff --git a/game/characters/luna/chibis/inspect_body_stand/Idle_clothed_01.webp b/game/characters/luna/chibis/inspect_body_stand/Idle_clothed_01.webp deleted file mode 100644 index 965140e1..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/Idle_clothed_01.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6be88c66af84aa1cdb185839e2651835abea085fbc4f9b7a1663713717b0d7c9 -size 36460 diff --git a/game/characters/luna/chibis/inspect_body_stand/breast_nude_01.webp b/game/characters/luna/chibis/inspect_body_stand/breast_nude_01.webp deleted file mode 100644 index 862658ea..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/breast_nude_01.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b692918e0c76a16bb81ec722061c725b6c75fd69606b0d0132ff6f8e5ab81b7 -size 36834 diff --git a/game/characters/luna/chibis/inspect_body_stand/breast_nude_02.webp b/game/characters/luna/chibis/inspect_body_stand/breast_nude_02.webp deleted file mode 100644 index 2929964a..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/breast_nude_02.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e2d441d3d87201225e7324b8fc242eb762c5623f5d779ae39292313896d8d587 -size 36530 diff --git a/game/characters/luna/chibis/inspect_body_stand/breast_nude_03.webp b/game/characters/luna/chibis/inspect_body_stand/breast_nude_03.webp deleted file mode 100644 index 86714413..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/breast_nude_03.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:edbe69edd79a96466be36863b9b2e6c23b62ac838bd08127085039dfe6ee8723 -size 36766 diff --git a/game/characters/luna/chibis/inspect_body_stand/breast_nude_04.webp b/game/characters/luna/chibis/inspect_body_stand/breast_nude_04.webp deleted file mode 100644 index b931e25d..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/breast_nude_04.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:377a413cb4025082ba108577d4a462dac099af5cef277c05825b0e440785a5ef -size 36558 diff --git a/game/characters/luna/chibis/inspect_body_stand/breast_nude_06.webp b/game/characters/luna/chibis/inspect_body_stand/breast_nude_06.webp deleted file mode 100644 index b27817d8..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/breast_nude_06.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:039f3a2bda7fa3e668ed8d583a26089ddf96ae6e526fdf036f96c9b77c20eb06 -size 36446 diff --git a/game/characters/luna/chibis/inspect_body_stand/idle_clothed_02.webp b/game/characters/luna/chibis/inspect_body_stand/idle_clothed_02.webp deleted file mode 100644 index 0fcd1334..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/idle_clothed_02.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c49b024eeb23ad1d514b2a7905fe766b7f676065a22da3078a171c9f93219867 -size 36360 diff --git a/game/characters/luna/chibis/inspect_body_stand/idle_nude_01.webp b/game/characters/luna/chibis/inspect_body_stand/idle_nude_01.webp deleted file mode 100644 index 73d14fd2..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/idle_nude_01.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0afcc61b10978f9d4a7458610bf8e3908d5f5646666c6a915cfab5d3797388f1 -size 36664 diff --git a/game/characters/luna/chibis/inspect_body_stand/idle_nude_02.webp b/game/characters/luna/chibis/inspect_body_stand/idle_nude_02.webp deleted file mode 100644 index c95d96a6..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/idle_nude_02.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e3a083d3a421c4fb4470bb809e471ac5bfeabfc38a20b6465607cc2c932bd1d8 -size 36556 diff --git a/game/characters/luna/chibis/inspect_body_stand/vag_nude_01.webp b/game/characters/luna/chibis/inspect_body_stand/vag_nude_01.webp deleted file mode 100644 index 73d14fd2..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/vag_nude_01.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0afcc61b10978f9d4a7458610bf8e3908d5f5646666c6a915cfab5d3797388f1 -size 36664 diff --git a/game/characters/luna/chibis/inspect_body_stand/vag_nude_02.webp b/game/characters/luna/chibis/inspect_body_stand/vag_nude_02.webp deleted file mode 100644 index 7f4440df..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/vag_nude_02.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d3811c16ebf9308e95c64f8acc4119eade36d42e38df3722f889ccd49f30a31e -size 36334 diff --git a/game/characters/luna/chibis/inspect_body_stand/vag_nude_03.webp b/game/characters/luna/chibis/inspect_body_stand/vag_nude_03.webp deleted file mode 100644 index c95d96a6..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/vag_nude_03.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e3a083d3a421c4fb4470bb809e471ac5bfeabfc38a20b6465607cc2c932bd1d8 -size 36556 diff --git a/game/characters/luna/chibis/inspect_body_stand/vag_nude_04.webp b/game/characters/luna/chibis/inspect_body_stand/vag_nude_04.webp deleted file mode 100644 index bb1203f5..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/vag_nude_04.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f863e5744868fe6f63120a7b2635081de1f9053bb0e0e659beffb990d9affc7a -size 36308 diff --git a/game/characters/luna/chibis/inspect_body_stand/vag_nude_05.webp b/game/characters/luna/chibis/inspect_body_stand/vag_nude_05.webp deleted file mode 100644 index 5f1e773c..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/vag_nude_05.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:95d1c507e2f0a4ad71cd219ab4559aa538f253657608a2309813fe1f08136f13 -size 36630 diff --git a/game/characters/luna/chibis/inspect_body_stand/vag_nude_06.webp b/game/characters/luna/chibis/inspect_body_stand/vag_nude_06.webp deleted file mode 100644 index 3e4a99d6..00000000 --- a/game/characters/luna/chibis/inspect_body_stand/vag_nude_06.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ddbc1ee64bb915e9500f87b46ca2824f3e5f8b26e492daebabab0cf2d2861df5 -size 36522 diff --git a/game/characters/luna/chibis/sit_on_lap.webp b/game/characters/luna/chibis/sit_on_lap.webp deleted file mode 100644 index 1bbc38fc..00000000 --- a/game/characters/luna/chibis/sit_on_lap.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b5c635c98358b35d5ee97c02ba1b21918818ea8a800c4d1cf7646ebb70dd828b -size 35016 diff --git a/game/characters/luna/poses/default/bodyparts/frame/default/skin.webp b/game/characters/luna/poses/default/bodyparts/frame/default/skin.webp index 2b949fb2..4b7db640 100644 --- a/game/characters/luna/poses/default/bodyparts/frame/default/skin.webp +++ b/game/characters/luna/poses/default/bodyparts/frame/default/skin.webp @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1f930f061a1f782b3a0b617ff68a91b08048d987d36d40cb2b1f018018d47e4 -size 158562 +oid sha256:bd6f623ed9c7dc216fb3dbdff65741a77fab38c66287527364894497a5761a93 +size 88904 diff --git a/game/characters/luna/poses/default/clothes/accessory/leash/0.webp b/game/characters/luna/poses/default/clothes/accessory/leash/0.webp new file mode 100644 index 00000000..db32f917 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/accessory/leash/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6510b81d917d56b2cbbda7129329077570c5e0ea6709aa7fcf575d87be5ebea +size 4862 diff --git a/game/characters/luna/poses/default/clothes/accessory/leash/extra.webp b/game/characters/luna/poses/default/clothes/accessory/leash/extra.webp new file mode 100644 index 00000000..ba11f980 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/accessory/leash/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5009cdd2852b6c84a9b26fb6915398ac85017b88cec143497df001b0e605bee +size 622 diff --git a/game/characters/luna/poses/default/clothes/accessory/leash/outline.webp b/game/characters/luna/poses/default/clothes/accessory/leash/outline.webp new file mode 100644 index 00000000..361ac0b1 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/accessory/leash/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4aed0ac4e72883237d22a5edfb53c23526b44e2e25dddddb1a1b6e860e9a732 +size 5860 diff --git a/game/characters/luna/poses/default/clothes/accessory/leash/skin.webp b/game/characters/luna/poses/default/clothes/accessory/leash/skin.webp new file mode 100644 index 00000000..8a56dbd4 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/accessory/leash/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9de5962e4bc89c10628c9584491f81ffc5b762a68842174a0bf4d270f7a2b478 +size 4492 diff --git a/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/0.webp b/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/0.webp new file mode 100644 index 00000000..a725a120 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e10b0ab5db0931aaaadf2cc990350593c09c7c2d3087189e6ccccdbec3677a25 +size 14428 diff --git a/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/1.webp b/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/1.webp new file mode 100644 index 00000000..894955da --- /dev/null +++ b/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5de97fca094f57f61aa28dd48425f284ebddf1f05ee9b6b2aa330bad8de03f3e +size 2274 diff --git a/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/outline.webp b/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/outline.webp new file mode 100644 index 00000000..ff7680b4 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34e367d6cbc93c953cbb5fbee007e6ef05dd1c5662b6bac670c349d1e10d138a +size 13060 diff --git a/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/skin.webp b/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/skin.webp new file mode 100644 index 00000000..9712695d --- /dev/null +++ b/game/characters/luna/poses/default/clothes/accessory/onepiece_harness/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e012c5c66894972fea95b161c0e0122757a61d22f35f2cd1984c1e60cebf83b4 +size 10754 diff --git a/game/characters/luna/poses/default/clothes/bottom/shorts/0.webp b/game/characters/luna/poses/default/clothes/bottom/shorts/0.webp new file mode 100644 index 00000000..d24dcace --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/shorts/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50b1d34b23472aa5cc91c5f073b92a268baea7aa197f446504431b05dec77ee6 +size 10220 diff --git a/game/characters/luna/poses/default/clothes/bottom/shorts/1.webp b/game/characters/luna/poses/default/clothes/bottom/shorts/1.webp new file mode 100644 index 00000000..9defb7a4 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/shorts/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e3410fa3ec006458dcad3685fad511d7d46cefeaac856b50124a02a2ab44151 +size 1988 diff --git a/game/characters/luna/poses/default/clothes/bottom/shorts/2.webp b/game/characters/luna/poses/default/clothes/bottom/shorts/2.webp new file mode 100644 index 00000000..4051f1ff --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/shorts/2.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:896a292a99a2d3734a5faa4b3f341bd02ab93a5f120881e8d477172e8fefce27 +size 7948 diff --git a/game/characters/luna/poses/default/clothes/bottom/shorts/outline.webp b/game/characters/luna/poses/default/clothes/bottom/shorts/outline.webp new file mode 100644 index 00000000..c185abf2 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/shorts/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:626e12b87a4d7bbdb4ba57528e244796c420fac6142ffe4dbc04e7128e106ace +size 12902 diff --git a/game/characters/luna/poses/default/clothes/bottom/shorts/skin.webp b/game/characters/luna/poses/default/clothes/bottom/shorts/skin.webp new file mode 100644 index 00000000..cbc8d6bd --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/shorts/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e31332ffd9bb9c0c2eeb6d886e1c5a7657251ff0199b0ab6934ca0b8e81e3f3 +size 2852 diff --git a/game/characters/luna/poses/default/clothes/bottom/shorts_latex/0.webp b/game/characters/luna/poses/default/clothes/bottom/shorts_latex/0.webp new file mode 100644 index 00000000..3b6c8847 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/shorts_latex/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3f68f682b99594db7474c1a9fb08f4a071b397afc31da2ea2739b8fd1fc9740 +size 8672 diff --git a/game/characters/luna/poses/default/clothes/bottom/shorts_latex/1.webp b/game/characters/luna/poses/default/clothes/bottom/shorts_latex/1.webp new file mode 100644 index 00000000..85b4f3cd --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/shorts_latex/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f925a33ec8df10aa8874edae437faf6c348db3162684e59da2fd5cfb715f8f70 +size 16654 diff --git a/game/characters/luna/poses/default/clothes/bottom/shorts_latex/extra.webp b/game/characters/luna/poses/default/clothes/bottom/shorts_latex/extra.webp new file mode 100644 index 00000000..97451b32 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/shorts_latex/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80cd447d1b9f124098ff94c673509afe5d3a0e5516f7c06376ee960f2a6d9d2c +size 4500 diff --git a/game/characters/luna/poses/default/clothes/bottom/shorts_latex/outline.webp b/game/characters/luna/poses/default/clothes/bottom/shorts_latex/outline.webp new file mode 100644 index 00000000..feee7c1b --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/shorts_latex/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f3db0b543883008585e352e54d5b09b5d4b4bbe902b073b07cd6862136c9769 +size 12036 diff --git a/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/0.webp b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/0.webp new file mode 100644 index 00000000..cc17f550 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e444ae6fc5fac997a619a499ca6868b2ce8506138e55d3e3f302b6a45fbb5d8d +size 7358 diff --git a/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/1.webp b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/1.webp new file mode 100644 index 00000000..60ab3764 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:169182db72d68f7db4750aa308e5b0f502d44a90d911aca967d180ffdbd3ed6a +size 11434 diff --git a/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/2.webp b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/2.webp new file mode 100644 index 00000000..beda339d --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/2.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f340bac016074051d19f57c2f30f22474e24e30c6e53a20f497cccd4e50b192b +size 2316 diff --git a/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/3.webp b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/3.webp new file mode 100644 index 00000000..931bb840 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/3.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:940e19632448c89d90372ed0043ae09a8d8e4e1247e41864c27463d6a841cd44 +size 628 diff --git a/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/outline.webp b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/outline.webp new file mode 100644 index 00000000..54fcdc36 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06774be9466d6430aca0346be2bd477547c172b9eea4eef62842d7b962e4722a +size 9108 diff --git a/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/skin.webp b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/skin.webp new file mode 100644 index 00000000..4865d36e --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/skirt_plaid/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b58640f84764065e4f83ffa7f0528307182782eb8fb834948e6b2be86a52a02 +size 5224 diff --git a/game/characters/luna/poses/default/clothes/bottom/trousers_latex/0.webp b/game/characters/luna/poses/default/clothes/bottom/trousers_latex/0.webp new file mode 100644 index 00000000..df5acdc3 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/trousers_latex/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2be2a0166056d16ca3277a6d6ad6b89acb6e0a621d819602568c19de2c32375 +size 11164 diff --git a/game/characters/luna/poses/default/clothes/bottom/trousers_latex/1.webp b/game/characters/luna/poses/default/clothes/bottom/trousers_latex/1.webp new file mode 100644 index 00000000..3ba55992 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/trousers_latex/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d40916d65174161dd246c5f5567776710fdafe6759634e94cffa05c7ba3b437c +size 29126 diff --git a/game/characters/luna/poses/default/clothes/bottom/trousers_latex/extra.webp b/game/characters/luna/poses/default/clothes/bottom/trousers_latex/extra.webp new file mode 100644 index 00000000..7d359281 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/trousers_latex/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21740c1ba177959b4862f95e288097dec352a98f7a654a4620486aed7ef35c0e +size 7482 diff --git a/game/characters/luna/poses/default/clothes/bottom/trousers_latex/outline.webp b/game/characters/luna/poses/default/clothes/bottom/trousers_latex/outline.webp new file mode 100644 index 00000000..017c580e --- /dev/null +++ b/game/characters/luna/poses/default/clothes/bottom/trousers_latex/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77205415b67f82db4c40038f168c763d80b698675b788cc044cd654a4a832f0d +size 17886 diff --git a/game/characters/luna/poses/default/clothes/earrings/ear_studs/0.webp b/game/characters/luna/poses/default/clothes/earrings/ear_studs/0.webp new file mode 100644 index 00000000..0ce284e6 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/earrings/ear_studs/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:190176595a63a1d7c293f41432f6c434f034d02df9e84d0ace9e33e5e021fe94 +size 582 diff --git a/game/characters/luna/poses/default/clothes/earrings/ear_studs/extra.webp b/game/characters/luna/poses/default/clothes/earrings/ear_studs/extra.webp new file mode 100644 index 00000000..d872859b --- /dev/null +++ b/game/characters/luna/poses/default/clothes/earrings/ear_studs/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:431b0232b75c3e5689f486ef96d9cee0f75359358528d1196dbafb09f85cc348 +size 538 diff --git a/game/characters/luna/poses/default/clothes/earrings/ear_studs/outline.webp b/game/characters/luna/poses/default/clothes/earrings/ear_studs/outline.webp new file mode 100644 index 00000000..6dc896b1 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/earrings/ear_studs/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7d05ac68efaf18fcd31637022ce275987702d5fa1ed14cf610629ad73052af6 +size 578 diff --git a/game/characters/luna/poses/default/clothes/earrings/earring_moon/0.webp b/game/characters/luna/poses/default/clothes/earrings/earring_moon/0.webp new file mode 100644 index 00000000..b6d2dad3 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/earrings/earring_moon/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82cffaf1efbc0e1d76704add8a92fbec79a6127212e727edc5203c3000f148d2 +size 640 diff --git a/game/characters/luna/poses/default/clothes/earrings/earring_moon/1.webp b/game/characters/luna/poses/default/clothes/earrings/earring_moon/1.webp new file mode 100644 index 00000000..a66f19fc --- /dev/null +++ b/game/characters/luna/poses/default/clothes/earrings/earring_moon/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af264b3b4e78599f5d4c5e71afc76b6cd3797b8c90dfba2df3392a16a3dbfac6 +size 582 diff --git a/game/characters/luna/poses/default/clothes/earrings/earring_moon/2.webp b/game/characters/luna/poses/default/clothes/earrings/earring_moon/2.webp new file mode 100644 index 00000000..c0d823a4 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/earrings/earring_moon/2.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:009d168fda5bf75cbb16ac73254fe61ea39b51a79b0442f42fe71d6dc42768c2 +size 604 diff --git a/game/characters/luna/poses/default/clothes/earrings/earring_moon/extra.webp b/game/characters/luna/poses/default/clothes/earrings/earring_moon/extra.webp new file mode 100644 index 00000000..38d8acb8 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/earrings/earring_moon/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e99e9a1d71f6b39ae36f8abb7ca5177432f994b1f58984e15c1f1ba9b7ec7084 +size 586 diff --git a/game/characters/luna/poses/default/clothes/earrings/earring_moon/outline.webp b/game/characters/luna/poses/default/clothes/earrings/earring_moon/outline.webp new file mode 100644 index 00000000..2752596c --- /dev/null +++ b/game/characters/luna/poses/default/clothes/earrings/earring_moon/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2b2c82218a5850964c07ad320b05cb5a08e0f863698667e0bdc9f0b79f2a7b1 +size 966 diff --git a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/0.webp b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/0.webp deleted file mode 100644 index 18ca8b79..00000000 --- a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/0.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3a6b99fde887014df8fe288048b4f64488c0a8b634445c4e67a14282a3321fb5 -size 4370 diff --git a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/0_back.webp b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/0_back.webp new file mode 100644 index 00000000..deae2c7f --- /dev/null +++ b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/0_back.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94c60e48cdf99b12f60b48098800e5f6ab70e42f66c1d459e0f1406c05544599 +size 572 diff --git a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/0_zorder_150.webp b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/0_zorder_150.webp new file mode 100644 index 00000000..a0b99743 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/0_zorder_150.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdd8638406ecef703aa920a0518292ce360b7a3e767a6234094defce1586a184 +size 1534 diff --git a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/1.webp b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/1.webp deleted file mode 100644 index fadb437b..00000000 --- a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/1.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6d89cb675f5d71ff33d3df76f319e46e7731af92c662a5c29e4fb94f74a9f9eb -size 3506 diff --git a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/1_zorder_150.webp b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/1_zorder_150.webp new file mode 100644 index 00000000..199a5cdc --- /dev/null +++ b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/1_zorder_150.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:989ad75c37671c8281cc021a756b7e724fa21a8ff77a162043ff3a117feebfbf +size 2622 diff --git a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/extra.webp b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/extra.webp deleted file mode 100644 index ddbeb936..00000000 --- a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/extra.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1c91d42f8f5feeb6bec3138a302cf2904021ce792fe73666f2c39a01aa544515 -size 4090 diff --git a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/extra_zorder_150.webp b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/extra_zorder_150.webp new file mode 100644 index 00000000..0c07f6dc --- /dev/null +++ b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/extra_zorder_150.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ed9a20fab44943a3b04cef2a8022b2b6bfd81b0d6cd315c962da7a595f20128 +size 4604 diff --git a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/outline.webp b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/outline.webp deleted file mode 100644 index 8d45acda..00000000 --- a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/outline.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:38d3f87d6e24cef039dbc9dda1ca0d59aa5a9a5e8a3625d1cd4cd8c3453b19eb -size 4622 diff --git a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/outline_back.webp b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/outline_back.webp new file mode 100644 index 00000000..7d3727a4 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/outline_back.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79eccd9cec3b045413797ffff096fd01edc1b62fdd1b71036399e73dece3cccb +size 570 diff --git a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/outline_zorder_150.webp b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/outline_zorder_150.webp new file mode 100644 index 00000000..d66f0836 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/outline_zorder_150.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1494d57049415402b44a4873313fb68cbaaca58eed3d5c1b739e3ecce7e47b3d +size 3588 diff --git a/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/skin.webp b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/skin.webp new file mode 100644 index 00000000..d6d104a6 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/glasses/sunglasses_2/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2206baaa2fbe62cd36c8a804e13dbbe21d9cd4c5d042b7ea0eec66eed12550be +size 2318 diff --git a/game/characters/luna/poses/default/clothes/makeup/nail_polish/0.webp b/game/characters/luna/poses/default/clothes/makeup/nail_polish/0.webp new file mode 100644 index 00000000..63e484be --- /dev/null +++ b/game/characters/luna/poses/default/clothes/makeup/nail_polish/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6105669250710b98244f6c06c71ad2e8beb2ba8a7238d5c02c01d25f03a5d1f9 +size 1078 diff --git a/game/characters/luna/poses/default/clothes/makeup/nail_polish/extra.webp b/game/characters/luna/poses/default/clothes/makeup/nail_polish/extra.webp new file mode 100644 index 00000000..01e5c06e --- /dev/null +++ b/game/characters/luna/poses/default/clothes/makeup/nail_polish/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5650fa1cba634abe6137ed53cb22fd9f149d463df3b4f665e7b6ca8e6f50cded +size 818 diff --git a/game/characters/luna/poses/default/clothes/neckwear/choker_1/0.webp b/game/characters/luna/poses/default/clothes/neckwear/choker_1/0.webp new file mode 100644 index 00000000..3bd9171b --- /dev/null +++ b/game/characters/luna/poses/default/clothes/neckwear/choker_1/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb953447463332c51e44744345cfb745148573d4187b08685e397845923ee15 +size 918 diff --git a/game/characters/luna/poses/default/clothes/neckwear/choker_1/outline.webp b/game/characters/luna/poses/default/clothes/neckwear/choker_1/outline.webp new file mode 100644 index 00000000..fd43a978 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/neckwear/choker_1/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:379f06905ffda07678222cb3f0b2c91f3ae356ea7e8d1a6180523d9c3ce0ed47 +size 1470 diff --git a/game/characters/luna/poses/default/clothes/neckwear/collar/0.webp b/game/characters/luna/poses/default/clothes/neckwear/collar/0.webp new file mode 100644 index 00000000..b967dfc1 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/neckwear/collar/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9f696302f312ae1da41f2c93e6d8af369413bee36ee8afe6f1dba8ae2f281b3 +size 2914 diff --git a/game/characters/luna/poses/default/clothes/neckwear/collar/1.webp b/game/characters/luna/poses/default/clothes/neckwear/collar/1.webp new file mode 100644 index 00000000..99a54ee7 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/neckwear/collar/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad417da4dc030651ee18bb8e6e0626742cb348dabc1ad3c2277959ae794d9b43 +size 524 diff --git a/game/characters/luna/poses/default/clothes/neckwear/collar/outline.webp b/game/characters/luna/poses/default/clothes/neckwear/collar/outline.webp new file mode 100644 index 00000000..271e1a6a --- /dev/null +++ b/game/characters/luna/poses/default/clothes/neckwear/collar/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f227c45f3d753ed1af8acc140acb32a7320835e5997f350f822837044d8f179 +size 2238 diff --git a/game/characters/luna/poses/default/clothes/neckwear/collar_1/0.webp b/game/characters/luna/poses/default/clothes/neckwear/collar_1/0.webp new file mode 100644 index 00000000..5e061a10 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/neckwear/collar_1/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30bc11ad53874441b3602ef7a787d3b5a7415be2613dd6bc0c71ea9937a836cd +size 1332 diff --git a/game/characters/luna/poses/default/clothes/neckwear/collar_1/extra.webp b/game/characters/luna/poses/default/clothes/neckwear/collar_1/extra.webp new file mode 100644 index 00000000..ba11f980 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/neckwear/collar_1/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5009cdd2852b6c84a9b26fb6915398ac85017b88cec143497df001b0e605bee +size 622 diff --git a/game/characters/luna/poses/default/clothes/neckwear/collar_1/outline.webp b/game/characters/luna/poses/default/clothes/neckwear/collar_1/outline.webp new file mode 100644 index 00000000..321d5bd4 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/neckwear/collar_1/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa1f0097e6d60d5af22364fafec3b59354f27d4383e7164ab34620f987db4773 +size 1616 diff --git a/game/characters/luna/poses/default/clothes/neckwear/collar_1/skin.webp b/game/characters/luna/poses/default/clothes/neckwear/collar_1/skin.webp new file mode 100644 index 00000000..c0dfadca --- /dev/null +++ b/game/characters/luna/poses/default/clothes/neckwear/collar_1/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14dc400279aef4228277814cc38d4098ec51316f2f54635a66cf6ee8093a6e10 +size 1292 diff --git a/game/characters/luna/poses/default/clothes/panties/panties_cumslut/0.webp b/game/characters/luna/poses/default/clothes/panties/panties_cumslut/0.webp new file mode 100644 index 00000000..8d80b1f7 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/panties/panties_cumslut/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bac6e9459080c3e133b7179095272590a86bfbe8f0eead5c0a96c5ebf1c2946 +size 5512 diff --git a/game/characters/luna/poses/default/clothes/panties/panties_cumslut/1.webp b/game/characters/luna/poses/default/clothes/panties/panties_cumslut/1.webp new file mode 100644 index 00000000..360af446 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/panties/panties_cumslut/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea16754b8a1d6e0a578ad66a845fbe5e890dd6168f0462a3cc5367e0527042c8 +size 2988 diff --git a/game/characters/luna/poses/default/clothes/panties/panties_cumslut/extra.webp b/game/characters/luna/poses/default/clothes/panties/panties_cumslut/extra.webp new file mode 100644 index 00000000..cf97ff2f --- /dev/null +++ b/game/characters/luna/poses/default/clothes/panties/panties_cumslut/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b20377c37906b25345722cd502fa81125c8706d6cad946234fd5d034b52f2c60 +size 2734 diff --git a/game/characters/luna/poses/default/clothes/panties/panties_cumslut/outline.webp b/game/characters/luna/poses/default/clothes/panties/panties_cumslut/outline.webp new file mode 100644 index 00000000..ce9678f3 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/panties/panties_cumslut/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab2a9c7e0b63a9b0578902d98be9ea45ca59ddc3deb7efd8a659323ac1cf4626 +size 7632 diff --git a/game/characters/luna/poses/default/clothes/panties/panties_cumslut/skin.webp b/game/characters/luna/poses/default/clothes/panties/panties_cumslut/skin.webp new file mode 100644 index 00000000..912ea235 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/panties/panties_cumslut/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:107692faf52c632804fe47b77539cf9f706287139333a51653554401c76a90bd +size 3152 diff --git a/game/characters/luna/poses/default/clothes/piercing/clit_stud/0.webp b/game/characters/luna/poses/default/clothes/piercing/clit_stud/0.webp new file mode 100644 index 00000000..8cecf4e0 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/clit_stud/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f513ba80523287929176be5b6199142e47831ed047b6d852742185428459ddce +size 548 diff --git a/game/characters/luna/poses/default/clothes/piercing/clit_stud/extra.webp b/game/characters/luna/poses/default/clothes/piercing/clit_stud/extra.webp new file mode 100644 index 00000000..849ce6d6 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/clit_stud/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2052870a885f531ad1eead759dc656b12fc0f6b48fdb5a88ee5a7e0e8cd30c06 +size 310 diff --git a/game/characters/luna/poses/default/clothes/piercing/clit_stud/outline.webp b/game/characters/luna/poses/default/clothes/piercing/clit_stud/outline.webp new file mode 100644 index 00000000..03c69f38 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/clit_stud/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c3e699c331a40d3c7397ed6c0007f529727e81e50678e7a9a4546ce3b3649c9 +size 554 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/0.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/0.webp new file mode 100644 index 00000000..52224191 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:193c486c3a3f0865c71cd8712a517c19b6cd567c2fdada4f1e738f776cd1d697 +size 608 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/extra.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/extra.webp new file mode 100644 index 00000000..77051792 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d531172c4dc58cdc50b11335a1de0f98b79715f466c6ae412abd5a14b39c20cf +size 536 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/outline.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/outline.webp new file mode 100644 index 00000000..04cf20d1 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51e5a8d855e020fcbc4797a41e53d91c794e457fb6a70dd76fe933502dc9b9a1 +size 648 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/0.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/0.webp new file mode 100644 index 00000000..e8784218 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da1b23ed86c95b3dc03dd6a391fc4724396f3997e33ebd2b53d6962358c2c5e2 +size 606 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/extra.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/extra.webp new file mode 100644 index 00000000..efb5a353 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f14bebd877e353388378ea809d4324e11c9551660699d483674aefd3dc03be08 +size 530 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/outline.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/outline.webp new file mode 100644 index 00000000..8a48c980 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da9894116e7c24069af49b5f7e19e4c922449f0362f690f6b593cc248b383e73 +size 646 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/0.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/0.webp new file mode 100644 index 00000000..810e618d --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f693f83cfa0edae98cb81264e22b77eb7b0285101d73b602a39c616e11a1b613 +size 666 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/extra.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/extra.webp new file mode 100644 index 00000000..27d49694 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:181e1c72b1caeaf23fe412bcf31a31299e36175bbae9ba6fc5453e6b138850cf +size 538 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/outline.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/outline.webp new file mode 100644 index 00000000..6ef82c97 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e09feb2693a9feb8a04c287a7c3d51a9181847bb8c4871fa5be1f60317a67e2 +size 652 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/0.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/0.webp new file mode 100644 index 00000000..a03bd7bd --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93629f6caecf25dfd834d78ff7beadccf2f2dcb408a03ecf292796b8707a54e4 +size 606 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/extra.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/extra.webp new file mode 100644 index 00000000..9044c3e5 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d9395c87d710958d0ee32b28406e4eac738e866fed97863a22126dc18fed53b +size 544 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/outline.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/outline.webp new file mode 100644 index 00000000..217b9103 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1dfa7036586ee8505e0fcae96ad66d2d3c98e35cd73f5ca84e2dd36aa1d7d970 +size 648 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/0.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/0.webp new file mode 100644 index 00000000..4ae2de8c --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38b33e906af52bb31290247a01c8718bd46af58468b6ce5d78ba91c883ec02d4 +size 608 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/extra.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/extra.webp new file mode 100644 index 00000000..85047541 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38f251610bff3e54fae7a9e52b3da2da48446dcfb73df006018f19316f33d7e9 +size 540 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/outline.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/outline.webp new file mode 100644 index 00000000..f1e90ede --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8383c521f4c9cb5ee30f37a53feb19fd442fbbe16b9e21a2fa514b2ea33cf077 +size 646 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/0.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/0.webp new file mode 100644 index 00000000..689b26ad --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:affe775e5764df7646678ac4bd58ead7897c9436512a28a26ea3a6f647d21369 +size 608 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/extra.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/extra.webp new file mode 100644 index 00000000..9479d241 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d74c93e071e637835a59d413f4eaa6dc15284ea7bdfab9e40733495a8a44318 +size 528 diff --git a/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/outline.webp b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/outline.webp new file mode 100644 index 00000000..ebc9cf73 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a13f8de41d1125a8e1e1748b76b71efb9db2bc24057ba6c5cebe9b961918ea27 +size 648 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/angry/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/angry/0.webp new file mode 100644 index 00000000..e7719e46 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/angry/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ec45165d1f96996174fc9b0ca8e49315523b0cb36eb039cc5b8b874b6f4acb4 +size 554 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/angry/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/angry/extra.webp new file mode 100644 index 00000000..3b17a463 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/angry/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e2d1c7a877b17d192c5a9b6c0437784bca9aa3f4f33e970b8f9003331f2bc4a +size 316 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/angry/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/angry/outline.webp new file mode 100644 index 00000000..cc35e727 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/angry/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33b7f1ea42c3961165275fd8cdd4d489b7026b069a346b415f75c6eda9137867 +size 530 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/0.webp new file mode 100644 index 00000000..38f70541 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6b80ddccb857556bd4128ca9b2cbbfdde92706e2ba9a68946d8f4d49edd760e +size 556 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/extra.webp new file mode 100644 index 00000000..0be92f77 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e5f2ab22ebe8b34e247eb5381b9adc5bdbbfffeed7edb3d107e6c03790d1a7a +size 310 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/outline.webp new file mode 100644 index 00000000..92908d3c --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:214a2ea8fdf69bf9d97303a253425e9d122e25ec35f0fc3f5b4ae3812e0fdda7 +size 530 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/base/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/base/0.webp new file mode 100644 index 00000000..8b53ed8b --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/base/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67590c13f6e4ed766547b3c470a120da0dccd4477d891423f99465892ce7f51b +size 554 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/base/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/base/extra.webp new file mode 100644 index 00000000..48cb362e --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/base/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:730f16470e179e88c6e74c67b5547bd7b8772736a0e1fd433bbbb6739b1f4f72 +size 312 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/base/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/base/outline.webp new file mode 100644 index 00000000..54840307 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/base/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:459e7e41d25cdb6b7d0973de44db2410170c23a13b62195aaeec2d629979dde2 +size 530 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/clench/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/clench/0.webp new file mode 100644 index 00000000..7c725055 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/clench/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13a0c2dc9add33297e2e00e3a422961e4b31f918f17b5d54288c49745b5ea2d6 +size 556 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/clench/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/clench/extra.webp new file mode 100644 index 00000000..6489d353 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/clench/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea0d3f14a5b33b15901909b47cf4c7fa1f4f67a0b012a066805f85a10b0907f9 +size 316 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/clench/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/clench/outline.webp new file mode 100644 index 00000000..148535b8 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/clench/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4713695ca32af2fc2dc2e1d7d0798da42f3b3a7068264acd8d678ae40fab9c39 +size 528 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/0.webp new file mode 100644 index 00000000..998f01e9 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8d81d86456cc96dd99b10def7d14e0ac617bf21f45d3ff223f4020d8c186160 +size 558 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/extra.webp new file mode 100644 index 00000000..4448f09b --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8d05ad92d80490790f8c5c9fd45aac6c7ae4b39ffbddb76f016b73bd9e27c1a +size 316 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/outline.webp new file mode 100644 index 00000000..89729ce0 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:551018470eee12b12ea8f55eadb7a8cbdda4f2e0d681d31714702786de50cb42 +size 528 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/0.webp new file mode 100644 index 00000000..d0ccb1de --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d2994e16e8eb8a5e46ea534d44a122542c63f2397265bf866024257188b81d0 +size 566 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/extra.webp new file mode 100644 index 00000000..06e0003b --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d51752c0a35fd27f5157760a933c687ba45cfcd43ac814e6001b0b80664798c5 +size 320 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/outline.webp new file mode 100644 index 00000000..b324169d --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ebb6095a746e6b37602064a237f246fb4f0c92ddbc80a5498c7f9bc73294089 +size 534 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/full/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/full/0.webp new file mode 100644 index 00000000..b0210100 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/full/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b69d366273c57340707975c6731178bf7bdb22509e8e274c92093ea745e14b4f +size 556 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/full/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/full/extra.webp new file mode 100644 index 00000000..a5f67c64 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/full/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e226f9af03c5dd1aaa202bc6c4a270a852ced7012449d5e8b7e9edc1b878770 +size 316 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/full/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/full/outline.webp new file mode 100644 index 00000000..1a0b1179 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/full/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dbc9a61fce604924b081fd43e293a86d490157d10131d88fc0a1bb1ec4c7b02 +size 530 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/grin/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/grin/0.webp new file mode 100644 index 00000000..1a764ba7 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/grin/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b689aa714073e1e0b90d1fc9684d8780397155c5226ad368448ce46f4862a9bd +size 560 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/grin/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/grin/extra.webp new file mode 100644 index 00000000..17a682ee --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/grin/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d92aed2d8a6b2df60e1f4ef796cfbb178c6073890946520209e6b352f9c208f +size 312 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/grin/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/grin/outline.webp new file mode 100644 index 00000000..cd05d9fe --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/grin/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:646f7fcf2653693886842d0fe12484156a0fedac37be74a5b5963d59747aa7b2 +size 528 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/mad/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/mad/0.webp new file mode 100644 index 00000000..4b254b78 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/mad/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b6aa54903b3309815b9eb445749ab1c077e0516913914891fdeba25567f4fc8 +size 562 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/mad/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/mad/extra.webp new file mode 100644 index 00000000..2891a1b6 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/mad/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08f55d6284ef9f4f67d6d1b26e5ffc8529e1ce83245cea1e3104599dfcff5f0e +size 314 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/mad/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/mad/outline.webp new file mode 100644 index 00000000..f3bdd153 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/mad/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b9132b6177fe0b45b4b02a15cb3e2fa25cf319a7f1caccba1c68681f6697802 +size 532 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/normal/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/normal/0.webp new file mode 100644 index 00000000..5f3bfc1c --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/normal/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a2fb6ae149dad505d055c3255878f3338b2a8ef79b1b37032def2bc7f567e03 +size 558 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/normal/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/normal/extra.webp new file mode 100644 index 00000000..73b0c40d --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/normal/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f02ab4c3446c8d0c29da956b542452a7e48bf07f9d5637f3a9fe6a253c40c598 +size 314 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/normal/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/normal/outline.webp new file mode 100644 index 00000000..54840307 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/normal/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:459e7e41d25cdb6b7d0973de44db2410170c23a13b62195aaeec2d629979dde2 +size 530 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open/0.webp new file mode 100644 index 00000000..c85bba2c --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b4b442ed12766c771a26f6d1965e964405e4ef739f164b22ce111dbf9c18ce2 +size 564 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open/extra.webp new file mode 100644 index 00000000..840c190b --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a233da012d773cafc662786dce93dc4f92beccdfc67888ad2d64ff5222c42a4 +size 310 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open/outline.webp new file mode 100644 index 00000000..b5fa3721 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4740a927e47a634c05d1d0f35f28e8f1c77581a17b43736c442fb5305bd8baac +size 534 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/0.webp new file mode 100644 index 00000000..76cc6fca --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43cb80810cd8db7267d91a6082bbca77363644ce11cc1865425d5f40b8777171 +size 564 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/extra.webp new file mode 100644 index 00000000..3aba3b27 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b71f10136789894cf2407db6d1abc4edf32446dfeab47481eb2e90574778cf0 +size 312 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/outline.webp new file mode 100644 index 00000000..b5fa3721 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4740a927e47a634c05d1d0f35f28e8f1c77581a17b43736c442fb5305bd8baac +size 534 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/0.webp new file mode 100644 index 00000000..932361b5 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bccbd181a738508307763b897234164b3345f4c9e8ed521ab6a156246fc645ea +size 556 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/extra.webp new file mode 100644 index 00000000..7fc082d3 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7006e1320ffc144f83f9a556d6867d512d6632adc460f3976c3115b224c4905 +size 316 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/outline.webp new file mode 100644 index 00000000..1944cc83 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e03e644757e272395d3dc68d4f8e3ff638db6c00609df1322b37918b954aefe +size 528 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/scream/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/scream/0.webp new file mode 100644 index 00000000..8dbf12a3 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/scream/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c289304b7778c9657c42b4befef04f21624c373865f2f07ea7c6b2199776b4a4 +size 564 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/scream/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/scream/extra.webp new file mode 100644 index 00000000..ccce5cb1 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/scream/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2206b78185d37dc8906f14c5130f9ed48b8ff783f9c293307833562b9a1ec99c +size 312 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/scream/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/scream/outline.webp new file mode 100644 index 00000000..a0372ee7 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/scream/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0052a88f51d9df552fd50f06c8a05eeae1995f6109b2a221b8baa7eb140ea9e0 +size 530 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/shock/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/shock/0.webp new file mode 100644 index 00000000..62377df9 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/shock/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e8c73ef75fd391a86aeaa4a72f0d7d5c533689935ccecb59f49d5793fec1e1f +size 560 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/shock/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/shock/extra.webp new file mode 100644 index 00000000..9178faa6 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/shock/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:910f1598e700036dcc08bbdf0e2c57d2028faeb2ae8deaf3ceecbecbd107012c +size 312 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/shock/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/shock/outline.webp new file mode 100644 index 00000000..b6822261 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/shock/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f843091c6875308b3be52c33eab5a47588211870be639fe02c340f6ed35aa389 +size 532 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/silly/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/silly/0.webp new file mode 100644 index 00000000..3f48c2bb --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/silly/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbc2c126e06bf2fb1262d97c24c1f8924597f466ef492884cd8dc63274bafbc8 +size 560 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/silly/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/silly/extra.webp new file mode 100644 index 00000000..d5db35d7 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/silly/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff8abc409606701c49fb43dcbacce7d730b31cf2109e2dcc80d7103f76b13a87 +size 316 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/silly/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/silly/outline.webp new file mode 100644 index 00000000..93697086 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/silly/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c76d2b44db271ca028bbd7f69e05cd0b698b10cf6100be5bdd7c6140a45b2fb1 +size 528 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/smile/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/smile/0.webp new file mode 100644 index 00000000..503ece51 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/smile/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ad685ce2a44098c1b272a16f955336062d93c7a92a98ad8f8990fafef0b7982 +size 552 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/smile/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/smile/extra.webp new file mode 100644 index 00000000..bd0d029a --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/smile/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64f9bfd956959d87a89f52356691bbd4c7b5410d3cab3908de5e77745d7623e9 +size 318 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/smile/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/smile/outline.webp new file mode 100644 index 00000000..f8ed0606 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/smile/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d345b27ee3b028888285ab64b801a5908f773a9c447159417bd44ac103c8f1e +size 586 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/soft/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/soft/0.webp new file mode 100644 index 00000000..5c50f31e --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/soft/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03ad341e99860eb0861ebe9194f3e2f49e7d81848302226811d0f123ba94b97b +size 560 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/soft/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/soft/extra.webp new file mode 100644 index 00000000..dce3a783 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/soft/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e89291193c7786536cd7982d859ad740e770252978f51bc37b8b59ec80a25e2c +size 312 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/soft/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/soft/outline.webp new file mode 100644 index 00000000..3cf964b1 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/soft/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f41054551864150ae46ae322579a1e74c61e49c5b8e5d5466a7792284c1944c2 +size 532 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/upset/0.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/upset/0.webp new file mode 100644 index 00000000..7ab6236f --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/upset/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8dc57ab503d0da023d0bd8bd78d9227b5e19c18388caf77c4cfb77de2ab5daf4 +size 558 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/upset/extra.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/upset/extra.webp new file mode 100644 index 00000000..bb1dc75d --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/upset/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69b06a89ec5b9bf8245d164aee00e7454241c31fe676e77e8e4185ea9e625397 +size 300 diff --git a/game/characters/luna/poses/default/clothes/piercing/mouth_stud/upset/outline.webp b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/upset/outline.webp new file mode 100644 index 00000000..c08dcb98 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/mouth_stud/upset/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25d23142da94862af949a730c99c0750fd465fe42b07973b399738808f3b65b1 +size 584 diff --git a/game/characters/luna/poses/default/clothes/piercing/nipple_rings/0.webp b/game/characters/luna/poses/default/clothes/piercing/nipple_rings/0.webp new file mode 100644 index 00000000..75fef99f --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/nipple_rings/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c4493813d67fe122916dbe24c92a95f22231805566ae7c9e689eadc0a73a773 +size 1000 diff --git a/game/characters/luna/poses/default/clothes/piercing/nipple_rings/extra.webp b/game/characters/luna/poses/default/clothes/piercing/nipple_rings/extra.webp new file mode 100644 index 00000000..e6dd2770 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/nipple_rings/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af4d01b8f545de9a45bcad56101e36f2316a5a32a1e753b03d25d70acc05cb7e +size 692 diff --git a/game/characters/luna/poses/default/clothes/piercing/nipple_rings/outline.webp b/game/characters/luna/poses/default/clothes/piercing/nipple_rings/outline.webp new file mode 100644 index 00000000..ec337ff3 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/nipple_rings/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5179911bb8c5de6ac762757501d6292f3458a9e17b7ef77102ac808674c64525 +size 1170 diff --git a/game/characters/luna/poses/default/clothes/piercing/nipple_studs/0.webp b/game/characters/luna/poses/default/clothes/piercing/nipple_studs/0.webp new file mode 100644 index 00000000..93e37c74 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/nipple_studs/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ada8a792f0ae3424cf9a8f2521f36639bed220b90bacfc8c871fa79aea411d1 +size 638 diff --git a/game/characters/luna/poses/default/clothes/piercing/nipple_studs/extra.webp b/game/characters/luna/poses/default/clothes/piercing/nipple_studs/extra.webp new file mode 100644 index 00000000..0d1b9ff6 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/nipple_studs/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:629bf5fbf356acc7847e4674d4432ec925e7d4b728192214e1fcd139daaddaba +size 608 diff --git a/game/characters/luna/poses/default/clothes/piercing/nipple_studs/outline.webp b/game/characters/luna/poses/default/clothes/piercing/nipple_studs/outline.webp new file mode 100644 index 00000000..d8d6eef4 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/nipple_studs/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f90ef427e1f9fafc7d8c271fb452ac01ed89add5c6b06acc1e81440096a67e1 +size 672 diff --git a/game/characters/luna/poses/default/clothes/piercing/nose_ring/0.webp b/game/characters/luna/poses/default/clothes/piercing/nose_ring/0.webp new file mode 100644 index 00000000..af75bc5e --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/nose_ring/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3581e0473a7c3de0fc7c0c887ea4293fad8c53c4648bb08f7523a6c95d842c4 +size 586 diff --git a/game/characters/luna/poses/default/clothes/piercing/nose_ring/extra.webp b/game/characters/luna/poses/default/clothes/piercing/nose_ring/extra.webp new file mode 100644 index 00000000..2b8d9865 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/nose_ring/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67e069f2a18dad8d8c97cf6e7f2a9f1bb630e258dcc22e0fd5a3e8dc633c4d53 +size 588 diff --git a/game/characters/luna/poses/default/clothes/piercing/nose_ring/outline.webp b/game/characters/luna/poses/default/clothes/piercing/nose_ring/outline.webp new file mode 100644 index 00000000..39a6a15f --- /dev/null +++ b/game/characters/luna/poses/default/clothes/piercing/nose_ring/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97b61f0e753cb5580debb788d8de36fc4de3110efe10a5d7256cec9e0d807d76 +size 648 diff --git a/game/characters/luna/poses/default/clothes/robe/coat_flasher/0_zorder_142.webp b/game/characters/luna/poses/default/clothes/robe/coat_flasher/0_zorder_142.webp new file mode 100644 index 00000000..b5aaf092 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/robe/coat_flasher/0_zorder_142.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49cee2dfb04456441a2dd92a00255555080529fb431dbeec32f7ca88c29225a7 +size 23574 diff --git a/game/characters/luna/poses/default/clothes/robe/coat_flasher/0_zorder_152.webp b/game/characters/luna/poses/default/clothes/robe/coat_flasher/0_zorder_152.webp new file mode 100644 index 00000000..db33ae09 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/robe/coat_flasher/0_zorder_152.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ccd5de3964dff9ff270fb6d7a0677a22553f4c7094958d5e5500d6eb797ab73 +size 29934 diff --git a/game/characters/luna/poses/default/clothes/robe/coat_flasher/1_zorder_143.webp b/game/characters/luna/poses/default/clothes/robe/coat_flasher/1_zorder_143.webp new file mode 100644 index 00000000..21ba8522 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/robe/coat_flasher/1_zorder_143.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b120b7af98df9148d13b950b46b40d9a8d989109b97f10cd02dcfe3f534315e4 +size 628 diff --git a/game/characters/luna/poses/default/clothes/robe/coat_flasher/1_zorder_153.webp b/game/characters/luna/poses/default/clothes/robe/coat_flasher/1_zorder_153.webp new file mode 100644 index 00000000..64fbb00d --- /dev/null +++ b/game/characters/luna/poses/default/clothes/robe/coat_flasher/1_zorder_153.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a46d43809640437ed54a01de49586f2cc2a205b7cf638ff4a210f996e1ff662 +size 1092 diff --git a/game/characters/luna/poses/default/clothes/robe/coat_flasher/2_zorder_-1.webp b/game/characters/luna/poses/default/clothes/robe/coat_flasher/2_zorder_-1.webp new file mode 100644 index 00000000..b2d55eef --- /dev/null +++ b/game/characters/luna/poses/default/clothes/robe/coat_flasher/2_zorder_-1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ae9e532806f99164a717cd70bdb71d4ad6e9d3c949c5d232c36dd54f9b3d2b0 +size 7498 diff --git a/game/characters/luna/poses/default/clothes/robe/coat_flasher/2_zorder_101.webp b/game/characters/luna/poses/default/clothes/robe/coat_flasher/2_zorder_101.webp new file mode 100644 index 00000000..899ad8a1 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/robe/coat_flasher/2_zorder_101.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c46809f20e082a32a7edbbde25978d6387c1e38c7ca970f3f1905b0196a3e4c +size 13042 diff --git a/game/characters/luna/poses/default/clothes/robe/coat_flasher/extra.webp b/game/characters/luna/poses/default/clothes/robe/coat_flasher/extra.webp new file mode 100644 index 00000000..a243bd66 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/robe/coat_flasher/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64c2d6d0db5adf1b5018831c3c5f0d0aeeb60612553e28332e188724d34fb067 +size 22716 diff --git a/game/characters/luna/poses/default/clothes/robe/coat_flasher/outline_zorder_145.webp b/game/characters/luna/poses/default/clothes/robe/coat_flasher/outline_zorder_145.webp new file mode 100644 index 00000000..c4afe69d --- /dev/null +++ b/game/characters/luna/poses/default/clothes/robe/coat_flasher/outline_zorder_145.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:636b4d2354cfd2f20fb59f441f6845c5e795088214a8ec048922ccea06931670 +size 17514 diff --git a/game/characters/luna/poses/default/clothes/robe/coat_flasher/outline_zorder_155.webp b/game/characters/luna/poses/default/clothes/robe/coat_flasher/outline_zorder_155.webp new file mode 100644 index 00000000..270066a4 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/robe/coat_flasher/outline_zorder_155.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:639e37bc7330d90d2587e230fcb519dfa1c153d188fe465aa00cdc6c05f4da8a +size 22306 diff --git a/game/characters/luna/poses/default/clothes/robe/coat_flasher/skin.webp b/game/characters/luna/poses/default/clothes/robe/coat_flasher/skin.webp new file mode 100644 index 00000000..459127be --- /dev/null +++ b/game/characters/luna/poses/default/clothes/robe/coat_flasher/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6b63a6a5d1c94c31bdfca08319011bb0a7180cebd816cd5a0cb2e43c5a7ab50 +size 5660 diff --git a/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/0.webp b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/0.webp new file mode 100644 index 00000000..3d9ab060 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:890538dfb444efeab1f4f34349c79b00b2a51086c251bcd8d9e510080161195f +size 3588 diff --git a/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/1.webp b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/1.webp new file mode 100644 index 00000000..28ecb349 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc0b0bbe45c153386f787403c9cd58e53a58617d3eba4836fc3f83a5347d3622 +size 6818 diff --git a/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/2.webp b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/2.webp new file mode 100644 index 00000000..4c8fc5cf --- /dev/null +++ b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/2.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f4382e1d38e38e9cfaf555febc2841ef8eef6cd0574417706071e8359423a27 +size 1804 diff --git a/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/3.webp b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/3.webp new file mode 100644 index 00000000..18021a72 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/3.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9bd9a3dba1a4a7edff730d4ac69d0556caa2fbe1603fc450ca2bbe66058cbf5 +size 1956 diff --git a/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/outline.webp b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/outline.webp new file mode 100644 index 00000000..117e44fc --- /dev/null +++ b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:983a81937f4ae461d4ad63e701acb462078f4810a14ad833b5b36b9b0ac556bf +size 8688 diff --git a/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/skin.webp b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/skin.webp new file mode 100644 index 00000000..f2d3fb15 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/stockings/leggings_bimbo/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c8d769426a17b85a7d763dc82ac345c2096813a5c3940f93054469fd00c540e +size 1822 diff --git a/game/characters/luna/poses/default/clothes/top/short_tanktop/0.webp b/game/characters/luna/poses/default/clothes/top/short_tanktop/0.webp new file mode 100644 index 00000000..d54b1b8b --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/short_tanktop/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d61347432672effe0615e1631c3ffb53845b5136e885077b5232419a6a01e985 +size 9960 diff --git a/game/characters/luna/poses/default/clothes/top/short_tanktop/1.webp b/game/characters/luna/poses/default/clothes/top/short_tanktop/1.webp new file mode 100644 index 00000000..a18b8d05 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/short_tanktop/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13727c412b9249853b0145a566a181887f18f32fe29bd87178aef67173c7d6d7 +size 1600 diff --git a/game/characters/luna/poses/default/clothes/top/short_tanktop/outline.webp b/game/characters/luna/poses/default/clothes/top/short_tanktop/outline.webp new file mode 100644 index 00000000..8f4eddde --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/short_tanktop/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71eb77787cbf0058d4a9c912da663a8846141da0c9c6e13f185a7f3f812dd572 +size 10596 diff --git a/game/characters/luna/poses/default/clothes/top/short_tanktop/skin.webp b/game/characters/luna/poses/default/clothes/top/short_tanktop/skin.webp new file mode 100644 index 00000000..387aa56b --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/short_tanktop/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e05ac50f55f00c032a4cd768e7464f2d92194affaf19bb35933784604bef070 +size 3744 diff --git a/game/characters/luna/poses/default/clothes/top/top_cumslut/0.webp b/game/characters/luna/poses/default/clothes/top/top_cumslut/0.webp new file mode 100644 index 00000000..bfdb4f3d --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_cumslut/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:034e43ef8dee3dba6a18ca2c5a03ddadb0c1fe318d1ab6813f01096716506a58 +size 15250 diff --git a/game/characters/luna/poses/default/clothes/top/top_cumslut/1.webp b/game/characters/luna/poses/default/clothes/top/top_cumslut/1.webp new file mode 100644 index 00000000..b4ef7a6b --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_cumslut/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82fbcd61032df2928283b2d6f261fc1a72a35953dd09cb2053f76181ec8e89cf +size 2192 diff --git a/game/characters/luna/poses/default/clothes/top/top_cumslut/extra.webp b/game/characters/luna/poses/default/clothes/top/top_cumslut/extra.webp new file mode 100644 index 00000000..0e180e06 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_cumslut/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83713a0e25b76eccfe8537738388548fcf91c9ed97b9c2957689cf47054c5dcd +size 14514 diff --git a/game/characters/luna/poses/default/clothes/top/top_cumslut/outline.webp b/game/characters/luna/poses/default/clothes/top/top_cumslut/outline.webp new file mode 100644 index 00000000..57563f85 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_cumslut/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f84b6a2ab4949cc178547ec5203fc859f656c892ef31a554bc9b8bd6507ef54 +size 15136 diff --git a/game/characters/luna/poses/default/clothes/top/top_cumslut/skin.webp b/game/characters/luna/poses/default/clothes/top/top_cumslut/skin.webp new file mode 100644 index 00000000..4d456a7a --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_cumslut/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0c7448f5844da9b0aebefedd1b04a99b5ad3e2f9004f542907a0dab4689cf91 +size 6256 diff --git a/game/characters/luna/poses/default/clothes/top/top_latex/0.webp b/game/characters/luna/poses/default/clothes/top/top_latex/0.webp new file mode 100644 index 00000000..a32f4bea --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_latex/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46c02f0c1058a98836644ad8dd193bc8d9a3e177a20e0facddbf9b4d6ab40c9d +size 18088 diff --git a/game/characters/luna/poses/default/clothes/top/top_latex/1.webp b/game/characters/luna/poses/default/clothes/top/top_latex/1.webp new file mode 100644 index 00000000..fc1043bb --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_latex/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd9b9d82d8bad86893bd2b6175ca84c1aa2bd929ee60cf8d2029d953690250c6 +size 26436 diff --git a/game/characters/luna/poses/default/clothes/top/top_latex/extra.webp b/game/characters/luna/poses/default/clothes/top/top_latex/extra.webp new file mode 100644 index 00000000..c873d7cb --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_latex/extra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0a5c3c06e3a52f0cd50c401a010437e44158564a5f86419164eb8d3d9c2d5d7 +size 4684 diff --git a/game/characters/luna/poses/default/clothes/top/top_latex/outline.webp b/game/characters/luna/poses/default/clothes/top/top_latex/outline.webp new file mode 100644 index 00000000..e9e6b177 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_latex/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:debbe3868552f398eaeba62eaa876748adfcf4756656398225542e211d8a3a0e +size 19224 diff --git a/game/characters/luna/poses/default/clothes/top/top_torn/0.webp b/game/characters/luna/poses/default/clothes/top/top_torn/0.webp new file mode 100644 index 00000000..e0950b1b --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_torn/0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9241ad13037a111ecee7d3ece28ab4201bf92014c3fd49dff0e127c3f43af2e5 +size 23700 diff --git a/game/characters/luna/poses/default/clothes/top/top_torn/1.webp b/game/characters/luna/poses/default/clothes/top/top_torn/1.webp new file mode 100644 index 00000000..6b8deac6 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_torn/1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:260e3a9f3499d68cf28512ec40b096a75407cab702b7735e42fd2a7e2095c1f7 +size 894 diff --git a/game/characters/luna/poses/default/clothes/top/top_torn/outline.webp b/game/characters/luna/poses/default/clothes/top/top_torn/outline.webp new file mode 100644 index 00000000..097e8231 --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_torn/outline.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a6c1b6f5a6175a1664535b615d837c1327bc327ea7db95202513ba3a84f73a0 +size 22794 diff --git a/game/characters/luna/poses/default/clothes/top/top_torn/skin.webp b/game/characters/luna/poses/default/clothes/top/top_torn/skin.webp new file mode 100644 index 00000000..65e04cfd --- /dev/null +++ b/game/characters/luna/poses/default/clothes/top/top_torn/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6597e4393a97db5dd713d43682ba5cefd342ecab37bc25e21213fb94c4dd38cd +size 11218 diff --git a/game/characters/luna/poses/default/cum/breasts/heavy/cum.webp b/game/characters/luna/poses/default/cum/breasts/heavy/cum.webp index 1778c73a..53d39acd 100644 --- a/game/characters/luna/poses/default/cum/breasts/heavy/cum.webp +++ b/game/characters/luna/poses/default/cum/breasts/heavy/cum.webp @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49c967935ca5ab21cb305c95fa2117fe8ae7830adb20ea0b2748da2bf98e45eb -size 21588 +oid sha256:f0022f239d0cb72861943753490fff0c577992ffa683496bd71d19268e8d40eb +size 23320 diff --git a/game/characters/luna/poses/default/cum/breasts/heavy/skin.webp b/game/characters/luna/poses/default/cum/breasts/heavy/skin.webp new file mode 100644 index 00000000..c77ed040 --- /dev/null +++ b/game/characters/luna/poses/default/cum/breasts/heavy/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d3383c6b1d9472dfd9b762838df6e970f92798105a9dcb0773daa6ac0c07f02 +size 7384 diff --git a/game/characters/luna/poses/default/cum/face/heavy/cum.webp b/game/characters/luna/poses/default/cum/face/heavy/cum.webp index 008e5b41..7d775e03 100644 --- a/game/characters/luna/poses/default/cum/face/heavy/cum.webp +++ b/game/characters/luna/poses/default/cum/face/heavy/cum.webp @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c60507756048a91c1c68492714ccd63db147a577b9597af817f59a06e49575dc -size 10552 +oid sha256:93374ea69fde3374f5b760b26226d2c7db9bc39c04b503748528926e7d78973b +size 8872 diff --git a/game/characters/luna/poses/default/cum/face/heavy/skin.webp b/game/characters/luna/poses/default/cum/face/heavy/skin.webp new file mode 100644 index 00000000..91b401a7 --- /dev/null +++ b/game/characters/luna/poses/default/cum/face/heavy/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7af83c9769f2ededcfad083843580e026e7e09e891ba1cd51a41a6cc39c76d23 +size 2256 diff --git a/game/characters/luna/poses/default/cum/face/light/cum.webp b/game/characters/luna/poses/default/cum/face/light/cum.webp index dd8c8623..fb6decc9 100644 --- a/game/characters/luna/poses/default/cum/face/light/cum.webp +++ b/game/characters/luna/poses/default/cum/face/light/cum.webp @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:baa1b5134b28f37276d0c36825bb7f0d489bcef523cbe9c36077f4f04d67e86b -size 3512 +oid sha256:d8c14134f4d998f3d1bf4c2a9f0177dbbe390c9ee35816aa26525e6cea9eac34 +size 2768 diff --git a/game/characters/luna/poses/default/cum/face/light/skin.webp b/game/characters/luna/poses/default/cum/face/light/skin.webp new file mode 100644 index 00000000..6fbb7bcc --- /dev/null +++ b/game/characters/luna/poses/default/cum/face/light/skin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4f16469f76fa22ea43a2346407a802434ae02dff4da1c40bec6af146a42feae +size 94 diff --git a/game/characters/luna/poses/default/cum/hair/heavy/cum.webp b/game/characters/luna/poses/default/cum/hair/heavy/cum.webp deleted file mode 100644 index 841e6feb..00000000 --- a/game/characters/luna/poses/default/cum/hair/heavy/cum.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1d58546a21789f5a3c53858f5fdb46c5dcbf775ee87add5ed8515de02b58cbd9 -size 19014 diff --git a/game/characters/luna/poses/default/cum/hair/heavy/default/cum.webp b/game/characters/luna/poses/default/cum/hair/heavy/default/cum.webp new file mode 100644 index 00000000..34c9238a --- /dev/null +++ b/game/characters/luna/poses/default/cum/hair/heavy/default/cum.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7ab58bee75693d52f208c0028ea9365c81dc02d13bc43c5d08e0a96cde76da2 +size 35172 diff --git a/game/characters/tonks/poses/default/clothes/robe/auror_coat/0_front.webp b/game/characters/tonks/poses/default/clothes/robe/auror_coat/0_front.webp index caa632dd..1b305c69 100644 --- a/game/characters/tonks/poses/default/clothes/robe/auror_coat/0_front.webp +++ b/game/characters/tonks/poses/default/clothes/robe/auror_coat/0_front.webp @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bfa8a64387b5f55db220e9596ba7385a26a00f1ff35f3395afdca2f70560ff47 -size 3826 +oid sha256:c49f6779fe0790bcc1867fa6577ee462501f6efe6ba214d1f222ed8f93f28a08 +size 3576 diff --git a/game/gui/logos/title.webp b/game/gui/logos/title.webp index 18981bff..16872b11 100644 --- a/game/gui/logos/title.webp +++ b/game/gui/logos/title.webp @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5480426620329bb1550417afd586d90cf76aa1721813ac806d1b8207460cba3b -size 71242 +oid sha256:a2a71593c65c4971aa09967bcb6911a56fa36ea6a413f433ef709ef6cb80e9d4 +size 32480 diff --git a/game/images.whitespace b/game/images.whitespace index db543366..cacdf480 100644 --- a/game/images.whitespace +++ b/game/images.whitespace @@ -1268,8 +1268,6 @@ characters/emotes/animated/t4.webp:29,32,31,30 characters/emotes/animated/thought_01.webp:5,5,57,50 characters/emotes/animated/thought_02.webp:5,5,57,50 characters/emotes/blank.webp:0,0,0,0 -characters/genie/angry.webp:652,370,212,165 -characters/genie/base.webp:132,190,962,2310 characters/genie/base/average_covered.webp:123,25,486,1175 characters/genie/base/average_nude.webp:123,25,478,1175 characters/genie/base/b03.webp:1,13,372,587 @@ -1283,7 +1281,6 @@ characters/genie/base/muscular_covered.webp:1,25,746,1175 characters/genie/base/muscular_nude.webp:1,25,746,1175 characters/genie/base/open.webp:0,4,598,1196 characters/genie/base/showing.webp:0,4,598,1196 -characters/genie/beard.webp:578,492,356,186 characters/genie/chibis/drinking/01.webp:52,43,395,500 characters/genie/chibis/drinking/01_day.webp:218,43,333,484 characters/genie/chibis/drinking/02.webp:52,43,398,500 @@ -1408,8 +1405,6 @@ characters/genie/chibis/working/07.webp:81,52,366,458 characters/genie/chibis/working/08.webp:81,52,366,458 characters/genie/chibis/working/09.webp:81,52,366,458 characters/genie/dick_1.webp:368,772,204,202 -characters/genie/grin.webp:634,370,230,179 -characters/genie/hair.webp:576,75,102,131 characters/genie/mage.webp:2,0,411,510 characters/genie/mage10.webp:0,0,403,510 characters/genie/mage11.webp:2,0,415,510 @@ -1426,16 +1421,6 @@ characters/genie/mage6.webp:0,0,415,510 characters/genie/mage7.webp:0,0,419,510 characters/genie/mage8.webp:0,0,414,510 characters/genie/mage9.webp:2,0,409,510 -characters/genie/open.webp:642,370,222,191 -characters/genie/outfits/robes.webp:57,123,1071,2377 -characters/genie/outfits/robes_beard.webp:578,492,356,186 -characters/genie/outfits/santa.webp:223,127,879,2373 -characters/genie/outfits/santa_beard_angry.webp:574,396,302,467 -characters/genie/outfits/santa_beard_base.webp:574,395,302,468 -characters/genie/outfits/santa_beard_grin.webp:574,403,302,460 -characters/genie/outfits/santa_beard_open.webp:574,385,302,478 -characters/genie/outfits/santa_beard_smile.webp:574,402,302,461 -characters/genie/smile.webp:580,370,297,242 characters/hermione/chibis/01.webp:0,9,175,169 characters/hermione/chibis/Wand/aka16.webp:18,6,80,122 characters/hermione/chibis/Wand/aka17.webp:18,6,80,122 @@ -3620,39 +3605,8 @@ characters/hooch/poses/default/face/pupils/downR/expression.webp:437,368,75,17 characters/hooch/poses/default/face/pupils/mid/expression.webp:435,364,75,18 characters/hooch/poses/default/face/pupils/stare/expression.webp:432,364,71,18 characters/hooch/poses/default/face/pupils/up/expression.webp:431,362,70,17 -characters/luna/chibis/inspect_body_lean/breast_nude_01.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/breast_nude_02.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/breast_nude_03.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/breast_nude_04.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/breast_nude_05.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/breast_nude_06.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/idle_nude_01.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/idle_nude_02.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/vag_nude_01.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/vag_nude_02.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/vag_nude_03.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/vag_nude_04.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/vag_nude_05.webp:92,54,367,456 -characters/luna/chibis/inspect_body_lean/vag_nude_06.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/Idle_clothed_01.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/breast_nude_01.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/breast_nude_02.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/breast_nude_03.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/breast_nude_04.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/breast_nude_05.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/breast_nude_06.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/idle_clothed_02.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/idle_nude_01.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/idle_nude_02.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/vag_nude_01.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/vag_nude_02.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/vag_nude_03.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/vag_nude_04.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/vag_nude_05.webp:92,54,367,456 -characters/luna/chibis/inspect_body_stand/vag_nude_06.webp:92,54,367,456 characters/luna/chibis/luna_stand.webp:20,2,180,345 characters/luna/chibis/luna_stand_topless.webp:20,2,180,345 -characters/luna/chibis/sit_on_lap.webp:193,76,159,320 characters/luna/chibis/walk/l_walk_a_01.webp:20,2,180,342 characters/luna/chibis/walk/l_walk_a_02.webp:17,2,183,345 characters/luna/chibis/walk/l_walk_a_03.webp:12,2,188,342 @@ -3677,7 +3631,7 @@ characters/luna/chibis/walk/walk_topless_03.webp:12,2,188,342 characters/luna/chibis/walk/walk_topless_04.webp:20,2,180,342 characters/luna/chibis/walk/walk_topless_05.webp:20,2,180,340 characters/luna/chibis/walk/walk_topless_06.webp:20,2,180,342 -characters/luna/poses/default/bodyparts/frame/default/skin.webp:292,290,605,910 +characters/luna/poses/default/bodyparts/frame/default/skin.webp:292,289,605,911 characters/luna/poses/default/clothes/accessory/bracelets/0.webp:373,611,38,57 characters/luna/poses/default/clothes/accessory/bracelets/1.webp:381,648,43,31 characters/luna/poses/default/clothes/accessory/bracelets/2.webp:374,636,38,58 @@ -3687,11 +3641,19 @@ characters/luna/poses/default/clothes/accessory/hair_bug/0.webp:0,0,1010,1010 characters/luna/poses/default/clothes/accessory/hair_bug/outline.webp:688,352,80,77 characters/luna/poses/default/clothes/accessory/harley_quinn_strap/0.webp:538,969,127,107 characters/luna/poses/default/clothes/accessory/harley_quinn_strap/outline.webp:536,968,129,108 +characters/luna/poses/default/clothes/accessory/leash/0.webp:316,482,344,189 +characters/luna/poses/default/clothes/accessory/leash/extra.webp:581,490,28,12 +characters/luna/poses/default/clothes/accessory/leash/outline.webp:314,480,349,194 +characters/luna/poses/default/clothes/accessory/leash/skin.webp:317,481,342,190 characters/luna/poses/default/clothes/accessory/lionhead/outline_back.webp:448,140,389,681 characters/luna/poses/default/clothes/accessory/lionhead/outline_zorder_252.webp:324,220,474,975 characters/luna/poses/default/clothes/accessory/mistletoe/0.webp:515,862,44,37 characters/luna/poses/default/clothes/accessory/mistletoe/extra.webp:515,874,42,38 characters/luna/poses/default/clothes/accessory/mistletoe/outline.webp:514,861,46,53 +characters/luna/poses/default/clothes/accessory/onepiece_harness/0.webp:492,476,175,453 +characters/luna/poses/default/clothes/accessory/onepiece_harness/1.webp:492,497,133,354 +characters/luna/poses/default/clothes/accessory/onepiece_harness/outline.webp:491,474,178,463 +characters/luna/poses/default/clothes/accessory/onepiece_harness/skin.webp:491,479,171,455 characters/luna/poses/default/clothes/accessory/pin_radish/0.webp:588,606,38,34 characters/luna/poses/default/clothes/accessory/pin_radish/1.webp:594,606,32,23 characters/luna/poses/default/clothes/accessory/pin_radish/extra.webp:591,622,23,15 @@ -3761,11 +3723,30 @@ characters/luna/poses/default/clothes/bottom/school_skirt_4/lift_skirt/outline.w characters/luna/poses/default/clothes/bottom/school_skirt_4/lift_skirt/skin.webp:456,808,226,133 characters/luna/poses/default/clothes/bottom/school_skirt_4/mask.webp:0,0,1010,1200 characters/luna/poses/default/clothes/bottom/school_skirt_4/outline.webp:445,764,255,159 +characters/luna/poses/default/clothes/bottom/shorts/0.webp:447,798,255,164 +characters/luna/poses/default/clothes/bottom/shorts/1.webp:471,822,229,112 +characters/luna/poses/default/clothes/bottom/shorts/2.webp:447,782,256,180 +characters/luna/poses/default/clothes/bottom/shorts/outline.webp:446,781,258,184 +characters/luna/poses/default/clothes/bottom/shorts/skin.webp:455,777,234,195 +characters/luna/poses/default/clothes/bottom/shorts_latex/0.webp:453,784,248,416 +characters/luna/poses/default/clothes/bottom/shorts_latex/1.webp:453,786,220,409 +characters/luna/poses/default/clothes/bottom/shorts_latex/extra.webp:453,786,193,336 +characters/luna/poses/default/clothes/bottom/shorts_latex/outline.webp:450,781,253,419 +characters/luna/poses/default/clothes/bottom/skirt_plaid/0.webp:443,802,270,123 +characters/luna/poses/default/clothes/bottom/skirt_plaid/1.webp:447,803,262,133 +characters/luna/poses/default/clothes/bottom/skirt_plaid/2.webp:483,779,170,44 +characters/luna/poses/default/clothes/bottom/skirt_plaid/3.webp:538,803,12,13 +characters/luna/poses/default/clothes/bottom/skirt_plaid/outline.webp:440,776,275,151 +characters/luna/poses/default/clothes/bottom/skirt_plaid/skin.webp:449,766,270,170 characters/luna/poses/default/clothes/bottom/summer_shorts/0.webp:448,829,255,127 characters/luna/poses/default/clothes/bottom/summer_shorts/1.webp:448,914,255,42 characters/luna/poses/default/clothes/bottom/summer_shorts/2.webp:532,865,13,11 characters/luna/poses/default/clothes/bottom/summer_shorts/outline.webp:447,827,257,131 characters/luna/poses/default/clothes/bottom/summer_shorts/skin.webp:456,832,234,126 +characters/luna/poses/default/clothes/bottom/trousers_latex/0.webp:453,784,248,416 +characters/luna/poses/default/clothes/bottom/trousers_latex/1.webp:453,786,209,414 +characters/luna/poses/default/clothes/bottom/trousers_latex/extra.webp:453,786,193,395 +characters/luna/poses/default/clothes/bottom/trousers_latex/outline.webp:450,781,253,419 characters/luna/poses/default/clothes/bra/basic_bra_1/0.webp:450,509,225,203 characters/luna/poses/default/clothes/bra/basic_bra_1/1.webp:465,603,177,87 characters/luna/poses/default/clothes/bra/basic_bra_1/2.webp:519,664,38,35 @@ -3788,14 +3769,25 @@ characters/luna/poses/default/clothes/bra/lace_bra_1/skin.webp:461,612,202,101 characters/luna/poses/default/clothes/earrings/bauble_earring/0.webp:632,429,45,45 characters/luna/poses/default/clothes/earrings/bauble_earring/extra.webp:632,424,46,50 characters/luna/poses/default/clothes/earrings/bauble_earring/outline.webp:631,412,47,63 +characters/luna/poses/default/clothes/earrings/ear_studs/0.webp:667,376,6,13 +characters/luna/poses/default/clothes/earrings/ear_studs/extra.webp:667,376,5,12 +characters/luna/poses/default/clothes/earrings/ear_studs/outline.webp:666,375,8,15 +characters/luna/poses/default/clothes/earrings/earring_moon/0.webp:647,434,14,18 +characters/luna/poses/default/clothes/earrings/earring_moon/1.webp:647,436,15,21 +characters/luna/poses/default/clothes/earrings/earring_moon/2.webp:652,412,4,23 +characters/luna/poses/default/clothes/earrings/earring_moon/extra.webp:647,433,10,18 +characters/luna/poses/default/clothes/earrings/earring_moon/outline.webp:646,411,17,47 characters/luna/poses/default/clothes/glasses/spectrespecs/0.webp:493,345,153,66 characters/luna/poses/default/clothes/glasses/spectrespecs/1.webp:493,348,152,62 characters/luna/poses/default/clothes/glasses/spectrespecs/extra.webp:507,347,125,40 characters/luna/poses/default/clothes/glasses/spectrespecs/outline.webp:492,344,155,68 -characters/luna/poses/default/clothes/glasses/sunglasses_2/0.webp:500,359,129,50 -characters/luna/poses/default/clothes/glasses/sunglasses_2/1.webp:507,362,116,44 -characters/luna/poses/default/clothes/glasses/sunglasses_2/extra.webp:499,359,124,44 -characters/luna/poses/default/clothes/glasses/sunglasses_2/outline.webp:499,358,130,52 +characters/luna/poses/default/clothes/glasses/sunglasses_2/0_back.webp:511,371,9,8 +characters/luna/poses/default/clothes/glasses/sunglasses_2/0_zorder_150.webp:511,355,118,50 +characters/luna/poses/default/clothes/glasses/sunglasses_2/1_zorder_150.webp:508,351,172,58 +characters/luna/poses/default/clothes/glasses/sunglasses_2/extra_zorder_150.webp:508,351,144,54 +characters/luna/poses/default/clothes/glasses/sunglasses_2/outline_back.webp:509,368,12,12 +characters/luna/poses/default/clothes/glasses/sunglasses_2/outline_zorder_150.webp:507,351,174,59 +characters/luna/poses/default/clothes/glasses/sunglasses_2/skin.webp:518,354,120,57 characters/luna/poses/default/clothes/gloves/harley_quinn/0.webp:292,582,597,81 characters/luna/poses/default/clothes/gloves/harley_quinn/extra.webp:293,583,553,53 characters/luna/poses/default/clothes/gloves/harley_quinn/outline.webp:292,581,599,82 @@ -3834,9 +3826,20 @@ characters/luna/poses/default/clothes/headgear/bunny_hat_1/default/1.webp:458,12 characters/luna/poses/default/clothes/headgear/bunny_hat_1/default/outline.webp:456,142,313,160 characters/luna/poses/default/clothes/headgear/flight_attendant/default/0.webp:565,225,127,74 characters/luna/poses/default/clothes/headgear/flight_attendant/default/outline.webp:564,224,130,76 +characters/luna/poses/default/clothes/makeup/nail_polish/0.webp:326,583,551,40 +characters/luna/poses/default/clothes/makeup/nail_polish/extra.webp:327,583,550,38 characters/luna/poses/default/clothes/neckwear/chocolate_frog/0.webp:0,0,1010,1010 characters/luna/poses/default/clothes/neckwear/chocolate_frog/outline.webp:553,484,106,100 characters/luna/poses/default/clothes/neckwear/chocolate_frog/skin.webp:557,496,100,90 +characters/luna/poses/default/clothes/neckwear/choker_1/0.webp:585,475,68,24 +characters/luna/poses/default/clothes/neckwear/choker_1/outline.webp:523,474,132,71 +characters/luna/poses/default/clothes/neckwear/collar/0.webp:579,476,88,38 +characters/luna/poses/default/clothes/neckwear/collar/1.webp:612,497,13,5 +characters/luna/poses/default/clothes/neckwear/collar/outline.webp:577,474,92,42 +characters/luna/poses/default/clothes/neckwear/collar_1/0.webp:584,482,76,27 +characters/luna/poses/default/clothes/neckwear/collar_1/extra.webp:581,490,28,12 +characters/luna/poses/default/clothes/neckwear/collar_1/outline.webp:578,480,85,30 +characters/luna/poses/default/clothes/neckwear/collar_1/skin.webp:589,481,70,32 characters/luna/poses/default/clothes/neckwear/cork/0.webp:554,574,30,37 characters/luna/poses/default/clothes/neckwear/cork/1.webp:567,497,96,79 characters/luna/poses/default/clothes/neckwear/cork/outline.webp:552,494,113,119 @@ -3876,12 +3879,114 @@ characters/luna/poses/default/clothes/panties/lace_panties_2/0.webp:469,825,210, characters/luna/poses/default/clothes/panties/lace_panties_2/1.webp:508,871,91,62 characters/luna/poses/default/clothes/panties/lace_panties_2/2.webp:493,862,113,25 characters/luna/poses/default/clothes/panties/lace_panties_2/outline.webp:468,823,212,114 +characters/luna/poses/default/clothes/panties/panties_cumslut/0.webp:490,772,165,139 +characters/luna/poses/default/clothes/panties/panties_cumslut/1.webp:501,753,130,35 +characters/luna/poses/default/clothes/panties/panties_cumslut/extra.webp:510,827,72,56 +characters/luna/poses/default/clothes/panties/panties_cumslut/outline.webp:487,750,173,186 +characters/luna/poses/default/clothes/panties/panties_cumslut/skin.webp:521,820,126,104 +characters/luna/poses/default/clothes/piercing/clit_stud/0.webp:546,923,5,5 +characters/luna/poses/default/clothes/piercing/clit_stud/extra.webp:547,923,3,4 +characters/luna/poses/default/clothes/piercing/clit_stud/outline.webp:546,922,7,7 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/0.webp:605,350,13,13 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/extra.webp:608,350,6,4 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/angry/outline.webp:605,349,13,14 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/0.webp:605,347,13,13 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/extra.webp:607,348,7,3 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/annoyed/outline.webp:605,346,13,14 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/0.webp:605,348,12,13 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/extra.webp:607,348,7,4 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/base/outline.webp:604,347,14,14 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/0.webp:604,355,13,13 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/extra.webp:606,355,8,5 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/low/outline.webp:604,354,13,14 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/0.webp:605,341,13,14 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/extra.webp:608,342,7,4 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/raised/outline.webp:605,340,13,15 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/0.webp:604,360,13,13 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/extra.webp:607,360,6,4 +characters/luna/poses/default/clothes/piercing/eyebrow_ring/worried/outline.webp:604,359,13,14 +characters/luna/poses/default/clothes/piercing/mouth_stud/angry/0.webp:562,457,7,6 +characters/luna/poses/default/clothes/piercing/mouth_stud/angry/extra.webp:562,457,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/angry/outline.webp:561,456,8,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/0.webp:547,449,7,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/extra.webp:548,450,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/annoyed/outline.webp:546,448,9,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/base/0.webp:557,453,7,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/base/extra.webp:558,454,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/base/outline.webp:556,452,9,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/clench/0.webp:561,462,7,6 +characters/luna/poses/default/clothes/piercing/mouth_stud/clench/extra.webp:561,462,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/clench/outline.webp:560,461,8,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/0.webp:566,458,7,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/extra.webp:566,459,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/crooked_smile/outline.webp:565,457,8,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/0.webp:570,463,8,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/extra.webp:571,464,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/disgust/outline.webp:570,462,8,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/full/0.webp:560,453,7,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/full/extra.webp:561,454,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/full/outline.webp:559,452,9,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/grin/0.webp:559,456,7,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/grin/extra.webp:560,457,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/grin/outline.webp:558,455,9,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/mad/0.webp:562,463,7,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/mad/extra.webp:562,464,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/mad/outline.webp:561,462,8,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/normal/0.webp:557,453,7,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/normal/extra.webp:558,454,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/normal/outline.webp:556,452,9,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/open/0.webp:565,463,7,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/open/extra.webp:566,464,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/open/outline.webp:564,462,9,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/0.webp:565,463,7,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/extra.webp:566,464,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/open_tongue/outline.webp:564,462,9,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/0.webp:567,480,7,6 +characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/extra.webp:568,480,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/open_wide_tongue/outline.webp:566,479,9,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/scream/0.webp:564,478,8,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/scream/extra.webp:566,479,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/scream/outline.webp:564,477,8,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/shock/0.webp:563,469,8,6 +characters/luna/poses/default/clothes/piercing/mouth_stud/shock/extra.webp:564,469,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/shock/outline.webp:563,468,8,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/silly/0.webp:564,462,7,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/silly/extra.webp:565,463,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/silly/outline.webp:563,461,9,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/smile/0.webp:567,465,7,6 +characters/luna/poses/default/clothes/piercing/mouth_stud/smile/extra.webp:567,465,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/smile/outline.webp:566,464,8,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/soft/0.webp:559,459,7,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/soft/extra.webp:560,460,4,4 +characters/luna/poses/default/clothes/piercing/mouth_stud/soft/outline.webp:558,458,9,8 +characters/luna/poses/default/clothes/piercing/mouth_stud/upset/0.webp:554,452,8,7 +characters/luna/poses/default/clothes/piercing/mouth_stud/upset/extra.webp:556,453,3,3 +characters/luna/poses/default/clothes/piercing/mouth_stud/upset/outline.webp:554,451,8,8 +characters/luna/poses/default/clothes/piercing/nipple_rings/0.webp:449,642,153,36 +characters/luna/poses/default/clothes/piercing/nipple_rings/extra.webp:451,652,147,28 +characters/luna/poses/default/clothes/piercing/nipple_rings/outline.webp:448,641,155,37 +characters/luna/poses/default/clothes/piercing/nipple_studs/0.webp:455,641,147,25 +characters/luna/poses/default/clothes/piercing/nipple_studs/extra.webp:454,641,146,23 +characters/luna/poses/default/clothes/piercing/nipple_studs/outline.webp:453,640,150,27 +characters/luna/poses/default/clothes/piercing/nose_ring/0.webp:542,419,17,10 +characters/luna/poses/default/clothes/piercing/nose_ring/extra.webp:546,422,9,8 +characters/luna/poses/default/clothes/piercing/nose_ring/outline.webp:542,418,18,12 characters/luna/poses/default/clothes/pubes/arrow/0.webp:525,872,39,51 characters/luna/poses/default/clothes/pubes/arrow/outline.webp:525,874,34,44 characters/luna/poses/default/clothes/pubes/beaver/0.webp:514,853,64,88 characters/luna/poses/default/clothes/pubes/beaver/outline.webp:516,857,58,87 characters/luna/poses/default/clothes/pubes/stuble/0.webp:524,894,49,32 characters/luna/poses/default/clothes/pubes/unshaved/0.webp:526,891,42,41 +characters/luna/poses/default/clothes/robe/coat_flasher/0_zorder_142.webp:340,466,367,734 +characters/luna/poses/default/clothes/robe/coat_flasher/0_zorder_152.webp:632,487,207,713 +characters/luna/poses/default/clothes/robe/coat_flasher/1_zorder_143.webp:366,691,13,15 +characters/luna/poses/default/clothes/robe/coat_flasher/1_zorder_153.webp:671,606,145,98 +characters/luna/poses/default/clothes/robe/coat_flasher/2_zorder_-1.webp:596,714,127,486 +characters/luna/poses/default/clothes/robe/coat_flasher/2_zorder_101.webp:420,654,102,546 +characters/luna/poses/default/clothes/robe/coat_flasher/extra.webp:415,633,311,567 +characters/luna/poses/default/clothes/robe/coat_flasher/outline_zorder_145.webp:337,465,372,735 +characters/luna/poses/default/clothes/robe/coat_flasher/outline_zorder_155.webp:629,482,212,718 +characters/luna/poses/default/clothes/robe/coat_flasher/skin.webp:453,456,213,227 characters/luna/poses/default/clothes/robe/harley_quinn/0.webp:397,453,391,349 characters/luna/poses/default/clothes/robe/harley_quinn/1.webp:460,452,172,349 characters/luna/poses/default/clothes/robe/harley_quinn/2.webp:463,474,196,315 @@ -3923,6 +4028,12 @@ characters/luna/poses/default/clothes/robe/robe_school_4/outline.webp:439,565,35 characters/luna/poses/default/clothes/robe/robe_school_4/outline_back.webp:392,673,366,527 characters/luna/poses/default/clothes/stockings/harley_quinn/0.webp:454,770,242,430 characters/luna/poses/default/clothes/stockings/harley_quinn/outline.webp:450,767,251,433 +characters/luna/poses/default/clothes/stockings/leggings_bimbo/0.webp:462,969,211,87 +characters/luna/poses/default/clothes/stockings/leggings_bimbo/1.webp:473,1013,178,187 +characters/luna/poses/default/clothes/stockings/leggings_bimbo/2.webp:470,1002,183,52 +characters/luna/poses/default/clothes/stockings/leggings_bimbo/3.webp:474,1004,182,52 +characters/luna/poses/default/clothes/stockings/leggings_bimbo/outline.webp:460,966,215,234 +characters/luna/poses/default/clothes/stockings/leggings_bimbo/skin.webp:471,971,191,47 characters/luna/poses/default/clothes/stockings/muggle_knee_socks/0.webp:490,1058,157,142 characters/luna/poses/default/clothes/stockings/muggle_knee_socks/1.webp:479,1037,161,58 characters/luna/poses/default/clothes/stockings/muggle_knee_socks/2.webp:469,1006,193,62 @@ -4001,6 +4112,10 @@ characters/luna/poses/default/clothes/top/police_shirt/0.webp:448,481,285,345 characters/luna/poses/default/clothes/top/police_shirt/1.webp:513,633,34,133 characters/luna/poses/default/clothes/top/police_shirt/outline.webp:447,480,286,291 characters/luna/poses/default/clothes/top/police_shirt/skin.webp:502,531,125,246 +characters/luna/poses/default/clothes/top/short_tanktop/0.webp:449,510,243,238 +characters/luna/poses/default/clothes/top/short_tanktop/1.webp:478,608,151,123 +characters/luna/poses/default/clothes/top/short_tanktop/outline.webp:447,506,249,245 +characters/luna/poses/default/clothes/top/short_tanktop/skin.webp:504,525,189,228 characters/luna/poses/default/clothes/top/summer_top_1/0.webp:450,512,235,250 characters/luna/poses/default/clothes/top/summer_top_1/outline.webp:449,510,237,254 characters/luna/poses/default/clothes/top/summer_top_1/skin.webp:500,517,191,251 @@ -4012,6 +4127,15 @@ characters/luna/poses/default/clothes/top/swimsuit_1/1.webp:521,511,158,191 characters/luna/poses/default/clothes/top/swimsuit_1/extra.webp:447,595,213,338 characters/luna/poses/default/clothes/top/swimsuit_1/outline.webp:447,509,233,426 characters/luna/poses/default/clothes/top/swimsuit_1/skin.webp:474,525,202,344 +characters/luna/poses/default/clothes/top/top_cumslut/0.webp:450,497,300,249 +characters/luna/poses/default/clothes/top/top_cumslut/1.webp:570,497,102,37 +characters/luna/poses/default/clothes/top/top_cumslut/extra.webp:494,580,145,70 +characters/luna/poses/default/clothes/top/top_cumslut/outline.webp:446,494,305,254 +characters/luna/poses/default/clothes/top/top_cumslut/skin.webp:502,524,189,229 +characters/luna/poses/default/clothes/top/top_latex/0.webp:394,484,392,306 +characters/luna/poses/default/clothes/top/top_latex/1.webp:394,502,391,287 +characters/luna/poses/default/clothes/top/top_latex/extra.webp:420,519,328,231 +characters/luna/poses/default/clothes/top/top_latex/outline.webp:392,477,396,316 characters/luna/poses/default/clothes/top/top_school_1/0.webp:501,461,244,205 characters/luna/poses/default/clothes/top/top_school_1/0_front.webp:614,461,54,103 characters/luna/poses/default/clothes/top/top_school_1/1.webp:447,507,257,348 @@ -4074,15 +4198,22 @@ characters/luna/poses/default/clothes/top/top_school_vest/2.webp:469,503,236,352 characters/luna/poses/default/clothes/top/top_school_vest/extra.webp:447,527,223,314 characters/luna/poses/default/clothes/top/top_school_vest/outline.webp:445,500,262,356 characters/luna/poses/default/clothes/top/top_school_vest/skin.webp:534,532,60,140 +characters/luna/poses/default/clothes/top/top_torn/0.webp:432,476,313,317 +characters/luna/poses/default/clothes/top/top_torn/1.webp:474,528,86,164 +characters/luna/poses/default/clothes/top/top_torn/outline.webp:429,470,318,326 +characters/luna/poses/default/clothes/top/top_torn/skin.webp:438,508,304,274 characters/luna/poses/default/cum/body/heavy/cum.webp:458,472,255,320 characters/luna/poses/default/cum/body/light/cum.webp:532,510,181,282 -characters/luna/poses/default/cum/breasts/heavy/cum.webp:448,538,194,169 +characters/luna/poses/default/cum/breasts/heavy/cum.webp:447,535,222,165 +characters/luna/poses/default/cum/breasts/heavy/skin.webp:450,537,220,152 characters/luna/poses/default/cum/breasts/light/cum.webp:532,552,89,149 characters/luna/poses/default/cum/crotch/heavy/cum.webp:459,769,181,252 characters/luna/poses/default/cum/crotch/light/cum.webp:501,769,73,154 -characters/luna/poses/default/cum/face/heavy/cum.webp:512,382,126,132 -characters/luna/poses/default/cum/face/light/cum.webp:597,393,33,72 -characters/luna/poses/default/cum/hair/heavy/cum.webp:478,247,190,169 +characters/luna/poses/default/cum/face/heavy/cum.webp:517,321,102,166 +characters/luna/poses/default/cum/face/heavy/skin.webp:521,322,99,127 +characters/luna/poses/default/cum/face/light/cum.webp:528,438,68,49 +characters/luna/poses/default/cum/face/light/skin.webp:0,0,0,0 +characters/luna/poses/default/cum/hair/heavy/default/cum.webp:470,247,274,271 characters/luna/poses/default/cum/hair/light/cum.webp:496,263,117,100 characters/luna/poses/default/cum/legs/heavy/cum.webp:457,860,215,340 characters/luna/poses/default/cum/legs/light/cum.webp:510,860,146,191 @@ -5114,7 +5245,7 @@ characters/tonks/poses/default/clothes/pubes/stuble/0.webp:508,909,78,48 characters/tonks/poses/default/clothes/pubes/unshaved/0.webp:514,908,63,53 characters/tonks/poses/default/clothes/robe/auror_coat/0.webp:396,499,449,701 characters/tonks/poses/default/clothes/robe/auror_coat/0_back.webp:454,496,218,704 -characters/tonks/poses/default/clothes/robe/auror_coat/0_front.webp:694,736,128,148 +characters/tonks/poses/default/clothes/robe/auror_coat/0_front.webp:694,737,128,147 characters/tonks/poses/default/clothes/robe/auror_coat/1.webp:472,608,202,461 characters/tonks/poses/default/clothes/robe/auror_coat/armfix.webp:432,826,295,101 characters/tonks/poses/default/clothes/robe/auror_coat/outline.webp:394,497,452,703 @@ -5410,7 +5541,7 @@ gui/icon.webp:101,1,430,630 gui/logos/discord.webp:20,13,112,128 gui/logos/patreon.webp:20,22,110,106 gui/logos/silverstudiogames.webp:0,0,325,46 -gui/logos/title.webp:0,0,339,242 +gui/logos/title.webp:0,17,339,190 gui/main_menu/00.webp:0,0,2160,1200 gui/main_menu/00b.webp:0,0,2160,1200 gui/main_menu/01.webp:0,0,2160,1200 @@ -6687,11 +6818,502 @@ images/CG/her_vibrators/public/hermione/her_vibrators_public_vibrator_upper_egg. images/CG/her_vibrators/public/hermione/her_vibrators_public_vibrator_upper_tape.webp:1022,366,209,124 images/CG/her_vibrators/public/hermione/her_vibrators_public_wetness_legs.webp:1078,732,97,137 images/CG/her_vibrators/public/hermione/her_vibrators_public_wetness_vagina.webp:1104,680,55,78 +images/CG/lun_blowjob/personal/lun_blowjob_personal_background.webp:0,0,4320,2400 +images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_arm_idle.webp:1034,0,991,837 +images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_back.webp:1333,1272,602,914 +images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_front.webp:0,0,3256,2400 +images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_trousers.webp:1294,1241,2009,1159 +images/CG/lun_blowjob/personal/lun_blowjob_personal_tabletop.webp:596,0,3724,1147 +images/CG/lun_blowjob/personal/lun_blowjob_personal_vignette.webp:0,0,4320,2400 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame0.webp:1883,996,107,342 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame1.webp:1874,682,253,677 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame2.webp:1864,575,343,821 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame3.webp:1852,314,529,1090 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame4.webp:1852,189,740,1215 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame4_alt.webp:1852,189,740,1215 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_precum.webp:1879,1309,31,34 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_base.webp:1612,431,2148,1969 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_cheeks_blush.webp:1920,861,532,405 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_angry.webp:1957,735,506,237 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_base.webp:1956,730,515,153 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_raised.webp:1953,688,518,195 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_shocked.webp:1956,710,515,165 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_worried.webp:1962,735,502,162 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_down.webp:1968,792,463,200 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_down_hearts.webp:1968,792,463,200 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_left.webp:1968,792,463,200 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_right.webp:1968,792,463,200 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_squint.webp:1968,792,463,200 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_squint_hearts.webp:1968,792,463,200 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_stare.webp:1968,792,463,200 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_stare_hearts.webp:1968,792,463,200 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_up.webp:1968,792,463,200 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_up_hearts.webp:1968,792,463,200 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_closed.webp:1967,813,458,185 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_down.webp:1970,811,460,175 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_down_hearts.webp:1970,811,460,175 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_left.webp:1970,811,460,175 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_right.webp:1970,811,460,179 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_squint.webp:1970,811,460,175 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_squint_hearts.webp:1970,811,460,175 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_stare.webp:1970,811,460,175 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_stare_hearts.webp:1970,811,460,175 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_up.webp:1970,811,460,175 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_up_hearts.webp:1970,811,460,175 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_down.webp:1967,780,465,225 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_down_hearts.webp:1967,780,465,225 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_left.webp:1967,780,465,225 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_right.webp:1967,780,465,225 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_squint.webp:1967,780,465,225 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_squint_hearts.webp:1967,780,465,225 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_stare.webp:1967,780,465,225 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_stare_hearts.webp:1967,780,465,225 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_up.webp:1967,780,465,225 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_up_hearts.webp:1967,780,465,225 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_hair.webp:1745,235,1285,1345 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_annoyed.webp:1972,1116,124,95 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_base.webp:2007,1133,215,85 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_full.webp:1880,956,465,340 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_grin.webp:1996,1122,209,126 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_neutral.webp:2003,1131,145,85 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open.webp:2019,1133,131,149 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_cum.webp:2009,1128,148,151 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_spit.webp:2019,1133,131,149 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_tongue.webp:2019,1133,131,166 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_soft.webp:2003,1143,141,115 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_spitting.webp:1950,1146,186,164 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_swallow.webp:2000,1131,148,109 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down.webp:1466,1478,663,665 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down_shadow.webp:2073,1530,154,519 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down_speedlines.webp:1459,1477,669,694 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up.webp:1530,1334,763,756 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up_shadow.webp:1826,1450,410,646 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up_speedlines.webp:1529,1334,731,709 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis.webp:1514,1299,505,880 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis_shadow.webp:1976,1425,165,469 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis_spit.webp:1541,1299,480,843 +images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_throatpie_frame0.webp:1577,1058,515,954 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_base.webp:1617,565,2134,1835 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_angry.webp:1872,970,450,211 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_base.webp:1859,993,481,187 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_raised.webp:1848,961,483,204 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_shocked.webp:1868,982,460,153 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_worried.webp:1845,1011,489,197 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_down.webp:1866,1066,425,223 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_down_hearts.webp:1866,1066,425,223 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_left.webp:1866,1066,425,213 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_right.webp:1866,1066,425,213 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_squint.webp:1866,1066,425,213 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_squint_hearts.webp:1866,1066,425,213 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_stare.webp:1866,1066,425,213 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_stare_hearts.webp:1866,1066,425,213 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_up.webp:1866,1066,425,213 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_up_hearts.webp:1866,1066,425,213 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_closed.webp:1862,1067,437,223 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_down.webp:1870,1081,420,208 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_down_hearts.webp:1870,1081,420,208 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_left.webp:1870,1081,420,197 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_right.webp:1870,1081,420,197 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_squint.webp:1870,1081,420,197 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_squint_hearts.webp:1870,1081,420,197 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_stare.webp:1870,1081,420,197 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_stare_hearts.webp:1870,1081,420,197 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_up.webp:1870,1081,420,197 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_up_hearts.webp:1870,1081,420,197 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_down.webp:1863,1052,429,241 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_down_hearts.webp:1863,1052,429,241 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_left.webp:1863,1052,429,239 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_right.webp:1863,1052,429,239 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_squint.webp:1863,1052,429,239 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_squint_hearts.webp:1863,1052,429,239 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_stare.webp:1863,1052,429,239 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_stare_hearts.webp:1863,1052,429,239 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_up.webp:1863,1052,429,239 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_up_hearts.webp:1863,1052,429,239 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_hair.webp:1665,398,1246,1427 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_mouth_kiss.webp:1978,1419,146,210 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_mouth_lick.webp:1964,1400,160,245 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_stroke_down.webp:1481,1657,634,540 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_penis.webp:1518,1450,592,727 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_penis_spit.webp:1636,1451,476,675 +images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_throatpie_frame0.webp:1640,1165,720,866 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_genie_arm_petting.webp:1041,637,1186,1039 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_base.webp:1535,743,2238,1657 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_angry.webp:1715,1123,452,145 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_base.webp:1705,1147,480,117 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_raised.webp:1692,1118,481,133 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_shocked.webp:1713,1131,450,90 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_worried.webp:1695,1160,491,134 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_down.webp:1711,1222,430,180 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_down_hearts.webp:1711,1222,430,180 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_left.webp:1711,1222,430,173 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_right.webp:1711,1222,430,173 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_squint.webp:1711,1222,430,173 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_squint_hearts.webp:1711,1222,430,173 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_stare.webp:1711,1222,430,173 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_stare_hearts.webp:1711,1222,430,173 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_up.webp:1711,1222,430,173 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_up_hearts.webp:1711,1222,430,173 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_closed.webp:1715,1218,445,176 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_down.webp:1717,1232,426,175 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_down_hearts.webp:1717,1232,426,175 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_left.webp:1717,1232,426,161 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_right.webp:1717,1232,426,161 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_squint.webp:1717,1232,426,161 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_squint_hearts.webp:1717,1232,426,161 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_stare.webp:1717,1232,426,161 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_stare_hearts.webp:1717,1232,426,161 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_up.webp:1717,1232,426,161 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_up_hearts.webp:1717,1232,426,161 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_down.webp:1708,1210,433,215 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_down_hearts.webp:1708,1210,433,215 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_left.webp:1708,1210,433,197 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_right.webp:1708,1210,433,197 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_squint.webp:1708,1210,433,197 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_squint_hearts.webp:1708,1210,433,197 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_stare.webp:1708,1210,433,197 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_stare_hearts.webp:1708,1210,433,197 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_up.webp:1708,1210,433,197 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_up_hearts.webp:1708,1210,433,197 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_hair.webp:1491,457,1169,1536 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_mouth_suck.webp:1809,1553,216,356 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_stroke_down.webp:1420,1781,600,554 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_penis.webp:1494,1431,557,749 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_penis_spit.webp:1548,1561,509,582 +images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_throatpie_frame0.webp:1621,1351,578,680 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_genie_arm_petting.webp:1117,727,953,1065 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_base.webp:1466,780,2314,1620 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_angry.webp:1567,1222,482,128 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_base.webp:1559,1243,510,100 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_raised.webp:1545,1220,510,109 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_shocked.webp:1567,1200,475,114 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_worried.webp:1552,1248,519,132 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_down.webp:1564,1328,462,175 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_down_hearts.webp:1564,1328,462,175 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_left.webp:1564,1328,462,167 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_right.webp:1564,1328,462,167 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_squint.webp:1564,1328,462,167 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_squint_hearts.webp:1564,1328,462,167 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_stare.webp:1564,1328,462,167 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_stare_hearts.webp:1564,1328,462,167 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_up.webp:1564,1328,462,167 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_up_hearts.webp:1564,1328,462,167 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_closed.webp:1570,1324,477,169 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_down.webp:1570,1338,458,172 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_down_hearts.webp:1570,1338,458,172 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_left.webp:1570,1338,458,155 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_right.webp:1570,1338,458,155 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_squint.webp:1570,1338,458,155 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_squint_hearts.webp:1570,1338,458,155 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_stare.webp:1570,1338,458,155 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_stare_hearts.webp:1570,1338,458,155 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_up.webp:1570,1338,458,155 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_up_hearts.webp:1570,1338,458,155 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_down.webp:1560,1315,467,213 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_down_hearts.webp:1560,1315,467,213 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_left.webp:1560,1315,467,194 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_right.webp:1560,1315,467,194 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_squint.webp:1560,1315,467,194 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_squint_hearts.webp:1560,1315,467,194 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_stare.webp:1560,1315,467,194 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_stare_hearts.webp:1560,1315,467,194 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_up.webp:1560,1315,467,194 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_up_hearts.webp:1560,1315,467,194 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_hair.webp:1374,523,1187,1540 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_mouth_suck.webp:1725,1681,233,181 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_stroke_down.webp:1420,1791,592,545 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_penis.webp:1494,1431,557,749 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_penis_spit.webp:1548,1657,509,486 +images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_throatpie_frame0.webp:1578,1467,535,564 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_genie_arm_petting.webp:966,892,991,967 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_base.webp:1304,975,2464,1425 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_angry.webp:1411,1442,515,116 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_base.webp:1402,1452,545,98 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_raised.webp:1387,1442,545,104 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_shocked.webp:1410,1408,508,132 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_worried.webp:1395,1463,555,126 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_down.webp:1407,1551,495,172 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_down_hearts.webp:1407,1551,495,172 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_left.webp:1407,1551,495,161 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_right.webp:1407,1551,495,161 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_squint.webp:1407,1551,495,161 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_squint_hearts.webp:1407,1551,495,161 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_stare.webp:1407,1551,495,161 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_stare_hearts.webp:1407,1551,495,161 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_up.webp:1407,1551,495,161 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_up_hearts.webp:1407,1551,495,161 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_closed.webp:1414,1548,511,163 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_down.webp:1414,1562,490,167 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_down_hearts.webp:1414,1562,490,167 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_left.webp:1414,1562,490,149 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_right.webp:1414,1562,490,149 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_squint.webp:1414,1562,490,149 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_squint_hearts.webp:1414,1562,490,149 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_stare.webp:1414,1562,490,149 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_stare_hearts.webp:1414,1562,490,149 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_up.webp:1414,1562,490,149 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_up_hearts.webp:1414,1562,490,149 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_down.webp:1403,1539,500,209 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_down_hearts.webp:1403,1539,500,209 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_left.webp:1403,1539,500,187 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_right.webp:1403,1539,500,187 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_squint.webp:1403,1539,500,187 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_squint_hearts.webp:1403,1539,500,187 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_stare.webp:1403,1539,500,187 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_stare_hearts.webp:1403,1539,500,187 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_up.webp:1403,1539,500,187 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_up_hearts.webp:1403,1539,500,187 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_frothing.webp:1564,1922,256,134 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_hair.webp:1203,708,1274,1585 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_mouth_suck.webp:1582,1911,250,179 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_stroke_down.webp:1264,2016,628,384 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_penis.webp:1494,1431,557,749 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_penis_spit.webp:1548,1657,332,486 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_throatpie_frame0.webp:1589,1832,236,222 +images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_throatpie_frame1.webp:1427,1711,554,379 +images/CG/lun_grind/lun_grind_background.webp:0,0,2880,3840 +images/CG/lun_grind/lun_grind_body_grind.webp:0,0,2783,3840 +images/CG/lun_grind/lun_grind_body_idle.webp:0,0,2766,3798 +images/CG/lun_grind/lun_grind_body_spread.webp:0,0,2783,3840 +images/CG/lun_grind/lun_grind_cumshot_frame0.webp:1409,3138,76,47 +images/CG/lun_grind/lun_grind_cumshot_frame1.webp:1402,3047,92,140 +images/CG/lun_grind/lun_grind_cumshot_frame2.webp:1346,2791,151,394 +images/CG/lun_grind/lun_grind_cumshot_frame3.webp:1322,2716,187,491 +images/CG/lun_grind/lun_grind_cumshot_frame4.webp:1245,2547,383,689 +images/CG/lun_grind/lun_grind_cumshot_frame5.webp:1245,2547,383,689 +images/CG/lun_grind/lun_grind_penis_grind_frame0.webp:1225,3123,435,717 +images/CG/lun_grind/lun_grind_penis_grind_frame1.webp:1223,3145,427,695 +images/CG/lun_grind/lun_grind_penis_tease_frame0.webp:1248,3391,400,449 +images/CG/lun_grind/lun_grind_penis_tease_frame1.webp:1251,3367,392,473 +images/CG/lun_inspect/genie/alt/lun_inspect_genie_arm_right_touch_pussy_frame0.webp:1753,1261,377,547 +images/CG/lun_inspect/genie/alt/lun_inspect_genie_arm_right_touch_pussy_frame1.webp:1751,1259,382,544 +images/CG/lun_inspect/genie/lun_inspect_genie_arm_both_grab_tits.webp:1737,405,1619,1387 +images/CG/lun_inspect/genie/lun_inspect_genie_arm_both_touch_tits.webp:1675,405,1681,1387 +images/CG/lun_inspect/genie/lun_inspect_genie_arm_left_grab.webp:2034,405,1322,1387 +images/CG/lun_inspect/genie/lun_inspect_genie_arm_left_hold.webp:2343,412,1204,1444 +images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_idle.webp:1509,406,994,625 +images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame0.webp:1753,1261,377,717 +images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame1.webp:1751,1259,382,722 +images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_touch_mound.webp:1772,406,731,1351 +images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_touch_tit.webp:1675,406,828,903 +images/CG/lun_inspect/genie/lun_inspect_genie_body.webp:955,400,2187,1760 +images/CG/lun_inspect/genie/lun_inspect_genie_clothes.webp:2445,0,915,1785 +images/CG/lun_inspect/genie/lun_inspect_genie_clothes_back.webp:931,1128,2224,1032 +images/CG/lun_inspect/genie/lun_inspect_genie_clothes_hood.webp:2453,148,368,659 +images/CG/lun_inspect/genie/lun_inspect_genie_head.webp:2411,0,577,748 +images/CG/lun_inspect/lun_inspect_background.webp:0,0,3840,2160 +images/CG/lun_inspect/lun_inspect_background_breastfix.webp:1623,1010,185,361 +images/CG/lun_inspect/lun_inspect_chair.webp:0,0,3436,2160 +images/CG/lun_inspect/lun_inspect_vignette.webp:0,0,3840,2160 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_arm_idle.webp:1212,1274,676,349 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_body.webp:1285,64,1576,2096 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_bra.webp:1700,693,816,664 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_blush.webp:2036,208,321,205 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_breath.webp:1930,348,258,236 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyebrows_base.webp:2067,131,258,85 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_right.webp:2058,184,269,99 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_up.webp:2058,184,269,99 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_up_hearts.webp:2058,184,269,99 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open.webp:2074,352,136,136 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open_ahegao.webp:2070,353,145,182 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open_ahegao_spit.webp:2070,353,145,206 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_hair_back.webp:1878,166,800,679 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_hair_front.webp:1941,0,649,613 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_shadow.webp:1260,728,1544,1432 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_shirt.webp:1699,517,1099,1137 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_skirt.webp:1579,1465,899,618 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_stockings.webp:1286,1734,702,426 +images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_legs_together_luna_arm_idle.webp:1212,1274,676,349 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_arm_idle.webp:1212,1274,676,349 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_arm_masturbate.webp:1791,1280,322,675 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_body.webp:1143,64,1718,2096 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_bra.webp:1700,693,816,664 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_blush.webp:2036,208,321,205 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_breath.webp:1930,348,258,236 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyebrows_base.webp:2067,131,258,85 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_right.webp:2058,184,269,99 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_up.webp:2058,184,269,99 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_up_hearts.webp:2058,184,269,99 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open.webp:2074,352,136,136 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open_ahegao.webp:2070,353,145,182 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open_ahegao_spit.webp:2070,353,145,206 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_moist.webp:1835,1849,238,169 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_squirt.webp:1888,1847,141,46 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_wet.webp:1804,1849,269,199 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_hair_back.webp:1878,166,800,679 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_hair_front.webp:1941,0,649,613 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_panties.webp:1818,1500,643,467 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_shadow.webp:1112,728,1692,1432 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_shirt.webp:1699,517,1099,1137 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_skirt.webp:1577,1465,1016,695 +images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_stockings.webp:1143,1729,1352,431 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_arm_idle.webp:1212,1274,676,349 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_arm_masturbate.webp:1791,1280,322,675 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_body.webp:1285,101,1576,2059 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_bra.webp:1700,693,816,664 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_bra_grab.webp:1757,691,742,606 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_shirt.webp:1699,517,1099,1137 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_skirt.webp:1579,1465,899,618 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_stockings.webp:1286,1734,702,426 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_blush.webp:2036,365,302,207 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_angry.webp:2015,286,296,50 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_base.webp:2014,277,299,56 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_raised.webp:2008,270,305,53 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_shocked.webp:2011,264,299,82 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_worried.webp:2019,277,292,67 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_down.webp:2026,319,274,81 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_left.webp:2026,319,274,81 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_right.webp:2026,319,274,81 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_squint.webp:2026,319,274,81 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_stare.webp:2026,319,274,81 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_up.webp:2026,319,274,81 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_closed.webp:2036,328,266,74 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_down.webp:2031,328,269,71 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_left.webp:2031,328,269,71 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_right.webp:2031,328,269,71 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_squint.webp:2031,328,269,72 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_stare.webp:2031,328,269,71 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_up.webp:2031,328,269,71 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_down.webp:2024,315,277,91 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_left.webp:2024,315,277,91 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_right.webp:2024,315,277,91 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_squint.webp:2024,315,277,91 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_stare.webp:2024,315,277,91 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_up.webp:2024,315,277,91 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_annoyed.webp:2087,514,78,45 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_base.webp:2098,515,127,44 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_grin.webp:2090,508,126,69 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_neutral.webp:2096,515,87,44 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_neutral_cum.webp:2094,515,89,50 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open.webp:2103,513,86,83 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_cum.webp:2098,509,94,86 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_spit.webp:2103,513,86,83 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_tongue.webp:2104,513,85,95 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_tongue_spit.webp:2104,513,85,96 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_soft.webp:2098,520,87,66 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_spit.webp:2084,521,96,105 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_swallow.webp:2014,432,280,160 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_hair_back.webp:1928,224,699,608 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_hair_front.webp:1927,0,680,798 +images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_shadow.webp:1260,728,1544,1432 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_arm_idle.webp:1212,1274,676,349 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_arm_masturbate.webp:1791,1280,322,675 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_body.webp:1143,101,1718,2059 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_bra.webp:1700,693,816,664 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_bra_grab.webp:1757,691,742,606 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_panties.webp:1818,1500,643,467 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_shirt.webp:1699,517,1099,1137 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_skirt.webp:1577,1465,1016,695 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_stockings.webp:1143,1729,1352,431 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_blush.webp:2036,365,302,207 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_angry.webp:2015,286,296,50 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_base.webp:2014,277,299,56 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_raised.webp:2008,270,305,53 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_shocked.webp:2011,264,299,82 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_worried.webp:2019,277,292,67 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_down.webp:2026,319,274,81 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_left.webp:2026,319,274,81 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_right.webp:2026,319,274,81 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_squint.webp:2026,319,274,81 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_stare.webp:2026,319,274,81 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_up.webp:2026,319,274,81 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_closed.webp:2036,328,266,74 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_down.webp:2031,328,269,71 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_left.webp:2031,328,269,71 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_right.webp:2031,328,269,71 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_squint.webp:2031,328,269,72 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_stare.webp:2031,328,269,71 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_up.webp:2031,328,269,71 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_down.webp:2024,315,277,91 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_left.webp:2024,315,277,91 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_right.webp:2024,315,277,91 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_squint.webp:2024,315,277,91 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_stare.webp:2024,315,277,91 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_up.webp:2024,315,277,91 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_annoyed.webp:2087,514,78,45 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_base.webp:2098,515,127,44 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_grin.webp:2090,508,126,69 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_neutral.webp:2096,515,87,44 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_neutral_cum.webp:2094,515,89,50 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open.webp:2103,513,86,83 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_cum.webp:2098,509,94,86 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_spit.webp:2103,513,86,83 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_tongue.webp:2104,513,85,95 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_tongue_spit.webp:2104,513,85,96 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_soft.webp:2098,520,87,66 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_spit.webp:2084,521,96,105 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_swallow.webp:2014,432,280,160 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_moist.webp:1835,1849,238,169 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_squirt.webp:1888,1847,141,46 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_wet.webp:1804,1849,269,199 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_hair_back.webp:1928,224,699,608 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_hair_front.webp:1927,0,680,798 +images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_shadow.webp:1112,728,1692,1432 images/CG/lun_intro/bg.webp:0,0,2160,1200 images/CG/lun_intro/day_overlay.webp:0,0,3840,2160 images/CG/lun_intro/luna.webp:917,277,1149,891 images/CG/lun_intro/luna_naked.webp:917,277,1138,892 images/CG/lun_intro/night_overlay.webp:0,0,3840,2160 +images/CG/lun_talk/lun_talk_background.webp:0,0,3840,2160 +images/CG/lun_talk/lun_talk_book.webp:374,1202,923,678 +images/CG/lun_talk/luna/lun_talk_arm_left_hold_leg_variant_legs_side.webp:2080,765,395,829 +images/CG/lun_talk/luna/lun_talk_arm_left_hold_leg_variant_legs_up.webp:2080,765,573,592 +images/CG/lun_talk/luna/lun_talk_arm_left_masturbate_variant_legs_side.webp:1673,765,572,1135 +images/CG/lun_talk/luna/lun_talk_arm_left_masturbate_variant_legs_up.webp:1673,765,582,1135 +images/CG/lun_talk/luna/lun_talk_arm_left_rest.webp:2077,765,927,630 +images/CG/lun_talk/luna/lun_talk_arm_left_spread_variant_legs_up.webp:1755,765,491,1115 +images/CG/lun_talk/luna/lun_talk_arm_right_hold_leg_variant_legs_side.webp:1300,765,325,926 +images/CG/lun_talk/luna/lun_talk_arm_right_hold_leg_variant_legs_up.webp:1072,765,553,664 +images/CG/lun_talk/luna/lun_talk_arm_right_rest.webp:831,764,792,629 +images/CG/lun_talk/luna/lun_talk_arms_grab_chest.webp:1434,765,832,587 +images/CG/lun_talk/luna/lun_talk_blush_base.webp:1663,444,331,208 +images/CG/lun_talk/luna/lun_talk_blush_heavy.webp:1663,442,331,211 +images/CG/lun_talk/luna/lun_talk_chest.webp:1516,849,665,476 +images/CG/lun_talk/luna/lun_talk_cum_chest.webp:1813,965,65,372 +images/CG/lun_talk/luna/lun_talk_cum_chin.webp:1756,683,98,255 +images/CG/lun_talk/luna/lun_talk_cum_desk.webp:1714,1890,130,268 +images/CG/lun_talk/luna/lun_talk_cum_hand.webp:1773,1643,129,209 +images/CG/lun_talk/luna/lun_talk_cum_stomach.webp:1815,1337,67,234 +images/CG/lun_talk/luna/lun_talk_eyebrows_base.webp:1668,411,288,47 +images/CG/lun_talk/luna/lun_talk_eyebrows_raised.webp:1668,390,284,68 +images/CG/lun_talk/luna/lun_talk_eyebrows_surprised.webp:1672,395,281,50 +images/CG/lun_talk/luna/lun_talk_eyebrows_upset.webp:1673,395,276,56 +images/CG/lun_talk/luna/lun_talk_eyebrows_worried.webp:1668,415,282,46 +images/CG/lun_talk/luna/lun_talk_eyes_base_ahegao.webp:1674,448,280,76 +images/CG/lun_talk/luna/lun_talk_eyes_base_down.webp:1674,448,280,77 +images/CG/lun_talk/luna/lun_talk_eyes_base_left.webp:1674,448,280,76 +images/CG/lun_talk/luna/lun_talk_eyes_base_right.webp:1674,448,280,76 +images/CG/lun_talk/luna/lun_talk_eyes_base_stare.webp:1674,448,280,76 +images/CG/lun_talk/luna/lun_talk_eyes_base_up.webp:1674,448,280,76 +images/CG/lun_talk/luna/lun_talk_eyes_closed.webp:1678,445,269,79 +images/CG/lun_talk/luna/lun_talk_eyes_narrow_ahegao.webp:1675,450,279,69 +images/CG/lun_talk/luna/lun_talk_eyes_narrow_down.webp:1675,450,279,69 +images/CG/lun_talk/luna/lun_talk_eyes_narrow_left.webp:1675,450,279,69 +images/CG/lun_talk/luna/lun_talk_eyes_narrow_right.webp:1675,450,279,69 +images/CG/lun_talk/luna/lun_talk_eyes_narrow_stare.webp:1675,450,279,69 +images/CG/lun_talk/luna/lun_talk_eyes_narrow_up.webp:1675,450,279,69 +images/CG/lun_talk/luna/lun_talk_eyes_wide_ahegao.webp:1675,441,279,87 +images/CG/lun_talk/luna/lun_talk_eyes_wide_down.webp:1675,441,279,87 +images/CG/lun_talk/luna/lun_talk_eyes_wide_left.webp:1675,441,279,87 +images/CG/lun_talk/luna/lun_talk_eyes_wide_right.webp:1675,441,279,87 +images/CG/lun_talk/luna/lun_talk_eyes_wide_stare.webp:1675,441,279,87 +images/CG/lun_talk/luna/lun_talk_eyes_wide_up.webp:1675,441,279,87 +images/CG/lun_talk/luna/lun_talk_hair.webp:1469,107,766,675 +images/CG/lun_talk/luna/lun_talk_legs_down.webp:1086,1329,1491,831 +images/CG/lun_talk/luna/lun_talk_legs_side.webp:368,812,2978,1182 +images/CG/lun_talk/luna/lun_talk_legs_up.webp:499,6,2630,1991 +images/CG/lun_talk/luna/lun_talk_mouth_ahegao.webp:1773,620,109,118 +images/CG/lun_talk/luna/lun_talk_mouth_base.webp:1769,635,118,50 +images/CG/lun_talk/luna/lun_talk_mouth_open.webp:1775,627,109,75 +images/CG/lun_talk/luna/lun_talk_mouth_open_wide.webp:1774,618,108,94 +images/CG/lun_talk/luna/lun_talk_mouth_pout.webp:1796,629,85,54 +images/CG/lun_talk/luna/lun_talk_mouth_smile.webp:1766,634,126,62 +images/CG/lun_talk/luna/lun_talk_mouth_soft.webp:1777,633,97,59 +images/CG/lun_talk/luna/lun_talk_mouth_timid.webp:1784,636,85,50 +images/CG/lun_talk/luna/lun_talk_torso.webp:1468,239,767,1235 +images/CG/lun_talk/luna/lun_talk_wet_legs_down.webp:1783,1706,116,181 +images/CG/lun_talk/luna/lun_talk_wet_legs_side.webp:1782,1701,121,186 +images/CG/lun_talk/luna/lun_talk_wet_legs_up.webp:1782,1701,121,186 images/animation/00.webp:0,0,0,0 images/animation/23_jerking_off_sperm.webp:28,124,213,131 images/animation/Bouquet0.webp:16,34,72,89 @@ -6875,6 +7497,20 @@ images/cardgame/t1/susan/sus_schoolgirl_v1.webp:0,0,320,480 images/cardgame/t1/susan/sus_schoolgirl_v2.webp:0,0,320,480 images/cardgame/t1/susan/sus_schoolgirl_v3.webp:0,0,320,480 images/cardgame/t1/susan/sus_schoolgirl_v4.webp:0,0,320,480 +images/characters/genie/genie_bbase.webp:132,190,962,2310 +images/characters/genie/genie_face_angry.webp:652,370,212,165 +images/characters/genie/genie_face_grin.webp:634,370,230,179 +images/characters/genie/genie_face_open.webp:642,370,222,191 +images/characters/genie/genie_face_smile.webp:580,370,297,242 +images/characters/genie/genie_goatee.webp:578,492,356,186 +images/characters/genie/genie_outfit_nude.webp:576,75,102,131 +images/characters/genie/genie_outfit_robes.webp:57,123,1071,2377 +images/characters/genie/genie_outfit_santa.webp:223,127,879,2373 +images/characters/genie/genie_santa_beard_angry.webp:574,396,302,467 +images/characters/genie/genie_santa_beard_base.webp:574,395,302,468 +images/characters/genie/genie_santa_beard_grin.webp:574,403,302,460 +images/characters/genie/genie_santa_beard_open.webp:574,385,302,478 +images/characters/genie/genie_santa_beard_smile.webp:574,402,302,461 images/dueling/damage/0.webp:31,135,44,33 images/dueling/damage/100.webp:6,93,62,26 images/dueling/damage/200.webp:8,93,59,25 @@ -7021,7 +7657,7 @@ images/logo/patreon.webp:0,0,296,56 images/logo/patreon_hover.webp:0,0,329,62 images/logo/renpy.webp:8,0,134,225 images/logo/silverstudiogames.webp:0,0,325,46 -images/logo/title.webp:27,1,353,258 +images/logo/title.webp:0,17,339,190 images/magic/heal01.webp:23,434,346,166 images/magic/heal02.webp:23,416,351,184 images/magic/heal03.webp:21,397,353,203 @@ -7308,11 +7944,9 @@ images/rooms/main_room/weather/cloud_small.webp:4,9,155,30 images/rooms/main_room/weather/day_cloud_01.webp:5,9,33,10 images/rooms/main_room/weather/day_cloud_02.webp:9,14,74,20 images/rooms/main_room/weather/day_cloud_03.webp:6,7,48,12 -images/rooms/main_room/weather/lightning_01.webp:0,0,0,0 images/rooms/main_room/weather/lightning_02.webp:51,14,100,156 images/rooms/main_room/weather/lightning_03.webp:26,50,89,145 images/rooms/main_room/weather/lightning_04.webp:0,0,155,230 -images/rooms/main_room/weather/lightning_05.webp:0,0,0,0 images/rooms/main_room/weather/lightning_06.webp:0,0,155,230 images/rooms/main_room/weather/night_cloud_01.webp:5,9,33,10 images/rooms/main_room/weather/night_cloud_02.webp:9,14,74,20 @@ -7669,6 +8303,7 @@ interface/desk/watch/sun.webp:0,0,67,67 interface/desk/watch_hover.webp:1,0,241,155 interface/desk/work.webp:0,0,259,431 interface/desk/work_hover.webp:0,0,276,464 +interface/frames/cg_frame.webp:0,0,199,3840 interface/frames/gold/arrow.webp:68,26,32,48 interface/frames/gold/arrow2.webp:0,0,32,48 interface/frames/gold/arrow_up.webp:0,0,48,32 diff --git a/game/images/CG/.gitignore b/game/images/CG/.gitignore new file mode 100644 index 00000000..598c0299 --- /dev/null +++ b/game/images/CG/.gitignore @@ -0,0 +1,2 @@ +# It is an error to include PNG files for CGs. Use WEBP format instead. +*.png diff --git a/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_background.webp b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_background.webp new file mode 100644 index 00000000..3548f699 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_background.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48134a051a0fdbb124a4000b38490c9b43d20f45d83c86f80b9a9d376217de73 +size 452440 diff --git a/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_arm_idle.webp b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_arm_idle.webp new file mode 100644 index 00000000..8a902219 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_arm_idle.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ebed13775e904728b8f62ec42a85e6caa2ecd1a106fae56a3380fc9e727924c +size 122134 diff --git a/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_back.webp b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_back.webp new file mode 100644 index 00000000..eb200cf7 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_back.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ea782528e9488cb1300b2e72bafd17b5ee2eaeb51373bbfaab1c138020409f6 +size 38428 diff --git a/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_front.webp b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_front.webp new file mode 100644 index 00000000..be308dc4 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_front.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a732f0c3df96ccfd3740884887ff8aaa17965a054ccce3b0ad27f4a9ddbe6dea +size 285252 diff --git a/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_trousers.webp b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_trousers.webp new file mode 100644 index 00000000..71cb9e8f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_genie_trousers.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28fafb257d385977039ec6550c0d8dff065eb3edb610ac955936124bdee0958d +size 124870 diff --git a/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_tabletop.webp b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_tabletop.webp new file mode 100644 index 00000000..61b7ae11 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_tabletop.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c79ae4c8a4cd92a55ed9183298074516aa4011c13dccc6dd839cb3ec65e879bb +size 325488 diff --git a/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_vignette.webp b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_vignette.webp new file mode 100644 index 00000000..46dfd56f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/lun_blowjob_personal_vignette.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:360e9e2343d0bdf691fb055160cdc1658bddaad3be1488e39aff697a2153b954 +size 54436 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame0.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame0.webp new file mode 100644 index 00000000..d9f3c76d --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5721e8d6b1e59a92d705ad6b41635241de4e2f678848553717d35229e93881fa +size 22690 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame1.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame1.webp new file mode 100644 index 00000000..433491bc --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02b08357fc84e4c3024c5ad18457d8f4a8c9b210877acc544cb6b974feae7905 +size 43666 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame2.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame2.webp new file mode 100644 index 00000000..5d19a36a --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame2.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f364417b8aff7011184057b3a42f2d627f28abfe0a5af40394a5f28b1a57891f +size 50454 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame3.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame3.webp new file mode 100644 index 00000000..a344ceb2 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame3.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:159baa1f05a434f48128926b11135111827ed7e2ae86ac9948ad17e01522418d +size 86202 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame4.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame4.webp new file mode 100644 index 00000000..f8f18435 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame4.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c4e891091a4dc1a0ed827a47ba188e686e4dc3ea61ee3cc88817a3cbfe870d1 +size 92690 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame4_alt.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame4_alt.webp new file mode 100644 index 00000000..ed0aba55 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_frame4_alt.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98bce07bb5cb44718320f3c86f87e862ea03fa5af9747914d9491dadad6fc67a +size 83204 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_precum.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_precum.webp new file mode 100644 index 00000000..e4e83edb --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_cum_precum.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3a1a65018148ddb7d838f7ab1647cf05639c967c9300b16b98ff86edef174e4 +size 4692 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_base.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_base.webp new file mode 100644 index 00000000..ca70e55f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3ec70e89cd09f4f82da3259964cd6b9e1663d72fac3f82d166167cf87aff04a +size 462256 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_cheeks_blush.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_cheeks_blush.webp new file mode 100644 index 00000000..fa9f18f6 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_cheeks_blush.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf4b4745ac1aa594fba642a5c48bd343a89fbe919190172bd5ea40f47378b20c +size 67568 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_angry.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_angry.webp new file mode 100644 index 00000000..3e5c4d5c --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_angry.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0e8fb1119cf57c91a4934bd81d5f16f53ac128df90e447b4d0aefab0045943c +size 29996 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_base.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_base.webp new file mode 100644 index 00000000..dc528f84 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e769d879b793b320b413050536b8176447c89042061dd340a48ab5d0ff66a9a0 +size 23288 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_raised.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_raised.webp new file mode 100644 index 00000000..a9f86fb0 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_raised.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7d70751b9cb2342347f3634ae974fdbe6836d96ac0fdc1a2d33d56f80b5fb8f +size 24244 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_shocked.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_shocked.webp new file mode 100644 index 00000000..642619ae --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_shocked.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9b311ea3fe206fb045324759617b4aa269624665053bf5ce3c5043b5e3393a0d +size 25668 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_worried.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_worried.webp new file mode 100644 index 00000000..65c2d853 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyebrows_worried.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3172fc823579f5e0f263fdf55fd704fff1a2f091258b3e604019b8be8a490f8 +size 28218 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_down.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_down.webp new file mode 100644 index 00000000..72a96dab --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13fc3e79247cb022341d7929e8fe812f356863bdb2b5d30d0b5e908d95245d91 +size 26494 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_down_hearts.webp new file mode 100644 index 00000000..2aebe87d --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b94c622b9500a12a14aaf9e8fdd6cabaae9ecc976e5fcf64315bb0bd8e6bf1d +size 28046 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_left.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_left.webp new file mode 100644 index 00000000..9293e92f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81e94ae01d5fd925ba8eb4a10fb055c1ec495ad96b943e4fede0b3a655a71781 +size 28134 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_right.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_right.webp new file mode 100644 index 00000000..227a2663 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbf85e9308209df5103afabc672556190697b5e183e15928787caa9d640c8167 +size 28416 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_squint.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_squint.webp new file mode 100644 index 00000000..bf428f96 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fff3d61d83fb7aba72485ed721a8f8e912f17fc0e0a7bf4efb5f9fd8bc28eae7 +size 27334 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_squint_hearts.webp new file mode 100644 index 00000000..517eaefa --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ec89b937d31644b8dfcd7776db2619d4e8ba6ea00e2a9d3f2e34a499db47e6c +size 29030 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_stare.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_stare.webp new file mode 100644 index 00000000..4cf92124 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4eedce3033accd6c61412a5378be6d3448aa16def841d699ba5114430a07ce7b +size 28276 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_stare_hearts.webp new file mode 100644 index 00000000..db35300e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7ae96e80536ac2b54c01f1adf6446710b822bae6fe6a0ab06835ebb61ffc364 +size 30330 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_up.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_up.webp new file mode 100644 index 00000000..64485d7d --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37f235892470e30c45344c2171f6c35a125e683a6c977f048b259bba53bafc7e +size 27480 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_up_hearts.webp new file mode 100644 index 00000000..8b4752fe --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_base_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de9fb319d62e656cfcee4189d61ef2ff2e41f033678ae77e226f5ed124c9a1ae +size 29416 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_closed.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_closed.webp new file mode 100644 index 00000000..5eedc499 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_closed.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fb75921133da191ed1aa19bdd72f4f91a0c02fea4ce67571abfebf1c6eac710 +size 20620 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_down.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_down.webp new file mode 100644 index 00000000..35b36d40 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29437b4c77d505c05cb2c1f7c16f173c7f014e87d8a3568cde046d4f243ce591 +size 22550 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_down_hearts.webp new file mode 100644 index 00000000..63cfc769 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:249d39bb77c7932002607841cc429342021ba1ea0096dc7523e8492092e986ad +size 24012 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_left.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_left.webp new file mode 100644 index 00000000..da93a883 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc5dae90492028ef278363e56caf24f208a0946eea1266751250304b113ae9e2 +size 25864 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_right.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_right.webp new file mode 100644 index 00000000..3b2a4f93 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3113b3c1afd3c7c3b730eb9c01bd7accbfb9903f74c124e851c13668f5f9b0f7 +size 23890 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_squint.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_squint.webp new file mode 100644 index 00000000..bcddf0e3 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92aab2c78c968c2ea545231eab58c81fe4f12fc7f07b7aba28490104e8ad9a94 +size 23754 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_squint_hearts.webp new file mode 100644 index 00000000..411b9002 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67f7576a9a6b9f7266c07f4b5820c372b3af16039c47d63913c9aeea22b23321 +size 25320 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_stare.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_stare.webp new file mode 100644 index 00000000..541f9600 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d98925398002af7089dbf5d4bd58d0636c8b8a5752020767036fc07bb04e48b0 +size 25468 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_stare_hearts.webp new file mode 100644 index 00000000..8dc7d6ad --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bbc60cc3f5a1eb0348055557e9cd15284b41fdf94e4fd6cebdf4dd9ac4b3ce3 +size 27446 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_up.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_up.webp new file mode 100644 index 00000000..01c68275 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b973046b761bd39d52118d0a7026b2f3ff26d31c3f264f602452b0a75a0b8e45 +size 25610 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_up_hearts.webp new file mode 100644 index 00000000..7633d195 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_halflid_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c616377fee557ed63dad86f9e25082b298febd22b5a51682fa6a673c828b72ab +size 27708 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_down.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_down.webp new file mode 100644 index 00000000..341f01bb --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc04f069d757e1d1517c4aaab7d98a7434659e49dc15100289537905a45f44bf +size 29006 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_down_hearts.webp new file mode 100644 index 00000000..43c4ebc9 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fc8d11409572565b2758b71ba66bc4c228e17431c25ee3b5dbf831775399a4e +size 30710 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_left.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_left.webp new file mode 100644 index 00000000..14e565c4 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b7e8414a086380a5c566f7529cc1ba99ad105b90a71f5b11190566d04e10154 +size 30748 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_right.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_right.webp new file mode 100644 index 00000000..833c5ce0 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7071efb7faa561a4db3ca55f1dac9e879ada31a2f32fd2d49cfebf30b88c4d3 +size 30382 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_squint.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_squint.webp new file mode 100644 index 00000000..6905cc68 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:134da640c7da178c3b8e6725ead2d84cdf249db51b8ecac957532b29261af580 +size 29218 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_squint_hearts.webp new file mode 100644 index 00000000..0cfd1d24 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7dc873dbaade5bb5988ad6795c38871103a33ecbf61cfaad332ee63665ef6f9 +size 30800 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_stare.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_stare.webp new file mode 100644 index 00000000..e27094c4 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77b7b226fae3f25c0991cf971cb129fee45e401f13799cd1e3498f2c38e7f1cf +size 30160 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_stare_hearts.webp new file mode 100644 index 00000000..3211527e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb0e4eef749850db1223f424ab03f80b32185c976013b65bc8917f5da2484060 +size 32208 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_up.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_up.webp new file mode 100644 index 00000000..4c9c9d1e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7160b6679b36500fd4612b5febc033a05daf91a3e3dbb52edaa11acd9d9375b +size 29512 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_up_hearts.webp new file mode 100644 index 00000000..394ccf59 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_eyes_wide_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e74cbf2f0bd61b6458f7eb03a193d68270bc0220e05ae76f5ad835e7e7e5fa8e +size 31510 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_hair.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_hair.webp new file mode 100644 index 00000000..a3ec0761 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_hair.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e39c88c61c0b33cedd5ea8991eff07c421d485f30c0421fd667df1700c7bf1c +size 391968 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_annoyed.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_annoyed.webp new file mode 100644 index 00000000..9355ce56 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_annoyed.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d258b5656172d569387c25ba5601e350710be903903c6072af7da8053c3d156 +size 10418 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_base.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_base.webp new file mode 100644 index 00000000..4c8d7c6e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7188ffe1329962c4aa7543d5a9ca67769dc4cb0df36124bc445678bd5673a8d7 +size 11228 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_full.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_full.webp new file mode 100644 index 00000000..5f741fba --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_full.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bac5830e8f7b8c8a2f431e96012cc18d95e9c216efdabb46f91ec1b0bbb8db02 +size 32714 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_grin.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_grin.webp new file mode 100644 index 00000000..abe25d70 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_grin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24468945b698e062e3c0f996eabdfe41ca8e3473174591f4dcba5951976b11b0 +size 19470 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_neutral.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_neutral.webp new file mode 100644 index 00000000..4d85d31b --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_neutral.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c401c3d37b779fbee909432a614d5df200836b1e78f3219966d5a94b54e4c9e +size 11306 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open.webp new file mode 100644 index 00000000..43c03175 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4738f2bbc1f7b05747a4ef4f573980da173455802e2993d9e0025a6c5be1530 +size 18788 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_cum.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_cum.webp new file mode 100644 index 00000000..312b7d5e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_cum.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7930756b4c2dd7ac89dd3676e5ed4ba158f7b5433e73bfc75bab632329c9dd7e +size 25480 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_spit.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_spit.webp new file mode 100644 index 00000000..d67eb945 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25e14951f090cd2bada2e8c0e8c29a883d67de674ce2ec96a81b0e7f679da2ee +size 19834 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_tongue.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_tongue.webp new file mode 100644 index 00000000..caf6a4ec --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_open_tongue.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6c5372b82a89ff6a472b586c36139131a34298355acfb3cb25d3dd50ffa97c9 +size 22082 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_soft.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_soft.webp new file mode 100644 index 00000000..1c3c823e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_soft.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5f4f76c5137715c29e4129d6c0edf364c6b9b546def78c65534dfd4b7a37870 +size 14536 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_spitting.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_spitting.webp new file mode 100644 index 00000000..7626cca4 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_spitting.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bba7d4211d71dd0869c7e83955a56313c88ba4b28f4128de364d33c6aca32a1 +size 19282 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_swallow.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_swallow.webp new file mode 100644 index 00000000..06757e3e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_mouth_swallow.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0244f2c72802ad3e2e2bf31e11005a722a86955aac9927358c22748826788bd6 +size 14858 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down.webp new file mode 100644 index 00000000..4a1ece0f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca0183914608c5a084dcaf7c448c3e0373dc1ece39a2fd4910a629e185785bc6 +size 86234 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down_shadow.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down_shadow.webp new file mode 100644 index 00000000..9801bacb --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down_shadow.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b18330fd2547f83bf21604f4998a0ac42e0e6632ebc35335eb364689b00df08a +size 11106 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down_speedlines.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down_speedlines.webp new file mode 100644 index 00000000..84ff235a --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_down_speedlines.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a2003ab2f6dd8cd19f80b5d8e6e05636bccafec8cfa2ee3bf8449692f688b2a +size 30686 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up.webp new file mode 100644 index 00000000..b983b546 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1db4504148d04eb63cea7e16b27625fd87f46efcf800c07fbd90c2ffd5bab64 +size 100762 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up_shadow.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up_shadow.webp new file mode 100644 index 00000000..197b165e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up_shadow.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b57277718e9a2bcb6b95cd13fe754d9085bb9ebff76eb3c9078f9a1d1e348c2d +size 19336 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up_speedlines.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up_speedlines.webp new file mode 100644 index 00000000..4ea02da4 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_luna_stroke_up_speedlines.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e8a78bfa1de64d2d552e28b54d8ed4b6e99421580078ee2274c6ef7d41319e2 +size 36370 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis.webp new file mode 100644 index 00000000..4ca90358 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e76eb1e432423e5734ff7f537d9bb4a9d0679dea6ee436c0ead544aea0574c2 +size 56110 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis_shadow.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis_shadow.webp new file mode 100644 index 00000000..1bb711de --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis_shadow.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f0291981f6e29f240d54c6882de8f3dcc545e67e82bf950b910cd1a1ceb026f +size 12810 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis_spit.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis_spit.webp new file mode 100644 index 00000000..65056844 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_penis_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66765976ad5e9e0fbc1ef22b5eac91ea82ce9d2cbd06d80f84660590d480dc7d +size 28612 diff --git a/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_throatpie_frame0.webp b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_throatpie_frame0.webp new file mode 100644 index 00000000..bf950028 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose1/lun_blowjob_personal_pose1_throatpie_frame0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d88ba94adf24ecb3d5e47234b9b9a787cb870f706b2098fe402617a54bd1cd8c +size 112254 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_base.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_base.webp new file mode 100644 index 00000000..1a8cac92 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca91372967b5bf58f40415c054b81d6eb20213554b17563cf5f070662e2d4af6 +size 420492 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_angry.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_angry.webp new file mode 100644 index 00000000..c8f00ede --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_angry.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aec6872f2c34002cd68c3367aef9d47c614ef0a883082c371b20359d68922096 +size 23800 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_base.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_base.webp new file mode 100644 index 00000000..c269eab2 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76e411fac0895ec44b6811d58774f28818eb184e49ab4a93bafdd17504dca60d +size 24486 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_raised.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_raised.webp new file mode 100644 index 00000000..72c1dc55 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_raised.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa01b929f9779ecfc495abb2edf4f8fcd28d5ad84f57ac3cf25e1ff38e98d0ca +size 24526 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_shocked.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_shocked.webp new file mode 100644 index 00000000..5a695fa7 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_shocked.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3432eeaf2531e93c2d6a568d3128b02e0b1482167a8e9cf23f71779169b2c0a +size 22624 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_worried.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_worried.webp new file mode 100644 index 00000000..c0366681 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyebrows_worried.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5b7782793d49888d32c341aba04dfefb10604887c06aaa519be9cd4db653b72 +size 24234 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_down.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_down.webp new file mode 100644 index 00000000..403cda5a --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba049baaa712513006e4de2c1adb47eaa44ef6027ec20e6e337ff106419381f9 +size 27878 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_down_hearts.webp new file mode 100644 index 00000000..69e7eb06 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dd348747524b6aae5439c87b64b2d721c1f61ed1f0371775fe01404b27143e4 +size 29788 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_left.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_left.webp new file mode 100644 index 00000000..11e2a8d2 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0754922f748db2a727372bf2be44c066c74011180b356ea7363292346c4304cd +size 27666 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_right.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_right.webp new file mode 100644 index 00000000..bdae95f8 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c5824a20521a7ee9565fb231991165f4e5d79a720d7f664d21b91495df27132 +size 27096 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_squint.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_squint.webp new file mode 100644 index 00000000..6e900f8e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e97b6aa07d044dc44db736e908368c5aadac856f084eef30b3084f77936b3085 +size 27620 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_squint_hearts.webp new file mode 100644 index 00000000..06129ff5 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55862a0cf1525e478d6d1a8d7d29ceeecb5b0d9db883bab35bdb12e178c77081 +size 29752 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_stare.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_stare.webp new file mode 100644 index 00000000..8f23318d --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86a6283f4ed407ba4e73fc4768a78b59b3d90bb6afb3993d0c8df0cc8f0a9023 +size 29274 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_stare_hearts.webp new file mode 100644 index 00000000..4513cae2 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97704ae08e96ed0e6f45f429c7ab464698e425acfec7a45cdd23e6032484749b +size 31432 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_up.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_up.webp new file mode 100644 index 00000000..ffe9e3ef --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52c24b5da4cd13f4ef5b47c56c3c96dd3272b646bd1d104b2f9faa34659493d9 +size 28352 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_up_hearts.webp new file mode 100644 index 00000000..3cb76cd2 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_base_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4949e42248fb00f528862857e480c878047603fc25360cf6c662565e9be8bd0d +size 30418 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_closed.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_closed.webp new file mode 100644 index 00000000..d0011b77 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_closed.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff5b9a0e8fcdfd6e07e9c0eb6ec0cf24dc0c5c86ba27ef9420c6725c0deaf4c7 +size 23408 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_down.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_down.webp new file mode 100644 index 00000000..4371b423 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d3d5053f8186ef03e0587c1babe04a06dda432ba0c7dc9fc21d2ed15e534466 +size 26438 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_down_hearts.webp new file mode 100644 index 00000000..87a0c49c --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:331bd8a42573e187ea51fcb39a23c38437db749bd17d424732fec377c20de04f +size 28408 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_left.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_left.webp new file mode 100644 index 00000000..b9f854c4 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec1e4a8fd7eff63db7fa96e267f3b3c3e40215cf0814bcc7d55db19a1d824714 +size 25508 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_right.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_right.webp new file mode 100644 index 00000000..6506a4da --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:121c3037b119949b9fa1cd2d502f8cd0236e7dd02b508a954c94ab6f4aa0d5ba +size 25206 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_squint.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_squint.webp new file mode 100644 index 00000000..5cb22e1d --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:419c82359e4b1e7d842f542c2e9fbc9fcdf34ab65696094b005e64d039ecb60a +size 25548 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_squint_hearts.webp new file mode 100644 index 00000000..ddfd9802 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e378dc6eb54714278ae4d9ba1f67f7ce63ccb6ecb6c4eaac371d6a5f4a3b65f7 +size 27616 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_stare.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_stare.webp new file mode 100644 index 00000000..800df5fe --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f8bd21e4be0d46f7d5499bc447f1a79f8bfeb4748bd4d98c87a70d6b299d2d2 +size 26918 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_stare_hearts.webp new file mode 100644 index 00000000..34822987 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a26e6bdc7f7c2df4b4bb152ce7320da1e5c5779cf26b977cdc8ab933ff031ab4 +size 29062 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_up.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_up.webp new file mode 100644 index 00000000..0a0befd5 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd0c9bc7e00d88e88d66436d56b4e1b557e514ca0d6560b52700def6d31984a8 +size 26612 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_up_hearts.webp new file mode 100644 index 00000000..db221c52 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_halflid_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5243bcc3908dd94a924b7aee656517ad00e2e2cfb4179710c537c27ad6630698 +size 28662 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_down.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_down.webp new file mode 100644 index 00000000..b408a90e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86b2aaada4f77107cbde46d550dbe39ad7146d2b9064c265c869cb0d0e17714e +size 30804 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_down_hearts.webp new file mode 100644 index 00000000..053f6327 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00da6bb25942c33da9b566a315676bbc53fdc3e2533bbc6c530f6ff998110d65 +size 32942 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_left.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_left.webp new file mode 100644 index 00000000..e4c5211c --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55c15b05c8a85b0ae1ee8338b2f640b6f6136f4dade42943082d1136f002c17c +size 30638 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_right.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_right.webp new file mode 100644 index 00000000..9b223e27 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c27bf6118381d5ca381325bf850b6de469379f22ea1872263d54bf0f8362bd06 +size 29868 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_squint.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_squint.webp new file mode 100644 index 00000000..5df53ed0 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0a8e3b6a490b129bc7700394e34b3ee6cc720e800ba1ec86cd0eabbaa4031fe +size 30588 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_squint_hearts.webp new file mode 100644 index 00000000..d21bd782 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92d93aad8646499891f5dd8dc36becac8b81c03e8bb4ff6d7667ace61e1ccd67 +size 32622 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_stare.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_stare.webp new file mode 100644 index 00000000..7a7e76a9 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92bf188f5318d39699c8b5fae51e60313c848543dfdc6ef3f144402e4a7c4213 +size 31938 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_stare_hearts.webp new file mode 100644 index 00000000..23204f29 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:775d05c8b1c1d5cde8ebc2dd62e19e10c76dbefcb790d95ac94f27c34de94517 +size 34176 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_up.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_up.webp new file mode 100644 index 00000000..d0f047f8 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98a71008dc0b207a483745b7255dd46490dd3678af8455d924215baff37c9a33 +size 30620 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_up_hearts.webp new file mode 100644 index 00000000..5c058287 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_eyes_wide_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ceff560a286a1e6a4872f37b2dd052e4958db5c46271a3fd5b399344073a2613 +size 32682 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_hair.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_hair.webp new file mode 100644 index 00000000..370c5dbe --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_hair.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbd82957a32493eda4d31f68fd066adef186fd30156e0a30d58465b7bcfba611 +size 401480 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_mouth_kiss.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_mouth_kiss.webp new file mode 100644 index 00000000..8cfeea5d --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_mouth_kiss.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0270695a9c5cfcc105d486901efb7429a2ea12cbcebcac3d2a207a454beca6b9 +size 18692 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_mouth_lick.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_mouth_lick.webp new file mode 100644 index 00000000..c10c1b4a --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_mouth_lick.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06dd23ace4326862ff6e0dd3655aad9b8a2cfc116cc4eaf7cb698d9d7e29e6cc +size 16726 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_stroke_down.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_stroke_down.webp new file mode 100644 index 00000000..c506b85e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_luna_stroke_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbdc68b989a08e095e069f42225e6a8eba9fc9cf7d4e0a8645e3dfeb873dc508 +size 78696 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_penis.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_penis.webp new file mode 100644 index 00000000..30cdb991 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_penis.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:697c4664ef6cfa5e7c0b569dbf9690eb8a8021d92f1e3eb053d071db432fe41f +size 57576 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_penis_spit.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_penis_spit.webp new file mode 100644 index 00000000..9b6e6b5b --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_penis_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12fff6419b82327cb1d9d2f36d4a352af21cb4a570023ccf345bf9c2de1d174e +size 19574 diff --git a/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_throatpie_frame0.webp b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_throatpie_frame0.webp new file mode 100644 index 00000000..c2107408 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose2/lun_blowjob_personal_pose2_throatpie_frame0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7aea2d54bcaa2ee338fab1e93980c920837def8269dce7036bdea24daa028b8e +size 118480 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_genie_arm_petting.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_genie_arm_petting.webp new file mode 100644 index 00000000..f7393a13 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_genie_arm_petting.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bfd5885874703b20c60043bd1715a4ede169251c197fd30afa04202cbddaabf +size 142616 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_base.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_base.webp new file mode 100644 index 00000000..b9bf08d0 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f6f540917e535714a00d4f3fce7233a7de8e9c1124c7306f92c1f34f4dc23dd +size 394348 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_angry.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_angry.webp new file mode 100644 index 00000000..d2f478b4 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_angry.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d975c0b4fd88482f5d872c554984c9ac4489e5e8213e3192cce878ae132d81dd +size 24630 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_base.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_base.webp new file mode 100644 index 00000000..4dba1014 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85eac0e5c110eb453c686a16289858b9d6c10dc9f63b10d1ea8750f7d1295706 +size 24714 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_raised.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_raised.webp new file mode 100644 index 00000000..c4bfd639 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_raised.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39cd4a57a462b1e60af590bfd6f7e354d44c74965b9215bef9647d0aad227005 +size 25134 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_shocked.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_shocked.webp new file mode 100644 index 00000000..274ae568 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_shocked.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9fc3a93faed1dcf13e4957cb35f4d5d04d9cb0693dec5da5af467f35a3524a1d +size 23536 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_worried.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_worried.webp new file mode 100644 index 00000000..28cc495d --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyebrows_worried.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb5dd13b0ede68ee8a3c7776cc3d704a782e850af502970269b4982b9af61769 +size 24112 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_down.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_down.webp new file mode 100644 index 00000000..5205f281 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e88f81ddc704dbee87520dc425a25ddf2459a7a1432acf7bd24207e425cf56bc +size 29718 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_down_hearts.webp new file mode 100644 index 00000000..be3c8e45 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78763b65bd993f8c2d64caf2f7364a2dcfbbe85aa5d580f45813349711c7e44c +size 31622 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_left.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_left.webp new file mode 100644 index 00000000..005fa8ec --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1aef4d9adee809792d49f5a7ac49b791543ac102b35062f4f9729679c51d8bd8 +size 29824 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_right.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_right.webp new file mode 100644 index 00000000..04756886 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a914e616fa83c7aa2b1212a818e0b8ffc89099966982c51685a1e361b8eef394 +size 29466 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_squint.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_squint.webp new file mode 100644 index 00000000..f0846604 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:141b7e78f8b4d016a3b5ba3b3ab34fb6619195c82a2c8c5e98d1a0f902076ab7 +size 29476 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_squint_hearts.webp new file mode 100644 index 00000000..2fbe3d1a --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bd3e38c86a28ef3dc5e6fd8661707c966ed2625f085efe5b6bb2ff1324e952b +size 31640 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_stare.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_stare.webp new file mode 100644 index 00000000..1be3bb54 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df9ecfe7263fcc83535ee2f6f3ddc0a2a7bd2024e4e0b6b73e6c4ba67e2de79a +size 31414 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_stare_hearts.webp new file mode 100644 index 00000000..7999c76e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d134dfb02a27639e3bef213d04e091712f4bc135ba120e9d294f9ce6acbf23a4 +size 33666 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_up.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_up.webp new file mode 100644 index 00000000..b82f076b --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2157c6b2a8bf296e882c69512a1383afa945343cb3257b52ee814319180a786f +size 30198 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_up_hearts.webp new file mode 100644 index 00000000..e220f5b6 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_base_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8dc6ea1526c128f25002dfb2304da65d73c8c1c659180ed5fe45a92529d1346e +size 32552 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_closed.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_closed.webp new file mode 100644 index 00000000..f1965b70 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_closed.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db4caf8e74eea33b4ea94f2d6cab51cdf3f42efbb28cd3f5540410139ecb7278 +size 25494 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_down.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_down.webp new file mode 100644 index 00000000..f181627e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71cbff667e09be3d58e1ca4ec99715b89d4a10b75649ed076b987c931cd91e00 +size 27746 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_down_hearts.webp new file mode 100644 index 00000000..7517ac8c --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70eeef5183691fb44dc9458e779ac322cde58d33e16f6fa3383d485f2f4641da +size 29696 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_left.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_left.webp new file mode 100644 index 00000000..16a74055 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7554ec9f4cbc6fbbaea6b0497933646e6f9e4efaacc9e10f0f69bd5941544f58 +size 27540 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_right.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_right.webp new file mode 100644 index 00000000..1b6a8c77 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18d1ca191c713cba8d2327142996aa0438eb636160b61368ba89dbcef988c47a +size 26966 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_squint.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_squint.webp new file mode 100644 index 00000000..d98a4e1f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26a156c9dd6fa7b531f26bac3432cc72cc41fa5d1547365ea3d8750982277edc +size 27406 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_squint_hearts.webp new file mode 100644 index 00000000..33e62a59 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2942f4a123744df0f964ee2733f81e5a1bf25dce80167c30cc49ed04c21185f0 +size 29260 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_stare.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_stare.webp new file mode 100644 index 00000000..c9afe97f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97a48cd1320b6a6e072f08817e1e379f42858c3a47797d15fba92218321d86cf +size 28882 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_stare_hearts.webp new file mode 100644 index 00000000..9e051926 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f9107703f55e01ba45eb96b85bb6e2e6daba09977d324e7b59c0a5e2267e1cb +size 30858 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_up.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_up.webp new file mode 100644 index 00000000..bd4a43dc --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:188f062f1f3d6b05d959cef280ff9dd5b17b407b4826d41209c461d1295ff9b6 +size 28076 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_up_hearts.webp new file mode 100644 index 00000000..10e3cc7e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_halflid_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9288d5d083ff0acb477d69cdd382ca21a5529c658a0e5f8387d67db511df104d +size 29920 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_down.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_down.webp new file mode 100644 index 00000000..7b65689f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a3c87137643397f168d809d069b38e7f446749d1ad9eee3bfc430757e5018c2 +size 32610 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_down_hearts.webp new file mode 100644 index 00000000..1f01cd2c --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6f7382cae6806d6327974ddeff48ebee95f1b5b03ba7074d4196459fb8b9c82 +size 34862 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_left.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_left.webp new file mode 100644 index 00000000..e7bdfffb --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd08f7482687436698fc7b912b3be511a629a163f0aeafac016344d9021009b7 +size 32494 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_right.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_right.webp new file mode 100644 index 00000000..b29f7273 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b3682141ff8692f7fd8f74587daff0dc512a4194a31f95b0c51e3296da44180 +size 32618 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_squint.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_squint.webp new file mode 100644 index 00000000..5428b203 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98a4beb02a4074e11e42ba9554057dc5aefc3182f639ceab88bb9b09ad095bba +size 32292 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_squint_hearts.webp new file mode 100644 index 00000000..cd4b9c91 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba7d685e8bb7b4462ab4c166e452be59a41763f40ee31d6e1e732331e6f0ad17 +size 34418 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_stare.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_stare.webp new file mode 100644 index 00000000..4f086077 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6cf20c521291de5a1452a40a72affc68f3177dad4a3d17576ec64554512b2b7 +size 34850 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_stare_hearts.webp new file mode 100644 index 00000000..9c859930 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:104a3d84e5534abd582ec3a4482a1a8e9b527e43f71dda2b6ef22453b5651431 +size 37144 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_up.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_up.webp new file mode 100644 index 00000000..6805e19e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:708b9f7b5676235006a507e1f30b80e89d2deccb1bec1fc9df45b759348bc763 +size 33198 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_up_hearts.webp new file mode 100644 index 00000000..5afc8302 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_eyes_wide_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b019590aa68228becc15e2d0a075ab36eaffc3b43f99311a3ee1fec8e966373 +size 35564 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_hair.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_hair.webp new file mode 100644 index 00000000..1a89b45c --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_hair.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10122a23bde59a6e43858ee4effc5014b1b2d1ca7dce72b63435a82e2067dadf +size 436584 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_mouth_suck.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_mouth_suck.webp new file mode 100644 index 00000000..b6c12538 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_mouth_suck.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f2a3b230eea8f5a13fe02c295c2b2c7ed131bcfb70d677e85e8969cb491a58c +size 9630 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_stroke_down.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_stroke_down.webp new file mode 100644 index 00000000..6803f279 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_luna_stroke_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a11255814bf907b2bd2b57d25b0655fa5b286be26f0423964a43c388941bae9b +size 84400 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_penis.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_penis.webp new file mode 100644 index 00000000..e7ef0252 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_penis.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:337912bab4099475aadc0c6a2e7d45ae6489b9e8bb8acb73f31989455867dc30 +size 45738 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_penis_spit.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_penis_spit.webp new file mode 100644 index 00000000..190f1a8e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_penis_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:275fec304e99f0d0815ef1831da6271390d219a8bae1a37927ba88f2579bd5c8 +size 20578 diff --git a/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_throatpie_frame0.webp b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_throatpie_frame0.webp new file mode 100644 index 00000000..11b34067 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose3/lun_blowjob_personal_pose3_throatpie_frame0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:791a7fac423915d027e325d51083e52d31d092081772f63ba4065fa463bc0d6c +size 88600 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_genie_arm_petting.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_genie_arm_petting.webp new file mode 100644 index 00000000..eb38022a --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_genie_arm_petting.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c32206821efc54a6263132dfaa7164a3cd79982c77ee0fbbf80478b7419dee43 +size 137972 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_base.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_base.webp new file mode 100644 index 00000000..485014bd --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b266c675ebafec81247bf990a2d24787c6893699f1de85d003d003d489db294e +size 424186 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_angry.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_angry.webp new file mode 100644 index 00000000..78ad914d --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_angry.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17088bcdb85189fb2a209e28031238680a499ed1ad0d93b87d0d7690018d1ae8 +size 23340 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_base.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_base.webp new file mode 100644 index 00000000..c2c2400b --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f62b0feb2ad443b3f2e79040bc11315222463b008471338e5c632741f3fb59c5 +size 23030 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_raised.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_raised.webp new file mode 100644 index 00000000..5aa4d7e6 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_raised.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b2b610233dd933c66f0f4bcc9cf11e9361072807f0810438373179de06b0c87 +size 24340 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_shocked.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_shocked.webp new file mode 100644 index 00000000..9d30c59c --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_shocked.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:140edefe776cb81ba0e9bbe36ab5fab792e6861686c4cb68005ceaa5d5c451b1 +size 22576 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_worried.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_worried.webp new file mode 100644 index 00000000..c91dfd8a --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyebrows_worried.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:961fa068b7de1a83beed91a62a9f76f67cbb8108a25a726cd7cb7dfb36db96ff +size 21548 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_down.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_down.webp new file mode 100644 index 00000000..97ba3331 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86aa88b0d277a32af4bd292568624925f2a8009a28190f8cf697ea727b3ea5f2 +size 35116 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_down_hearts.webp new file mode 100644 index 00000000..daa27174 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f08ff5f0d0bbb26a6832e1639b5df0c91fb11ed504d25d99327bc424e546dce +size 37248 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_left.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_left.webp new file mode 100644 index 00000000..2e98886a --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd06e4c3f00c8beca83d17e42e323dba79e25dc02f83ae8bd8ca15b1ce7b7e5b +size 35150 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_right.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_right.webp new file mode 100644 index 00000000..3bed4185 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7ce44a66749443c923927cf97cca1e67ad6a6fdc0715cb0c0457ecce5bc55e9 +size 34236 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_squint.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_squint.webp new file mode 100644 index 00000000..8c57466e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f16520cefb3ee417ad03e31dd5b2c3858f483bc60327bc9b74f6bd9bc5aaf298 +size 34628 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_squint_hearts.webp new file mode 100644 index 00000000..53506334 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc73efb9f4b13692465d5f1f00b6cec74fc26643ce9c832ac3723e44e0e47698 +size 36764 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_stare.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_stare.webp new file mode 100644 index 00000000..5783498a --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34ea374a85b889b0474cdeece540a7a248c5d00070b8c4723c83199fea0ba2f1 +size 37082 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_stare_hearts.webp new file mode 100644 index 00000000..06f6c11d --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61513f13ef17c989a0b12520850e85836a2c8ba07cf7809167be6f760357cd01 +size 39484 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_up.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_up.webp new file mode 100644 index 00000000..4831733d --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33a1267c72fb398491ce0888fc91dad9061d2427b54516edc11ac5e899a30a75 +size 35710 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_up_hearts.webp new file mode 100644 index 00000000..64c1871b --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_base_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:291ac500b768ad997974c14256ae6c020f15480a27742c51f1cdbb67520cb712 +size 38196 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_closed.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_closed.webp new file mode 100644 index 00000000..04c0fa61 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_closed.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89253a5e110a45865424726cb95975bf7d9dc5c180c8e584cdda6fbd9e1db139 +size 29428 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_down.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_down.webp new file mode 100644 index 00000000..e0f4e5a4 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16f52e17621263f3e36d656082c78de5e394882489ff7461c2926fca4e7bbc42 +size 32656 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_down_hearts.webp new file mode 100644 index 00000000..32238ebb --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91f16754391e38d07324b823e24f881d4ccbc2f5c5d516713b25835b01fdd08e +size 34784 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_left.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_left.webp new file mode 100644 index 00000000..f51ad5b2 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0afaa5eaa4cb9bf3e88c6199a247a87efc7e193b51ee131e49b6cfbc286bc2e3 +size 32288 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_right.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_right.webp new file mode 100644 index 00000000..6f54c6db --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d030c6cd32154317f63630443b70dc207ac4284308965664cb958b36484355cd +size 31426 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_squint.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_squint.webp new file mode 100644 index 00000000..d8f89f9b --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95b3a3b2b8f4e87d785bd817e7a7399594083b9ac56b21b4a39eeadd8a71839b +size 31990 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_squint_hearts.webp new file mode 100644 index 00000000..36dd5d1c --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f73347d5a3c413bd63017d542cd92ece257348d71cc094b9448840a01d03eb28 +size 34002 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_stare.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_stare.webp new file mode 100644 index 00000000..375c8495 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff7a7e08a97cf873fd5851304da3bc99c693c28f57a873cdb38bb6919c778007 +size 33716 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_stare_hearts.webp new file mode 100644 index 00000000..7e528c2d --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fee1a29b876afc6007713e16a1e131fe5136e3ed0a64090956880364be8c42f +size 35922 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_up.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_up.webp new file mode 100644 index 00000000..30352f16 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99ce4eea556ca0ff06e4ddb8d3b089164b64056c6d61505ce485375c46a9f5c8 +size 33434 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_up_hearts.webp new file mode 100644 index 00000000..8f9daf22 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_halflid_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75e6bcb9609ed2c233d12ab23863f3481bde49c16cab478e09e22f9fcf299fc2 +size 35462 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_down.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_down.webp new file mode 100644 index 00000000..c6cc4ced --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e95fca9987383a243408e2a4c760ee802062354b865ee8e90766f65052fa55b +size 38358 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_down_hearts.webp new file mode 100644 index 00000000..e0f97ef1 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f33da437360eb3e1369f552ecbf924a24127e4ada45847c11f2e344c49e6eff4 +size 40578 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_left.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_left.webp new file mode 100644 index 00000000..c478187e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e1284221130299352d5c506d58400cede59faf8bd6423f7328f3bb595c2e7aa +size 38230 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_right.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_right.webp new file mode 100644 index 00000000..be655a03 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d01fb371598fa526a62e26c7240dc46ba51f1931cc53fe8fed06be374a8a6e4 +size 38632 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_squint.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_squint.webp new file mode 100644 index 00000000..1ad391da --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:381ac28530e9cf70c2901b712fb3b320b84d8cd59a62de6af66e90544380e4fd +size 38038 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_squint_hearts.webp new file mode 100644 index 00000000..e1d89dbb --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cbdfc78556895e6678ff06d9e1e902d711e848aff356c57ae3de19c5a0297fe +size 40250 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_stare.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_stare.webp new file mode 100644 index 00000000..42913665 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91ec5540cb8b7ea694682842c7e67406a59bae3b8c17779bf9b98a76bfdf31a2 +size 41158 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_stare_hearts.webp new file mode 100644 index 00000000..fe90ea75 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:100a5ff8af68659e4834552b1aece9b2c6d22cbfd462412504fa33cd2efd0a0e +size 43664 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_up.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_up.webp new file mode 100644 index 00000000..93fda65e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32bf91fe0293338d5454c8101e1c63450742099a79814f26ee414e5de6172603 +size 38852 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_up_hearts.webp new file mode 100644 index 00000000..d4dffb82 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_eyes_wide_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0c98860898f0eb92e4ed24188ecde3924633706c6c933c8afbbc42a87d91ce0 +size 41414 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_hair.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_hair.webp new file mode 100644 index 00000000..4dac46a0 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_hair.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ceabe8d5c2e7c5c06de24c64b1d35d7b3e9977c4741fc1b305b78a4bf892682 +size 459186 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_mouth_suck.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_mouth_suck.webp new file mode 100644 index 00000000..10759903 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_mouth_suck.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:604b6b361d5fefb2fb3d19ade48bee7675b21bfe6d388260da07ff3702cf83e9 +size 8368 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_stroke_down.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_stroke_down.webp new file mode 100644 index 00000000..c3b2f84f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_luna_stroke_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d023470767a0c664c4cd51b355cd5a26d53137f77c0666b33f6be4ac07aa90a4 +size 77158 diff --git a/game/characters/luna/chibis/inspect_body_stand/breast_nude_05.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_penis.webp similarity index 82% rename from game/characters/luna/chibis/inspect_body_stand/breast_nude_05.webp rename to game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_penis.webp index 03ce08f0..a28eb0aa 100644 --- a/game/characters/luna/chibis/inspect_body_stand/breast_nude_05.webp +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_penis.webp @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:da81bf98083d21b2fa388041234939454384a82d8931cd83ca3b89f1d052cd9e -size 36828 +oid sha256:db8ebd2e9efce4f3e7a6e7d0cde871828db8f54226a9c87deaa3c5c6cc9f93f3 +size 42728 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_penis_spit.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_penis_spit.webp new file mode 100644 index 00000000..4577496f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_penis_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:477fa65cf32ddd11b676b4c782ce6c5692a1d2f50cb91b41af31b945e552c351 +size 13622 diff --git a/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_throatpie_frame0.webp b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_throatpie_frame0.webp new file mode 100644 index 00000000..721d075b --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose4/lun_blowjob_personal_pose4_throatpie_frame0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5299a3665dfeab4c267b128c40902634cfe556854d532e551fb56638d4e890ff +size 77284 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_genie_arm_petting.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_genie_arm_petting.webp new file mode 100644 index 00000000..b3f69838 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_genie_arm_petting.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4932a81bb6687562ded2f28a92a65d243ba962b8b560c035d5aa16a2ff00a242 +size 135714 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_base.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_base.webp new file mode 100644 index 00000000..7084a55a --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a7a8fc9b6e7f410ffe215f715add80043e82f2077124501a3204425eaae72e1 +size 430908 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_angry.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_angry.webp new file mode 100644 index 00000000..a39ef621 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_angry.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30cb8d32be9d429a2d0726512fc2017e5c54721ae1afa17036932ccccdb2d6b1 +size 25560 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_base.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_base.webp new file mode 100644 index 00000000..591c3311 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6a6fad0f881ba9c72e307d5d045581f767e5581d0fb3685a2f24641fe1b515c +size 24976 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_raised.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_raised.webp new file mode 100644 index 00000000..913ee968 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_raised.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32da9f346517db83e5325d1935f20ea055e08344b29bf5fe755581b7299b9aea +size 26200 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_shocked.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_shocked.webp new file mode 100644 index 00000000..7d093176 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_shocked.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a535f44e4e3e9a81770278bdc66e9fe9ea6cd7edfc5857c6377f1ef82d1e206 +size 24508 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_worried.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_worried.webp new file mode 100644 index 00000000..28d15dcc --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyebrows_worried.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea3e8eb4db96bab66553c5cafd3f8a52508dad2bb9d34c9df9f579851c35063e +size 22620 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_down.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_down.webp new file mode 100644 index 00000000..21fa52fe --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a8aaa3e7716052c5b6186be2fda3c99cbc1c091633454569ab27f37959fb0a2 +size 39032 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_down_hearts.webp new file mode 100644 index 00000000..7cb19c21 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3526c9808ac9c2cbcaa065ac33b7e52ac4f672328fb063abd097d8e9188150d +size 33736 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_left.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_left.webp new file mode 100644 index 00000000..87d580f3 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a865734101a79fed7e4b0c5f81646d1a0d0539aa9f684121246bbbe39125e8b8 +size 31696 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_right.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_right.webp new file mode 100644 index 00000000..b0898656 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a618874dd1fb250242bb45ec7531c160d41d3db5bc1c24867b78b92dadf8ded +size 38628 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_squint.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_squint.webp new file mode 100644 index 00000000..84539f99 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6c3fa4f529a175ab6d052368d9fcef79ad488146efa66b552ac63234196c67c +size 38562 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_squint_hearts.webp new file mode 100644 index 00000000..635f554c --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c158a5529f1735a69db1e5d94d15130ecf60a127d6f351af63f9600dec930af1 +size 33850 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_stare.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_stare.webp new file mode 100644 index 00000000..708f4bcf --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4226c247824801f1620d6822cadfd2c9d86ddaf85a9499e4e70511e8ce2e9b5b +size 40982 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_stare_hearts.webp new file mode 100644 index 00000000..98727394 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:373aadb7e0cf173329a5b098255bbf5dd3196434e52b66b7497348501be509ea +size 35888 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_up.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_up.webp new file mode 100644 index 00000000..7d8957a8 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee6787a8952f8b81edb60145e0838a9abcf027fd35d09c3d82abf1c5ef8fa67c +size 39164 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_up_hearts.webp new file mode 100644 index 00000000..6bbda9f5 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_base_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6e8759e4faf41c4bcdecbbc5e8fb23478f8a45b39b4540d0defdc9402f13f9f +size 34378 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_closed.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_closed.webp new file mode 100644 index 00000000..c8e2b74f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_closed.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee81fc5120c80ec37127c68ea7db57005dd1bcf6d7652c4abf290134a0f0175d +size 32668 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_down.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_down.webp new file mode 100644 index 00000000..7702b2bf --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93837245c05668c83673604203e90fc42bce3ba09a403f07754020e99f9c0fe9 +size 36188 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_down_hearts.webp new file mode 100644 index 00000000..d3a42040 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:539b8adc9e85a72256ecc81abc741fb50616be1422295707ed268a3f3222165b +size 31784 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_left.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_left.webp new file mode 100644 index 00000000..bc1b9e68 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f37961d7f9f27f87bf69a7e1c1e720eed0ef7d3740233f82f3472ba8c34c641 +size 35788 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_right.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_right.webp new file mode 100644 index 00000000..d9f535de --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf7ab35aac14c69dd5d0b6520b170ce3a59b10ee7e0285ba1b7be8aa310bc395 +size 35212 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_squint.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_squint.webp new file mode 100644 index 00000000..5ace22e4 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7a06a14ad97d5c74b3e37d57a66f3385a439e8538b9ea088b973d24a2d2ee8a +size 35250 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_squint_hearts.webp new file mode 100644 index 00000000..ff04f1cc --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d9f7d5d4f68967a1d28d9cd658655fd710ec8d6f894d726bc12688b72525913 +size 37396 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_stare.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_stare.webp new file mode 100644 index 00000000..9c42b62b --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5eba9d100cc7e315aa45f6bbd33f22d2f77c8a448af3500c45f235618cab05a +size 37426 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_stare_hearts.webp new file mode 100644 index 00000000..00ab972a --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:844350c039699f754367442220b26c882dcf7eba7c9ffcbe3d9ad01209f9db65 +size 32704 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_up.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_up.webp new file mode 100644 index 00000000..b12253b7 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3c91412863cbb3593c98db57a766004e348d96c06a5b3c1424547f6c519c388 +size 37026 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_up_hearts.webp new file mode 100644 index 00000000..2e00f66f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_halflid_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66154ff09dead32419040bed3b4e1d3915dd5539d8d9d5281fc95dca505accf7 +size 31858 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_down.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_down.webp new file mode 100644 index 00000000..aeaa2128 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9a3c3fe41e134a6a9cbee87eabe932023ed1b12ceff5c98fc4336e927be0fd7 +size 42548 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_down_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_down_hearts.webp new file mode 100644 index 00000000..6cae6d70 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_down_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2ed45be4a3f14defa574481dfa71a98564fab4efa3418abd209cb34f53dd495 +size 36752 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_left.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_left.webp new file mode 100644 index 00000000..0c9f4626 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fda090cebbaec49c472839033237311f4a1803e950f221e4f8e0b52f561295d +size 34390 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_right.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_right.webp new file mode 100644 index 00000000..15de3d43 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20a6cdd240fa3b2d419754ed9337bf269c4fcf361e2358691e1dc94b28a34424 +size 34972 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_squint.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_squint.webp new file mode 100644 index 00000000..8f2f50c9 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:937d65054e99e6dc2c3786caab39828926c479f6e5955a127a4d44b475677180 +size 34644 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_squint_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_squint_hearts.webp new file mode 100644 index 00000000..41efde6e --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_squint_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19b5a62383504743d5989de0c18823599f39326d67b2a346a333caf7fcf3c9b3 +size 36802 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_stare.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_stare.webp new file mode 100644 index 00000000..6eead937 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f517f6f2b2add49c5e663b470fd161b7f15bf9f3f7caca06f226cf5b31d3cc4c +size 37102 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_stare_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_stare_hearts.webp new file mode 100644 index 00000000..85499849 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_stare_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a502b956c7f54fd11f558461e095cd1374b22cc402b1ca4f5822b1482b81191 +size 39406 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_up.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_up.webp new file mode 100644 index 00000000..2a9ab75f --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c04da6fd16cb92c03838b0d8e5104673a8d2079c2b74d9f38c8f7235b481b35b +size 42892 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_up_hearts.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_up_hearts.webp new file mode 100644 index 00000000..48b0a15c --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_eyes_wide_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:619119e1e3a04fb67f8e0ac63033305e327f1b897cfbbdd7d1c1ead40a8f1685 +size 37202 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_frothing.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_frothing.webp new file mode 100644 index 00000000..b6a9219b --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_frothing.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f933546f00a07dccdcd9c7f7bbd3acb03c92cc0bc8db6b998dce0be79b5e9bb +size 7720 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_hair.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_hair.webp new file mode 100644 index 00000000..b1f90584 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_hair.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59ba75574804e27b9e0630bf5c3ea6b83557fc694a0c0f5396679f274ad79304 +size 499670 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_mouth_suck.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_mouth_suck.webp new file mode 100644 index 00000000..5db80880 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_mouth_suck.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a5f241d3fc6e3a53ed011f5db938e187ce75e223d7a1e5a15f55d103be61454 +size 8258 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_stroke_down.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_stroke_down.webp new file mode 100644 index 00000000..41d5548b --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_luna_stroke_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:607edaa2ac04af95bb7d38cc749bbb62c329bf94f46d15ec0788d0b2933424f6 +size 52096 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_penis.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_penis.webp new file mode 100644 index 00000000..4916477c --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_penis.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9abdd62d1ab7ded706c9f34654eddc2f47ef7c27f20dea52083b3065042946b +size 24274 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_penis_spit.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_penis_spit.webp new file mode 100644 index 00000000..806e98e8 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_penis_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6d449ce7ce92c2d1e267d5db1723e4303eabeb4f17d47491787bda4a13acb19 +size 8526 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_throatpie_frame0.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_throatpie_frame0.webp new file mode 100644 index 00000000..65d649d8 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_throatpie_frame0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dadf25a96705abf3761e986626f9dafd0a62665e410ce6d653671864b9860f17 +size 20844 diff --git a/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_throatpie_frame1.webp b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_throatpie_frame1.webp new file mode 100644 index 00000000..2797aa80 --- /dev/null +++ b/game/images/CG/lun_blowjob/personal/pose5/lun_blowjob_personal_pose5_throatpie_frame1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b0a11435ab87c02b4f1971dcb45fbe5c4b649a4f6bf23b8bfcf97a571fd3d96 +size 49458 diff --git a/game/images/CG/lun_grind/lun_grind_background.webp b/game/images/CG/lun_grind/lun_grind_background.webp new file mode 100644 index 00000000..72ad684c --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_background.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:077dec073d73dfbee933cd719b817c0fe11ee301dcda28f982abfb88529f5aa1 +size 2185168 diff --git a/game/images/CG/lun_grind/lun_grind_body_grind.webp b/game/images/CG/lun_grind/lun_grind_body_grind.webp new file mode 100644 index 00000000..4b88bc38 --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_body_grind.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4655816aad8cf5c42729d79ef39e0bb8dc6f1afbd730e8989b88b5cb2ef82a4 +size 1639340 diff --git a/game/images/CG/lun_grind/lun_grind_body_idle.webp b/game/images/CG/lun_grind/lun_grind_body_idle.webp new file mode 100644 index 00000000..61234393 --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_body_idle.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4a0a4e5e56b54fd9823150c3a8ce392614fea9446c065d5c225bb07937ec668 +size 1603018 diff --git a/game/images/CG/lun_grind/lun_grind_body_spread.webp b/game/images/CG/lun_grind/lun_grind_body_spread.webp new file mode 100644 index 00000000..e795e3da --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_body_spread.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a00420fc333713a205602d3aba7ea112c00030d467a9e55eaa5d902f1a0af46e +size 1704798 diff --git a/game/images/CG/lun_grind/lun_grind_cumshot_frame0.webp b/game/images/CG/lun_grind/lun_grind_cumshot_frame0.webp new file mode 100644 index 00000000..f5915c19 --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_cumshot_frame0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac488bcb3be6a61408c43581576000d7a0fcabfd43c38137c3a2fdd61c44e3b3 +size 8332 diff --git a/game/images/CG/lun_grind/lun_grind_cumshot_frame1.webp b/game/images/CG/lun_grind/lun_grind_cumshot_frame1.webp new file mode 100644 index 00000000..12a712f1 --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_cumshot_frame1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8dcfc4f5d7c425e1bb506fbb109518fe4c51d88ab8b81603284f8297aa2b724 +size 15338 diff --git a/game/images/CG/lun_grind/lun_grind_cumshot_frame2.webp b/game/images/CG/lun_grind/lun_grind_cumshot_frame2.webp new file mode 100644 index 00000000..c08b9d70 --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_cumshot_frame2.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9be879241991fa7d401bf9cb5fbd183ca7cf03a8bc3f252913d7d83e533b4643 +size 34100 diff --git a/game/images/CG/lun_grind/lun_grind_cumshot_frame3.webp b/game/images/CG/lun_grind/lun_grind_cumshot_frame3.webp new file mode 100644 index 00000000..7f848c44 --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_cumshot_frame3.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49b67956cabb1f5c411df5e94a3e7410312dce0d421dea56ac08433de917bbda +size 43844 diff --git a/game/images/CG/lun_grind/lun_grind_cumshot_frame4.webp b/game/images/CG/lun_grind/lun_grind_cumshot_frame4.webp new file mode 100644 index 00000000..9b19708b --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_cumshot_frame4.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66c9ceb9d41b6ca8a3742968377e04f0354bd53c370b9d846fb2d402fefa3506 +size 58300 diff --git a/game/images/CG/lun_grind/lun_grind_cumshot_frame5.webp b/game/images/CG/lun_grind/lun_grind_cumshot_frame5.webp new file mode 100644 index 00000000..5a076e63 --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_cumshot_frame5.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64a0f1f4d8418177fb76dbe379901069e760d1efd654740b4548a76855547dd5 +size 70588 diff --git a/game/images/CG/lun_grind/lun_grind_penis_grind_frame0.webp b/game/images/CG/lun_grind/lun_grind_penis_grind_frame0.webp new file mode 100644 index 00000000..6bedb6be --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_penis_grind_frame0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50ad2d2585afe2f8dd5a992b6cc57802e8404d6fdb5807dd1061e1960cdd892b +size 99226 diff --git a/game/images/CG/lun_grind/lun_grind_penis_grind_frame1.webp b/game/images/CG/lun_grind/lun_grind_penis_grind_frame1.webp new file mode 100644 index 00000000..6e6751ca --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_penis_grind_frame1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70b7690761f42b8606c93c971656cbde942b9466fb2c0699032febb7e64e6b0f +size 100162 diff --git a/game/images/CG/lun_grind/lun_grind_penis_tease_frame0.webp b/game/images/CG/lun_grind/lun_grind_penis_tease_frame0.webp new file mode 100644 index 00000000..2c70e789 --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_penis_tease_frame0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a39639b8587133c4f55c521136d998ef8172ec58ed10ec8266d6048ec523e367 +size 68994 diff --git a/game/images/CG/lun_grind/lun_grind_penis_tease_frame1.webp b/game/images/CG/lun_grind/lun_grind_penis_tease_frame1.webp new file mode 100644 index 00000000..1d079dd9 --- /dev/null +++ b/game/images/CG/lun_grind/lun_grind_penis_tease_frame1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:103954709faa7daf5990443dbe5483a04f78463465d3eb1a43c5a571b724b15e +size 65446 diff --git a/game/images/CG/lun_inspect/genie/alt/lun_inspect_genie_arm_right_touch_pussy_frame0.webp b/game/images/CG/lun_inspect/genie/alt/lun_inspect_genie_arm_right_touch_pussy_frame0.webp new file mode 100644 index 00000000..64e1353b --- /dev/null +++ b/game/images/CG/lun_inspect/genie/alt/lun_inspect_genie_arm_right_touch_pussy_frame0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:684ac1f29bd480c8ae06172e348cb650cee4099a1fc7dc4ffe468644d5b56a12 +size 32856 diff --git a/game/images/CG/lun_inspect/genie/alt/lun_inspect_genie_arm_right_touch_pussy_frame1.webp b/game/images/CG/lun_inspect/genie/alt/lun_inspect_genie_arm_right_touch_pussy_frame1.webp new file mode 100644 index 00000000..025844cf --- /dev/null +++ b/game/images/CG/lun_inspect/genie/alt/lun_inspect_genie_arm_right_touch_pussy_frame1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdf19ee61cb3f529d09739a7b9d42e03fd020b16934da315cf2794d43eb54cb6 +size 35354 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_both_grab_tits.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_both_grab_tits.webp new file mode 100644 index 00000000..c791284b --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_both_grab_tits.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb50d6733bfddc5aa2329981a436c47e7211b1d97a042e024e567d026ecff668 +size 185358 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_both_touch_tits.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_both_touch_tits.webp new file mode 100644 index 00000000..cf44619a --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_both_touch_tits.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f8f02bdcf4d83db8cce17e7d0e75dc6b4160342694b3439d5ae9ad7977fdaa9 +size 177576 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_left_grab.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_left_grab.webp new file mode 100644 index 00000000..b3550d38 --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_left_grab.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dae47687c6a37eded724b4522cfde4503d44849bf65ec067740f4f42bc033b6d +size 141448 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_left_hold.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_left_hold.webp new file mode 100644 index 00000000..67fae023 --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_left_hold.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc61f35f0fcfafa2617831693fe86e7ae11ef884b43318619b96e65118b7ea2a +size 116874 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_idle.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_idle.webp new file mode 100644 index 00000000..7ef37213 --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_idle.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36a9fb85545aca11578d31ac28ffd140f4c809935f7566d713316fc405761960 +size 60984 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame0.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame0.webp new file mode 100644 index 00000000..76f02210 --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame0.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6b5a3c0ddb6c4a27b094dd27e8e31c53dc55d476983d34048bc8a0ccef79722 +size 51568 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame1.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame1.webp new file mode 100644 index 00000000..1d40937a --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame1.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f2daa15d111d616356b1703b59ea914c1bd53137c788d5c5f731adcb3b8630f +size 57416 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_touch_mound.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_touch_mound.webp new file mode 100644 index 00000000..64cd2bd7 --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_touch_mound.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c78b142c21696cb42f68a3c3878e69083020d872a9a1ff23110be7d078ff281 +size 41154 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_touch_tit.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_touch_tit.webp new file mode 100644 index 00000000..136eb86e --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_arm_right_touch_tit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fec207b20dbf049601b7b459a617f04086ebc617c955482e94042155a6d28f8a +size 38014 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_body.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_body.webp new file mode 100644 index 00000000..d5393322 --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_body.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68f3172ebd8b9ad63ddc6e49b9e090218daec45ca1ca5c70cac1191509a3d89f +size 133624 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_clothes.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_clothes.webp new file mode 100644 index 00000000..7b49396b --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_clothes.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e37d1ee6647bcaef042b9fe1a26d51e7916ae9a7b0f6fcddd0297cf2fc4dc9c6 +size 271102 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_clothes_back.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_clothes_back.webp new file mode 100644 index 00000000..ec8953ef --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_clothes_back.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e228a7bfd27c1f7f28c77ec9a22b5515791d78e222bdaa6ebf10e424a9aa9941 +size 116752 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_clothes_hood.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_clothes_hood.webp new file mode 100644 index 00000000..4f539d0b --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_clothes_hood.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c003a684568a515866aaf259431d0bf7a526fb2612b62bb0a8fe3633aeabe44e +size 10572 diff --git a/game/images/CG/lun_inspect/genie/lun_inspect_genie_head.webp b/game/images/CG/lun_inspect/genie/lun_inspect_genie_head.webp new file mode 100644 index 00000000..0ccef65c --- /dev/null +++ b/game/images/CG/lun_inspect/genie/lun_inspect_genie_head.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e2e1528071e31490419ffb4ef2513e2ba3582427e7f0c7f5d0a47c18b0eef7d +size 53632 diff --git a/game/images/CG/lun_inspect/lun_inspect_background.webp b/game/images/CG/lun_inspect/lun_inspect_background.webp new file mode 100644 index 00000000..e399d18d --- /dev/null +++ b/game/images/CG/lun_inspect/lun_inspect_background.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8f857d0bac3b2a9d56b9a4bc89e1c25fc396e3ca60792d33309ffa2c96d864e +size 1126912 diff --git a/game/images/CG/lun_inspect/lun_inspect_background_breastfix.webp b/game/images/CG/lun_inspect/lun_inspect_background_breastfix.webp new file mode 100644 index 00000000..726b9201 --- /dev/null +++ b/game/images/CG/lun_inspect/lun_inspect_background_breastfix.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e86972fe80e3b24b35bc3f8b70d7f5f519abe9ec1b92008e8f3ebf3728cde2f6 +size 9512 diff --git a/game/images/CG/lun_inspect/lun_inspect_chair.webp b/game/images/CG/lun_inspect/lun_inspect_chair.webp new file mode 100644 index 00000000..7e3c4438 --- /dev/null +++ b/game/images/CG/lun_inspect/lun_inspect_chair.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f52dae3f50766d4f498c2ed5ad606fa46493ec3538bacaea446116cc063473e3 +size 575354 diff --git a/game/images/CG/lun_inspect/lun_inspect_vignette.webp b/game/images/CG/lun_inspect/lun_inspect_vignette.webp new file mode 100644 index 00000000..9cb96a35 --- /dev/null +++ b/game/images/CG/lun_inspect/lun_inspect_vignette.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5b6bc985c2a8dfb0ee5c9da2b353f1dc734ceb68a16c9885337d4cb0ab8a446 +size 679282 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_arm_idle.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_arm_idle.webp new file mode 100644 index 00000000..f298811f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_arm_idle.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84a06bd4a10141813db675e44280ce3221e7331d9ca441d7ddebda2bebff66c5 +size 34430 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_body.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_body.webp new file mode 100644 index 00000000..4451e420 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_body.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fab281e185cb457cf75ddffa360208ad11315bdd097c9e0d5e76739faf1e11bb +size 245088 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_bra.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_bra.webp new file mode 100644 index 00000000..91c1ecea --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_bra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:618f642a2c7f12f5f14dbdc6024dc824496e2d37444f52df7a33b722cb08f855 +size 96642 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_blush.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_blush.webp new file mode 100644 index 00000000..f6767d68 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_blush.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67a2522a514f746dcfc292e2f26276500442b0bde3e0a744870e0aa5d4fe6431 +size 28820 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_breath.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_breath.webp new file mode 100644 index 00000000..5f3feffb --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_breath.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:577f9c62d5d885d760d362f3eaca293684c627fc6f844386583947c2c737f088 +size 12190 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyebrows_base.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyebrows_base.webp new file mode 100644 index 00000000..0934894f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyebrows_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de040d4b077b1a0065ea63bb6192d9bce468bc88542ad68f2088038d5a1b84b2 +size 11946 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_right.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_right.webp new file mode 100644 index 00000000..c1a8af1f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:891591d60ecd743a260fd819a8da88ef4612097823f2af859b8af56f6b645821 +size 13648 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_up.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_up.webp new file mode 100644 index 00000000..9e04fc56 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2cd8b7a6f59d28aa611ec2aec23c88a91598a1f0f13b9e09934fcb370a0b5be +size 14230 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_up_hearts.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_up_hearts.webp new file mode 100644 index 00000000..971a3b56 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_eyes_base_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:809a6879fef667279139dbc46e50ea70048c4d7d5d8da9f10d6db9e63dd7d3b5 +size 14956 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open.webp new file mode 100644 index 00000000..599ef341 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7b89338ab8f7056145146de1ad1c083db7addf389e78f05a0beab565e427b49 +size 17008 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open_ahegao.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open_ahegao.webp new file mode 100644 index 00000000..2ec69f06 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open_ahegao.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6232e37db0961ac9a7ebe9374eb030699dd383b8e8b87bdc5a7771f7a01e45b2 +size 18942 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open_ahegao_spit.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open_ahegao_spit.webp new file mode 100644 index 00000000..47dba993 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_face_mouth_open_ahegao_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0714193d15ee27ed2678683e75f23f2c6966242e02c4e55dc6067c7073924d0 +size 24590 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_hair_back.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_hair_back.webp new file mode 100644 index 00000000..ef8c9286 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_hair_back.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:563b8ac2ba6d4844ab980eef2eb588f748df459e35797e24e469f2ddbb957436 +size 106950 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_hair_front.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_hair_front.webp new file mode 100644 index 00000000..a5401f1e --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_hair_front.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bc33ce4e0b529b5e67fe3a0be84c1fc8f42f0d6f1c442b237c4c04776b7f997 +size 129406 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_shadow.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_shadow.webp new file mode 100644 index 00000000..ed59f455 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_shadow.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07cabd4a6255162f97d55a36925ff2643dd8cd09280acb028e564a9daaf12479 +size 23070 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_shirt.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_shirt.webp new file mode 100644 index 00000000..d43b963f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_shirt.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd4862bf901141695c65d6a6b6eb16278170c57de609dc26d8d5f71a3e1ace3f +size 161344 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_skirt.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_skirt.webp new file mode 100644 index 00000000..b6f22853 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_skirt.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da445676f5fac1aea0e06e73c0e8fc9041d1d916eb8e6af2f88962fef91a2320 +size 107120 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_stockings.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_stockings.webp new file mode 100644 index 00000000..38ce1c14 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_head_back_legs_together_luna_stockings.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27a7bbac33c35f4cfb68287d312da2d672d40d9e42a21895a1d8221c3cd38922 +size 75936 diff --git a/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_legs_together_luna_arm_idle.webp b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_legs_together_luna_arm_idle.webp new file mode 100644 index 00000000..f298811f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_legs_together/lun_inspect_legs_together_luna_arm_idle.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84a06bd4a10141813db675e44280ce3221e7331d9ca441d7ddebda2bebff66c5 +size 34430 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_arm_idle.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_arm_idle.webp new file mode 100644 index 00000000..f298811f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_arm_idle.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84a06bd4a10141813db675e44280ce3221e7331d9ca441d7ddebda2bebff66c5 +size 34430 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_arm_masturbate.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_arm_masturbate.webp new file mode 100644 index 00000000..de6d50ce --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_arm_masturbate.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:394f8eff25d7b0fdddacc0d19f78dedd90f8613a4a7cdea01b7b4e4a182afcd7 +size 44068 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_body.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_body.webp new file mode 100644 index 00000000..00929a65 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_body.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b41820d877e13fb7123c9d591d1e9f144325c41369047aefb5e6befa0198a825 +size 266000 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_bra.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_bra.webp new file mode 100644 index 00000000..91c1ecea --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_bra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:618f642a2c7f12f5f14dbdc6024dc824496e2d37444f52df7a33b722cb08f855 +size 96642 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_blush.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_blush.webp new file mode 100644 index 00000000..f6767d68 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_blush.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67a2522a514f746dcfc292e2f26276500442b0bde3e0a744870e0aa5d4fe6431 +size 28820 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_breath.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_breath.webp new file mode 100644 index 00000000..5f3feffb --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_breath.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:577f9c62d5d885d760d362f3eaca293684c627fc6f844386583947c2c737f088 +size 12190 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyebrows_base.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyebrows_base.webp new file mode 100644 index 00000000..0934894f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyebrows_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de040d4b077b1a0065ea63bb6192d9bce468bc88542ad68f2088038d5a1b84b2 +size 11946 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_right.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_right.webp new file mode 100644 index 00000000..c1a8af1f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:891591d60ecd743a260fd819a8da88ef4612097823f2af859b8af56f6b645821 +size 13648 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_up.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_up.webp new file mode 100644 index 00000000..9e04fc56 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2cd8b7a6f59d28aa611ec2aec23c88a91598a1f0f13b9e09934fcb370a0b5be +size 14230 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_up_hearts.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_up_hearts.webp new file mode 100644 index 00000000..971a3b56 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_eyes_base_up_hearts.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:809a6879fef667279139dbc46e50ea70048c4d7d5d8da9f10d6db9e63dd7d3b5 +size 14956 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open.webp new file mode 100644 index 00000000..599ef341 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7b89338ab8f7056145146de1ad1c083db7addf389e78f05a0beab565e427b49 +size 17008 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open_ahegao.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open_ahegao.webp new file mode 100644 index 00000000..2ec69f06 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open_ahegao.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6232e37db0961ac9a7ebe9374eb030699dd383b8e8b87bdc5a7771f7a01e45b2 +size 18942 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open_ahegao_spit.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open_ahegao_spit.webp new file mode 100644 index 00000000..47dba993 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_face_mouth_open_ahegao_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0714193d15ee27ed2678683e75f23f2c6966242e02c4e55dc6067c7073924d0 +size 24590 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_moist.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_moist.webp new file mode 100644 index 00000000..756ad113 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_moist.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67ebfe2a0071a4bf7ccfe91266993ac0dd05091f22f9a2782b7e0dc9493a447e +size 3934 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_squirt.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_squirt.webp new file mode 100644 index 00000000..00b11a64 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_squirt.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c4be7a18a4024ed5dfd48cdd9a5c2e15b61d82b2b900377b172fdcd10c18b35 +size 4438 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_wet.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_wet.webp new file mode 100644 index 00000000..f3db02e1 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_fluids_wet.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac17ad94f99dde8a539f09b1ae6fb6dfd3e6b979396557c5ec75cb46aa439931 +size 7628 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_hair_back.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_hair_back.webp new file mode 100644 index 00000000..ef8c9286 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_hair_back.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:563b8ac2ba6d4844ab980eef2eb588f748df459e35797e24e469f2ddbb957436 +size 106950 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_hair_front.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_hair_front.webp new file mode 100644 index 00000000..a5401f1e --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_hair_front.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5bc33ce4e0b529b5e67fe3a0be84c1fc8f42f0d6f1c442b237c4c04776b7f997 +size 129406 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_panties.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_panties.webp new file mode 100644 index 00000000..6b4cd686 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_panties.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1070306b035ebd879805476e2dee0aa3c9cb81677f52823457359b416a211674 +size 62412 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_shadow.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_shadow.webp new file mode 100644 index 00000000..0532a76c --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_shadow.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c52e4da0432c36782de9ef219ed710e2154010c7401afbe16d0dcd830790ed3 +size 32262 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_shirt.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_shirt.webp new file mode 100644 index 00000000..d43b963f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_shirt.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd4862bf901141695c65d6a6b6eb16278170c57de609dc26d8d5f71a3e1ace3f +size 161344 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_skirt.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_skirt.webp new file mode 100644 index 00000000..4ff1d24e --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_skirt.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:803519b0ea89f554ec8d0106ec36e393cc748039bb57f8d7f94af538400a5865 +size 107458 diff --git a/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_stockings.webp b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_stockings.webp new file mode 100644 index 00000000..6f31da51 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/head_back_spread_legs/lun_inspect_head_back_spread_legs_luna_stockings.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:061808e0789cd47cd1ce0913b68ec215ed49f3cc4e43cfe4fb51bae66dc1bacf +size 63476 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_arm_idle.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_arm_idle.webp new file mode 100644 index 00000000..f298811f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_arm_idle.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84a06bd4a10141813db675e44280ce3221e7331d9ca441d7ddebda2bebff66c5 +size 34430 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_arm_masturbate.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_arm_masturbate.webp new file mode 100644 index 00000000..de6d50ce --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_arm_masturbate.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:394f8eff25d7b0fdddacc0d19f78dedd90f8613a4a7cdea01b7b4e4a182afcd7 +size 44068 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_body.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_body.webp new file mode 100644 index 00000000..dec901d7 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_body.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f7dc1fd1907d1c0ff421f0959137ff15d972869eec331ae94e2b301fb7c7c91 +size 245684 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_bra.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_bra.webp new file mode 100644 index 00000000..91c1ecea --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_bra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:618f642a2c7f12f5f14dbdc6024dc824496e2d37444f52df7a33b722cb08f855 +size 96642 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_bra_grab.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_bra_grab.webp new file mode 100644 index 00000000..b4ef0cd2 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_bra_grab.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4630957c5fa7a9b744d52c0acddaa170f56dfae9804e138fd6b81e68dc7fdeb7 +size 96712 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_shirt.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_shirt.webp new file mode 100644 index 00000000..d43b963f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_shirt.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd4862bf901141695c65d6a6b6eb16278170c57de609dc26d8d5f71a3e1ace3f +size 161344 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_skirt.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_skirt.webp new file mode 100644 index 00000000..b6f22853 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_skirt.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da445676f5fac1aea0e06e73c0e8fc9041d1d916eb8e6af2f88962fef91a2320 +size 107120 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_stockings.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_stockings.webp new file mode 100644 index 00000000..38ce1c14 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_clothes_stockings.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27a7bbac33c35f4cfb68287d312da2d672d40d9e42a21895a1d8221c3cd38922 +size 75936 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_blush.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_blush.webp new file mode 100644 index 00000000..54c69966 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_blush.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04dac1cd99bf852ec17ab1a1e9054cb5d8242391e5cd12717529dead3e671dd6 +size 27746 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_angry.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_angry.webp new file mode 100644 index 00000000..aa43bdbe --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_angry.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67f07d5bfe960d61d0b3e88453e1273b8b2d83146a41352e53ad568f7d287aec +size 11346 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_base.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_base.webp new file mode 100644 index 00000000..53d5ae1b --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41606f502d250d631e36178dc525205108c6394aff6b260cc68a6b665acb89c8 +size 11464 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_raised.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_raised.webp new file mode 100644 index 00000000..51a2580b --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_raised.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ee315bcbf5dc6fae123e78fc87bbcd5c40c4722dd1fe0b9c180969b1aedcda3 +size 11804 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_shocked.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_shocked.webp new file mode 100644 index 00000000..5028f52e --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_shocked.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ad3018e808ab4bc2b19b670685568fc0c53c4dc1e25f53dff65ba3f9f064136 +size 12284 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_worried.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_worried.webp new file mode 100644 index 00000000..a7afd3db --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyebrows_worried.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d358807c24139bde7576e55fe8ac5166f1835fba362373a6d33ec6de4922ac1a +size 11290 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_down.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_down.webp new file mode 100644 index 00000000..a984fe25 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a365c9c88bee02b9e8738d89145d4446f2a34c97daa30c4677eac0671d372848 +size 14646 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_left.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_left.webp new file mode 100644 index 00000000..33685930 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9b69c8c86de0911c12c74bd88c30103686f40f93c4a346689f659998efcea7d +size 15404 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_right.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_right.webp new file mode 100644 index 00000000..cf34b3c4 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dce74a94c1a936ef03eca6ecafe4600e0ff5d1004ed12d0bbadbdd4779ba7db8 +size 14874 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_squint.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_squint.webp new file mode 100644 index 00000000..43fd2abf --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb8e45483b9cd71915f164e45dcf45890e4a3029677ce5be0a7fd95c0672ed52 +size 14978 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_stare.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_stare.webp new file mode 100644 index 00000000..33036854 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e292d4cc488984aee9ddac5aae145defdd9f9fe846a33ab09831ca277d712c40 +size 15106 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_up.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_up.webp new file mode 100644 index 00000000..5a9f77b7 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_base_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37e5695bcf080632e01f3eb03428d4fd78660e9fdbebf4111ec6232203b68c0d +size 14966 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_closed.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_closed.webp new file mode 100644 index 00000000..7472e530 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_closed.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11fea23ca1e17b76fc4b47396877b34b10982296e62570de7f6f8802f39b75f0 +size 11526 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_down.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_down.webp new file mode 100644 index 00000000..64e083ec --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bd78c56eaa1076cc4d5d83a97de74b1fa74acf1515c27b0f4676883a17d79ee +size 12798 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_left.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_left.webp new file mode 100644 index 00000000..8ba44e25 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb04c8658b09c71ecab904f1a66f3e81ff21b4b84f322c6b8f1e628e2f7420f0 +size 13998 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_right.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_right.webp new file mode 100644 index 00000000..c462004c --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d4922e22b1f455dcd3cc0fb6db86df32ffb80572fc2e2df4004771d6191a783 +size 13364 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_squint.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_squint.webp new file mode 100644 index 00000000..8068f9e8 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dec4f5e47ee4361b37ac5759cc242ae4ff160ccfe4b83a1e5e23aced9e763b0 +size 13268 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_stare.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_stare.webp new file mode 100644 index 00000000..dd62d54b --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d6a27715a87160d64236a4fe431c02cd83b6687890df37379ee914864cf37e6 +size 13772 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_up.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_up.webp new file mode 100644 index 00000000..d7b9d6e3 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_halflid_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:609cd9ae62b7f810a0291f103174dc2ea97e00d20b044ccb46f3e8c353bdc685 +size 13868 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_down.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_down.webp new file mode 100644 index 00000000..12cee79a --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:248a3a12ac16da1e8fa2e7d01f7326bf6a691e60494384f247bc2d411577b375 +size 15788 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_left.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_left.webp new file mode 100644 index 00000000..d6d24a5a --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f39f9a6d54ab7f2a675cf160ed5f0945584289977a29df11349d32ab01c8d55 +size 16488 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_right.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_right.webp new file mode 100644 index 00000000..60caab00 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66cf9efc6b28e8a399e7b5faac911b47971281ed1b83cfcb5828622c5055b9e9 +size 16434 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_squint.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_squint.webp new file mode 100644 index 00000000..a1fcf340 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94a18146ab96a9ff43aca6d0f891053ef78efc20fb2cb26eaed3758e4fb68fc9 +size 15726 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_stare.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_stare.webp new file mode 100644 index 00000000..854f96aa --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:661f6e7773134eb647b76a808c371e282d93e663af5d8c15f1a401c3b49997cd +size 16184 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_up.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_up.webp new file mode 100644 index 00000000..c6cb1e85 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_eyes_wide_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f17638f071085889b444b38acc15194ad239abf389a5f5e0d37731ea9ce072f4 +size 15938 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_annoyed.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_annoyed.webp new file mode 100644 index 00000000..55bc6026 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_annoyed.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:599e1c4a1fe6c0557ba8fd878b3f600ec801120da3329f9e4c0197dfad7baf6c +size 6146 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_base.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_base.webp new file mode 100644 index 00000000..bd0d08f0 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44e59f9d4b2fe44a170534037a0cc7b1b86d4c26e8efef57784cfd3353ff7b5a +size 6668 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_grin.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_grin.webp new file mode 100644 index 00000000..89253069 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_grin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85822db91f83e91eff5bc16a6939c6786e889572ffd9d0df87dac12303075831 +size 10866 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_neutral.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_neutral.webp new file mode 100644 index 00000000..e38d5096 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_neutral.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e2835fb2ebb43636b529cc4ffd1c216c504ac0ea94582557cd589f647713f45 +size 6422 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_neutral_cum.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_neutral_cum.webp new file mode 100644 index 00000000..5b5ea6de --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_neutral_cum.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d8e8d940456be81e7ad186ed2229fd5bf12f6036c5d3e0061226ca0d6d962be +size 7956 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open.webp new file mode 100644 index 00000000..a18482a4 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a801bf0a9c685947536881bacce4ebb7861f47ad6dab33e9561689e182e2f01 +size 10428 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_cum.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_cum.webp new file mode 100644 index 00000000..58857233 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_cum.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56bdc9ce445fa1933e43869d779d33f12a9ba260ff470cf79f74f748dacb0da5 +size 14466 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_spit.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_spit.webp new file mode 100644 index 00000000..12a52797 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0f5e3e1628353369c93d57233e7bf2a802aa43c213451954978fd9287c63164 +size 10746 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_tongue.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_tongue.webp new file mode 100644 index 00000000..06aaadd5 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_tongue.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1789ff941a69889c4680e9218a30d2e4adef6ba1667250e57663cda012317dd +size 10912 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_tongue_spit.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_tongue_spit.webp new file mode 100644 index 00000000..17f9252f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_open_tongue_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bec444c3c98f5c4033dd4eb3bedbe8e9734be05163ca28d7ecad750f3c32ccf7 +size 11678 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_soft.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_soft.webp new file mode 100644 index 00000000..a3985c79 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_soft.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f914feb48d38e9b51dc641a5cf1c2a980280f68e874d004baee832a11e329d5 +size 8422 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_spit.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_spit.webp new file mode 100644 index 00000000..eeba74f6 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22613aec6ee40e76796d5b81039ba78ce5e3e4226ca61b0da2ea4b39ba5908e3 +size 10142 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_swallow.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_swallow.webp new file mode 100644 index 00000000..7ad65e6f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_face_mouth_swallow.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:646e3d8f72969f36e37574141678ee11f786abb0393ffe3154ced8f63ee60659 +size 21188 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_hair_back.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_hair_back.webp new file mode 100644 index 00000000..1369b54e --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_hair_back.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5db59a209ee336a9b394b3557a7ab8022c5ccd50419677196261821cb942d89b +size 140016 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_hair_front.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_hair_front.webp new file mode 100644 index 00000000..bf0fb8f7 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_hair_front.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b932893f780511852111ed00c14c80514124b0f63dcc83e0100c244656c7106 +size 206840 diff --git a/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_shadow.webp b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_shadow.webp new file mode 100644 index 00000000..e9316f66 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/legs_together/lun_inspect_legs_together_luna_shadow.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57f840aa9b22260af3b146c554bd4aa807a155902c7c5b4ffaae1f79d73846d5 +size 22238 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_arm_idle.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_arm_idle.webp new file mode 100644 index 00000000..f298811f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_arm_idle.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84a06bd4a10141813db675e44280ce3221e7331d9ca441d7ddebda2bebff66c5 +size 34430 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_arm_masturbate.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_arm_masturbate.webp new file mode 100644 index 00000000..de6d50ce --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_arm_masturbate.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:394f8eff25d7b0fdddacc0d19f78dedd90f8613a4a7cdea01b7b4e4a182afcd7 +size 44068 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_body.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_body.webp new file mode 100644 index 00000000..89cda03c --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_body.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60b436ae115ec27c9024f3eab9324e3e5648d93d97d3e96de751cfd39fb9636a +size 257526 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_bra.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_bra.webp new file mode 100644 index 00000000..91c1ecea --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_bra.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:618f642a2c7f12f5f14dbdc6024dc824496e2d37444f52df7a33b722cb08f855 +size 96642 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_bra_grab.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_bra_grab.webp new file mode 100644 index 00000000..b4ef0cd2 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_bra_grab.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4630957c5fa7a9b744d52c0acddaa170f56dfae9804e138fd6b81e68dc7fdeb7 +size 96712 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_panties.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_panties.webp new file mode 100644 index 00000000..6b4cd686 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_panties.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1070306b035ebd879805476e2dee0aa3c9cb81677f52823457359b416a211674 +size 62412 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_shirt.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_shirt.webp new file mode 100644 index 00000000..d43b963f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_shirt.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd4862bf901141695c65d6a6b6eb16278170c57de609dc26d8d5f71a3e1ace3f +size 161344 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_skirt.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_skirt.webp new file mode 100644 index 00000000..4ff1d24e --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_skirt.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:803519b0ea89f554ec8d0106ec36e393cc748039bb57f8d7f94af538400a5865 +size 107458 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_stockings.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_stockings.webp new file mode 100644 index 00000000..6f31da51 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_clothes_stockings.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:061808e0789cd47cd1ce0913b68ec215ed49f3cc4e43cfe4fb51bae66dc1bacf +size 63476 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_blush.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_blush.webp new file mode 100644 index 00000000..54c69966 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_blush.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04dac1cd99bf852ec17ab1a1e9054cb5d8242391e5cd12717529dead3e671dd6 +size 27746 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_angry.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_angry.webp new file mode 100644 index 00000000..aa43bdbe --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_angry.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67f07d5bfe960d61d0b3e88453e1273b8b2d83146a41352e53ad568f7d287aec +size 11346 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_base.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_base.webp new file mode 100644 index 00000000..53d5ae1b --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41606f502d250d631e36178dc525205108c6394aff6b260cc68a6b665acb89c8 +size 11464 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_raised.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_raised.webp new file mode 100644 index 00000000..51a2580b --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_raised.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ee315bcbf5dc6fae123e78fc87bbcd5c40c4722dd1fe0b9c180969b1aedcda3 +size 11804 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_shocked.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_shocked.webp new file mode 100644 index 00000000..5028f52e --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_shocked.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ad3018e808ab4bc2b19b670685568fc0c53c4dc1e25f53dff65ba3f9f064136 +size 12284 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_worried.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_worried.webp new file mode 100644 index 00000000..a7afd3db --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyebrows_worried.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d358807c24139bde7576e55fe8ac5166f1835fba362373a6d33ec6de4922ac1a +size 11290 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_down.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_down.webp new file mode 100644 index 00000000..a984fe25 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a365c9c88bee02b9e8738d89145d4446f2a34c97daa30c4677eac0671d372848 +size 14646 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_left.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_left.webp new file mode 100644 index 00000000..33685930 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9b69c8c86de0911c12c74bd88c30103686f40f93c4a346689f659998efcea7d +size 15404 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_right.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_right.webp new file mode 100644 index 00000000..cf34b3c4 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dce74a94c1a936ef03eca6ecafe4600e0ff5d1004ed12d0bbadbdd4779ba7db8 +size 14874 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_squint.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_squint.webp new file mode 100644 index 00000000..43fd2abf --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb8e45483b9cd71915f164e45dcf45890e4a3029677ce5be0a7fd95c0672ed52 +size 14978 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_stare.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_stare.webp new file mode 100644 index 00000000..33036854 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e292d4cc488984aee9ddac5aae145defdd9f9fe846a33ab09831ca277d712c40 +size 15106 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_up.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_up.webp new file mode 100644 index 00000000..5a9f77b7 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_base_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37e5695bcf080632e01f3eb03428d4fd78660e9fdbebf4111ec6232203b68c0d +size 14966 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_closed.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_closed.webp new file mode 100644 index 00000000..7472e530 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_closed.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11fea23ca1e17b76fc4b47396877b34b10982296e62570de7f6f8802f39b75f0 +size 11526 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_down.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_down.webp new file mode 100644 index 00000000..64e083ec --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bd78c56eaa1076cc4d5d83a97de74b1fa74acf1515c27b0f4676883a17d79ee +size 12798 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_left.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_left.webp new file mode 100644 index 00000000..8ba44e25 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb04c8658b09c71ecab904f1a66f3e81ff21b4b84f322c6b8f1e628e2f7420f0 +size 13998 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_right.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_right.webp new file mode 100644 index 00000000..c462004c --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d4922e22b1f455dcd3cc0fb6db86df32ffb80572fc2e2df4004771d6191a783 +size 13364 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_squint.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_squint.webp new file mode 100644 index 00000000..8068f9e8 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dec4f5e47ee4361b37ac5759cc242ae4ff160ccfe4b83a1e5e23aced9e763b0 +size 13268 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_stare.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_stare.webp new file mode 100644 index 00000000..dd62d54b --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d6a27715a87160d64236a4fe431c02cd83b6687890df37379ee914864cf37e6 +size 13772 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_up.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_up.webp new file mode 100644 index 00000000..d7b9d6e3 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_halflid_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:609cd9ae62b7f810a0291f103174dc2ea97e00d20b044ccb46f3e8c353bdc685 +size 13868 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_down.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_down.webp new file mode 100644 index 00000000..12cee79a --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:248a3a12ac16da1e8fa2e7d01f7326bf6a691e60494384f247bc2d411577b375 +size 15788 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_left.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_left.webp new file mode 100644 index 00000000..d6d24a5a --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f39f9a6d54ab7f2a675cf160ed5f0945584289977a29df11349d32ab01c8d55 +size 16488 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_right.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_right.webp new file mode 100644 index 00000000..60caab00 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66cf9efc6b28e8a399e7b5faac911b47971281ed1b83cfcb5828622c5055b9e9 +size 16434 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_squint.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_squint.webp new file mode 100644 index 00000000..a1fcf340 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_squint.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94a18146ab96a9ff43aca6d0f891053ef78efc20fb2cb26eaed3758e4fb68fc9 +size 15726 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_stare.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_stare.webp new file mode 100644 index 00000000..854f96aa --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:661f6e7773134eb647b76a808c371e282d93e663af5d8c15f1a401c3b49997cd +size 16184 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_up.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_up.webp new file mode 100644 index 00000000..c6cb1e85 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_eyes_wide_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f17638f071085889b444b38acc15194ad239abf389a5f5e0d37731ea9ce072f4 +size 15938 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_annoyed.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_annoyed.webp new file mode 100644 index 00000000..55bc6026 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_annoyed.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:599e1c4a1fe6c0557ba8fd878b3f600ec801120da3329f9e4c0197dfad7baf6c +size 6146 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_base.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_base.webp new file mode 100644 index 00000000..bd0d08f0 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44e59f9d4b2fe44a170534037a0cc7b1b86d4c26e8efef57784cfd3353ff7b5a +size 6668 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_grin.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_grin.webp new file mode 100644 index 00000000..89253069 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_grin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85822db91f83e91eff5bc16a6939c6786e889572ffd9d0df87dac12303075831 +size 10866 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_neutral.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_neutral.webp new file mode 100644 index 00000000..e38d5096 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_neutral.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e2835fb2ebb43636b529cc4ffd1c216c504ac0ea94582557cd589f647713f45 +size 6422 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_neutral_cum.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_neutral_cum.webp new file mode 100644 index 00000000..5b5ea6de --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_neutral_cum.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d8e8d940456be81e7ad186ed2229fd5bf12f6036c5d3e0061226ca0d6d962be +size 7956 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open.webp new file mode 100644 index 00000000..a18482a4 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a801bf0a9c685947536881bacce4ebb7861f47ad6dab33e9561689e182e2f01 +size 10428 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_cum.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_cum.webp new file mode 100644 index 00000000..58857233 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_cum.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56bdc9ce445fa1933e43869d779d33f12a9ba260ff470cf79f74f748dacb0da5 +size 14466 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_spit.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_spit.webp new file mode 100644 index 00000000..12a52797 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0f5e3e1628353369c93d57233e7bf2a802aa43c213451954978fd9287c63164 +size 10746 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_tongue.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_tongue.webp new file mode 100644 index 00000000..06aaadd5 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_tongue.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1789ff941a69889c4680e9218a30d2e4adef6ba1667250e57663cda012317dd +size 10912 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_tongue_spit.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_tongue_spit.webp new file mode 100644 index 00000000..17f9252f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_open_tongue_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bec444c3c98f5c4033dd4eb3bedbe8e9734be05163ca28d7ecad750f3c32ccf7 +size 11678 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_soft.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_soft.webp new file mode 100644 index 00000000..a3985c79 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_soft.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f914feb48d38e9b51dc641a5cf1c2a980280f68e874d004baee832a11e329d5 +size 8422 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_spit.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_spit.webp new file mode 100644 index 00000000..eeba74f6 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_spit.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22613aec6ee40e76796d5b81039ba78ce5e3e4226ca61b0da2ea4b39ba5908e3 +size 10142 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_swallow.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_swallow.webp new file mode 100644 index 00000000..7ad65e6f --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_face_mouth_swallow.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:646e3d8f72969f36e37574141678ee11f786abb0393ffe3154ced8f63ee60659 +size 21188 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_moist.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_moist.webp new file mode 100644 index 00000000..756ad113 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_moist.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67ebfe2a0071a4bf7ccfe91266993ac0dd05091f22f9a2782b7e0dc9493a447e +size 3934 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_squirt.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_squirt.webp new file mode 100644 index 00000000..00b11a64 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_squirt.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c4be7a18a4024ed5dfd48cdd9a5c2e15b61d82b2b900377b172fdcd10c18b35 +size 4438 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_wet.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_wet.webp new file mode 100644 index 00000000..f3db02e1 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_fluids_wet.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac17ad94f99dde8a539f09b1ae6fb6dfd3e6b979396557c5ec75cb46aa439931 +size 7628 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_hair_back.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_hair_back.webp new file mode 100644 index 00000000..1369b54e --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_hair_back.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5db59a209ee336a9b394b3557a7ab8022c5ccd50419677196261821cb942d89b +size 140016 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_hair_front.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_hair_front.webp new file mode 100644 index 00000000..bf0fb8f7 --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_hair_front.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b932893f780511852111ed00c14c80514124b0f63dcc83e0100c244656c7106 +size 206840 diff --git a/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_shadow.webp b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_shadow.webp new file mode 100644 index 00000000..0532a76c --- /dev/null +++ b/game/images/CG/lun_inspect/luna/spread_legs/lun_inspect_spread_legs_luna_shadow.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c52e4da0432c36782de9ef219ed710e2154010c7401afbe16d0dcd830790ed3 +size 32262 diff --git a/game/images/CG/lun_talk/lun_talk_background.webp b/game/images/CG/lun_talk/lun_talk_background.webp new file mode 100644 index 00000000..07d6097e --- /dev/null +++ b/game/images/CG/lun_talk/lun_talk_background.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e0f2b82689aa5c00a7daff58ba2586a06fd3684784a687b8cacf0c052233fc1 +size 1360102 diff --git a/game/images/CG/lun_talk/lun_talk_book.webp b/game/images/CG/lun_talk/lun_talk_book.webp new file mode 100644 index 00000000..e97575de --- /dev/null +++ b/game/images/CG/lun_talk/lun_talk_book.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28e83e55733d0ee49bb634f706b7fb39c25a045d1ac5bf35ce5a9ca597a31202 +size 199426 diff --git a/game/images/CG/lun_talk/luna/lun_talk_arm_left_hold_leg_variant_legs_side.webp b/game/images/CG/lun_talk/luna/lun_talk_arm_left_hold_leg_variant_legs_side.webp new file mode 100644 index 00000000..80cd9abc --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_arm_left_hold_leg_variant_legs_side.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7058776cdcc822f53e2d75de756c50e27874a9b23ece0b02ef2839faf0b19405 +size 41286 diff --git a/game/images/CG/lun_talk/luna/lun_talk_arm_left_hold_leg_variant_legs_up.webp b/game/images/CG/lun_talk/luna/lun_talk_arm_left_hold_leg_variant_legs_up.webp new file mode 100644 index 00000000..a147e4b6 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_arm_left_hold_leg_variant_legs_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:206928ce91ad72708eecc1b951ea5e5f63e3b76e6897a8b892211d2b6d233dc0 +size 52318 diff --git a/game/images/CG/lun_talk/luna/lun_talk_arm_left_masturbate_variant_legs_side.webp b/game/images/CG/lun_talk/luna/lun_talk_arm_left_masturbate_variant_legs_side.webp new file mode 100644 index 00000000..9f339ddc --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_arm_left_masturbate_variant_legs_side.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff5c67a90aeeecff6e9bd7a8d31b3f23a0d639e457b14b48d21cb86ff35a86d3 +size 52504 diff --git a/game/images/CG/lun_talk/luna/lun_talk_arm_left_masturbate_variant_legs_up.webp b/game/images/CG/lun_talk/luna/lun_talk_arm_left_masturbate_variant_legs_up.webp new file mode 100644 index 00000000..94fef188 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_arm_left_masturbate_variant_legs_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:357e2449458eaac1a37b74231cbe26875a4df982aded05a9c09a56225f65a5c3 +size 54422 diff --git a/game/images/CG/lun_talk/luna/lun_talk_arm_left_rest.webp b/game/images/CG/lun_talk/luna/lun_talk_arm_left_rest.webp new file mode 100644 index 00000000..2fb7bc49 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_arm_left_rest.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fc9938c1d16003f33ff2fddac7858ad2a16a3e46e5fdb510b57e603cb3e7706 +size 58864 diff --git a/game/images/CG/lun_talk/luna/lun_talk_arm_left_spread_variant_legs_up.webp b/game/images/CG/lun_talk/luna/lun_talk_arm_left_spread_variant_legs_up.webp new file mode 100644 index 00000000..3382ebeb --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_arm_left_spread_variant_legs_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4d67e65fdadd5f1773e30da5a397dda70525c470a0db752dc0e8b800c363141 +size 48992 diff --git a/game/images/CG/lun_talk/luna/lun_talk_arm_right_hold_leg_variant_legs_side.webp b/game/images/CG/lun_talk/luna/lun_talk_arm_right_hold_leg_variant_legs_side.webp new file mode 100644 index 00000000..b7e5161f --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_arm_right_hold_leg_variant_legs_side.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab7d2712222d4459d53d9368630fae8995d708d4478d18e9d37ed3bce43e5c18 +size 41466 diff --git a/game/images/CG/lun_talk/luna/lun_talk_arm_right_hold_leg_variant_legs_up.webp b/game/images/CG/lun_talk/luna/lun_talk_arm_right_hold_leg_variant_legs_up.webp new file mode 100644 index 00000000..ac5f4c2a --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_arm_right_hold_leg_variant_legs_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79fa63e6d3bc7814bad693131978bbb08cd22e5cd012e8e21193f2c191be450f +size 45292 diff --git a/game/images/CG/lun_talk/luna/lun_talk_arm_right_rest.webp b/game/images/CG/lun_talk/luna/lun_talk_arm_right_rest.webp new file mode 100644 index 00000000..8fa32fe9 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_arm_right_rest.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08f61d35b016e1b479fa54e677ae77700a09fd47f8b8ec2b2d34f0f8beaf8dc6 +size 53194 diff --git a/game/images/CG/lun_talk/luna/lun_talk_arms_grab_chest.webp b/game/images/CG/lun_talk/luna/lun_talk_arms_grab_chest.webp new file mode 100644 index 00000000..b53d429e --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_arms_grab_chest.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a216cb91fc483e1f802be6cee59aeabcc4c55a5abeb76ce5ba00028fdfee6ffe +size 105858 diff --git a/game/images/CG/lun_talk/luna/lun_talk_blush_base.webp b/game/images/CG/lun_talk/luna/lun_talk_blush_base.webp new file mode 100644 index 00000000..a9baab8c --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_blush_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbb73e4d0d7e21eda6a4ca57c788302678bb00056074d650e06eb8bb19c105d1 +size 34292 diff --git a/game/images/CG/lun_talk/luna/lun_talk_blush_heavy.webp b/game/images/CG/lun_talk/luna/lun_talk_blush_heavy.webp new file mode 100644 index 00000000..ecfe2065 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_blush_heavy.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a59078c7481509675eb5849e6d2e47615e5194416d80e2ebb3007cd3e8be30d8 +size 35776 diff --git a/game/images/CG/lun_talk/luna/lun_talk_chest.webp b/game/images/CG/lun_talk/luna/lun_talk_chest.webp new file mode 100644 index 00000000..a8d0797c --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_chest.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4052587ebe74480e02336085d65d40f9e7ad697ca205ede08816fbc1baee5d7c +size 53434 diff --git a/game/images/CG/lun_talk/luna/lun_talk_cum_chest.webp b/game/images/CG/lun_talk/luna/lun_talk_cum_chest.webp new file mode 100644 index 00000000..90545785 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_cum_chest.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc7183f3b3d13121051462c75382f3bb2495b352706d557d8405a4f2eea29ff1 +size 16770 diff --git a/game/images/CG/lun_talk/luna/lun_talk_cum_chin.webp b/game/images/CG/lun_talk/luna/lun_talk_cum_chin.webp new file mode 100644 index 00000000..a473b36f --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_cum_chin.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c697dfe5b9a51bd7998d7738a0f610f4265cd7047c29f9f1c9ec8472239b33b +size 14058 diff --git a/game/images/CG/lun_talk/luna/lun_talk_cum_desk.webp b/game/images/CG/lun_talk/luna/lun_talk_cum_desk.webp new file mode 100644 index 00000000..1d63d023 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_cum_desk.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c81808e38ad87d9496e95790412afe685b9687a533473ded445e4e1c4439ed1 +size 21334 diff --git a/game/images/CG/lun_talk/luna/lun_talk_cum_hand.webp b/game/images/CG/lun_talk/luna/lun_talk_cum_hand.webp new file mode 100644 index 00000000..3ed2c205 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_cum_hand.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54491a388b479fc0e9382c6e578bb7e3c379138100829c6812b1b254e043dd7e +size 14826 diff --git a/game/images/CG/lun_talk/luna/lun_talk_cum_stomach.webp b/game/images/CG/lun_talk/luna/lun_talk_cum_stomach.webp new file mode 100644 index 00000000..e5b17f75 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_cum_stomach.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ef2b95f70d4adc7d09796e4829e961c89fc756445020eb0bd209d32c83b5fe1 +size 12496 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyebrows_base.webp b/game/images/CG/lun_talk/luna/lun_talk_eyebrows_base.webp new file mode 100644 index 00000000..d8b5d79f --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyebrows_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc98b9b49d8b4a05c421d0347aa2c7bb719deae86f42df6707c88c5ccb0d2195 +size 9988 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyebrows_raised.webp b/game/images/CG/lun_talk/luna/lun_talk_eyebrows_raised.webp new file mode 100644 index 00000000..8a27ea05 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyebrows_raised.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1cb212f9286df48d030063fded6c446a3982a450a567e9a3c50ef4dd082a886 +size 11498 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyebrows_surprised.webp b/game/images/CG/lun_talk/luna/lun_talk_eyebrows_surprised.webp new file mode 100644 index 00000000..286e458d --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyebrows_surprised.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c325a138cb1208896f31c2aa1d28574094a41f9df05248ba0ebdae023a95ac1 +size 10716 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyebrows_upset.webp b/game/images/CG/lun_talk/luna/lun_talk_eyebrows_upset.webp new file mode 100644 index 00000000..93b978b4 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyebrows_upset.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e3f45e6a7ec6b75e6028a84759f61aa4f46e2816848a718f79b53b124ccb92a +size 11536 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyebrows_worried.webp b/game/images/CG/lun_talk/luna/lun_talk_eyebrows_worried.webp new file mode 100644 index 00000000..01902ac1 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyebrows_worried.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8acdbdd17fa4d392882a1709bbcefaaef7f61e3c6842126e325ca90466481d3 +size 10616 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_base_ahegao.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_ahegao.webp new file mode 100644 index 00000000..9b632c5d --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_ahegao.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc774c1d05956e45b3888394688cdb92b299384d55f6d32959721efe0c7f1426 +size 16652 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_base_down.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_down.webp new file mode 100644 index 00000000..3639a6e7 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a25553fd26f11d4eb16646b765b50f339110b943a5cdbd4c9856ce2e1b8bdfb +size 17492 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_base_left.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_left.webp new file mode 100644 index 00000000..138a8461 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa0ab1ff995e053d1cffe69c5fb3c701757ba822d8f1cf3378573a728394c778 +size 16100 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_base_right.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_right.webp new file mode 100644 index 00000000..6a6f9be1 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9325cdee740ce1e24c80bb0c5a452c58faeecf1c185ec754dfc7209b690ea01e +size 16070 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_base_stare.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_stare.webp new file mode 100644 index 00000000..fa7f90f9 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd3e1a263b19e7a9923f5fed9e6c3f19026b6099960afdf11c277d0e57777d3b +size 17180 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_base_up.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_up.webp new file mode 100644 index 00000000..c07a6b99 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_base_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97b5812d76b9e51bfcb368095147a78015573498794fa4cd3475599b8a4b0466 +size 16654 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_closed.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_closed.webp new file mode 100644 index 00000000..b7c56e3e --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_closed.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6737a6f43b5000da44be3ddb1499e57ae2f55c43e4dec5e0b0f993e8bcbeeb93 +size 12224 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_ahegao.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_ahegao.webp new file mode 100644 index 00000000..0a72d604 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_ahegao.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8d6fb8c5ef399a001f5141c35180b7e70caa01aa8d81973a8484a20d0c200c4 +size 15050 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_down.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_down.webp new file mode 100644 index 00000000..9b64a72f --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f717d1b2cc44c1f8f1d8bc1f5a180ba7864a6733376208ec903c4ea2148c4be0 +size 14990 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_left.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_left.webp new file mode 100644 index 00000000..381b40e3 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1fc1eb6dbbe1e1d9d2c004c5e27efc38d9f713d8931fe429850d6a5f85a3b26 +size 14352 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_right.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_right.webp new file mode 100644 index 00000000..f01585ed --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e64cbafc3ac0090d607cf69eec0303d848431325bba75af2d77a341c42e9bb30 +size 14418 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_stare.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_stare.webp new file mode 100644 index 00000000..64184056 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0be65ea041d6bfb46e2f1da8af3144252a4a8b02cc5b3f04ab80dbd3e9affdd4 +size 15414 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_up.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_up.webp new file mode 100644 index 00000000..77793be2 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_narrow_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cc7079e67949bc209f46d1216ee8e33b82ec7a32728975698f365457295cfce +size 14868 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_ahegao.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_ahegao.webp new file mode 100644 index 00000000..77c8ca81 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_ahegao.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f49870f6392df7014003f85d25a2afaaedd427de101589496e2e1cb8dc6a8b5c +size 18504 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_down.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_down.webp new file mode 100644 index 00000000..64cb9a6f --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e99701fb013ef63ec4d712a618b87d21c89db871a825cb546377e56d777f9f4 +size 20000 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_left.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_left.webp new file mode 100644 index 00000000..77f75d40 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_left.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e33e845b10c848298829e7d9ec561e57fc20aaca854e92401b6856335c7db7c8 +size 18440 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_right.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_right.webp new file mode 100644 index 00000000..a97a2360 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_right.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d88c2c6b7c96d48767d103324d0b648fa5a7eec68757c38fdc8567dc355f8ecd +size 18404 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_stare.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_stare.webp new file mode 100644 index 00000000..afe57165 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_stare.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57f3494ed7b089a2af7673567e5a9859fcd2a9824dc32d35317c8c0a47742358 +size 19112 diff --git a/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_up.webp b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_up.webp new file mode 100644 index 00000000..d5a99535 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_eyes_wide_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:770f82eb8b3785ca4b0d6be36778626835c519aca83c32c43fcefc84ce811cfb +size 18506 diff --git a/game/images/CG/lun_talk/luna/lun_talk_hair.webp b/game/images/CG/lun_talk/luna/lun_talk_hair.webp new file mode 100644 index 00000000..31907fb7 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_hair.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26c10a042b5a56d69984960c9f56bc9b9c8702a879297426fd6b46e799a8df32 +size 233376 diff --git a/game/images/CG/lun_talk/luna/lun_talk_legs_down.webp b/game/images/CG/lun_talk/luna/lun_talk_legs_down.webp new file mode 100644 index 00000000..7eb236f0 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_legs_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23abe3d2873c40fdacd62e2d641bd0eca4e2f7ba5a3f596ed661819cc0a20941 +size 145080 diff --git a/game/images/CG/lun_talk/luna/lun_talk_legs_side.webp b/game/images/CG/lun_talk/luna/lun_talk_legs_side.webp new file mode 100644 index 00000000..0827c534 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_legs_side.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1aee99efc0c7395c5953246d10cff3e7834445d03288a61af52298ad1e6859c +size 203014 diff --git a/game/images/CG/lun_talk/luna/lun_talk_legs_up.webp b/game/images/CG/lun_talk/luna/lun_talk_legs_up.webp new file mode 100644 index 00000000..2f453ad0 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_legs_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08ef4ef5a389bc516f1986b9198ce37fa30560b88c1ccc815719677f77881bcd +size 239368 diff --git a/game/images/CG/lun_talk/luna/lun_talk_mouth_ahegao.webp b/game/images/CG/lun_talk/luna/lun_talk_mouth_ahegao.webp new file mode 100644 index 00000000..9612d374 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_mouth_ahegao.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65fe588af179b8d16ac0e41da0ff04e6e1b1ef4cc6611a43c036a229e901a02a +size 16372 diff --git a/game/images/CG/lun_talk/luna/lun_talk_mouth_base.webp b/game/images/CG/lun_talk/luna/lun_talk_mouth_base.webp new file mode 100644 index 00000000..7c704f17 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_mouth_base.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a88173213701334fc909f47f2a4f7762de5f22e993f701b31593a030505d45f +size 7518 diff --git a/game/images/CG/lun_talk/luna/lun_talk_mouth_open.webp b/game/images/CG/lun_talk/luna/lun_talk_mouth_open.webp new file mode 100644 index 00000000..7a7d1ad5 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_mouth_open.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1bd9cba8fef52cc2035ec92db1736028a30b8cc91b77a9be1d05e38469562841 +size 10538 diff --git a/game/images/CG/lun_talk/luna/lun_talk_mouth_open_wide.webp b/game/images/CG/lun_talk/luna/lun_talk_mouth_open_wide.webp new file mode 100644 index 00000000..89af239c --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_mouth_open_wide.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e3487db6f0f71589f63777464782e11799a347f3cf35dca37418af593765ce5 +size 13464 diff --git a/game/images/CG/lun_talk/luna/lun_talk_mouth_pout.webp b/game/images/CG/lun_talk/luna/lun_talk_mouth_pout.webp new file mode 100644 index 00000000..0d24eb75 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_mouth_pout.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1e1e09e7edc53a0a500da8605930af39b169564422feaf3116ff605dc53556d +size 6988 diff --git a/game/images/CG/lun_talk/luna/lun_talk_mouth_smile.webp b/game/images/CG/lun_talk/luna/lun_talk_mouth_smile.webp new file mode 100644 index 00000000..e33e1f5e --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_mouth_smile.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52ca32605fa9e8745ffa8f98b81350f29d021d76aee2ef5da09bfb0aeff7c154 +size 9886 diff --git a/game/images/CG/lun_talk/luna/lun_talk_mouth_soft.webp b/game/images/CG/lun_talk/luna/lun_talk_mouth_soft.webp new file mode 100644 index 00000000..a4219240 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_mouth_soft.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4d2d4ab7690b0b5ff88bcd18440cee793036d96cefe823d95d2061c3f51f2d2 +size 8652 diff --git a/game/images/CG/lun_talk/luna/lun_talk_mouth_timid.webp b/game/images/CG/lun_talk/luna/lun_talk_mouth_timid.webp new file mode 100644 index 00000000..f586b1cf --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_mouth_timid.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e618c3f88595bc12aec9e8bd93b7509d7297a0b96db5db1d6648f05ccfbc01f +size 7302 diff --git a/game/images/CG/lun_talk/luna/lun_talk_torso.webp b/game/images/CG/lun_talk/luna/lun_talk_torso.webp new file mode 100644 index 00000000..6f008e4b --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_torso.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f43418c15446a645daf409362ab248ee83941d5cc13e5ea4fda1547bdf711c2 +size 93364 diff --git a/game/images/CG/lun_talk/luna/lun_talk_wet_legs_down.webp b/game/images/CG/lun_talk/luna/lun_talk_wet_legs_down.webp new file mode 100644 index 00000000..bf69eafb --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_wet_legs_down.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c077150a067dc1638be633bb52ca092b99d562ce37f07885948e0da654832aa7 +size 7412 diff --git a/game/images/CG/lun_talk/luna/lun_talk_wet_legs_side.webp b/game/images/CG/lun_talk/luna/lun_talk_wet_legs_side.webp new file mode 100644 index 00000000..b6da26b0 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_wet_legs_side.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b13f0b720fae397eb1f3f74f4a9ce7fd21022642e9211306128ee55e3469ccc6 +size 8276 diff --git a/game/images/CG/lun_talk/luna/lun_talk_wet_legs_up.webp b/game/images/CG/lun_talk/luna/lun_talk_wet_legs_up.webp new file mode 100644 index 00000000..b6da26b0 --- /dev/null +++ b/game/images/CG/lun_talk/luna/lun_talk_wet_legs_up.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b13f0b720fae397eb1f3f74f4a9ce7fd21022642e9211306128ee55e3469ccc6 +size 8276 diff --git a/game/characters/genie/base.webp b/game/images/characters/genie/genie_bbase.webp similarity index 100% rename from game/characters/genie/base.webp rename to game/images/characters/genie/genie_bbase.webp diff --git a/game/characters/genie/angry.webp b/game/images/characters/genie/genie_face_angry.webp similarity index 100% rename from game/characters/genie/angry.webp rename to game/images/characters/genie/genie_face_angry.webp diff --git a/game/characters/genie/grin.webp b/game/images/characters/genie/genie_face_grin.webp similarity index 100% rename from game/characters/genie/grin.webp rename to game/images/characters/genie/genie_face_grin.webp diff --git a/game/characters/genie/open.webp b/game/images/characters/genie/genie_face_open.webp similarity index 100% rename from game/characters/genie/open.webp rename to game/images/characters/genie/genie_face_open.webp diff --git a/game/characters/genie/smile.webp b/game/images/characters/genie/genie_face_smile.webp similarity index 100% rename from game/characters/genie/smile.webp rename to game/images/characters/genie/genie_face_smile.webp diff --git a/game/characters/genie/beard.webp b/game/images/characters/genie/genie_goatee.webp similarity index 100% rename from game/characters/genie/beard.webp rename to game/images/characters/genie/genie_goatee.webp diff --git a/game/characters/genie/hair.webp b/game/images/characters/genie/genie_outfit_nude.webp similarity index 100% rename from game/characters/genie/hair.webp rename to game/images/characters/genie/genie_outfit_nude.webp diff --git a/game/characters/genie/outfits/robes.webp b/game/images/characters/genie/genie_outfit_robes.webp similarity index 100% rename from game/characters/genie/outfits/robes.webp rename to game/images/characters/genie/genie_outfit_robes.webp diff --git a/game/characters/genie/outfits/santa.webp b/game/images/characters/genie/genie_outfit_santa.webp similarity index 100% rename from game/characters/genie/outfits/santa.webp rename to game/images/characters/genie/genie_outfit_santa.webp diff --git a/game/characters/genie/outfits/santa_beard_angry.webp b/game/images/characters/genie/genie_santa_beard_angry.webp similarity index 100% rename from game/characters/genie/outfits/santa_beard_angry.webp rename to game/images/characters/genie/genie_santa_beard_angry.webp diff --git a/game/characters/genie/outfits/santa_beard_base.webp b/game/images/characters/genie/genie_santa_beard_base.webp similarity index 100% rename from game/characters/genie/outfits/santa_beard_base.webp rename to game/images/characters/genie/genie_santa_beard_base.webp diff --git a/game/characters/genie/outfits/santa_beard_grin.webp b/game/images/characters/genie/genie_santa_beard_grin.webp similarity index 100% rename from game/characters/genie/outfits/santa_beard_grin.webp rename to game/images/characters/genie/genie_santa_beard_grin.webp diff --git a/game/characters/genie/outfits/santa_beard_open.webp b/game/images/characters/genie/genie_santa_beard_open.webp similarity index 100% rename from game/characters/genie/outfits/santa_beard_open.webp rename to game/images/characters/genie/genie_santa_beard_open.webp diff --git a/game/characters/genie/outfits/santa_beard_smile.webp b/game/images/characters/genie/genie_santa_beard_smile.webp similarity index 100% rename from game/characters/genie/outfits/santa_beard_smile.webp rename to game/images/characters/genie/genie_santa_beard_smile.webp diff --git a/game/images/logo/title.webp b/game/images/logo/title.webp index 6437b6fd..16872b11 100644 --- a/game/images/logo/title.webp +++ b/game/images/logo/title.webp @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:077221102d4ec99397c0a37acc71b64ce8770e6ca7d41c938c7e57804ff93744 -size 70382 +oid sha256:a2a71593c65c4971aa09967bcb6911a56fa36ea6a413f433ef709ef6cb80e9d4 +size 32480 diff --git a/game/images/rooms/main_room/weather/lightning_01.webp b/game/images/rooms/main_room/weather/lightning_01.webp deleted file mode 100644 index de7e8fb0..00000000 --- a/game/images/rooms/main_room/weather/lightning_01.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f7fee759e0b3cdf4c9dc6cda943bddeb6ada45b31e7171326e9e9695528e5b0a -size 34 diff --git a/game/images/rooms/main_room/weather/lightning_05.webp b/game/images/rooms/main_room/weather/lightning_05.webp deleted file mode 100644 index de7e8fb0..00000000 --- a/game/images/rooms/main_room/weather/lightning_05.webp +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f7fee759e0b3cdf4c9dc6cda943bddeb6ada45b31e7171326e9e9695528e5b0a -size 34 diff --git a/game/interface/frames/cg_frame.webp b/game/interface/frames/cg_frame.webp new file mode 100644 index 00000000..9c755278 --- /dev/null +++ b/game/interface/frames/cg_frame.webp @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24053c3eecbcd83dcc7351ea9cd0772efe152742688c9e3aa2309983b6c83228 +size 213180 diff --git a/game/presplash_background.png b/game/presplash_background.png index 1a287e29..70946d4a 100644 --- a/game/presplash_background.png +++ b/game/presplash_background.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b58111f165b61c76a43fcc702efe9bad27bbf10e4b4d96cf8a3313a97c9fbcdb -size 302255 +oid sha256:d3c15511fab40a0d56d95c0a94c73d99ba4325d2d076bf9e7d2d5d90aefd892a +size 218364 diff --git a/game/scripts/animations/ani_astoria.rpy b/game/scripts/animations/ani_astoria.rpy index 7220792a..6d1f0bca 100644 --- a/game/scripts/animations/ani_astoria.rpy +++ b/game/scripts/animations/ani_astoria.rpy @@ -88,11 +88,11 @@ image ch_ast wand_imperio: random_blink("characters/astoria/chibis/wand_imperio/ag_head_02.webp", "characters/astoria/chibis/wand_imperio/ag_head_01.webp") contains: - "blank" + Null() pause.12 "characters/astoria/chibis/wand_imperio/ag_head_03.webp" pause 1 - "blank" + Null() contains: xpos 78 @@ -113,7 +113,7 @@ image ch_ast wand_imperio: alpha 1.0 "characters/astoria/chibis/wand_imperio/smoke.webp" linear 1.0 xzoom 1.0 xpos -34 ypos 37 - "blank" + Null() contains: xpos -34 diff --git a/game/scripts/animations/ani_genie.rpy b/game/scripts/animations/ani_genie.rpy index f1ce3a78..af055844 100644 --- a/game/scripts/animations/ani_genie.rpy +++ b/game/scripts/animations/ani_genie.rpy @@ -273,10 +273,10 @@ image ch_gen dick_out: "characters/genie/chibis/jerk_off/dick_out.webp" image ch_gen dick_out_normal: - "characters/genie/chibis/jerk_off/dick_out_normal.webp" + "characters/genie/chibis/jerk_off/dick_out_normal.webp" image ch_gen dick_out_shocked: - "characters/genie/chibis/jerk_off/dick_out_shocked.webp" + "characters/genie/chibis/jerk_off/dick_out_shocked.webp" # Masturbating while standing #TODO Genie's standing jerk off chibis don't stand level with the others. Fix this and check/correct relevant events diff --git a/game/scripts/animations/ani_luna.rpy b/game/scripts/animations/ani_luna.rpy index 0436bf50..00dd540b 100644 --- a/game/scripts/animations/ani_luna.rpy +++ b/game/scripts/animations/ani_luna.rpy @@ -146,120 +146,6 @@ image ch_lun blink_robe: pause 3 repeat -image ch_lun_scene sit_on_lap: - zoom 0.5 - contains: - "characters/genie/chibis/jerk_off_behind_desk/desk_01.webp" - contains: - "characters/luna/chibis/sit_on_lap.webp" - -image ch_lun_scene sit_on_lap_grope: - zoom 0.5 - contains: - "ch_gen jerk_off_behind_desk" - contains: - "characters/luna/chibis/sit_on_lap.webp" - -image ch_lun_scene inspect_idle_naked: - zoom 0.5 - "characters/luna/chibis/inspect_body_stand/idle_nude_01.webp" - pause 1 - "characters/luna/chibis/inspect_body_stand/idle_nude_02.webp" - pause 1 - "characters/luna/chibis/inspect_body_stand/idle_nude_01.webp" - pause 2 - "characters/luna/chibis/inspect_body_stand/idle_nude_02.webp" - pause 1 - repeat - -image ch_lun_scene inspect_lean_idle_naked: - zoom 0.5 - "characters/luna/chibis/inspect_body_lean/idle_nude_01.webp" - pause 1 - "characters/luna/chibis/inspect_body_lean/idle_nude_02.webp" - pause 1 - "characters/luna/chibis/inspect_body_lean/idle_nude_01.webp" - pause 2 - "characters/luna/chibis/inspect_body_lean/idle_nude_02.webp" - pause 1 - repeat - -image ch_lun_scene inspect_idle: - zoom 0.5 - "characters/luna/chibis/inspect_body_stand/idle_clothed_01.webp" - pause 1 - "characters/luna/chibis/inspect_body_stand/idle_clothed_02.webp" - pause 1 - "characters/luna/chibis/inspect_body_stand/idle_clothed_01.webp" - pause 2 - "characters/luna/chibis/inspect_body_stand/idle_clothed_02.webp" - pause 1 - repeat - -image ch_lun_scene inspect_grope_breasts_naked: - zoom 0.5 - "characters/luna/chibis/inspect_body_stand/breast_nude_01.webp" - pause .75 - "characters/luna/chibis/inspect_body_stand/breast_nude_02.webp" - pause .75 - "characters/luna/chibis/inspect_body_stand/breast_nude_03.webp" - pause .75 - "characters/luna/chibis/inspect_body_stand/breast_nude_04.webp" - pause .75 - "characters/luna/chibis/inspect_body_stand/breast_nude_05.webp" - pause .75 - "characters/luna/chibis/inspect_body_stand/breast_nude_06.webp" - pause .75 - repeat - -image ch_lun_scene inspect_grope_vagina_naked: - zoom 0.5 - "characters/luna/chibis/inspect_body_stand/vag_nude_01.webp" - pause .75 - "characters/luna/chibis/inspect_body_stand/vag_nude_02.webp" - pause .75 - "characters/luna/chibis/inspect_body_stand/vag_nude_03.webp" - pause .75 - "characters/luna/chibis/inspect_body_stand/vag_nude_04.webp" - pause .75 - "characters/luna/chibis/inspect_body_stand/vag_nude_05.webp" - pause .75 - "characters/luna/chibis/inspect_body_stand/vag_nude_06.webp" - pause .75 - repeat - -image ch_lun_scene inspect_lean_grope_breasts_naked: - zoom 0.5 - "characters/luna/chibis/inspect_body_lean/breast_nude_01.webp" - pause .75 - "characters/luna/chibis/inspect_body_lean/breast_nude_02.webp" - pause .75 - "characters/luna/chibis/inspect_body_lean/breast_nude_03.webp" - pause .75 - "characters/luna/chibis/inspect_body_lean/breast_nude_04.webp" - pause .75 - "characters/luna/chibis/inspect_body_lean/breast_nude_05.webp" - pause .75 - "characters/luna/chibis/inspect_body_lean/breast_nude_06.webp" - pause .75 - repeat - -image ch_lun_scene inspect_lean_grope_vagina_naked: - zoom 0.5 - "characters/luna/chibis/inspect_body_lean/vag_nude_01.webp" - pause .75 - "characters/luna/chibis/inspect_body_lean/vag_nude_02.webp" - pause .75 - "characters/luna/chibis/inspect_body_lean/vag_nude_03.webp" - pause .75 - "characters/luna/chibis/inspect_body_lean/vag_nude_04.webp" - pause .75 - "characters/luna/chibis/inspect_body_lean/vag_nude_05.webp" - pause .75 - "characters/luna/chibis/inspect_body_lean/vag_nude_06.webp" - pause .75 - repeat - # Luna CG image luna_bj_loop_1: diff --git a/game/scripts/animations/common.rpy b/game/scripts/animations/common.rpy index 2e5d1cf4..ab56e70d 100644 --- a/game/scripts/animations/common.rpy +++ b/game/scripts/animations/common.rpy @@ -341,54 +341,54 @@ image title_ani: pause.1 repeat - #sparkle - contains: - animation - xpos 798 - ypos 200 - xanchor 0.5 - yanchor 0.5 - zoom 0.0 - "images/title/sparkle.webp" - linear 0.8 zoom 1.0 - linear 0.5 zoom 0.0 - pause 5 - repeat + # #sparkle + # contains: + # animation + # xpos 798 + # ypos 200 + # xanchor 0.5 + # yanchor 0.5 + # zoom 0.0 + # "images/title/sparkle.webp" + # linear 0.8 zoom 1.0 + # linear 0.5 zoom 0.0 + # pause 5 + # repeat - #shine silver (synchronized) - contains: - animation - xpos 848 - ypos 230 - xanchor 0.5 - yanchor 0.5 - zoom 0.0 - "images/title/sparkle.webp" - pause 1.3 - linear 0.5 zoom 1.0 - linear 0.5 zoom 0.0 + # #shine silver (synchronized) + # contains: + # animation + # xpos 848 + # ypos 230 + # xanchor 0.5 + # yanchor 0.5 + # zoom 0.0 + # "images/title/sparkle.webp" + # pause 1.3 + # linear 0.5 zoom 1.0 + # linear 0.5 zoom 0.0 - xpos 870 - ypos 205 - linear 0.5 zoom 1.0 - linear 0.5 zoom 0.0 + # xpos 870 + # ypos 205 + # linear 0.5 zoom 1.0 + # linear 0.5 zoom 0.0 - xpos 914 - ypos 227 - linear 0.5 zoom 1.0 - linear 0.5 zoom 0.0 + # xpos 914 + # ypos 227 + # linear 0.5 zoom 1.0 + # linear 0.5 zoom 0.0 - xpos 948 - ypos 233 - linear 0.5 zoom 1.0 - linear 0.5 zoom 0.0 + # xpos 948 + # ypos 233 + # linear 0.5 zoom 1.0 + # linear 0.5 zoom 0.0 - xpos 999 - ypos 226 - linear 0.5 zoom 1.0 - linear 0.5 zoom 0.0 - pause 12.6 - repeat + # xpos 999 + # ypos 226 + # linear 0.5 zoom 1.0 + # linear 0.5 zoom 0.0 + # pause 12.6 + # repeat # Other game menu background image menu_ani: diff --git a/game/scripts/animations/generator.rpy b/game/scripts/animations/generator.rpy index 86fb775e..74de510a 100644 --- a/game/scripts/animations/generator.rpy +++ b/game/scripts/animations/generator.rpy @@ -1,8 +1,6 @@ -image object: - Null() - transform OBJbutterfly(hue=random.randint(0, 359)): zoom random.uniform(0.4, 0.85) + matrixcolor HueMatrix(hue) choice: pause random.randint(1, 7) @@ -22,13 +20,13 @@ transform OBJbutterfly(hue=random.randint(0, 359)): ease_circ 1.0 rotate 15 repeat parallel: - im.MatrixColor("images/rooms/quidditch_pitch/butterfly/0.webp", im.matrix.hue(hue)) with d3 + "images/rooms/quidditch_pitch/butterfly/0.webp" with d3 pause .3 - im.MatrixColor("images/rooms/quidditch_pitch/butterfly/1.webp", im.matrix.hue(hue)) with d3 + "images/rooms/quidditch_pitch/butterfly/1.webp" with d3 pause .3 - im.MatrixColor("images/rooms/quidditch_pitch/butterfly/2.webp", im.matrix.hue(hue)) with d3 + "images/rooms/quidditch_pitch/butterfly/2.webp" with d3 pause .3 - im.MatrixColor("images/rooms/quidditch_pitch/butterfly/1.webp", im.matrix.hue(hue)) with d3 + "images/rooms/quidditch_pitch/butterfly/1.webp" with d3 pause .3 repeat choice: @@ -49,13 +47,13 @@ transform OBJbutterfly(hue=random.randint(0, 359)): ease_circ 1.0 rotate -15 repeat parallel: - im.MatrixColor("images/rooms/quidditch_pitch/butterfly/0.webp", im.matrix.hue(hue)) with d3 + "images/rooms/quidditch_pitch/butterfly/0.webp" with d3 pause .3 - im.MatrixColor("images/rooms/quidditch_pitch/butterfly/1.webp", im.matrix.hue(hue)) with d3 + "images/rooms/quidditch_pitch/butterfly/1.webp" with d3 pause .3 - im.MatrixColor("images/rooms/quidditch_pitch/butterfly/2.webp", im.matrix.hue(hue)) with d3 + "images/rooms/quidditch_pitch/butterfly/2.webp" with d3 pause .3 - im.MatrixColor("images/rooms/quidditch_pitch/butterfly/1.webp", im.matrix.hue(hue)) with d3 + "images/rooms/quidditch_pitch/butterfly/1.webp" with d3 pause .3 repeat repeat diff --git a/game/scripts/animations/transforms.rpy b/game/scripts/animations/transforms.rpy index 20fc2e3e..19657f26 100644 --- a/game/scripts/animations/transforms.rpy +++ b/game/scripts/animations/transforms.rpy @@ -17,6 +17,19 @@ transform move_fade: xoffset 0 easeout_back 1.0 alpha 0.0 xoffset absolute(200) +transform cg_transition: + on show, appear, start: + xalign 0.5 + alpha 0.0 + xzoom 0.0 + easein_back 0.7 alpha 1.0 xzoom 1.0 + + on hide: + xalign 0.5 + alpha 1.0 + xzoom 1.0 + easeout_back 0.5 alpha 0.0 xzoom 0.0 + transform fade_show(t): alpha 0 on show: diff --git a/game/scripts/cds.rpy b/game/scripts/cds.rpy index fe6458ec..76c09dc4 100644 --- a/game/scripts/cds.rpy +++ b/game/scripts/cds.rpy @@ -1,93 +1,156 @@ -python early: - def parse_chibi(l): - who = l.simple_expression() - action = l.simple_expression() +python early hide: + import inspect - return (who, action) + try: + from renpy.lint import python_builtins, renpy_builtins + except ImportError: + import builtins + python_builtins = set(dir(builtins)) + del builtins + renpy_builtins = set() - def execute_chibi(p): - print(f"{p}") - who, action = p - func = eval(f"{who}_chibi.{action}") + __register_params = frozenset(inspect.signature(renpy.register_statement).parameters).difference({"name", "parse"}) + def register_decorator(cls): + """ + A class decorator which registers a new statement. - # print(f"Execution: {who} {action}") + The name of the statement will be the class name unless a `name` class attribute is present, which should be a string. - def lint_chibi(p): - who, action = p - try: - chibi = eval(f"{who}_chibi") - except Exception: - renpy.error(f"Character chibi not defined: {who}") + The `parse` method should be a static method that returns an object which will be passed to the other methods as `self`. + Returning an instance of the class is disabled for now. + """ + # security + def raiser(*args, **kwargs): + raise TypeError("Returning an instance of the class is disabled") + cls.__init__ = raiser - def predict_chibi(p): - who, action = p + name = getattr(cls, "name", cls.__name__) + parse = getattr(cls, "parse", cls) # left in + renpy.register_statement(name, + parse=parse, + **{k:getattr(cls, k) for k in __register_params.intersection(vars(cls))}) + return cls - chibi = eval(f"{who}_chibi") - doll = eval(f"{who}") + @register_decorator + class dynamic: + block = "possible" - layers = ( - l[0] for pose in chibi.poses.keys() - for k in doll.states.values() if k[0] and k[2] - for l in k[0].get_layers(k[0]._hash, subpath=posixpath.join("chibi", pose)).values() - ) + @staticmethod + def parse(l): + rv = {} - return layers + def parse_simple(ll): + target = ll.require(ll.name, "variable name") + if target in rv: + ll.error(f"Variable {target} already set in the same dynamic block") + ll.require("=", "equals sign") + expression = ll.simple_expression() + ll.expect_eol() + rv[target] = expression - renpy.register_statement( - name="chibi", - parse=parse_chibi, - execute=execute_chibi, - lint=lint_chibi, - predict=predict_chibi, - ) - - def parse_random(l): - l.require(":") - l.expect_eol() - - ll = l.subblock_lexer() - blocks = [] - - while ll.advance(): - with ll.catch_error(): - weight = 1.0 - condition = "True" - - if ll.keyword("block"): - ll.expect_block("block") - - block = ll.subblock_lexer().renpy_block() - - if ll.keyword("weight"): - weight = float(ll.require(ll.float)) - - if ll.keyword("if"): - ll.expect_block("if block") - condition = ll.require(ll.python_expression) - else: - block = ll.renpy_statement() - - blocks.append((block, weight, condition)) - - return {"blocks": blocks} - - def next_random(p): - blocks = [(block, weight, condition) for block, weight, condition in p["blocks"] if eval(condition)] - total_weight = sum(weight for _, weight, _ in blocks) - n = renpy.random.random() * total_weight - - for block, weight, _ in blocks: - if n <= weight: - break + if l.match(":"): + l.expect_block("dynamic block") + l.expect_eol() + ll = l.subblock_lexer() + while ll.advance(): + parse_simple(ll) else: - n -= weight + parse_simple(l) - return block + return rv - renpy.register_statement( - name="random", - block=True, - predict_all=True, - parse=parse_random, - next=next_random, - ) + def execute(self): + evaled = {n: eval(e) for n, e in self.items()} + renpy.dynamic(**evaled) + + def lint(self): + for domain, st in (("Python", python_builtins), ("Ren'Py", renpy_builtins)): + inter = st.intersection(self) + if inter: + renpy.error(f"Dynamic statement redefines one or several {domain} builtins: {', '.join(map(repr, inter))}") + + @register_decorator + class chibi: + @staticmethod + def parse(l): + who = l.simple_expression() + action = l.simple_expression() + + return (who, action) + + def execute(self): + print(f"{self}") + who, action = self + func = eval(f"{who}_chibi.{action}") + + # print(f"Execution: {who} {action}") + + def lint(self): + who, action = self + try: + chibi = eval(f"{who}_chibi") + except Exception: + renpy.error(f"Character chibi not defined: {who}") + + def predict(self): + who, action = self + + chibi = eval(f"{who}_chibi") + doll = eval(f"{who}") + + layers = ( + l[0] for pose in chibi.poses.keys() + for k in doll.states.values() if k[0] and k[2] + for l in k[0].get_layers(k[0]._hash, subpath=posixpath.join("chibi", pose)).values() + ) + + return layers + + @register_decorator + class random: + block = True + predict_all = True + + @staticmethod + def parse(l): + l.require(":") + l.expect_eol() + + ll = l.subblock_lexer() + blocks = [] + + while ll.advance(): + with ll.catch_error(): + weight = 1.0 + condition = "True" + + if ll.keyword("block"): + ll.expect_block("block") + + block = ll.subblock_lexer().renpy_block() + + if ll.keyword("weight"): + weight = float(ll.require(ll.float)) + + if ll.keyword("if"): + ll.expect_block("if block") + condition = ll.require(ll.python_expression) + else: + block = ll.renpy_statement() + + blocks.append((block, weight, condition)) + + return {"blocks": blocks} + + def next(self): + blocks = [(block, weight) for block, weight, condition in self["blocks"] if eval(condition)] + total_weight = sum(weight for _, weight in blocks) + n = renpy.random.random() * total_weight + + for block, weight in blocks: + if n <= weight: + break + else: + n -= weight + + return block diff --git a/game/scripts/cg/common.rpy b/game/scripts/cg/common.rpy index 763d6243..55b8765f 100644 --- a/game/scripts/cg/common.rpy +++ b/game/scripts/cg/common.rpy @@ -1,4 +1,3 @@ - init 5 python: def her_cg_doll(st, at): return hermione.image, None @@ -25,35 +24,21 @@ image CG cho_doll = DynamicDisplayable(cho_cg_doll) image CG ast_doll = DynamicDisplayable(ast_cg_doll) image CG sus_doll = DynamicDisplayable(sus_cg_doll) -image CG luna = Fixed( - "images/CG/common/bg.webp", - AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG lun_doll", zoom=1.2)), "images/CG/common/mask.webp"), - ) +transform CG_masker(child): + contains: + "images/CG/common/bg.webp" + contains: + AlphaMask( + Fixed(Transform(child, zoom=1.2, pos=(880, -180)), xfit=True, yfit=True), + "images/CG/common/mask.webp", + ) -image CG hermione = Fixed( - "images/CG/common/bg.webp", - AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG her_doll", zoom=1.2)), "images/CG/common/mask.webp"), - ) - -image CG tonks = Fixed( - "images/CG/common/bg.webp", - AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG ton_doll", zoom=1.2)), "images/CG/common/mask.webp"), - ) - -image CG cho = Fixed( - "images/CG/common/bg.webp", - AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG cho_doll", zoom=1.2)), "images/CG/common/mask.webp"), - ) - -image CG astoria = Fixed( - "images/CG/common/bg.webp", - AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG ast_doll", zoom=1.2)), "images/CG/common/mask.webp"), - ) - -image CG susan = Fixed( - "images/CG/common/bg.webp", - AlphaMask(Composite((2160, 1200), (880, -180), Transform("CG sus_doll", zoom=1.2)), "images/CG/common/mask.webp"), - ) +image CG luna = At("CG lun_doll", CG_masker) +image CG hermione = At("CG her_doll", CG_masker) +image CG tonks = At("CG ton_doll", CG_masker) +image CG cho = At("CG cho_doll", CG_masker) +image CG astoria = At("CG ast_doll", CG_masker) +image CG susan = At("CG sus_doll", CG_masker) # Snape CG screen snape_groping(): diff --git a/game/scripts/cg/luna.rpy b/game/scripts/cg/luna.rpy index fff8f1ea..66ab1629 100644 --- a/game/scripts/cg/luna.rpy +++ b/game/scripts/cg/luna.rpy @@ -8,3 +8,765 @@ image CG lun_intro luna bendover naked = Fixed( "images/CG/lun_intro/bg.webp", "images/CG/lun_intro/luna_naked.webp", ) + +layeredimage lun_blowjob_personal_pose1: + fit "cover" + fit_first True + + always "lun_blowjob_personal_background" + + always "lun_blowjob_personal_pose1_luna_base" + always "lun_blowjob_personal_genie_back" + + group luna_cheeks auto prefix "cheeks": + attribute none null default + + group luna_mouth auto prefix "mouth": + attribute base default + + group luna_eyes auto prefix "eyes": + attribute base_stare default + + group luna_eyebrows auto prefix "eyebrows": + attribute base default + + always "lun_blowjob_personal_pose1_luna_hair" + + attribute penis default if_not ["trousers"] + attribute penis_shadow default if_not ["trousers"] + attribute penis_spit + + group throatpie auto prefix "throatpie" + + group handjob prefix "handjob" if_not ["trousers"]: + attribute idle Fixed("lun_blowjob_personal_pose1_luna_stroke_down_shadow", "lun_blowjob_personal_pose1_luna_stroke_down") default + attribute slow + attribute moderate + attribute fast + + always "lun_blowjob_personal_tabletop" + + group genie_arm auto prefix "genie_arm": + attribute idle "lun_blowjob_personal_genie_arm_idle" + attribute down null default + + always "lun_blowjob_personal_genie_front" + + group genie: + attribute trousers "lun_blowjob_personal_genie_trousers" default + attribute no_trousers null + + group cum auto prefix "cum" if_not ["trousers"]: + attribute precum default + + always "lun_blowjob_personal_vignette" + +layeredimage lun_blowjob_personal_pose2: + fit "cover" + fit_first True + + always "lun_blowjob_personal_background" + always "lun_blowjob_personal_pose2_luna_base" + always "lun_blowjob_personal_genie_back" + + group luna_cheeks auto prefix "cheeks": + attribute none null default + + group luna_mouth auto prefix "mouth": + attribute lick default + + group luna_eyes auto prefix "eyes": + attribute base_stare default + + group luna_eyebrows auto prefix "eyebrows": + attribute base default + + always "lun_blowjob_personal_pose2_luna_hair" + + attribute penis default + attribute penis_spit + + group throatpie auto prefix "throatpie" + + attribute idle "lun_blowjob_personal_pose2_luna_stroke_down" default + + always "lun_blowjob_personal_tabletop" + + group genie_arm auto prefix "genie_arm": + attribute idle "lun_blowjob_personal_genie_arm_idle" + attribute down null default + + always "lun_blowjob_personal_genie_front" + + group genie: + attribute no_trousers null default + + # group cum auto prefix "cum" if_not ["trousers"]: + # attribute precum default + + always "lun_blowjob_personal_vignette" + +layeredimage lun_blowjob_personal_pose3: + fit "cover" + fit_first True + + always "lun_blowjob_personal_background" + always "lun_blowjob_personal_pose3_luna_base" + always "lun_blowjob_personal_genie_back" + + group luna_cheeks auto prefix "cheeks": + attribute none null default + + group luna_eyes auto prefix "eyes": + attribute base_stare default + + group luna_eyebrows auto prefix "eyebrows": + attribute base default + + always "lun_blowjob_personal_pose3_luna_hair" + + attribute penis default + + group luna_mouth auto prefix "mouth": + attribute suck default + + attribute penis_spit + + group throatpie auto prefix "throatpie" + + attribute idle "lun_blowjob_personal_pose3_luna_stroke_down" default + + always "lun_blowjob_personal_tabletop" + + group genie_arm auto prefix "genie_arm": + attribute idle "lun_blowjob_personal_genie_arm_idle" + attribute down null default + + always "lun_blowjob_personal_genie_front" + + group genie: + attribute no_trousers null default + + # group cum auto prefix "cum" if_not ["trousers"]: + # attribute precum default + + always "lun_blowjob_personal_vignette" + +layeredimage lun_blowjob_personal_pose4: + fit "cover" + fit_first True + + always "lun_blowjob_personal_background" + always "lun_blowjob_personal_genie_back" + always "lun_blowjob_personal_pose4_luna_base" + + group luna_cheeks auto prefix "cheeks": + attribute none null default + + group luna_eyes auto prefix "eyes": + attribute base_stare default + + group luna_eyebrows auto prefix "eyebrows": + attribute base default + + always "lun_blowjob_personal_pose4_luna_hair" + + attribute penis default + + group luna_mouth auto prefix "mouth": + attribute suck default + + attribute penis_spit + + group throatpie auto prefix "throatpie" + + attribute idle "lun_blowjob_personal_pose4_luna_stroke_down" default + + always "lun_blowjob_personal_tabletop" + + group genie_arm auto prefix "genie_arm": + attribute idle "lun_blowjob_personal_genie_arm_idle" + attribute down null default + + always "lun_blowjob_personal_genie_front" + + group genie: + attribute no_trousers null default + + # group cum auto prefix "cum" if_not ["trousers"]: + # attribute precum default + + always "lun_blowjob_personal_vignette" + +layeredimage lun_blowjob_personal_pose5: + fit "cover" + fit_first True + + always "lun_blowjob_personal_background" + always "lun_blowjob_personal_genie_back" + always "lun_blowjob_personal_pose5_luna_base" + + group luna_cheeks auto prefix "cheeks": + attribute none null default + + group luna_eyes auto prefix "eyes": + attribute base_stare default + + group luna_eyebrows auto prefix "eyebrows": + attribute base default + + always "lun_blowjob_personal_pose5_luna_hair" + + attribute penis default + + group luna_mouth auto prefix "mouth": + attribute suck default + + attribute penis_spit + attribute luna_frothing + + group throatpie auto prefix "throatpie" + + attribute idle "lun_blowjob_personal_pose5_luna_stroke_down" default + + always "lun_blowjob_personal_tabletop" + + group genie_arm auto prefix "genie_arm": + attribute idle "lun_blowjob_personal_genie_arm_idle" + attribute down null default + + always "lun_blowjob_personal_genie_front" + + group genie: + attribute no_trousers null default + + always "lun_blowjob_personal_vignette" + +image lun_blowjob_personal_loop: + "lun_blowjob_personal_pose3 penis_spit eyebrows_worried eyes_halflid_stare" with d1 + pause 0.35 + "lun_blowjob_personal_pose4 penis_spit eyebrows_worried eyes_halflid_up" with d1 + pause 0.25 + "lun_blowjob_personal_pose5 penis_spit eyebrows_angry eyes_halflid_up" with d1 + pause 0.45 + "lun_blowjob_personal_pose4 penis_spit eyebrows_worried eyes_halflid_stare" with d1 + pause 0.25 + "lun_blowjob_personal_pose3 penis_spit eyebrows_worried eyes_halflid_stare" with d1 + pause 0.25 + repeat + +image lun_blowjob_personal_loop_ahegao: + "lun_blowjob_personal_pose3 penis_spit eyebrows_worried eyes_halflid_stare_hearts" with d1 + pause 0.35 + "lun_blowjob_personal_pose4 penis_spit eyebrows_worried eyes_halflid_up_hearts" with d1 + pause 0.15 + "lun_blowjob_personal_pose5 penis_spit eyebrows_worried eyes_halflid_up_hearts" with d1 + pause 0.45 + "lun_blowjob_personal_pose4 penis_spit eyebrows_worried eyes_halflid_stare_hearts" with d1 + pause 0.15 + "lun_blowjob_personal_pose3 penis_spit eyebrows_worried eyes_halflid_stare_hearts" with d1 + pause 0.15 + repeat + +image lun_blowjob_personal_loop_ahegao_hold: + "lun_blowjob_personal_pose3 penis_spit eyebrows_worried genie_arm_petting eyes_halflid_up_hearts" with d1 + pause 0.2 + "lun_blowjob_personal_pose4 penis_spit eyebrows_worried genie_arm_petting eyes_halflid_down_hearts" with d1 + pause 0.10 + "lun_blowjob_personal_pose5 penis_spit eyebrows_worried genie_arm_petting eyes_halflid_stare_hearts" with d1 + pause 0.2 + "lun_blowjob_personal_pose4 penis_spit eyebrows_worried genie_arm_petting eyes_halflid_up_hearts" with d1 + pause 0.10 + "lun_blowjob_personal_pose3 penis_spit eyebrows_worried genie_arm_petting eyes_halflid_up_hearts" with d1 + pause 0.10 + repeat + +image lun_blowjob_personal_loop_ahegao_hold_down: + "lun_blowjob_personal_pose3 penis_spit eyebrows_worried genie_arm_petting eyes_halflid_up_hearts" with d1 + pause 0.2 + "lun_blowjob_personal_pose4 penis_spit eyebrows_worried genie_arm_petting eyes_halflid_down_hearts" with d1 + pause 0.10 + "lun_blowjob_personal_pose5 penis_spit eyebrows_worried genie_arm_petting eyes_halflid_stare_hearts" with d1 + pause 0.6 + "lun_blowjob_personal_pose4 penis_spit eyebrows_worried genie_arm_petting eyes_halflid_up_hearts" with d1 + pause 0.10 + "lun_blowjob_personal_pose3 penis_spit eyebrows_worried genie_arm_petting eyes_halflid_up_hearts" with d1 + pause 0.10 + repeat + +image lun_blowjob_personal_pose1_handjob_slow: + Fixed( + "lun_blowjob_personal_pose1_luna_stroke_down_shadow", + "lun_blowjob_personal_pose1_luna_stroke_down") + pause 0.5 + Fixed( + "lun_blowjob_personal_pose1_luna_stroke_up_shadow", + "lun_blowjob_personal_pose1_luna_stroke_up") + pause 0.5 + repeat + +image lun_blowjob_personal_pose1_handjob_moderate: + Fixed( + "lun_blowjob_personal_pose1_luna_stroke_down_shadow", + "lun_blowjob_personal_pose1_luna_stroke_down") + pause 0.35 + Fixed( + "lun_blowjob_personal_pose1_luna_stroke_up_shadow", + "lun_blowjob_personal_pose1_luna_stroke_up") + pause 0.35 + repeat + +image lun_blowjob_personal_pose1_handjob_fast: + Fixed( + "lun_blowjob_personal_pose1_luna_stroke_down_shadow", + "lun_blowjob_personal_pose1_luna_stroke_down", + "lun_blowjob_personal_pose1_luna_stroke_down_speedlines") + + pause 0.2 + + Fixed( + "lun_blowjob_personal_pose1_luna_stroke_up_shadow", + "lun_blowjob_personal_pose1_luna_stroke_up", + "lun_blowjob_personal_pose1_luna_stroke_up_speedlines") + + pause 0.2 + repeat + +layeredimage lun_grind: + fit "contain" + fit_first True + + always "lun_grind_background" + + group body: + attribute idle "lun_grind_idle" default + attribute grind "lun_grind_grind" # animation + attribute spread "lun_grind_spread" # animation + attribute cumshot "lun_grind_cumshot" # animation + attribute resting "lun_grind_resting" + attribute resting_spread "lun_grind_resting_spread" + attribute spring_out "lun_grind_spring_out" # animation + +image lun_grind_border: + fit "contain" + + HBox("interface/frames/cg_frame.webp", + Null(2878, 3840), + Transform("interface/frames/cg_frame.webp", xzoom=-1)) + +image lun_grind_idle: + Fixed( + "lun_grind_body_idle", + "lun_grind_penis_grind_frame0") + +image lun_grind_resting: + Fixed( + "lun_grind_body_idle", + "lun_grind_penis_tease_frame0") + +image lun_grind_resting_spread: + Fixed( + "lun_grind_body_spread", + "lun_grind_penis_tease_frame1") + +image lun_grind_grind: + Fixed( + "lun_grind_body_idle", + "lun_grind_penis_grind_frame0") + + pause 0.44 + + Fixed( + "lun_grind_body_grind", + "lun_grind_penis_grind_frame1") + + pause 0.44 + repeat + +image lun_grind_spring_out: + Fixed( + "lun_grind_body_spread", + "lun_grind_penis_tease_frame1") + + pause 0.3 + + Fixed( + "lun_grind_body_spread", + "lun_grind_penis_tease_frame0") + + pause 0.3 + + Fixed( + "lun_grind_body_spread", + "lun_grind_penis_grind_frame1") + +image lun_grind_spread: + Fixed( + "lun_grind_body_spread", + "lun_grind_penis_grind_frame1") + +image lun_grind_cumshot: + Fixed( + "lun_grind_body_spread", + "lun_grind_penis_grind_frame1", + "lun_grind_cumshot_frame0") + + pause 0.2 + Fixed( + "lun_grind_body_spread", + "lun_grind_penis_grind_frame1", + "lun_grind_cumshot_frame1") + + pause 0.2 + + Fixed( + "lun_grind_body_spread", + "lun_grind_penis_grind_frame1", + "lun_grind_cumshot_frame2") + + pause 0.2 + + Fixed( + "lun_grind_body_spread", + "lun_grind_penis_grind_frame1", + "lun_grind_cumshot_frame3") + + pause 0.2 + + Fixed( + "lun_grind_body_spread", + "lun_grind_penis_grind_frame1", + "lun_grind_cumshot_frame4") + + pause 0.12 + + Fixed( + "lun_grind_body_spread", + "lun_grind_penis_grind_frame1", + "lun_grind_cumshot_frame5") + + +layeredimage lun_inspect spread_legs: + fit "cover" + fit_first True + + always "lun_inspect_background" + always "lun_inspect_chair" + always "lun_inspect_genie_body" + + attribute genie_clothes_back "lun_inspect_genie_clothes_back" if_all ["genie_clothes"] default + + always "lun_inspect_spread_legs_luna_shadow" if_not ["genie_clothes"] + always "lun_inspect_spread_legs_luna_hair_back" + always "lun_inspect_spread_legs_luna_body" + + attribute breastfix "lun_inspect_background_breastfix" default if_any ["luna_bra", "arms_grab", "arms_touch_tits"] + + group luna_arm prefix "luna_arm" auto: + attribute idle default + + group luna_fluids auto multiple + + group luna_clothes variant "luna_clothes" multiple: + attribute stockings + attribute panties + attribute bra if_not ["luna_shirt", "arms_grab", "arms_touch_tits"] + attribute shirt + attribute skirt + + attribute blush "lun_inspect_spread_legs_luna_face_blush" + + group luna_face_mouth prefix "mouth" auto: + attribute base default + + group luna_face_eyebrows prefix "eyebrows" auto: + attribute base default + + group luna_face_eyes prefix "eyes" auto: + attribute base_stare default + + always "lun_inspect_spread_legs_luna_hair_front" + + attribute genie_clothes_hood "lun_inspect_genie_clothes_hood" if_all ["genie_clothes"] default + + always "lun_inspect_genie_head" + + group genie_arm_right prefix "arm_right" if_not ["arms_grab", "arms_touch_tits"]: + attribute idle "lun_inspect_genie_arm_right_idle" default + attribute touch_mound "lun_inspect_genie_arm_right_touch_mound" + attribute touch_tit "lun_inspect_genie_arm_right_touch_tit" + attribute touch_pussy "lun_inspect_arm_right_touch_pussy" + attribute touch_pussy_pause "lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame0" + attribute touch_pussy_inserted "lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame1" + attribute down null + + group genie_arm_left prefix "arm_left" if_not ["arms_grab", "arms_touch_tits"]: + attribute hold "lun_inspect_genie_arm_left_hold" default + attribute touch_tit "lun_inspect_genie_arm_left_grab" + + group genie_arms prefix "arms": + attribute grab "lun_inspect_genie_arm_both_grab_tits" + attribute touch_tits "lun_inspect_genie_arm_both_touch_tits" + + attribute genie_clothes_front "lun_inspect_genie_clothes" if_all ["genie_clothes"] default + + attribute luna_bra "lun_inspect_spread_legs_luna_bra_grab" if_any ["arms_grab", "arms_touch_tits"] + + always "lun_inspect_vignette" + + attribute genie_clothes null + +layeredimage lun_inspect legs_together: + fit "cover" + fit_first True + + always "lun_inspect_background" + always "lun_inspect_chair" + always "lun_inspect_genie_body" + + attribute genie_clothes_back "lun_inspect_genie_clothes_back" if_all ["genie_clothes"] default + + always "lun_inspect_legs_together_luna_shadow" if_not ["genie_clothes"] + always "lun_inspect_legs_together_luna_hair_back" + always "lun_inspect_legs_together_luna_body" + + attribute breastfix "lun_inspect_background_breastfix" default if_any ["luna_bra", "arms_grab", "arms_touch_tits"] + + group luna_arm prefix "luna_arm" auto: + attribute idle default + + group luna_clothes variant "luna_clothes" multiple: + attribute stockings + attribute panties + attribute bra if_not ["luna_shirt", "arms_grab", "arms_touch_tits"] + attribute shirt + attribute skirt + + attribute blush "lun_inspect_legs_together_luna_face_blush" + + group luna_face_mouth prefix "mouth" auto: + attribute base default + + group luna_face_eyebrows prefix "eyebrows" auto: + attribute base default + + group luna_face_eyes prefix "eyes" auto: + attribute base_stare default + + always "lun_inspect_legs_together_luna_hair_front" + + attribute genie_clothes_hood "lun_inspect_genie_clothes_hood" if_all ["genie_clothes"] default + + always "lun_inspect_genie_head" + + group genie_arm_right prefix "arm_right" if_not ["arms_grab", "arms_touch_tits"]: + attribute idle "lun_inspect_genie_arm_right_idle" default + attribute touch_mound "lun_inspect_genie_arm_right_touch_mound" + attribute touch_tit "lun_inspect_genie_arm_right_touch_tit" + attribute touch_pussy "lun_inspect_arm_right_touch_pussy_alt" + attribute touch_pussy_pause "lun_inspect_genie_arm_right_touch_pussy_frame0" + attribute touch_pussy_inserted "lun_inspect_genie_arm_right_touch_pussy_frame1" + attribute down null + + group genie_arm_left prefix "arm_left" if_not ["arms_grab", "arms_touch_tits"]: + attribute hold "lun_inspect_genie_arm_left_hold" default + attribute touch_tit "lun_inspect_genie_arm_left_grab" + + group genie_arms prefix "arms": + attribute grab "lun_inspect_genie_arm_both_grab_tits" + attribute touch_tits "lun_inspect_genie_arm_both_touch_tits" + + attribute genie_clothes_front "lun_inspect_genie_clothes" if_all ["genie_clothes"] default + + attribute luna_bra "lun_inspect_legs_together_luna_bra_grab" if_any ["arms_grab", "arms_touch_tits"] + + always "lun_inspect_vignette" + + attribute genie_clothes null + +layeredimage lun_inspect head_back_spread_legs: + fit "cover" + fit_first True + + always "lun_inspect_background" + always "lun_inspect_chair" + always "lun_inspect_genie_body" + + always "lun_inspect_head_back_spread_legs_luna_shadow" if_not ["genie_clothes"] + always "lun_inspect_head_back_spread_legs_luna_hair_back" + always "lun_inspect_head_back_spread_legs_luna_body" + + attribute breastfix "lun_inspect_background_breastfix" default if_any ["luna_bra", "arms_grab", "arms_touch_tits"] + + group luna_arm prefix "luna_arm" auto: + attribute idle default + + group luna_fluids auto multiple + + group luna_clothes variant "luna_clothes" multiple: + attribute stockings + attribute panties + attribute bra if_not ["luna_shirt", "arms_grab", "arms_touch_tits"] + attribute shirt + attribute skirt + + attribute blush "lun_inspect_head_back_spread_legs_luna_face_blush" + + group luna_face_mouth prefix "mouth" auto: + attribute open default + + group luna_face_eyebrows prefix "eyebrows" auto: + attribute base default + + group luna_face_eyes prefix "eyes" auto: + attribute base_right default + + always "lun_inspect_head_back_spread_legs_luna_hair_front" + + always "lun_inspect_genie_head" + + group genie_arm_right prefix "arm_right" if_not ["arms_grab", "arms_touch_tits"]: + # attribute idle "lun_inspect_genie_arm_right_idle" default + attribute touch_mound "lun_inspect_genie_arm_right_touch_mound" default + attribute touch_tit "lun_inspect_genie_arm_right_touch_tit" + attribute touch_pussy "lun_inspect_arm_right_touch_pussy" + attribute touch_pussy_pause "lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame0" + attribute touch_pussy_inserted "lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame1" + attribute down null + + group genie_arm_left prefix "arm_left" if_not ["arms_grab", "arms_touch_tits"]: + attribute hold "lun_inspect_genie_arm_left_hold" default + attribute touch_tit "lun_inspect_genie_arm_left_grab" + + group genie_arms prefix "arms": + attribute grab "lun_inspect_genie_arm_both_grab_tits" + attribute touch_tits "lun_inspect_genie_arm_both_touch_tits" + + attribute luna_bra "lun_inspect_head_back_spread_legs_luna_bra_grab" if_any ["arms_grab", "arms_touch_tits"] + + always "lun_inspect_vignette" + +layeredimage lun_inspect head_back_legs_together: + fit "cover" + fit_first True + + always "lun_inspect_background" + always "lun_inspect_chair" + always "lun_inspect_genie_body" + + always "lun_inspect_head_back_legs_together_luna_shadow" if_not ["genie_clothes"] + always "lun_inspect_head_back_legs_together_luna_hair_back" + always "lun_inspect_head_back_legs_together_luna_body" + + attribute breastfix "lun_inspect_background_breastfix" default if_any ["luna_bra", "arms_grab", "arms_touch_tits"] + + group luna_arm prefix "luna_arm" auto: + attribute idle default + + group luna_clothes variant "luna_clothes" multiple: + attribute stockings + attribute panties + attribute bra if_not ["luna_shirt", "arms_grab", "arms_touch_tits"] + attribute shirt + attribute skirt + + attribute blush "lun_inspect_head_back_legs_together_luna_face_blush" + + group luna_face_mouth prefix "mouth" auto: + attribute open default + + group luna_face_eyebrows prefix "eyebrows" auto: + attribute base default + + group luna_face_eyes prefix "eyes" auto: + attribute base_right default + + always "lun_inspect_head_back_legs_together_luna_hair_front" + + always "lun_inspect_genie_head" + + group genie_arm_right prefix "arm_right" if_not ["arms_grab", "arms_touch_tits"]: + # attribute idle "lun_inspect_genie_arm_right_idle" default + # attribute touch_mound "lun_inspect_genie_arm_right_touch_mound" + attribute touch_tit "lun_inspect_genie_arm_right_touch_tit" default + attribute touch_pussy "lun_inspect_arm_right_touch_pussy_alt" + attribute touch_pussy_pause "lun_inspect_genie_arm_right_touch_pussy_frame0" + attribute touch_pussy_inserted "lun_inspect_genie_arm_right_touch_pussy_frame1" + attribute down null + + group genie_arm_left prefix "arm_left" if_not ["arms_grab", "arms_touch_tits"]: + attribute hold "lun_inspect_genie_arm_left_hold" default + attribute touch_tit "lun_inspect_genie_arm_left_grab" + + group genie_arms prefix "arms": + attribute grab "lun_inspect_genie_arm_both_grab_tits" + attribute touch_tits "lun_inspect_genie_arm_both_touch_tits" + + attribute luna_bra "lun_inspect_head_back_legs_together_luna_bra_grab" if_any ["arms_grab", "arms_touch_tits"] + + always "lun_inspect_vignette" + +image lun_inspect_arm_right_touch_pussy: + "lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame0" + pause 0.5 + "lun_inspect_genie_arm_right_spread_legs_touch_pussy_frame1" + pause 0.5 + repeat + +image lun_inspect_arm_right_touch_pussy_alt: + "lun_inspect_genie_arm_right_touch_pussy_frame0" + pause 0.5 + "lun_inspect_genie_arm_right_touch_pussy_frame1" + pause 0.5 + repeat + +layeredimage lun_talk: + fit "cover" + fit_first True + + always "lun_talk_background" + always "lun_talk_torso" + + group blush prefix "blush" auto: + attribute base default + + group eyes prefix "eyes" auto: + attribute base_stare default + + group mouth prefix "mouth" auto: + attribute base default + + group eyebrows prefix "eyebrows" auto: + attribute base default + + always "lun_talk_hair" + + group arm_right prefix "arm_right" if_not ["arms_grab_chest"]: + attribute rest default + + always "lun_talk_book" + + group arm_left prefix "arm_left" if_not ["arms_grab_chest"]: + attribute rest default + + always "lun_talk_chest" if_not ["arms_grab_chest", "legs_down"] + attribute arms_grab_chest + + group legs prefix "legs" auto: + attribute down default + + group arm_right prefix "arm_right" if_not ["arms_grab_chest"]: + attribute hold_leg_variant_legs_up + attribute hold_leg_variant_legs_side + + group arm_left prefix "arm_left" if_not ["arms_grab_chest"]: + attribute hold_leg_variant_legs_up + attribute hold_leg_variant_legs_side + attribute masturbate_variant_legs_up + attribute masturbate_variant_legs_side + attribute spread_variant_legs_up + + always "lun_talk_chest" if_not ["arms_grab_chest", "legs_side"] + + group cum prefix "cum" auto multiple + group wet prefix "wet" auto diff --git a/game/scripts/cg/xray.rpy b/game/scripts/cg/xray.rpy index fd620e74..d95af604 100644 --- a/game/scripts/cg/xray.rpy +++ b/game/scripts/cg/xray.rpy @@ -82,12 +82,12 @@ init python: child = getattr(self, layer) if isinstance(child, ImageReference): - name = getattr(self, "_{}".format(layer)) - attributes = renpy.get_attributes(name) or renpy.get_attributes("{}_{}".format(tag_prefix, layer)) + name = getattr(self, f"_{layer}") + attributes = renpy.get_attributes(name) or renpy.get_attributes(f"{tag_prefix}_{layer}") if attributes: attributes = " ".join(attributes) - child = ImageReference("{} {}".format(name, attributes)) + child = ImageReference(f"{name} {attributes}") elif child.name != name: child = ImageReference(name) else: diff --git a/game/scripts/characters.rpy b/game/scripts/characters.rpy index f495b3f7..3e0f1760 100644 --- a/game/scripts/characters.rpy +++ b/game/scripts/characters.rpy @@ -1,4 +1,3 @@ - init -999 python: # Remove style overrides adv.who_args.pop("style", None) diff --git a/game/scripts/characters/astoria/common.rpy b/game/scripts/characters/astoria/common.rpy index 7165e474..1a2191d3 100644 --- a/game/scripts/characters/astoria/common.rpy +++ b/game/scripts/characters/astoria/common.rpy @@ -76,7 +76,7 @@ init python: astoria.animation = animation redraw = True - if flip != None: + if flip is not None: astoria.xzoom = -1 if flip else 1 redraw = True diff --git a/game/scripts/characters/astoria/events/spells/imperio_tonks.rpy b/game/scripts/characters/astoria/events/spells/imperio_tonks.rpy index 86184163..0039837f 100644 --- a/game/scripts/characters/astoria/events/spells/imperio_tonks.rpy +++ b/game/scripts/characters/astoria/events/spells/imperio_tonks.rpy @@ -1709,8 +1709,7 @@ label ag_st_imperio_E5: ton "I..." ("open", "base", "worried", "down") gen "Say it!" ("angry", xpos="far_left", ypos="head") - $ menu_y = 0.7 - menu: + menu (menu_yalign=0.7): "\"You're a selfish slut!\"": ton @ hair horny "Yes!" ("mad", "wide", "shocked", "stare") ton @ hair horny "I'm a selfish slut!" ("open_wide_tongue", "closed", "worried", "mid") @@ -1720,7 +1719,6 @@ label ag_st_imperio_E5: "\"You're nothing more than a whore!\"": ton @ hair horny "Yes!" ("mad", "base", "worried", "mid") ton @ hair horny "I'm nothing but a cheap,{w=0.6} {b}fucking{/b}{w=0.4} whore!" ("open_wide_tongue", "closed", "worried", "mid") - call reset_menu_position ton "... {w}This is what I want!" ("mad", "wide", "annoyed", "down") gen "Good, you're doing this for yourself, and nobody else..." ("base", xpos="far_left", ypos="head") diff --git a/game/scripts/characters/astoria/spells.rpy b/game/scripts/characters/astoria/spells.rpy index 053fc4cb..8b1498f8 100644 --- a/game/scripts/characters/astoria/spells.rpy +++ b/game/scripts/characters/astoria/spells.rpy @@ -6,12 +6,14 @@ default ast_ev_imperio_training_t1_e3 = Event(id="ast_ev_imperio_training_t1_e3" default ast_ev_imperio_training_t1_e4 = Event(id="ast_ev_imperio_training_t1_e4", label="ag_st_imperio_E4", req="game.daytime==False") default ast_ev_imperio_training_t1_e5 = Event(id="ast_ev_imperio_training_t1_e5", label="ag_st_imperio_E5", req="game.daytime==False") +default ast_eventqueue_imperio_training_tonks = EventQueue("ast_eventqueue_imperio_training_tonks") default ast_ev_imperio_training_t1_e1_hub = Event(id="ast_ev_imperio_training_t1_e1_hub", label="ag_st_imperio", req="states.ast.tier >= 1", queue="ast_eventqueue_imperio_training_tonks", autoenqueue=True, autodequeue=False, subevents=["ast_ev_imperio_training_t1_e1"]) default ast_ev_imperio_training_t1_e2_hub = Event(id="ast_ev_imperio_training_t1_e2_hub", label="ag_st_imperio", req="states.ast.tier >= 1", queue="ast_eventqueue_imperio_training_tonks", autoenqueue=True, autodequeue=False, subevents=["ast_ev_imperio_training_t1_e2"]) default ast_ev_imperio_training_t1_e3_hub = Event(id="ast_ev_imperio_training_t1_e3_hub", label="ag_st_imperio", req="states.ast.tier >= 1", queue="ast_eventqueue_imperio_training_tonks", autoenqueue=True, autodequeue=False, subevents=["ast_ev_imperio_training_t1_e3"]) default ast_ev_imperio_training_t1_e4_hub = Event(id="ast_ev_imperio_training_t1_e4_hub", label="ag_st_imperio", req="states.ast.tier >= 1", queue="ast_eventqueue_imperio_training_tonks", autoenqueue=True, autodequeue=False, subevents=["ast_ev_imperio_training_t1_e4"]) default ast_ev_imperio_training_t1_e5_hub = Event(id="ast_ev_imperio_training_t1_e5_hub", label="ag_st_imperio", req="states.ast.tier >= 1", queue="ast_eventqueue_imperio_training_tonks", autoenqueue=True, autodequeue=False, subevents=["ast_ev_imperio_training_t1_e5"]) +default ast_eventqueue_imperio_training_susan = EventQueue("ast_eventqueue_imperio_training_susan") default ast_ev_imperio_training_susan_t1_e1 = Event(id="ast_ev_imperio_training_susan_t1_e1", label="ag_se_imperio_sb_E1", req="states.ast.tier >= 1", queue="ast_eventqueue_imperio_training_susan", autoenqueue=True, autodequeue=False) default ast_ev_imperio_training_susan_t1_e2 = Event(id="ast_ev_imperio_training_susan_t1_e2", label="ag_se_imperio_sb_E2", req="states.ast.tier >= 1", queue="ast_eventqueue_imperio_training_susan", autoenqueue=True, autodequeue=False) default ast_ev_imperio_training_susan_t1_e3 = Event(id="ast_ev_imperio_training_susan_t1_e3", label="ag_se_imperio_sb_E3", req="states.ast.tier >= 1", queue="ast_eventqueue_imperio_training_susan", autoenqueue=True, autodequeue=False) @@ -19,4 +21,4 @@ default ast_ev_imperio_training_susan_t1_e3 = Event(id="ast_ev_imperio_training_ define astoria_spells = [ ("ast_eventqueue_imperio_training_tonks", "Im-perv-ious with Tonks!"), ("ast_eventqueue_imperio_training_susan", "Im-perv-ious with Susan!"), -] \ No newline at end of file +] diff --git a/game/scripts/characters/astoria/summon.rpy b/game/scripts/characters/astoria/summon.rpy index a2e76321..791e87b9 100644 --- a/game/scripts/characters/astoria/summon.rpy +++ b/game/scripts/characters/astoria/summon.rpy @@ -14,8 +14,6 @@ label summon_astoria: label astoria_requests: - # Reset - call reset_menu_position ast "" (xpos="base",ypos="base") menu: @@ -28,7 +26,7 @@ label summon_astoria: call astoria_chitchat jump astoria_talk - "-Sexual favours-" (icon="interface/icons/small/condom.webp"): # TODO: add 'if states.ast.favors_unlocked' once her story is looked over again + "-Sexual favours-" (icon="interface/icons/small/condom.webp"): # TODO: add 'if states.ast.favors_unlocked' once her story is looked over again if states.ast.mood != 0: ast "I don't want to today..." ("annoyed", "narrow", "base", "R") nar "Astoria is upset with you." @@ -257,7 +255,7 @@ label astoria_talk: label astoria_favor_menu: menu: - # "-Level Up-" (icon="interface/icons/small/levelup.webp") if ast_level_up != None: + # "-Level Up-" (icon="interface/icons/small/levelup.webp") if ast_level_up is not None: # call luna_level_up(tier=ast_level_up) # jump luna_favor_menu @@ -284,7 +282,7 @@ label astoria_favor_menu: label .requests: call not_available - + # $ result = show_events_menu(hermione_requests) # if result in ("disabled", "noncompliant"): @@ -313,4 +311,4 @@ label astoria_favor_menu: $ result.start() "-Never mind-": - jump astoria_requests \ No newline at end of file + jump astoria_requests diff --git a/game/scripts/characters/cho/common.rpy b/game/scripts/characters/cho/common.rpy index a77e10a9..5c1b8183 100644 --- a/game/scripts/characters/cho/common.rpy +++ b/game/scripts/characters/cho/common.rpy @@ -74,7 +74,7 @@ init python in character: renpy.store.cho.animation = animation redraw = True - if flip != None: + if flip is not None: renpy.store.cho.xzoom = -1 if flip else 1 redraw = True diff --git a/game/scripts/characters/cho/events/favors/inspect_her_body_tier2.rpy b/game/scripts/characters/cho/events/favors/inspect_her_body_tier2.rpy index aa0b5ab1..2defd5de 100644 --- a/game/scripts/characters/cho/events/favors/inspect_her_body_tier2.rpy +++ b/game/scripts/characters/cho/events/favors/inspect_her_body_tier2.rpy @@ -813,7 +813,7 @@ label cc_pf_strip_T2_intro_E3: cho @ cheeks blush "Does Granger do these sorts of things for you too?" ("soft", "base", "worried", "mid") - # Remove skirt. + # Remove skirt. if cho.is_worn("bottom"): play sound "sounds/cloth_sound3.ogg" hide cho_main diff --git a/game/scripts/characters/cho/events/favors/inspect_her_body_tier3.rpy b/game/scripts/characters/cho/events/favors/inspect_her_body_tier3.rpy index 7ca34f4b..bd591b34 100644 --- a/game/scripts/characters/cho/events/favors/inspect_her_body_tier3.rpy +++ b/game/scripts/characters/cho/events/favors/inspect_her_body_tier3.rpy @@ -510,7 +510,7 @@ label cc_pf_strip_T3_intro_E2: cho @ cheeks blush "..." ("normal", "narrow", "worried", "L") cho @ cheeks heavy_blush "I don't think they're big enough." ("open", "narrow", "worried", "downR") # sad cho @ cheeks heavy_blush "" ("normal", "narrow", "worried", "down") - ton @ hair angry "Big enough for what? Impress some idiot?" ("open", "narrow", "annoyed", "L") + ton @ hair angry "Big enough for what? Impressing some idiot?" ("open", "narrow", "annoyed", "L") ton "No offence, Professor." ("soft", "narrow", "base", "mid") gen "None taken..." ("base", xpos="far_left", ypos="head") ton "You don't need large breasts. Especially not if you want to have a career in Quidditch." ("open", "base", "base", "L") diff --git a/game/scripts/characters/cho/events/favors/suck_it.rpy b/game/scripts/characters/cho/events/favors/suck_it.rpy index 17a52861..7f5f1ef5 100644 --- a/game/scripts/characters/cho/events/favors/suck_it.rpy +++ b/game/scripts/characters/cho/events/favors/suck_it.rpy @@ -35,7 +35,7 @@ label cc_pf_blowjob_T3_intro_E1: call cc_pf_blowjob - if states.cho.ev.suck_it.variant == None: + if states.cho.ev.suck_it.variant is None: gen "[name_cho_genie], ready to reward your coach for a job well done?" ("base", xpos="far_left", ypos="head") cho "Of course... A deal's a deal." ("open", "narrow", "base", "mid") gen "Great, in that case I think a blowjob is in order!" ("base", xpos="far_left", ypos="head") @@ -285,7 +285,7 @@ label cc_pf_blowjob_1: gen "That's not what we agreed on." gen "Get those lips on there..." - if states.cho.ev.suck_it.variant == None: + if states.cho.ev.suck_it.variant is None: $ camera.set_image("up_wide") else: $ camera.set_image("up_worried") @@ -373,7 +373,7 @@ label cc_pf_blowjob_1: "-Take it slow...-": #Cho strokes and licks genie then goes back to stroking until climax gen "Okay... Just keep stroking it for now..." - if states.cho.ev.suck_it.variant == None: + if states.cho.ev.suck_it.variant is None: $ camera.set_imagepath("cho_bj/hj/") $ camera.set_image("up_wide") cho "Oh... Okay, I can do that..." diff --git a/game/scripts/characters/cho/events/quidditch/gryffindor_match.rpy b/game/scripts/characters/cho/events/quidditch/gryffindor_match.rpy index 52d4407d..79900d1a 100644 --- a/game/scripts/characters/cho/events/quidditch/gryffindor_match.rpy +++ b/game/scripts/characters/cho/events/quidditch/gryffindor_match.rpy @@ -204,7 +204,7 @@ label gryffindor_match: # Note: I've tried using chibis, but it's too difficult/buggy. #Cho appears in the window on her broom/knocks on door - #show image "ch_cho fly_window_masked" onlayer screens zorder 5 + #show expression "ch_cho fly_window_masked" onlayer screens zorder 5 #call cho_chibi("fly_window", "mid", "base") cho "[name_genie_cho]!" @@ -869,7 +869,7 @@ label gryffindor_match: call quidditch_stands2(weather="sun_low", crowd=crowd_full) call lun_chibi(xpos=620, ypos=400) play background "sounds/crowd_low.ogg" fadein 1 fadeout 5 - show image Transform("images/misc/redhead.webp", zoom=0.26, pos=(805, 240), xzoom=-1) as redhead zorder 2 + show expression Transform("images/misc/redhead.webp", zoom=0.26, pos=(805, 240), xzoom=-1) as redhead zorder 2 show screen blkfade with ComposeTransition(pushleft, before=faderight) hide screen blkfade @@ -939,7 +939,7 @@ label gryffindor_match: call room("quidditch_stands2") call quidditch_stands2(weather="sun_low", crowd=crowd_full) call lun_chibi(xpos=620, ypos=400) - show image Transform("images/misc/redhead.webp", zoom=0.26, pos=(805, 240), xzoom=-1) as redhead zorder 2 + show expression Transform("images/misc/redhead.webp", zoom=0.26, pos=(805, 240), xzoom=-1) as redhead zorder 2 call gen_chibi("stand", 650, 430, flip=False) play background "sounds/crowd_low.ogg" fadein 1 fadeout 5 @@ -963,7 +963,7 @@ label gryffindor_match: call room("quidditch_stands2") call quidditch_stands2(weather="sun_low", crowd=crowd_full) call lun_chibi(xpos=620, ypos=400) - show image Transform("images/misc/redhead.webp", zoom=0.26, pos=(805, 240), xzoom=-1) as redhead zorder 2 + show expression Transform("images/misc/redhead.webp", zoom=0.26, pos=(805, 240), xzoom=-1) as redhead zorder 2 call gen_chibi("stand", 650, 430, flip=False) hide screen blkfade @@ -1121,7 +1121,7 @@ label gryffindor_match: call room("quidditch_stands2") call quidditch_stands2(weather="sun_low", crowd=crowd_full) call lun_chibi(xpos=620, ypos=400) - show image Transform("images/misc/redhead.webp", zoom=0.26, pos=(805, 240), xzoom=-1) as redhead zorder 2 + show expression Transform("images/misc/redhead.webp", zoom=0.26, pos=(805, 240), xzoom=-1) as redhead zorder 2 show screen blkfade with ComposeTransition(pushleft, before=faderight) hide screen blkfade @@ -1262,7 +1262,7 @@ label gryffindor_match: call sna_chibi("stand", 150, 290, flip=True) call ton_chibi("stand", 130, 310, flip=True) call her_chibi("stand", 300, 400, flip=True) - hide image redhead + hide expression redhead show screen blkfade with ComposeTransition(pushright, before=fadeleft) hide screen blkfade @@ -1301,7 +1301,7 @@ label gryffindor_match: # Cuts to Cho who has taken off Gloves, goggles and leggings. Still wearing top, skirt, bra # Cho takes her top off - # Transition to Cho on her broom + # Transition to Cho on her broom $ cho.equip(cho_outfit_quidditch_gryffindor) $ cho.set_pose("broom") $ cho.animation = sprite_fly_idle @@ -1494,7 +1494,7 @@ label gryffindor_match: call ctc - hide image cg2 + hide expression cg2 with dissolve her "What are you doing?! Don't you have a firebolt?" @@ -1687,7 +1687,7 @@ label gryffindor_match: # Hermione removes panties off head. $ hermione.unequip("headgear") - show image "panties_on_the_ground" as panties zorder 2: + show expression "panties_on_the_ground" as panties zorder 2: pos (268, 380) with d3 @@ -1735,7 +1735,7 @@ label gryffindor_match: ton @ hair horny "Nice, free panties." ("horny", "base", "base", "down", trans=d3) play sound "sounds/cloth_sound2.ogg" - hide image panties + hide expression panties with d3 pause 0.8 @@ -2000,7 +2000,7 @@ label gryffindor_match_return: gen "...{w=0.8}{nw}" ("base", xpos="far_left", ypos="head") gen "...{w=0.8}{nw}" ("angry", xpos="far_left", ypos="head") - hoo "Prison? No, not that, thank heavens." ("open", "shocked", "shocked", "mid") + hoo "Prison? No, not that, thank Merlin." ("open", "shocked", "shocked", "mid") hoo "But she could kiss getting into any sort of professional league goodbye." ("open", "shocked", "base", "down") gen "Kiss--" ("base", xpos="far_left", ypos="head") @@ -2015,21 +2015,21 @@ label gryffindor_match_return: gen "*Hngh*--" ("angry", xpos="far_left", ypos="head") #Cut to CG - show image "cho_under_desk_idle_snape_no_spit" as cg_doll zorder 16 + show expression "cho_under_desk_idle_snape_no_spit" as cg_doll zorder 16 with fade call ctc ton "Professor?" ("soft", "narrow", "raised", "mid", xpos="far_right", ypos="head") play sound "sounds/spit.ogg" - show image "cho_under_desk_idle_snape" as cg_doll + show expression "cho_under_desk_idle_snape" as cg_doll gen "..." ("angry", xpos="far_left", ypos="head") ton "Are you alright?" ("soft", "base", "raised", "mid") #Cho's head starts moving play background "sounds/slickloop.ogg" fadein 2 - show image "cho_under_desk_blowjob" as cg_doll + show expression "cho_under_desk_blowjob" as cg_doll with d3 cho @ cheeks heavy_blush "*Slurp*...{w=0.4} *Gobble*...{w=0.4} *Slurp*" ("open_wide_tongue", "narrow", "base", "up", xpos="far_right", ypos="head", flip=False, trans=d3) @@ -2052,7 +2052,7 @@ label gryffindor_match_return: gen "Nah, it's just a sports--" ("base", xpos="far_left", ypos="head") play background "sounds/slickloopfast.ogg" - show image "cho_under_desk_blowjob_fast" as cg_doll + show expression "cho_under_desk_blowjob_fast" as cg_doll cho @ cheeks heavy_blush "*Gobble*...{w=0.2} *Slurp*...{w=0.2} *Gobble*" ("open_wide_tongue", "happyCl", "base", "mid") gen "*Ngh*...{w=0.4} sports drink." ("angry", xpos="far_left", ypos="head") @@ -2078,11 +2078,11 @@ label gryffindor_match_return: #Cho stops moving stop background fadeout 2 play sound "sounds/slick_pop.ogg" - show image "cho_under_desk_idle_snape" as cg_doll + show expression "cho_under_desk_idle_snape" as cg_doll cho @ cheeks heavy_blush "*Pwah*." ("open_tongue", "narrow", "base", "up") - show image "cho_under_desk_handjob" as cg_doll + show expression "cho_under_desk_handjob" as cg_doll with d3 ton "The boys have a bet on which team would end up winning the Quidditch cup." ("open", "base", "base", "R") @@ -2094,7 +2094,7 @@ label gryffindor_match_return: sna "*Hmph*... In that case, I'll just bring the vial to professor Slughorn and have him test it!" ("snape_16") #Snape's legs vanish from CG as he goes to grab the bottle. - show image "cho_under_desk_idle" as cg_doll + show expression "cho_under_desk_idle" as cg_doll with d3 play sound "sounds/cloth_sound3.ogg" @@ -2282,8 +2282,8 @@ label gryffindor_match_return: play sound "sounds/08_hop_on_desk.ogg" pause 3 - show image "cho_sex idle" as cg_doll zorder 16 - show image "dustfloating" as cg_doll_effects zorder 17 + show expression "cho_sex idle" as cg_doll zorder 16 + show expression "dustfloating" as cg_doll_effects zorder 17 hide screen blkfade hide cho_main with d9 @@ -2316,7 +2316,7 @@ label gryffindor_match_return: cho @ cheeks heavy_blush "That I'd end up winning the cup before ever knowing what my coach's thick beater's bat would feel like inside my tight little... Snitch." ("horny", "narrow", "base", "down") #Cho up position dick in front of body - show image "cho_sex up" as cg_doll + show expression "cho_sex up" as cg_doll with d3 gen "Miss Chang!" @@ -2325,7 +2325,7 @@ label gryffindor_match_return: cho @ cheeks heavy_blush "Although it's quite fitting to have this be part of my reward, don't you think?" ("smile", "narrow", "base", "down") #Cho positioning dick against pussy pose - show image "cho_sex insert" as cg_doll + show expression "cho_sex insert" as cg_doll with d3 $ states.cho.status.sex = True @@ -2340,15 +2340,15 @@ label gryffindor_match_return: cho @ cheeks heavy_blush "And it's about to get even better..." ("crooked_smile", "narrow", "base", "down") #Cho sits down on genie's dick and gets fully penetrated - show image "cho_sex up inside" as cg_doll + show expression "cho_sex up inside" as cg_doll with d3 pause 0.25 cho @ cheeks heavy_blush "*Nnngh--{w=0.40}{nw}" ("angry", "closed", "angry", "mid") - show image "cho_sex middle" as cg_doll + show expression "cho_sex middle" as cg_doll with d3 pause 0.25 play sound "sounds/slick_02.ogg" - show image "cho_sex down" as cg_doll + show expression "cho_sex down" as cg_doll with d3 pause 0.25 @@ -2360,7 +2360,7 @@ label gryffindor_match_return: #Cho starts moving play background "sounds/slickloop.ogg" - show image "cho_sex loop slow" as cg_doll + show expression "cho_sex loop slow" as cg_doll with d3 gen "*Hngh*!" @@ -2416,7 +2416,7 @@ label gryffindor_match_return: #sexloop fast. #speedlines play background "sounds/sexloopfast.ogg" - show image "cho_sex loop fast" as cg_doll + show expression "cho_sex loop fast" as cg_doll with d1 gen "*Argh*...{w=0.4} You little--" @@ -2446,26 +2446,26 @@ label gryffindor_match_return: #Cho standing pose, genie body 3 (cho normal up, jacking it) stop background fadeout 2 play sound "sounds/slick_02.ogg" - show image "cho_sex up jerking" as cg_doll + show expression "cho_sex up jerking" as cg_doll with d3 pause .5 gen "*Aaargh*!!" #Genie cums play sound "sounds/slick_01.ogg" - show image "cho_sex up cum outside stage0" as cg_doll + show expression "cho_sex up cum outside stage0" as cg_doll with d3 pause 0.66 - show image "cho_sex up cum outside stage1" as cg_doll + show expression "cho_sex up cum outside stage1" as cg_doll with d3 pause 0.66 play sound "sounds/slick_01.ogg" - show image "cho_sex up cum outside stage2" as cg_doll + show expression "cho_sex up cum outside stage2" as cg_doll with d3 pause 0.66 - show image "cho_sex up cum outside stage3" as cg_doll + show expression "cho_sex up cum outside stage3" as cg_doll with d3 gen "*Ah*..." @@ -2481,7 +2481,7 @@ label gryffindor_match_return: #Cho standing tasting cum pose, dick outside (cum on dick) #TODO change for variant with cum on her chest included - show image "cho_sex up taste outside" as cg_doll + show expression "cho_sex up taste outside" as cg_doll with d2 cho @ cheeks heavy_blush "*Mmm*..." ("base", "closed", "base", "stare") @@ -2495,9 +2495,9 @@ label gryffindor_match_return: cho @ cheeks heavy_blush "My--" ("smile", "narrow", "base", "up") gen "*Aaaargh*!!!" - show image "cho_sex middle" as cg_doll + show expression "cho_sex middle" as cg_doll pause 0.25 - show image "cho_sex down" as cg_doll + show expression "cho_sex down" as cg_doll play sound "sounds/slick_01.ogg" with kissiris stop background fadeout 1 @@ -2507,28 +2507,28 @@ label gryffindor_match_return: with flashbulb play sound "sounds/slick_02.ogg" - show image "cho_sex idle creampie" as cg_doll + show expression "cho_sex idle creampie" as cg_doll with d3 gen "*Ah*...." cho @ cheeks heavy_blush "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." ("grin", "narrow", "base", "up", trans=d3) #Cho moves to stand pose (cycle images?) - show image "cho_sex middle cum inside" as cg_doll + show expression "cho_sex middle cum inside" as cg_doll with d2 pause 0.25 - show image "cho_sex up cum inside" as cg_doll + show expression "cho_sex up cum inside" as cg_doll with d2 pause 0.25 play sound "sounds/slick_02.ogg" - show image "cho_sex up cum outside" as cg_doll + show expression "cho_sex up cum outside" as cg_doll with d2 cho @ cheeks heavy_blush "I think--{w=0.4} *Ah*...{w=0.4} I think I've finally found a fun activity to put into my workout routine..." ("smile", "narrow", "base", "stare") - show image "cho_sex insert cum inside" as cg_doll + show expression "cho_sex insert cum inside" as cg_doll with d2 pause 0.25 - show image "cho_sex up taste" as cg_doll + show expression "cho_sex up taste" as cg_doll with d2 #Cum sound @@ -2548,8 +2548,8 @@ label gryffindor_match_return: stop music fadeout 1.0 - hide image cg_doll - hide image cg_doll_effects + hide expression cg_doll + hide expression cg_doll_effects call cho_chibi(xpos="desk", ypos="base", flip=False) with fade diff --git a/game/scripts/characters/cho/events/quidditch/hufflepuff_match.rpy b/game/scripts/characters/cho/events/quidditch/hufflepuff_match.rpy index 6c516f55..47c3d906 100644 --- a/game/scripts/characters/cho/events/quidditch/hufflepuff_match.rpy +++ b/game/scripts/characters/cho/events/quidditch/hufflepuff_match.rpy @@ -712,7 +712,7 @@ label hufflepuff_match: her "Higher up, Cho seems to have caught an eye on the snitch and is chasing after it, directly followed by Cedric who..." ("open", "slit", "low", "stare", flip=True) her "Hold on a minute... Is Cho wearing a skirt?" ("scream", "wide", "worried", "stare") - show image "CG quidditch cho_flashing" as cg zorder 17 + show expression "CG quidditch cho_flashing" as cg zorder 17 with fade play sound "sounds/crowd_gasp.ogg" @@ -735,7 +735,7 @@ label hufflepuff_match: call ctc # Pack to stands. - hide image cg + hide expression cg with fade pause .1 diff --git a/game/scripts/characters/cho/events/quidditch/hufflepuff_practice.rpy b/game/scripts/characters/cho/events/quidditch/hufflepuff_practice.rpy index 128ef34c..84a7edbf 100644 --- a/game/scripts/characters/cho/events/quidditch/hufflepuff_practice.rpy +++ b/game/scripts/characters/cho/events/quidditch/hufflepuff_practice.rpy @@ -147,8 +147,6 @@ label cc_ht_talk: call cho_chibi("stand", "mid", "base") call gen_chibi("sit_behind_desk") - call reset_menu_position - hide screen blkfade cho "" ("base", "base", "base", "mid", xpos="base", ypos="base", trans=fade) diff --git a/game/scripts/characters/cho/events/quidditch/intros.rpy b/game/scripts/characters/cho/events/quidditch/intros.rpy index a6c4432f..e85b83ad 100644 --- a/game/scripts/characters/cho/events/quidditch/intros.rpy +++ b/game/scripts/characters/cho/events/quidditch/intros.rpy @@ -194,17 +194,16 @@ label cho_quid_E2: with d3 # Tutorial menu - $ _selected = [False, False, False] - $ menu_y = 0.8 + $ renpy.dynamic(__chosen1=set()) label .choices: - if not all(x == True for x in _selected): # Has selected every position once? Loop if the answer is no. + if len(__chosen1) < 3: # needed because of the bld call bld - menu: + menu (menu_yalign=.8): + set __chosen1 gen "Could you..." ("base", xpos="far_left", ypos="head") - "\"Fly in front of me.\"" if not _selected[0]: - $ _selected[0] = True + "\"Fly in front of me.\"": call bld("hide") if not cho_chibi.action == "fly": @@ -224,8 +223,7 @@ label cho_quid_E2: jump cho_quid_E2.choices - "\"Fly above me.\"" if not _selected[1]: - $ _selected[1] = True + "\"Fly above me.\"": call bld("hide") if not cho_chibi.action == "fly": @@ -239,8 +237,7 @@ label cho_quid_E2: jump cho_quid_E2.choices - "\"Fly close to me.\"" if not _selected[2]: - $ _selected[2] = True + "\"Fly close to me.\"": call bld("hide") if not cho_chibi.action == "fly": @@ -254,8 +251,6 @@ label cho_quid_E2: cho "..." ("soft", "narrow", "raised", "mid", ypos="head", flip=False) jump cho_quid_E2.choices - else: - pass gen "That should be enough..." ("base", xpos="far_left", ypos="head") gen "I presume you're able to hold these positions during movement?" ("base", xpos="far_left", ypos="head") @@ -323,17 +318,16 @@ label cho_quid_E3: cho "No... Someone has to announce the points after all." ("annoyed", "narrow", "base", "mid") gen "I see..." ("base", xpos="far_left", ypos="head") - $ _selected = [False, False] + $ renpy.dynamic(__chosen2=set()) label .choices: menu: + set __chosen2 gen "How about we ask..." ("base", xpos="far_left", ypos="head") "\"Hermione\"": pass - "\"Astoria\"" if states.ast.unlocked and not _selected[0]: - $ _selected[0] = True - + "\"Astoria\"" if states.ast.unlocked: cho "That mischievous little..." ("clench", "wide", "raised", "mid") cho "Not a chance!" ("open", "closed", "angry", "mid") cho "Besides, [name_genie_cho]. Did you forget that she's a Slytherin?" ("open", "narrow", "angry", "mid") @@ -342,9 +336,7 @@ label cho_quid_E3: jump cho_quid_E3.choices - "\"Luna\"" if states.lun.unlocked and not _selected[1]: - $ _selected[1] = True - + "\"Luna\"" if states.lun.unlocked: cho "Luna? Luna Lovegood, [name_genie_cho]?" ("open", "narrow", "raised", "mid") gen "Yes?" ("base", xpos="far_left", ypos="head") cho "Surely{w=0.3}, nobody in their right mind would let Luna Lovegood commentate." ("grin", "happyCl", "base", "mid") # Book quote. @@ -1530,7 +1522,7 @@ label cho_quid_E12: play background "sounds/outskirts.ogg" fadein 2 play music "music/march-of-the-spoons-by-kevin-macleod-from-filmmusic-io.ogg" fadein 1 fadeout 1 if_changed - + hide screen blkfade with d5 @@ -1769,7 +1761,7 @@ label cho_quid_E14: cho @ cheeks blush "*Err*--{w=0.4} No, it's--{w=0.4} *Ehm..." ("upset", "narrow", "angry", "mid") gen "*He-he*...{w=0.4} I knew it." ("grin", xpos="far_left", ypos="base") - cho @ cheeks blush "J-Just close your eyes..." ("upset", "narrow", "angry", "mid") + cho @ cheeks blush "J-Just close your eyes..." ("upset", "narrow", "angry", "mid") show screen blkfade with d5 @@ -2500,9 +2492,9 @@ label cho_quid_E14: $ _facefuck = True #used for end variant play music "music/dark_trance.ogg" fadein 2 if_changed - + call cho_quid_E14_facefuck - + "-Finish the demonstration-": #Keep jerking off/masturbate until completion #Cho resumes jerking genie off, and you also see the scene of Cho orgasming inside the changing room. @@ -2773,7 +2765,7 @@ label cho_quid_E14: nar "Cho jumps out the window, landing onto her broom, plunging herself on the attached dildo." $ cho_chibi.zorder = 3 - + play sound "sounds/slick_02.ogg" with kissiris cho "{heart}*Ah*...{heart}" @@ -2886,7 +2878,7 @@ label cho_quid_E14_facefuck: gen "I can't believe a pupil of mine would defy me like this!" - show cho_facefuck eyebrows_worried eyes_narrow_stare as cg with d3 + show cho_facefuck eyebrows_worried eyes_narrow_stare as cg with d3 cho "*Mfff*!" gen "So, to set you straight, I'm going to pump some morals into you!" diff --git a/game/scripts/characters/cho/events/quidditch/slytherin_match.rpy b/game/scripts/characters/cho/events/quidditch/slytherin_match.rpy index c26a0c8d..1b98e2cd 100644 --- a/game/scripts/characters/cho/events/quidditch/slytherin_match.rpy +++ b/game/scripts/characters/cho/events/quidditch/slytherin_match.rpy @@ -1344,7 +1344,7 @@ label slytherin_match: call gen_chibi("stand_alt", 300, 365, flip=False) call sna_chibi("stand", 215, 360, flip=True) - call quidditch_stands(crowd=[], crowd_react=[None, None, None]) + call quidditch_stands(crowd=(), crowd_react=(None, None, None)) stop background fadeout 4 stop music fadeout 2 diff --git a/game/scripts/characters/cho/events/quidditch/training.rpy b/game/scripts/characters/cho/events/quidditch/training.rpy index 4f58a1d6..901022ba 100644 --- a/game/scripts/characters/cho/events/quidditch/training.rpy +++ b/game/scripts/characters/cho/events/quidditch/training.rpy @@ -398,8 +398,6 @@ label cho_training: call cho_chibi("stand", "mid", "base") call gen_chibi("sit_behind_desk") - call reset_menu_position - hide screen blkfade cho "" ("base", "base", "base", "mid", xpos="base", ypos="base", trans=fade) jump cho_requests @@ -414,9 +412,7 @@ label cho_tactics: call hide_characters call bld - $ menu_y = 0.74 - - menu: + menu (menu_yalign=.74): gen "(What directions should I give her?)" ("base", xpos="far_left", ypos="head") "\"Fly in front of me.\"" if states.cho.ev.quidditch.position != "front": jump cho_tactics.change_front diff --git a/game/scripts/characters/cho/favors.rpy b/game/scripts/characters/cho/favors.rpy index 619280f1..a0e28a62 100644 --- a/game/scripts/characters/cho/favors.rpy +++ b/game/scripts/characters/cho/favors.rpy @@ -1,4 +1,4 @@ - +default cho_eventqueue_talk_to_me = EventQueue("cho_eventqueue_talk_to_me") default cho_ev_talk_to_me_t1_e1 = Event(id="cho_ev_talk_to_me_t1_e1", label="cc_pf_talk_T1_intro_E1", req="states.cho.tier == 1", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) default cho_ev_talk_to_me_t1_e2 = Event(id="cho_ev_talk_to_me_t1_e2", label="cc_pf_talk_T1_intro_E2", req="states.cho.tier == 1", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) default cho_ev_talk_to_me_t1_e3 = Event(id="cho_ev_talk_to_me_t1_e3", label="cc_pf_talk_T1_E3", req="states.cho.tier == 1", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False) @@ -9,6 +9,7 @@ default cho_ev_talk_to_me_t3_e1 = Event(id="cho_ev_talk_to_me_t3_e1", label="cc_ default cho_ev_talk_to_me_t3_e2 = Event(id="cho_ev_talk_to_me_t3_e2", label="cc_pf_talk_T3_intro_E2", req="states.cho.tier >= 3", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) default cho_ev_talk_to_me_t3_e3 = Event(id="cho_ev_talk_to_me_t3_e3", label="cc_pf_talk_T3_E3", req="states.cho.tier >= 3", queue="cho_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False) +default cho_eventqueue_inspect_her_body = EventQueue("cho_eventqueue_inspect_her_body") default cho_ev_inspect_her_body_t2_e1 = Event(id="cho_ev_inspect_her_body_t2_e1", label="cc_pf_strip_T2_intro_E1", req="states.cho.tier == 2", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False) default cho_ev_inspect_her_body_t2_e2 = Event(id="cho_ev_inspect_her_body_t2_e2", label="cc_pf_strip_T2_intro_E2", req="states.cho.tier == 2", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False) default cho_ev_inspect_her_body_t2_e3 = Event(id="cho_ev_inspect_her_body_t2_e3", label="cc_pf_strip_T2_intro_E3", req="states.cho.tier == 2", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["cc_pf_strip_T2_E3_fail_repeat", "cc_pf_strip_T2_E3_fail"]) @@ -18,6 +19,7 @@ default cho_ev_inspect_her_body_t3_e2 = Event(id="cho_ev_inspect_her_body_t3_e2" default cho_ev_inspect_her_body_t3_e3 = Event(id="cho_ev_inspect_her_body_t3_e3", label="cc_pf_strip_T3_intro_E3", req="states.cho.tier >= 3", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False) default cho_ev_inspect_her_body_t3_e4 = Event(id="cho_ev_inspect_her_body_t3_e4", label="cc_pf_strip_T3_repeat", req="states.cho.tier >= 3", queue="cho_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False) +default cho_eventqueue_suck_it = EventQueue("cho_eventqueue_suck_it") default cho_ev_suck_it_t3_e1 = Event(id="cho_ev_suck_it_t3_e1", label="cc_pf_blowjob_T3_intro_E1", req="states.cho.tier >= 3", queue="cho_eventqueue_suck_it", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["cc_pf_blowjob_1"]) default cho_ev_suck_it_t3_e2 = Event(id="cho_ev_suck_it_t3_e2", label="cc_pf_blowjob_T3_E2", req="states.cho.tier >= 3", queue="cho_eventqueue_suck_it", autoenqueue=True, autodequeue=False) default cho_ev_suck_it_t3_e3 = Event(id="cho_ev_suck_it_t3_e3", label="cc_pf_blowjob_T3_E3", req="states.cho.tier >= 3", queue="cho_eventqueue_suck_it", autoenqueue=True, autodequeue=False) diff --git a/game/scripts/characters/cho/requests.rpy b/game/scripts/characters/cho/requests.rpy index 122beb42..7b6f4cce 100644 --- a/game/scripts/characters/cho/requests.rpy +++ b/game/scripts/characters/cho/requests.rpy @@ -1,8 +1,8 @@ - default cho_ev_spy_on_boys_t3_e1 = Event(id="cho_ev_spy_on_boys_t3_e1", label="cc_pr_spy_boys_T3_twins", req="game.daytime==False") default cho_ev_spy_on_boys_t3_e2 = Event(id="cho_ev_spy_on_boys_t3_e2", label="cc_pr_spy_boys_T3_ron", req="game.daytime==False") default cho_ev_spy_on_boys_t3_e3 = Event(id="cho_ev_spy_on_boys_t3_e3", label="cc_pr_spy_boys_T3_harry", req="game.daytime==False") +default cho_eventqueue_spy_on_boys = EventQueue("cho_eventqueue_spy_on_boys") default cho_ev_spy_on_boys_t3_e1_hub = Event(id="cho_ev_spy_on_boys_t3_e1_hub", label="cc_pr_spy_boys_start", req="states.cho.tier == 3", queue="cho_eventqueue_spy_on_boys", autoenqueue=True, autodequeue=False, subevents=["cho_ev_spy_on_boys_t3_e1"]) default cho_ev_spy_on_boys_t3_e2_hub = Event(id="cho_ev_spy_on_boys_t3_e2_hub", label="cc_pr_spy_boys_start", req="states.cho.tier == 3", queue="cho_eventqueue_spy_on_boys", autoenqueue=True, autodequeue=False, subevents=["cho_ev_spy_on_boys_t3_e2"]) default cho_ev_spy_on_boys_t3_e3_hub = Event(id="cho_ev_spy_on_boys_t3_e3_hub", label="cc_pr_spy_boys_start", req="states.cho.tier == 3", queue="cho_eventqueue_spy_on_boys", autoenqueue=True, autodequeue=False, subevents=["cho_ev_spy_on_boys_t3_e3"]) @@ -12,6 +12,7 @@ default cho_ev_spy_on_girls_t3_e2 = Event(id="cho_ev_spy_on_girls_t3_e2", label= default cho_ev_spy_on_girls_t3_e3 = Event(id="cho_ev_spy_on_girls_t3_e3", label="cc_pr_spy_girls_T3_katie", req="game.daytime==False") default cho_ev_spy_on_girls_t3_e4 = Event(id="cho_ev_spy_on_girls_t3_e4", label="cc_pr_spy_girls_T3_angelina", req="game.daytime==False") +default cho_eventqueue_spy_on_girls = EventQueue("cho_eventqueue_spy_on_girls") default cho_ev_spy_on_girls_t3_e1_hub = Event(id="cho_ev_spy_on_girls_t3_e1_hub", label="cc_pr_spy_girls_start", req="states.cho.tier == 3", queue="cho_eventqueue_spy_on_girls", autoenqueue=True, autodequeue=False, subevents=["cho_ev_spy_on_girls_t3_e1"]) default cho_ev_spy_on_girls_t3_e2_hub = Event(id="cho_ev_spy_on_girls_t3_e2_hub", label="cc_pr_spy_girls_start", req="states.cho.tier == 3", queue="cho_eventqueue_spy_on_girls", autoenqueue=True, autodequeue=False, subevents=["cho_ev_spy_on_girls_t3_e2"]) default cho_ev_spy_on_girls_t3_e3_hub = Event(id="cho_ev_spy_on_girls_t3_e3_hub", label="cc_pr_spy_girls_start", req="states.cho.tier == 3", queue="cho_eventqueue_spy_on_girls", autoenqueue=True, autodequeue=False, subevents=["cho_ev_spy_on_girls_t3_e3"]) @@ -30,6 +31,7 @@ default cho_ev_manipulate_boys_t3_e1 = Event(id="cho_ev_manipulate_boys_t3_e1", default cho_ev_manipulate_boys_t3_e2 = Event(id="cho_ev_manipulate_boys_t3_e2", label="cc_pr_manipulate_boys_T3_ron", req="game.daytime==False") default cho_ev_manipulate_boys_t3_e3 = Event(id="cho_ev_manipulate_boys_t3_e3", label="cc_pr_manipulate_boys_T3_harry", req="game.daytime==False") +default cho_eventqueue_manipulate_boys = EventQueue("cho_eventqueue_manipulate_boys") default cho_ev_manipulate_boys_t1_e1_hub = Event(id="cho_ev_manipulate_boys_t1_e1_hub", label="cc_pr_manipulate_boys_start", req="states.cho.tier == 1", queue="cho_eventqueue_manipulate_boys", autoenqueue=True, autodequeue=False, subevents=["cho_ev_manipulate_boys_t1_e1"]) default cho_ev_manipulate_boys_t1_e2_hub = Event(id="cho_ev_manipulate_boys_t1_e2_hub", label="cc_pr_manipulate_boys_start", req="states.cho.tier == 1", queue="cho_eventqueue_manipulate_boys", autoenqueue=True, autodequeue=False, subevents=["cho_ev_manipulate_boys_t1_e2"]) default cho_ev_manipulate_boys_t1_e3_hub = Event(id="cho_ev_manipulate_boys_t1_e3_hub", label="cc_pr_manipulate_boys_start", req="states.cho.tier == 1", queue="cho_eventqueue_manipulate_boys", autoenqueue=True, autodequeue=False, subevents=["cho_ev_manipulate_boys_t1_e3"]) @@ -48,6 +50,7 @@ default cho_ev_manipulate_girls_t3_e2 = Event(id="cho_ev_manipulate_girls_t3_e2" default cho_ev_manipulate_girls_t3_e3 = Event(id="cho_ev_manipulate_girls_t3_e3", label="cc_pr_manipulate_girls_T3_katie_part2", req="game.daytime==False") default cho_ev_manipulate_girls_t3_e4 = Event(id="cho_ev_manipulate_girls_t3_e4", label="cc_pr_manipulate_girls_T3_angelina", req="game.daytime==False") +default cho_eventqueue_manipulate_girls = EventQueue("cho_eventqueue_manipulate_girls") default cho_ev_manipulate_girls_t3_e1_hub = Event(id="cho_ev_manipulate_girls_t3_e1_hub", label="cc_pr_manipulate_girls_start", req="states.cho.tier == 3", queue="cho_eventqueue_manipulate_girls", autoenqueue=True, autodequeue=False, subevents=["cho_ev_manipulate_girls_t3_e1"]) default cho_ev_manipulate_girls_t3_e2_hub = Event(id="cho_ev_manipulate_girls_t3_e2_hub", label="cc_pr_manipulate_girls_start", req="states.cho.tier == 3", queue="cho_eventqueue_manipulate_girls", autoenqueue=True, autodequeue=False, subevents=["cho_ev_manipulate_girls_t3_e2"]) default cho_ev_manipulate_girls_t3_e3_hub = Event(id="cho_ev_manipulate_girls_t3_e3_hub", label="cc_pr_manipulate_girls_start", req="states.cho.tier == 3", queue="cho_eventqueue_manipulate_girls", autoenqueue=True, autodequeue=False, subevents=["cho_ev_manipulate_girls_t3_e3"]) diff --git a/game/scripts/characters/cho/summon.rpy b/game/scripts/characters/cho/summon.rpy index ab131084..392da71d 100644 --- a/game/scripts/characters/cho/summon.rpy +++ b/game/scripts/characters/cho/summon.rpy @@ -32,8 +32,6 @@ label summon_cho: label cho_requests: - # Reset - call reset_menu_position cho "" (xpos="base", ypos="base") menu: @@ -47,7 +45,7 @@ label summon_cho: "Are you ready to begin the match?" "-Yes-": pass - "-no-": + "-No-": jump cho_requests jump start_hufflepuff_match @@ -59,7 +57,7 @@ label summon_cho: "Are you ready to begin the match?" "-Yes-": pass - "-no-": + "-No-": jump cho_requests jump start_slytherin_match @@ -195,4 +193,3 @@ label cho_favor_menu: label not_available: $ TBA_message("This feature is currently not available as of version %s." % config.version) return - diff --git a/game/scripts/characters/genie/common.rpy b/game/scripts/characters/genie/common.rpy index 87680323..2591fc40 100644 --- a/game/scripts/characters/genie/common.rpy +++ b/game/scripts/characters/genie/common.rpy @@ -9,9 +9,9 @@ init python: side = None #showing = renpy.showing(name=tag, layer=layer) - if xpos != None or ypos != None: - xpos = states.gen.image.xpos if xpos == None else sprite_pos.get("x").get(xpos, xpos) - ypos = states.gen.image.ypos if ypos == None else sprite_pos.get("y").get(ypos, ypos) + if xpos is not None or ypos is not None: + xpos = states.gen.image.xpos if xpos is None else sprite_pos.get("x").get(xpos, xpos) + ypos = states.gen.image.ypos if ypos is None else sprite_pos.get("y").get(ypos, ypos) states.gen.image.xpos = xpos states.gen.image.ypos = ypos @@ -24,7 +24,7 @@ init python: states.gen.image.offset = (0, 600) if face: - variant = "genie {}".format(face) + variant = f"genie {face}" renpy.set_tag_attributes(variant) side = "genie" @@ -36,7 +36,7 @@ init python: if renpy.showing("genie", layer=layer): renpy.show(variant, layer=layer, tag="genie", at_list=at_list) - if flip != None: + if flip is not None: states.gen.image.xzoom = -1 if flip else 1 if what: diff --git a/game/scripts/characters/genie/wardrobe.rpy b/game/scripts/characters/genie/wardrobe.rpy index 2dcf7d69..bcfad0ce 100644 --- a/game/scripts/characters/genie/wardrobe.rpy +++ b/game/scripts/characters/genie/wardrobe.rpy @@ -10,9 +10,9 @@ init python: layeredimage genie_stats: anchor (0.0, 1.0) - always "characters/genie/base.webp" - always "characters/genie/outfits/robes.webp" - always "characters/genie/outfits/robes_beard.webp" + always "genie_bbase" + always "genie_outfit_robes" + always "genie_goatee" # TODO: Add outfit support; Low priority @@ -20,31 +20,28 @@ layeredimage genie: anchor (0.0, 1.0) group outfit: - attribute robes default null - attribute nude "characters/genie/hair.webp" + attribute nude - always "characters/genie/base.webp" + attribute bbase default group face: attribute base default null - attribute grin "characters/genie/grin.webp" - attribute angry "characters/genie/angry.webp" - attribute smile "characters/genie/smile.webp" - attribute open "characters/genie/open.webp" + attribute grin + attribute angry + attribute smile + attribute open group outfit: - attribute robes default "characters/genie/outfits/robes.webp" - attribute nude null - attribute santa "characters/genie/outfits/santa.webp" + attribute robes default + attribute santa - group face multiple: - attribute robes default "characters/genie/outfits/robes_beard.webp" if_all ["robes"] - attribute nude "characters/genie/beard.webp" if_all ["nude"] - attribute base "characters/genie/outfits/santa_beard_base.webp" if_all ["santa", "base"] - attribute grin "characters/genie/outfits/santa_beard_grin.webp" if_all ["santa", "grin"] - attribute angry "characters/genie/outfits/santa_beard_angry.webp" if_all ["santa", "angry"] - attribute smile "characters/genie/outfits/santa_beard_smile.webp" if_all ["santa", "smile"] - attribute open "characters/genie/outfits/santa_beard_open.webp" if_all ["santa", "open"] + attribute goatee default if_any ("robes", "nude") + group _ multiple variant "santa_beard" if_any "santa": + attribute base + attribute grin + attribute angry + attribute smile + attribute open at Transform(function=genie_transform) diff --git a/game/scripts/characters/hermione/chibi.rpy b/game/scripts/characters/hermione/chibi.rpy index e334d82c..07b26c43 100644 --- a/game/scripts/characters/hermione/chibi.rpy +++ b/game/scripts/characters/hermione/chibi.rpy @@ -82,7 +82,7 @@ init python: else: chibi["base"] = "ch_hem walk_robe_n" else: - chibi["base"] = "ch_hem walk" + chibi["base"] = "ch_hem walk" elif not chibi.action or chibi.action == "stand": # Determine clothing state @@ -97,7 +97,7 @@ init python: else: chibi["base"] = "ch_hem blink_robe_n" else: - chibi["base"] = "ch_hem blink" + chibi["base"] = "ch_hem blink" elif chibi.action == "dance": # Determine clothing state @@ -140,14 +140,14 @@ init python: elif chibi.action in ("drink_potion", "sniff_potion", "hold_potion"): if not hermione.is_any_worn("top", "bottom"): - chibi["base"] = "ch_hem {}_nude".format(chibi.action) + chibi["base"] = f"ch_hem {chibi.action}_nude" else: - chibi["base"] = "ch_hem {}".format(chibi.action) + chibi["base"] = f"ch_hem {chibi.action}" # Sets up a chibi scene with Hermione and Genie in it label her_chibi_scene(action="reset", xpos="mid", ypos="base", trans=None): - if trans != None: + if trans is not None: call hide_characters hide screen bld1 diff --git a/game/scripts/characters/hermione/chitchats.rpy b/game/scripts/characters/hermione/chitchats.rpy index da1a7464..f79fd4ed 100644 --- a/game/scripts/characters/hermione/chitchats.rpy +++ b/game/scripts/characters/hermione/chitchats.rpy @@ -7,7 +7,7 @@ label hermione_chitchat: $ states.her.chatted = True ### Tier 1 ### - if states.her.level >= 0 and states.her.level <= 3: + if states.her.tier == 1: random: block: her "Maybe, if I work harder, I could squeeze a few more classes into my schedule..." ("open", "closed", "angry", "mid") @@ -59,126 +59,127 @@ label hermione_chitchat: her "" ("normal", "base", "base", "mid") ### Tier 2 Low ### - if states.her.level >= 4 and states.her.level <= 6: - random: - block: - her "I read somewhere that a full moon often makes it easier to concentrate at a task at hand..." ("open", "closed", "angry", "mid") - her "" ("normal", "base", "base", "mid") + if states.her.tier == 2: + if states.her.level <= 6: + random: + block: + her "I read somewhere that a full moon often makes it easier to concentrate at a task at hand..." ("open", "closed", "angry", "mid") + her "" ("normal", "base", "base", "mid") - block: - her "I love nothing more than to curl up by a fireplace during a rainstorm with a good book..." ("base", "base", "base", "mid") - her "" ("base", "base", "base", "mid") + block: + her "I love nothing more than to curl up by a fireplace during a rainstorm with a good book..." ("base", "base", "base", "mid") + her "" ("base", "base", "base", "mid") - block: - her "A peculiar rumour concerning professor Snape has been circulating in the school lately..." ("open", "base", "worried", "R") - her "No, I probably shouldn't..." ("soft", "base", "base", "mid") - her "" ("normal", "base", "base", "mid") + block: + her "A peculiar rumour concerning professor Snape has been circulating in the school lately..." ("open", "base", "worried", "R") + her "No, I probably shouldn't..." ("soft", "base", "base", "mid") + her "" ("normal", "base", "base", "mid") - block if states.her.status.show_bra or states.her.status.show_panties: - her "Despite the questionable nature of the favours you have been buying from me lately, [name_genie_hermione]..." ("open", "closed", "angry", "mid") - her "I am grateful to you for your help..." ("open", "closed", "angry", "mid") - her "Gryffindor needs those points now more than ever..." ("annoyed", "squint", "angry", "mid") - her "" ("normal", "base", "base", "mid") + block if states.her.status.show_bra or states.her.status.show_panties: + her "Despite the questionable nature of the favours you have been buying from me lately, [name_genie_hermione]..." ("open", "closed", "angry", "mid") + her "I am grateful to you for your help..." ("open", "closed", "angry", "mid") + her "Gryffindor needs those points now more than ever..." ("annoyed", "squint", "angry", "mid") + her "" ("normal", "base", "base", "mid") - block: - her "Quidditch being so popular is simply beyond me..." ("open", "closed", "angry", "mid") - her "I mean, the game doesn't make any sense..." ("open", "closed", "angry", "mid") - her "" ("normal", "base", "base", "mid") + block: + her "Quidditch being so popular is simply beyond me..." ("open", "closed", "angry", "mid") + her "I mean, the game doesn't make any sense..." ("open", "closed", "angry", "mid") + her "" ("normal", "base", "base", "mid") - block: - her "The \"Men's Rights Movement\" is steadily gaining popularity." ("open", "closed", "angry", "mid") - her "It's very fulfilling to know that I am helping to improve our society." ("open", "closed", "angry", "mid") - her "" ("normal", "base", "base", "mid") + block: + her "The \"Men's Rights Movement\" is steadily gaining popularity." ("open", "closed", "angry", "mid") + her "It's very fulfilling to know that I am helping to improve our society." ("open", "closed", "angry", "mid") + her "" ("normal", "base", "base", "mid") - block: - her "The Hogwarts school library is considered to be quite extensive..." ("open", "closed", "angry", "mid") - her "Still... I'd like it to be bigger." ("open", "squint", "base", "mid") - her "" ("normal", "base", "base", "mid") + block: + her "The Hogwarts school library is considered to be quite extensive..." ("open", "closed", "angry", "mid") + her "Still... I'd like it to be bigger." ("open", "squint", "base", "mid") + her "" ("normal", "base", "base", "mid") - block: - her "As one of the top students in this school, I have a reputation to keep..." ("open", "base", "worried", "R") - her "People look up to me..." ("open", "base", "worried", "R") - her "... So, your discretion is very appreciated, [name_genie_hermione]." ("open", "base", "base", "mid") - her "" ("annoyed", "base", "worried", "R") + block: + her "As one of the top students in this school, I have a reputation to keep..." ("open", "base", "worried", "R") + her "People look up to me..." ("open", "base", "worried", "R") + her "... So, your discretion is very appreciated, [name_genie_hermione]." ("open", "base", "base", "mid") + her "" ("annoyed", "base", "worried", "R") - block if states.her.status.show_bra or states.her.status.show_panties: - her "That favour I sold you the other day, [name_genie_hermione]..." ("open", "base", "worried", "mid") - her "......." ("normal", "happyCl", "worried", "mid") - her "I only agreed to it because the needs of my house always come first." ("open", "narrow", "worried", "down") - her "I just wanted you to know that, [name_genie_hermione]..." ("upset", "closed", "base", "mid") + block if states.her.status.show_bra or states.her.status.show_panties: + her "That favour I sold you the other day, [name_genie_hermione]..." ("open", "base", "worried", "mid") + her "......." ("normal", "happyCl", "worried", "mid") + her "I only agreed to it because the needs of my house always come first." ("open", "narrow", "worried", "down") + her "I just wanted you to know that, [name_genie_hermione]..." ("upset", "closed", "base", "mid") - block: - her "My favourite subject?" ("open", "base", "base", "mid") - her "*Hmm*..." ("soft", "base", "base", "R") - her "I suppose that would be \"charms\"..." ("open", "base", "base", "mid") - her "Or \"transfiguration\" perhaps..." ("open", "base", "base", "mid") - her "Although I do enjoy \"arithmancy\"..." ("open", "base", "base", "mid") - her "" ("soft", "base", "base", "mid") + block: + her "My favourite subject?" ("open", "base", "base", "mid") + her "*Hmm*..." ("soft", "base", "base", "R") + her "I suppose that would be \"charms\"..." ("open", "base", "base", "mid") + her "Or \"transfiguration\" perhaps..." ("open", "base", "base", "mid") + her "Although I do enjoy \"arithmancy\"..." ("open", "base", "base", "mid") + her "" ("soft", "base", "base", "mid") - block if not hermione.is_worn("top", "bottom"): - her "Yes, standing in-front of your headmaster without a top or bottoms is completely normal..." ("open", "closed", "base", "mid") - her "I suppose you are helping me..." ("open", "base", "base", "mid") + block if not hermione.is_worn("top", "bottom"): + her "Yes, standing in-front of your headmaster without a top or bottoms is completely normal..." ("open", "closed", "base", "mid") + her "I suppose you are helping me..." ("open", "base", "base", "mid") - ### Tier 2 High ### - if states.her.level >= 7 and states.her.level <= 9: - random: - her "I dislike the entire house of Slytherin with all my heart, [name_genie_hermione]." ("angry", "base", "angry", "mid") + ### Tier 2 High ### + else: + random: + her "I dislike the entire house of Slytherin with all my heart, [name_genie_hermione]." ("angry", "base", "angry", "mid") - block if states.her.status.show_panties: - her "Do you remember when you asked me to show you my panties for the first time, [name_genie_hermione]?" ("open", "closed", "angry", "mid") - her "I was so furious with you then..." ("open", "closed", "angry", "mid") - her "Now I see that I was just being selfish..." ("annoyed", "squint", "angry", "mid") - her "After all, the honour of my house is at stake here..." ("annoyed", "squint", "angry", "mid") - her "And that shall be my one and only concern!" ("normal", "squint", "angry", "mid") + block if states.her.status.show_panties: + her "Do you remember when you asked me to show you my panties for the first time, [name_genie_hermione]?" ("open", "closed", "angry", "mid") + her "I was so furious with you then..." ("open", "closed", "angry", "mid") + her "Now I see that I was just being selfish..." ("annoyed", "squint", "angry", "mid") + her "After all, the honour of my house is at stake here..." ("annoyed", "squint", "angry", "mid") + her "And that shall be my one and only concern!" ("normal", "squint", "angry", "mid") - block: - her "The rate at which the Slytherin house has been gaining points lately is simply ridiculous." ("open", "closed", "angry", "mid") - her "I think professor Snape might be behind it." ("angry", "base", "angry", "mid") - her "You should look into this, [name_genie_hermione]." ("open", "closed", "angry", "mid") - her "" ("normal", "base", "base", "mid") + block: + her "The rate at which the Slytherin house has been gaining points lately is simply ridiculous." ("open", "closed", "angry", "mid") + her "I think professor Snape might be behind it." ("angry", "base", "angry", "mid") + her "You should look into this, [name_genie_hermione]." ("open", "closed", "angry", "mid") + her "" ("normal", "base", "base", "mid") - block: - her "Ashwinder eggs, rose thorns, moonstone..." ("open", "base", "worried", "R") - her "*Huh*? Am I thinking out loud again?" ("open", "base", "worried", "mid") - her "I apologise..." ("grin", "happyCl", "worried", "mid",emote="sweat") - her "It's just that we have another test soon..." ("soft", "base", "base", "R") + block: + her "Ashwinder eggs, rose thorns, moonstone..." ("open", "base", "worried", "R") + her "*Huh*? Am I thinking out loud again?" ("open", "base", "worried", "mid") + her "I apologise..." ("grin", "happyCl", "worried", "mid",emote="sweat") + her "It's just that we have another test soon..." ("soft", "base", "base", "R") - block: - her "Hogwarts has really become a second home to me lately..." ("open", "closed", "base", "mid") - her "I don't even miss my parents nearly as much anymore..." ("annoyed", "narrow", "worried", "down") - her "Come to think of it, I don't miss them at all..." ("angry", "wide", "base", "stare") - her "I'm an awful daughter..." ("angry", "narrow", "base", "down") + block: + her "Hogwarts has really become a second home to me lately..." ("open", "closed", "base", "mid") + her "I don't even miss my parents nearly as much anymore..." ("annoyed", "narrow", "worried", "down") + her "Come to think of it, I don't miss them at all..." ("angry", "wide", "base", "stare") + her "I'm an awful daughter..." ("angry", "narrow", "base", "down") - block: - her "*Yawn*! I read about this technique that supposedly allows you to cut your sleep time in half..." ("annoyed", "narrow", "annoyed", "up") - her "I don't think it's working though... *Yawn*!" ("annoyed", "narrow", "worried", "down") + block: + her "*Yawn*! I read about this technique that supposedly allows you to cut your sleep time in half..." ("annoyed", "narrow", "annoyed", "up") + her "I don't think it's working though... *Yawn*!" ("annoyed", "narrow", "worried", "down") - block: - her "Even after I graduate from Hogwarts, I plan to keep on working hard." ("open", "closed", "angry", "mid") - her "If I give it my all, I can make this world a better place, I know it!" ("open", "base", "base", "mid") - her "" ("normal", "base", "base", "mid") + block: + her "Even after I graduate from Hogwarts, I plan to keep on working hard." ("open", "closed", "angry", "mid") + her "If I give it my all, I can make this world a better place, I know it!" ("open", "base", "base", "mid") + her "" ("normal", "base", "base", "mid") - block: - her "Somehow I have the feeling that this year will become a pivotal turning point in my life..." ("open", "base", "worried", "mid") - her "" ("soft", "base", "base", "R") + block: + her "Somehow I have the feeling that this year will become a pivotal turning point in my life..." ("open", "base", "worried", "mid") + her "" ("soft", "base", "base", "R") - block: - her "Some of the less travelled school corridors are not very well lit, and rather dusty..." ("open", "closed", "angry", "mid") - her "Please take care of this, [name_genie_hermione]..." ("open", "closed", "angry", "mid") - her "" ("normal", "base", "base", "mid") + block: + her "Some of the less travelled school corridors are not very well lit, and rather dusty..." ("open", "closed", "angry", "mid") + her "Please take care of this, [name_genie_hermione]..." ("open", "closed", "angry", "mid") + her "" ("normal", "base", "base", "mid") - block: - her "I've read about this thing called a \"Time-Turner\"." ("open", "base", "base", "mid") - her "It allows the user to control the flow of time..." ("open", "base", "base", "mid") - her "Having a device like that would do wonders for my schedule..." ("open", "closed", "base", "mid") - her "" ("annoyed", "squint", "base", "mid") + block: + her "I've read about this thing called a \"Time-Turner\"." ("open", "base", "base", "mid") + her "It allows the user to control the flow of time..." ("open", "base", "base", "mid") + her "Having a device like that would do wonders for my schedule..." ("open", "closed", "base", "mid") + her "" ("annoyed", "squint", "base", "mid") - block if not hermione.is_worn("top", "bottom"): - her "Is it just me, or is it a bit chilly in here?" ("open", "closed", "base", "mid") - her "It must be due to my current state of undress..." ("open", "base", "base", "mid") + block if not hermione.is_worn("top", "bottom"): + her "Is it just me, or is it a bit chilly in here?" ("open", "closed", "base", "mid") + her "It must be due to my current state of undress..." ("open", "base", "base", "mid") ### Tier 3 ### - if states.her.level >= 10 and states.her.level <= 12: + if states.her.tier == 3: random: block: her "My \"men's rights movement\" has been losing its popularity lately..." ("open", "base", "worried", "mid") @@ -239,118 +240,119 @@ label hermione_chitchat: her "No, you'll still have to pay me for that." ("open", "base", "base", "mid") ### Tier 4 Low ### - if states.her.level >= 13 and states.her.level <= 15: - random: - her "What will it be today, [name_genie_hermione]?" ("annoyed", "narrow", "annoyed", "mid") + if states.her.tier == 4: + if states.her.level <= 15: + random: + her "What will it be today, [name_genie_hermione]?" ("annoyed", "narrow", "annoyed", "mid") - block: - her "[name_genie_hermione], with all due respect..." ("normal", "squint", "angry", "mid") - her "Professor Snape's debauchery is getting out of hand!" ("normal", "squint", "angry", "mid") - her "You must do something, [name_genie_hermione]." ("open", "base", "worried", "mid") - her "" ("normal", "base", "base", "mid") + block: + her "[name_genie_hermione], with all due respect..." ("normal", "squint", "angry", "mid") + her "Professor Snape's debauchery is getting out of hand!" ("normal", "squint", "angry", "mid") + her "You must do something, [name_genie_hermione]." ("open", "base", "worried", "mid") + her "" ("normal", "base", "base", "mid") - #block: - #her "I am willing to go to great lengths to insure the superiority of my house..." ("open", "closed", "angry", "mid") - #her "But that does not mean that I take pleasure in selling myself out to you in exchange for house points, [name_genie_hermione]." ("open", "closed", "angry", "mid") - #her "{size=-4}(Like some sort of prostitute-witch...){/size}" ("angry", "narrow", "base", "down") + #block: + #her "I am willing to go to great lengths to insure the superiority of my house..." ("open", "closed", "angry", "mid") + #her "But that does not mean that I take pleasure in selling myself out to you in exchange for house points, [name_genie_hermione]." ("open", "closed", "angry", "mid") + #her "{size=-4}(Like some sort of prostitute-witch...){/size}" ("angry", "narrow", "base", "down") - block: - her "Lately I have not been studying nearly as much as I used to..." ("open", "base", "worried", "mid") - her "Am I losing my motivation?" ("open", "base", "worried", "R") - her "" ("soft", "base", "base", "R") + block: + her "Lately I have not been studying nearly as much as I used to..." ("open", "base", "worried", "mid") + her "Am I losing my motivation?" ("open", "base", "worried", "R") + her "" ("soft", "base", "base", "R") - block: - her "My least favourite subject?" ("open", "squint", "base", "mid") - her "Divination." ("annoyed", "squint", "angry", "mid") + block: + her "My least favourite subject?" ("open", "squint", "base", "mid") + her "Divination." ("annoyed", "squint", "angry", "mid") - block: - her "My father used to say that \"magic is just science we don't understand yet\"." ("open", "base", "base", "mid") - her "He couldn't be more wrong, of course..." ("open", "base", "worried", "R") - her "" ("soft", "base", "base", "R") + block: + her "My father used to say that \"magic is just science we don't understand yet\"." ("open", "base", "base", "mid") + her "He couldn't be more wrong, of course..." ("open", "base", "worried", "R") + her "" ("soft", "base", "base", "R") - block: - her "Despite everything..." ("open", "closed", "angry", "mid") - her "I am thankful that you keep on buying favours from me, [name_genie_hermione]..." ("open", "base", "worried", "R") - her "" ("soft", "base", "base", "R") + block: + her "Despite everything..." ("open", "closed", "angry", "mid") + her "I am thankful that you keep on buying favours from me, [name_genie_hermione]..." ("open", "base", "worried", "R") + her "" ("soft", "base", "base", "R") - block if game.weather in {"snow", "blizzard"}: - her "It's quite cold outside today, isn't it?" ("open", "base", "base", "mid") - her "" ("soft", "base", "base", "mid") + block if game.weather in {"snow", "blizzard"}: + her "It's quite cold outside today, isn't it?" ("open", "base", "base", "mid") + her "" ("soft", "base", "base", "mid") - #block: - #her "The \"Autumn Ball\" will be soon..." ("open", "base", "base", "mid") - #her "" ("soft", "base", "base", "mid") + #block: + #her "The \"Autumn Ball\" will be soon..." ("open", "base", "base", "mid") + #her "" ("soft", "base", "base", "mid") - block: - her "People hardly show up for my \"men's rights movement\" meetings anymore..." ("open", "base", "worried", "R") - her "" ("soft", "base", "base", "R") + block: + her "People hardly show up for my \"men's rights movement\" meetings anymore..." ("open", "base", "worried", "R") + her "" ("soft", "base", "base", "R") - block if states.her.ev.dance_for_me.snape_invited: - her "Do you believe we have learned enough, or will you be inviting Professor Snape again in the future?" ("annoyed", "base", "base", "R") + block if states.her.ev.dance_for_me.snape_invited: + her "Do you believe we have learned enough, or will you be inviting Professor Snape again in the future?" ("annoyed", "base", "base", "R") - ### Tier 4 High ### - if states.her.level >= 16 and states.her.level <= 18: - random: - block if hermione.is_any_worn("top", "bra"): - her "Would you like me to show you my breasts today, [name_genie_hermione]?" ("open", "narrow", "worried", "down") - her "Yes... I would willingly expose myself to you, professor..." ("base", "narrow", "base", "up") - her "That's how selfless I am!" ("annoyed", "narrow", "annoyed", "mid") + ### Tier 4 High ### + else: + random: + block if hermione.is_any_worn("top", "bra"): + her "Would you like me to show you my breasts today, [name_genie_hermione]?" ("open", "narrow", "worried", "down") + her "Yes... I would willingly expose myself to you, professor..." ("base", "narrow", "base", "up") + her "That's how selfless I am!" ("annoyed", "narrow", "annoyed", "mid") - block if states.her.status.cumshot: - her "I can't help but feel bad for the house elves who do my laundry..." ("open", "base", "base", "mid") - her "I mean, all those dreadful semen stains..." ("open", "narrow", "worried", "down") - her "" ("angry", "narrow", "base", "down") + block if states.her.status.cumshot: + her "I can't help but feel bad for the house elves who do my laundry..." ("open", "base", "base", "mid") + her "I mean, all those dreadful semen stains..." ("open", "narrow", "worried", "down") + her "" ("angry", "narrow", "base", "down") - block: - her "It doesn't matter how many times you ask me this, [name_genie_hermione]..." ("open", "base", "base", "mid") - her "The answer shall remain the same..." ("open", "base", "base", "mid") - her "I have nothing but resentment for the Slytherins!" ("angry", "base", "angry", "mid") - her "" ("annoyed", "narrow", "angry", "R") + block: + her "It doesn't matter how many times you ask me this, [name_genie_hermione]..." ("open", "base", "base", "mid") + her "The answer shall remain the same..." ("open", "base", "base", "mid") + her "I have nothing but resentment for the Slytherins!" ("angry", "base", "angry", "mid") + her "" ("annoyed", "narrow", "angry", "R") - block: - her "I've been thinking about all the favours I've sold you over these last months, [name_genie_hermione]..." ("open", "base", "base", "mid") - her "Even though I do feel a little bit embarrassed..." ("open", "narrow", "worried", "down") - her "I also feel very proud of myself." ("upset", "closed", "base", "mid") + block: + her "I've been thinking about all the favours I've sold you over these last months, [name_genie_hermione]..." ("open", "base", "base", "mid") + her "Even though I do feel a little bit embarrassed..." ("open", "narrow", "worried", "down") + her "I also feel very proud of myself." ("upset", "closed", "base", "mid") - block: - her "I still dedicate a lot of my time to studying..." ("open", "base", "base", "mid") - her "But not nearly as much of it as I used to..." ("open", "base", "base", "mid") - her "" ("soft", "base", "base", "R") + block: + her "I still dedicate a lot of my time to studying..." ("open", "base", "base", "mid") + her "But not nearly as much of it as I used to..." ("open", "base", "base", "mid") + her "" ("soft", "base", "base", "R") - block: - her "Gryffindor shall get the house cup this year!" ("open", "closed", "angry", "mid") - her "{size=-4}(Even if it should cost me my dignity...){/size}" ("angry", "narrow", "base", "down") - her "" ("upset", "closed", "base", "mid") + block: + her "Gryffindor shall get the house cup this year!" ("open", "closed", "angry", "mid") + her "{size=-4}(Even if it should cost me my dignity...){/size}" ("angry", "narrow", "base", "down") + her "" ("upset", "closed", "base", "mid") - block: - her "I don't mind autumn, spring, or summer..." ("open", "base", "base", "mid") - her "But my favourite season is winter." ("open", "closed", "base", "mid") - her "" ("soft", "base", "base", "mid") + block: + her "I don't mind autumn, spring, or summer..." ("open", "base", "base", "mid") + her "But my favourite season is winter." ("open", "closed", "base", "mid") + her "" ("soft", "base", "base", "mid") - block: - her "I used to look down on girls who spend too much of their time, worrying about the way they look..." ("open", "base", "base", "mid") - her "But I was wrong to do so..." ("open", "base", "base", "mid") - her "I am starting to understand how important it really is for a girl to look pretty." ("open", "base", "base", "mid") - her "..............." ("annoyed", "base", "worried", "R") - her "I've been on a diet lately..." ("angry", "wink", "base", "mid") - her "" ("angry", "happyCl", "worried", "mid",emote="sweat") - her "" ("normal", "happyCl", "worried", "mid") + block: + her "I used to look down on girls who spend too much of their time, worrying about the way they look..." ("open", "base", "base", "mid") + her "But I was wrong to do so..." ("open", "base", "base", "mid") + her "I am starting to understand how important it really is for a girl to look pretty." ("open", "base", "base", "mid") + her "..............." ("annoyed", "base", "worried", "R") + her "I've been on a diet lately..." ("angry", "wink", "base", "mid") + her "" ("angry", "happyCl", "worried", "mid",emote="sweat") + her "" ("normal", "happyCl", "worried", "mid") - block: - her "I've been feeling rather confident around the boys lately..." ("open", "base", "base", "mid") - her "I believe I have you to thank for that, [name_genie_hermione]." ("base", "base", "base", "mid") + block: + her "I've been feeling rather confident around the boys lately..." ("open", "base", "base", "mid") + her "I believe I have you to thank for that, [name_genie_hermione]." ("base", "base", "base", "mid") - block if not hermione.is_any_worn("clothes"): - her "Will I get any extra points for being naked inside your office, [name_genie_hermione]?" ("open", "base", "base", "mid") - her "An additional ten points added to my next favour is enough." ("open", "closed", "base", "mid") - her "" ("base", "narrow", "base", "mid_soft") + block if not hermione.is_any_worn("clothes"): + her "Will I get any extra points for being naked inside your office, [name_genie_hermione]?" ("open", "base", "base", "mid") + her "An additional ten points added to my next favour is enough." ("open", "closed", "base", "mid") + her "" ("base", "narrow", "base", "mid_soft") - block if states.her.ev.dance_for_me.snape_invited: - her "Do you believe we have learned enough, or will you be inviting Professor Snape again in the future?" ("annoyed", "base", "base", "R") + block if states.her.ev.dance_for_me.snape_invited: + her "Do you believe we have learned enough, or will you be inviting Professor Snape again in the future?" ("annoyed", "base", "base", "R") ### Tier 5 ### - if states.her.level >= 19 and states.her.level <= 21: + if states.her.tier == 5: random: her "I am doing well... Thank you for asking." ("base", "base", "base", "mid") @@ -406,131 +408,132 @@ label hermione_chitchat: her "" ("base", "narrow", "base", "mid_soft") ### Tier 6 Low ### - if states.her.level == 22: - random: - block if not states.her.ev.yule_ball.complete: - her "I wonder what everyone are going to wear for the ball..." ("base", "base", "base", "mid") + if states.her.tier == 6: + if states.her.level == 22: + random: + block if not states.her.ev.yule_ball.complete: + her "I wonder what everyone are going to wear for the ball..." ("base", "base", "base", "mid") - block: - her @ cheeks blush "Do you have any adult magazines you don't need, [name_genie_hermione]?" ("open", "base", "base", "R") - her @ cheeks blush "" ("base", "base", "base", "R") + block: + her @ cheeks blush "Do you have any adult magazines you don't need, [name_genie_hermione]?" ("open", "base", "base", "R") + her @ cheeks blush "" ("base", "base", "base", "R") - block: - her "If you need anything, [name_genie_hermione... Just ask, okay?" ("open", "base", "base", "mid") - her "" ("base", "base", "base", "mid") + block: + her "If you need anything, [name_genie_hermione... Just ask, okay?" ("open", "base", "base", "mid") + her "" ("base", "base", "base", "mid") - #block: - #her "It's been getting so cold lately..." ("open", "base", "base", "mid") - #her "I hope it's going to start snowing soon..." ("base", "base", "base", "mid") + #block: + #her "It's been getting so cold lately..." ("open", "base", "base", "mid") + #her "I hope it's going to start snowing soon..." ("base", "base", "base", "mid") - block if not states.cho.tier >= 4: - her "Jump and scream for the Gryffindor team!" ("open", "closed", "base", "mid") - her "So daring and bold, sporting red and gold!" ("smile", "happyCl", "base", "mid",emote="happy") - her "" ("base", "base", "base", "mid") + block if not states.cho.tier >= 4: + her "Jump and scream for the Gryffindor team!" ("open", "closed", "base", "mid") + her "So daring and bold, sporting red and gold!" ("smile", "happyCl", "base", "mid",emote="happy") + her "" ("base", "base", "base", "mid") - block if not states.her.ev.yule_ball.complete: - her "I hope the ball goes smoothly..." ("open", "base", "worried", "R") - her "" ("soft", "base", "base", "R") + block if not states.her.ev.yule_ball.complete: + her "I hope the ball goes smoothly..." ("open", "base", "worried", "R") + her "" ("soft", "base", "base", "R") - block: - her "Considering the nature of the favours you keep buying from me, [name_genie_hermione].." ("open", "closed", "base", "mid") - her "I've had to shower a lot more frequently than I used to..." ("open", "base", "worried", "mid") + block: + her "Considering the nature of the favours you keep buying from me, [name_genie_hermione].." ("open", "closed", "base", "mid") + her "I've had to shower a lot more frequently than I used to..." ("open", "base", "worried", "mid") - block: - her "[name_genie_hermione], could you put your penis in my mouth?" ("angry", "base", "base", "mid") - her "[name_genie_hermione], I am begging you..." ("open_wide_tongue", "narrow", "annoyed", "up") - her "Fifty-five points, please!" ("smile", "base", "angry", "mid") - her "" ("angry", "wink", "base", "mid") + block: + her "[name_genie_hermione], could you put your penis in my mouth?" ("angry", "base", "base", "mid") + her "[name_genie_hermione], I am begging you..." ("open_wide_tongue", "narrow", "annoyed", "up") + her "Fifty-five points, please!" ("smile", "base", "angry", "mid") + her "" ("angry", "wink", "base", "mid") - block: - her "I have read this one article about the positive effects of semen on a woman's skin..." ("open", "closed", "base", "mid") - her "I wonder where their information is coming from..." ("base", "narrow", "base", "mid_soft") - her "Did the magazine conduct research of some sort?" ("angry", "wink", "base", "mid") - her "" ("base", "narrow", "base", "mid_soft") + block: + her "I have read this one article about the positive effects of semen on a woman's skin..." ("open", "closed", "base", "mid") + her "I wonder where their information is coming from..." ("base", "narrow", "base", "mid_soft") + her "Did the magazine conduct research of some sort?" ("angry", "wink", "base", "mid") + her "" ("base", "narrow", "base", "mid_soft") - block: - her "It goes like this..." ("open", "closed", "base", "mid") - her "First Gryffindor, then Ravenclaw, then Hufflepuff..." ("open", "closed", "base", "mid") - her @ cheeks blush "Slytherin is not even on the list!" ("open", "narrow", "annoyed", "mid") - her "" ("upset", "closed", "base", "mid") + block: + her "It goes like this..." ("open", "closed", "base", "mid") + her "First Gryffindor, then Ravenclaw, then Hufflepuff..." ("open", "closed", "base", "mid") + her @ cheeks blush "Slytherin is not even on the list!" ("open", "narrow", "annoyed", "mid") + her "" ("upset", "closed", "base", "mid") - ### Tier 6 High ### - if states.her.level >= 23: - random: - block: - her @ cheeks blush "If you ever need some \"assistance\", [name_genie_hermione]... Please let me know." ("open_wide_tongue", "base", "base", "R") - her @ cheeks blush "" ("base", "base", "base", "R") + ### Tier 6 High ### + else: + random: + block: + her @ cheeks blush "If you ever need some \"assistance\", [name_genie_hermione]... Please let me know." ("open_wide_tongue", "base", "base", "R") + her @ cheeks blush "" ("base", "base", "base", "R") - block if states.her.status.public_sex: - her "I am sorry to bother you with this, [name_genie_hermione]..." ("open", "base", "base", "mid") - her "But do you have any condoms?" ("open", "base", "base", "mid") - her "Sadly, the ones I've bought are already gone..." ("annoyed", "happyCl", "worried", "mid",emote="sweat") - her "" ("base", "base", "base", "R") + block if states.her.status.public_sex: + her "I am sorry to bother you with this, [name_genie_hermione]..." ("open", "base", "base", "mid") + her "But do you have any condoms?" ("open", "base", "base", "mid") + her "Sadly, the ones I've bought are already gone..." ("annoyed", "happyCl", "worried", "mid",emote="sweat") + her "" ("base", "base", "base", "R") - block if game.weather in {"rain", "storm", "overcast"}: - her "It certainly is chilly outside..." ("open", "base", "base", "mid") - her "I hope it's going to start snowing soon..." ("base", "base", "base", "mid") - her "You will let me wear a coat at least, right?" ("angry", "happyCl", "worried", "mid",emote="sweat") - her "" ("base", "narrow", "base", "mid_soft") + block if game.weather in {"rain", "storm", "overcast"}: + her "It certainly is chilly outside..." ("open", "base", "base", "mid") + her "I hope it's going to start snowing soon..." ("base", "base", "base", "mid") + her "You will let me wear a coat at least, right?" ("angry", "happyCl", "worried", "mid",emote="sweat") + her "" ("base", "narrow", "base", "mid_soft") - block if not states.cho.tier >= 4: - her "Jump and scream for the Gryffindor team!" ("open", "closed", "base", "mid") - her "So daring and bold, sporting red and gold!" ("smile", "happyCl", "base", "mid",emote="happy") - her "" ("base", "base", "base", "mid") + block if not states.cho.tier >= 4: + her "Jump and scream for the Gryffindor team!" ("open", "closed", "base", "mid") + her "So daring and bold, sporting red and gold!" ("smile", "happyCl", "base", "mid",emote="happy") + her "" ("base", "base", "base", "mid") - block: - her "[name_genie_hermione], I have a favour to ask..." ("base", "base", "worried", "mid") - her "Could you help me with one of my dresses later, [name_genie_hermione]?" ("base", "base", "base", "R") - her @ cheeks blush "I could use some of your... insight." ("soft", "narrow", "base", "mid_soft") - her "" ("base", "narrow", "base", "mid_soft") + block: + her "[name_genie_hermione], I have a favour to ask..." ("base", "base", "worried", "mid") + her "Could you help me with one of my dresses later, [name_genie_hermione]?" ("base", "base", "base", "R") + her @ cheeks blush "I could use some of your... insight." ("soft", "narrow", "base", "mid_soft") + her "" ("base", "narrow", "base", "mid_soft") - block: - her "I can't believe I was such a prude before." ("angry", "base", "worried", "mid") - her "Meeting you was the best thing that ever happened to me, [name_genie_hermione]." ("smile", "narrow", "base", "mid_soft") - her "" ("base", "narrow", "base", "mid_soft") + block: + her "I can't believe I was such a prude before." ("angry", "base", "worried", "mid") + her "Meeting you was the best thing that ever happened to me, [name_genie_hermione]." ("smile", "narrow", "base", "mid_soft") + her "" ("base", "narrow", "base", "mid_soft") - block: - her "Considering the nature of the favours you keep buying from me, [name_genie_hermione]..." ("open", "closed", "base", "mid") - her "I've had to shower way more than I used to..." ("open", "base", "worried", "mid") - her "(Although, I kind of enjoy the smell...)" ("soft", "narrow", "annoyed", "up") + block: + her "Considering the nature of the favours you keep buying from me, [name_genie_hermione]..." ("open", "closed", "base", "mid") + her "I've had to shower way more than I used to..." ("open", "base", "worried", "mid") + her "(Although, I kind of enjoy the smell...)" ("soft", "narrow", "annoyed", "up") - block: - her "[name_genie_hermione], could you put your penis in my mouth?" ("angry", "base", "base", "mid") - her "[name_genie_hermione], I am begging you..." ("open_wide_tongue", "narrow", "annoyed", "up") - her "Fifty-five points, please!" ("smile", "base", "angry", "mid") - her "(Although I wouldn't mind doing it for free...)" ("smile", "narrow", "annoyed", "up") + block: + her "[name_genie_hermione], could you put your penis in my mouth?" ("angry", "base", "base", "mid") + her "[name_genie_hermione], I am begging you..." ("open_wide_tongue", "narrow", "annoyed", "up") + her "Fifty-five points, please!" ("smile", "base", "angry", "mid") + her "(Although I wouldn't mind doing it for free...)" ("smile", "narrow", "annoyed", "up") - block: - her "There was this one article... I'm not sure if I told you." ("open", "closed", "base", "mid") - her "It was about the positive effects of semen on a woman's skin." ("open", "closed", "base", "mid") - her "And it actually works!" ("smile", "narrow", "base", "mid_soft") - her "My skin definitely is getting softer." ("smile", "closed", "base", "mid") - her "" ("base", "narrow", "base", "mid_soft") + block: + her "There was this one article... I'm not sure if I told you." ("open", "closed", "base", "mid") + her "It was about the positive effects of semen on a woman's skin." ("open", "closed", "base", "mid") + her "And it actually works!" ("smile", "narrow", "base", "mid_soft") + her "My skin definitely is getting softer." ("smile", "closed", "base", "mid") + her "" ("base", "narrow", "base", "mid_soft") - block: - her "It goes like this..." ("open", "closed", "base", "mid") - her "First Gryffindor, then Ravenclaw, then Hufflepuff..." ("open", "closed", "base", "mid") - her @ cheeks blush "And Slytherin is not even on the list!" ("open", "narrow", "annoyed", "mid") - her "" ("upset", "closed", "base", "mid") + block: + her "It goes like this..." ("open", "closed", "base", "mid") + her "First Gryffindor, then Ravenclaw, then Hufflepuff..." ("open", "closed", "base", "mid") + her @ cheeks blush "And Slytherin is not even on the list!" ("open", "narrow", "annoyed", "mid") + her "" ("upset", "closed", "base", "mid") - block if not hermione.is_any_worn("clothes"): - her "You know, being naked isn't that bad..." ("open", "closed", "base", "mid") - her "Putting on clothes is just a waste of time, anyway..." ("open", "closed", "base", "mid") - her "" ("base", "narrow", "base", "mid_soft") + block if not hermione.is_any_worn("clothes"): + her "You know, being naked isn't that bad..." ("open", "closed", "base", "mid") + her "Putting on clothes is just a waste of time, anyway..." ("open", "closed", "base", "mid") + her "" ("base", "narrow", "base", "mid_soft") - block if states.her.status.creampie: - her @ cheeks blush "I know what you said before, [name_genie_hermione]... But, are you certain that there is no way for you to get me pregnant?" ("open", "base", "base", "mid") - her @ cheeks blush "Or is there still a chance it may happen?" ("soft", "base", "base", "R") + block if states.her.status.creampie: + her @ cheeks blush "I know what you said before, [name_genie_hermione]... But, are you certain that there is no way for you to get me pregnant?" ("open", "base", "base", "mid") + her @ cheeks blush "Or is there still a chance it may happen?" ("soft", "base", "base", "R") - block if states.her.status.anal: - her "[name_genie_hermione]... If you're planning on doing \"that\" again... Please use plenty of lube..." ("open", "base", "base", "mid") + block if states.her.status.anal: + her "[name_genie_hermione]... If you're planning on doing \"that\" again... Please use plenty of lube..." ("open", "base", "base", "mid") - block if states.her.ev.yule_ball.complete: - her "Thank you again for providing me with a dress for the ball." ("open", "base", "base", "mid") - her "I had a wonderful time..." ("base", "base", "base", "mid") + block if states.her.ev.yule_ball.complete: + her "Thank you again for providing me with a dress for the ball." ("open", "base", "base", "mid") + her "I had a wonderful time..." ("base", "base", "base", "mid") - block if states.her.ev.potions.breast_expand_drank: - her "You don't happen to have any more of that breast expansion potion, [name_genie_hermione]?" ("open", "base", "base", "mid") - her "I've noticed some correlations between your grades and your chest size, so I thought I'd give it a shot during our next exam..." ("open", "base", "base", "mid") + block if states.her.ev.potions.breast_expand_drank: + her "You don't happen to have any more of that breast expansion potion, [name_genie_hermione]?" ("open", "base", "base", "mid") + her "I've noticed some correlations between grades and the student's chest size, so I thought I'd give it a shot during our next exam..." ("open", "base", "base", "mid") return diff --git a/game/scripts/characters/hermione/common.rpy b/game/scripts/characters/hermione/common.rpy index 0e0b2050..24f9ae13 100644 --- a/game/scripts/characters/hermione/common.rpy +++ b/game/scripts/characters/hermione/common.rpy @@ -69,7 +69,7 @@ init python: hermione.animation = animation redraw = True - if flip != None: + if flip is not None: hermione.xzoom = -1 if flip else 1 redraw = True diff --git a/game/scripts/characters/hermione/events/cardgame_wager.rpy b/game/scripts/characters/hermione/events/cardgame_wager.rpy index 8196b944..acc73bb5 100644 --- a/game/scripts/characters/hermione/events/cardgame_wager.rpy +++ b/game/scripts/characters/hermione/events/cardgame_wager.rpy @@ -701,7 +701,7 @@ label hg_wager_bj_secret: screen hg_wager_bj_secret(): zorder 4 - add im.MatrixColor("images/rooms/overlays/g_circular.webp", im.matrix.saturation(0.0)*im.matrix.brightness(0.7)) + add Transform("images/rooms/overlays/g_circular.webp", matrixcolor=BrightnessMatrix(.7)*SaturationMatrix(.0)) text "Replay" pos (50, 50) size 40 color "#FFF" outlines [(5, "#000", 0, 0)] at blink diff --git a/game/scripts/characters/hermione/events/favors/dance_for_me_masturbate.rpy b/game/scripts/characters/hermione/events/favors/dance_for_me_masturbate.rpy index 432a73ca..40e91934 100644 --- a/game/scripts/characters/hermione/events/favors/dance_for_me_masturbate.rpy +++ b/game/scripts/characters/hermione/events/favors/dance_for_me_masturbate.rpy @@ -466,7 +466,7 @@ label hg_pf_strip_T5_fingering: her "*Gah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." ("open_tongue", "narrow", "worried", "dead") play background "sounds/slickloop.ogg" her "[name_genie_hermione]...{heart}{heart}{heart}" ("angry", "narrow", "worried", "mid") - her "............." ("grin", "closed", "worried", "up", cheeks="none") + her "............." ("grin", "closed", "worried", "up",cheeks=False) stop background nar "Hermione takes a minute to collect herself." @@ -842,7 +842,7 @@ label hg_pf_strip_T6_fingering: her @ cheeks blush "*Ah*...{w=0.4} *Ah*...{heart}" ("grin", "narrow", "worried", "dead") her @ cheeks blush "Yes...{w=0.4} yes, [name_genie_hermione]...{w=0.4} Just give me a moment...{heart}" ("base", "narrow", "base", "up") her @ cheeks blush "(How will I ever be able to achieve this... on my own...{heart})" ("soft", "narrow", "base", "down") - her "" ("soft", "narrow", "base", "down", cheeks="none") + her "" ("soft", "narrow", "base", "down",cheeks=False) $ states.her.status.masturbating = True diff --git a/game/scripts/characters/hermione/events/favors/dance_for_me_snape.rpy b/game/scripts/characters/hermione/events/favors/dance_for_me_snape.rpy index 18e67960..6422821d 100644 --- a/game/scripts/characters/hermione/events/favors/dance_for_me_snape.rpy +++ b/game/scripts/characters/hermione/events/favors/dance_for_me_snape.rpy @@ -564,7 +564,7 @@ label hg_pf_strip_T4_snape_masturbate: sna "Yes..." ("snape_20") sna "Now shake that ass for me, you harlot!" - her "......." ("annoyed", "closed", "annoyed", "mid", cheeks="none") + her "......." ("annoyed", "closed", "annoyed", "mid",cheeks=False) pause .5 nar "All of a sudden, Hermione breaks into a series of rather complex pirouettes." @@ -936,6 +936,6 @@ label hg_pf_strip_T4_snape_results: gen "[name_hermione_genie]?" ("base", xpos="far_left", ypos="head") her "Oh... No, not that I can think of at this moment, [name_genie_hermione]." ("angry", "base", "base", "mid") gen "Very well... You've certainly earned your points today." ("base", xpos="far_left", ypos="head") - her "Oh, right... The points..." ("angry", "mid", "base", "mid") + her "Oh, right... The points..." ("angry", "base", "base", "mid") jump end_hg_pf_strip diff --git a/game/scripts/characters/hermione/events/favors/give_me_a_handy.rpy b/game/scripts/characters/hermione/events/favors/give_me_a_handy.rpy index 376f51e7..9f9e0afe 100644 --- a/game/scripts/characters/hermione/events/favors/give_me_a_handy.rpy +++ b/game/scripts/characters/hermione/events/favors/give_me_a_handy.rpy @@ -1209,7 +1209,7 @@ label hg_pf_handjob_2_cumming: her "Speaking of which... May I receive my payment now, please?" ("base", "base", "base", "mid") else: her "Maybe next time..." ("base", "narrow", "base", "down") - her "May I receive my payment now, please?" ("base", "closed", "base", "mid", cheeks="none") + her "May I receive my payment now, please?" ("base", "closed", "base", "mid",cheeks=False) gen "Of course..." ("base", xpos="far_left", ypos="head") "\"-Too late, ejaculate!-\"": @@ -1271,7 +1271,7 @@ label hg_pf_handjob_2_cumming: her "Well, then I suppose there was nothing that could be done about this mess..." ("angry", "closed", "base", "mid") her "I will just wipe it off the best I can before I go, and hope that nobody will notice..." ("grin", "narrow", "base", "dead") gen "Don't forget your payment..." ("base", xpos="far_left", ypos="head") - her "Oh, and my payment! May I receive that, as well?" ("angry", "squint", "base", "mid", cheeks="none") + her "Oh, and my payment! May I receive that, as well?" ("angry", "squint", "base", "mid",cheeks=False) gen "Of course, [name_hermione_genie]..." ("base", xpos="far_left", ypos="head") "-Cum in her mouth!-" if states.her.status.gokkun: # Has swallowed cum before. @@ -1333,6 +1333,6 @@ label hg_pf_handjob_2_cumming: her "[name_genie_hermione]!" ("angry", "base", "base", "mid") her "... I'll have my payment now, if you please..." ("angry", "squint", "base", "R") gen "Of course... Can't keep your classmates waiting..." ("base", xpos="far_left", ypos="head") - her "..." ("angry", "base", "base", "mid", cheeks="none") + her "..." ("angry", "base", "base", "mid",cheeks=False) jump end_hg_pf_handjob diff --git a/game/scripts/characters/hermione/events/favors/give_me_a_tittyjob.rpy b/game/scripts/characters/hermione/events/favors/give_me_a_tittyjob.rpy index 220d0e09..d54d9790 100644 --- a/game/scripts/characters/hermione/events/favors/give_me_a_tittyjob.rpy +++ b/game/scripts/characters/hermione/events/favors/give_me_a_tittyjob.rpy @@ -639,7 +639,7 @@ label hg_pf_titjob_1: her "Thank you, [name_genie_hermione]..." ("open", "narrow", "base", "R", emote="sweat") else: gen "..." ("grin", xpos="far_left", ypos="head") - her "..." ("soft", "happy", "base", "base", emote="sweat") + her "..." ("soft", "happy", "base", "down", emote="sweat") gen "For someone who's never swallowed before, I'd say you went well above exceeding my expectations." ("grin", xpos="far_left", ypos="head") her "Well above..." ("soft", "narrow", "base", "down", emote="sweat") gen "Indeed! You did an \"outstanding\" job, [name_hermione_genie]!" ("grin", xpos="far_left", ypos="head") @@ -993,7 +993,7 @@ label hg_pf_titjob_2_continue: her "And that's about--" ("base", "narrow", "worried", "down") gen "And your friends... Tell me about your friends..." ("base", xpos="far_left", ypos="head") her "My friends?!" ("angry", "narrow", "worried", "mid") - gen "Yes, [name_genie_hermione], your friends... Tell me how you use those tits to tease them..." ("base", xpos="far_left", ypos="head") + gen "Yes, [name_hermione_genie], your friends... Tell me how you use those tits to tease them..." ("base", xpos="far_left", ypos="head") her "But..." ("angry", "narrow", "worried", "mid") gen "Anything... Just say anything that you can think of..." ("base", xpos="far_left", ypos="head") her "Alright... Give me a moment to think..." ("angry", "narrow", "worried", "mid") diff --git a/game/scripts/characters/hermione/events/favors/hg_pf_T3a_look_at_ass_INCOMPLETE.txt b/game/scripts/characters/hermione/events/favors/hg_pf_T3a_look_at_ass_INCOMPLETE.txt index 929bcdf3..561754dd 100644 --- a/game/scripts/characters/hermione/events/favors/hg_pf_T3a_look_at_ass_INCOMPLETE.txt +++ b/game/scripts/characters/hermione/events/favors/hg_pf_T3a_look_at_ass_INCOMPLETE.txt @@ -4,8 +4,6 @@ label hg_pf_look_at_ass: #LV.3 (Whoring = 9 - 11) - call reset_menu_position - if hg_pf_look_at_ass.points == 0: gen "{size=-4}(I feel like checking out that ass.){/size}" ("base", xpos="far_left", ypos="head") else: diff --git a/game/scripts/characters/hermione/events/favors/lets_have_sex.rpy b/game/scripts/characters/hermione/events/favors/lets_have_sex.rpy index 9e2b6a9e..bb4fbeda 100644 --- a/game/scripts/characters/hermione/events/favors/lets_have_sex.rpy +++ b/game/scripts/characters/hermione/events/favors/lets_have_sex.rpy @@ -255,6 +255,8 @@ label hg_pf_sex_T6_intro_E1: hide hermione_main with fade + $ her_outfit_last.save() + if hermione.is_any_worn("clothes"): play sound "sounds/cloth_sound3.ogg" $ hermione.strip("clothes") @@ -325,6 +327,8 @@ label hg_pf_sex_T6_intro_E2: hide hermione_main with fade + $ her_outfit_last.save() + if hermione.is_any_worn("clothes"): play sound "sounds/cloth_sound3.ogg" $ hermione.strip("clothes") @@ -390,6 +394,8 @@ label hg_pf_sex_T6_intro_E3: hide hermione_main with fade + $ her_outfit_last.save() + if hermione.is_any_worn("clothes"): play sound "sounds/cloth_sound3.ogg" $ hermione.strip("clothes") @@ -462,6 +468,8 @@ label hg_pf_sex_T6_E3: # repeats hide hermione_main with fade + $ her_outfit_last.save() + if hermione.is_any_worn("clothes"): play sound "sounds/cloth_sound3.ogg" $ hermione.strip("clothes") @@ -528,6 +536,7 @@ label hg_sex_1: show her_sex_personal lean_back as cg: transform_anchor True + subpixel True anchor (0.0, 0.0) offset (0, 0) zoom 1.0 @@ -811,8 +820,8 @@ label hg_sex_1: gen "You need to be punished for being such a slut!" show her_sex_personal bent_over grab as cg: - offset (-65, -240) - zoom 0.45 + offset (-65, -240) + zoom 0.45 rotate -4 easein 1.0 offset (0, -480) rotate 0 with vpunch @@ -821,7 +830,7 @@ label hg_sex_1: #Could add some sound effect here show her_sex_personal mouth_open eyebrows_base eyes_wide_r cheeks_blush as cg: - offset (0, -480) + offset (0, -480) rotate 0 ease_quad 3.0 offset (-60, -620) zoom 0.55 nar "You push Hermione down onto the desk and start fucking her fiercely!" @@ -1945,7 +1954,7 @@ label hg_sex_3: rotate 1 xoffset -70 pause 1.0 - offset (-60, -620) + offset (-60, -620) zoom 0.55 ease_quad 1.0 offset (-60, -635) with hpunch diff --git a/game/scripts/characters/hermione/events/forest.rpy b/game/scripts/characters/hermione/events/forest.rpy index e66aef96..5e49b232 100644 --- a/game/scripts/characters/hermione/events/forest.rpy +++ b/game/scripts/characters/hermione/events/forest.rpy @@ -5,7 +5,7 @@ label hermione_map_BJ: $ her_outfit_last.save() $ hermione.equip(her_outfit_s_rain) - $ renpy.call('forest_BJ_'+str(states.her.ev.forest_bj.stage)) + call expression 'forest_BJ_'+str(states.her.ev.forest_bj.stage) $ states.her.busy = True call set_her_map_location("gryffindor_room") diff --git a/game/scripts/characters/hermione/events/intro.rpy b/game/scripts/characters/hermione/events/intro.rpy index ae22ed39..50d63e0c 100644 --- a/game/scripts/characters/hermione/events/intro.rpy +++ b/game/scripts/characters/hermione/events/intro.rpy @@ -14,7 +14,7 @@ label hermione_intro_E1: play sound "sounds/knocking.ogg" call bld "*Knock-knock-knock*" - gen "*huh*?" ("base", xpos="far_left", ypos="head") + gen "*Huh*?" ("base", xpos="far_left", ypos="head") play sound "sounds/knocking.ogg" "*Knock-knock-knock*" @@ -105,7 +105,7 @@ label hermione_intro_E1: zoom 1.0 align (0.5, 0.5) pos (-520, -70) - easein_quad 3.0 align (0.0, 0.0) pos (0, 0) zoom 0.5 + easein_quad 3.0 anchor (0.0, 0.0) pos (0, 0) zoom 0.5 menu: "\"Good morning, Hermione.\"" if d_flag_01: diff --git a/game/scripts/characters/hermione/events/items/butt_plugs.rpy b/game/scripts/characters/hermione/events/items/butt_plugs.rpy index 5e14d882..16bedde1 100644 --- a/game/scripts/characters/hermione/events/items/butt_plugs.rpy +++ b/game/scripts/characters/hermione/events/items/butt_plugs.rpy @@ -34,7 +34,7 @@ label hg_butt_plugs: gen "Today, I want you to wear a butt plug around the school." ("base", xpos="far_left", ypos="head") her "You want me to...{w=0.4} What?!" ("angry", "wide", "worried", "mid") gen "Wear a--" ("base", xpos="far_left", ypos="head") - her "[name_genie_hermione_], I can't believe you'd do this!" ("angry", "happyCl", "worried", "mid") + her "[name_genie_hermione], I can't believe you'd do this!" ("angry", "happyCl", "worried", "mid") her "I'm leaving!" ("angry", "base", "worried", "R") call her_walk(action="leave") @@ -164,7 +164,7 @@ label hg_butt_plugs: gen "Today, I want you to wear a butt plug around the school." ("base", xpos="far_left", ypos="head") her "You want me to...{w=0.4} What?!" ("angry", "wide", "worried", "mid") gen "Wear a--" ("base", xpos="far_left", ypos="head") - her "[name_genie_hermione_], I can't believe you'd do this!" ("angry", "happyCl", "worried", "mid") + her "[name_genie_hermione], I can't believe you'd do this!" ("angry", "happyCl", "worried", "mid") her "I'm leaving!" ("angry", "base", "worried", "R") call her_walk(action="leave") diff --git a/game/scripts/characters/hermione/events/items/collars.rpy b/game/scripts/characters/hermione/events/items/collars.rpy index fcd53c17..8a0323ee 100644 --- a/game/scripts/characters/hermione/events/items/collars.rpy +++ b/game/scripts/characters/hermione/events/items/collars.rpy @@ -652,6 +652,7 @@ label whore_scene: #(locked behind public reputation and last sex event) with d3 if not her_neckwear_whore_collar.unlocked: + $ her_neckwear_whore_collar.unlock() gen "Well then... Seeing as how you said thank you... I have a present for you." ("base", xpos="far_left", ypos="head") her @ cheeks blush "A present?" ("soft", "wink", "worried", "mid_soft", trans=d3) gen "Yes, it's a lovely piece of jewellery to commemorate your self-acceptance." ("base", xpos="far_left", ypos="head") diff --git a/game/scripts/characters/hermione/events/odd_jobs/init.rpy b/game/scripts/characters/hermione/events/odd_jobs/init.rpy index 225ca1e7..2202c7b1 100644 --- a/game/scripts/characters/hermione/events/odd_jobs/init.rpy +++ b/game/scripts/characters/hermione/events/odd_jobs/init.rpy @@ -1,12 +1,14 @@ init offset = 5 default her_ev_maid_job_return = Event(id="her_ev_maid_job_return", label="her_maid_job_return", priority=5, req="not game.daytime") +default her_eventqueue_jobs_maid = EventQueue("her_eventqueue_jobs_maid") default her_ev_maid_job_hub = Event(id="her_ev_maid_job_hub", label="her_maid_job", priority=5, req="her_outfit_maid.unlocked", repeat=True, autoenqueue=True, autodequeue=False, queue="her_eventqueue_jobs_maid", subevents=["her_ev_maid_job_return"]) default her_ev_promoter_job_return = Event(id="her_ev_promoter_job_return", label="her_promoter_job_return", priority=5, req="not game.daytime") +default her_eventqueue_jobs_promoter = EventQueue("her_eventqueue_jobs_promoter") default her_ev_promoter_job_hub = Event(id="her_ev_promoter_job_hub", label="her_promoter_job", priority=5, req="states.her.ev.promote_cardgame.offered and poker_outfit_ITEM.unlocked", repeat=True, autoenqueue=True, autodequeue=False, queue="her_eventqueue_jobs_promoter", subevents=["her_ev_promoter_job_return"]) - +default her_eventqueue_panty_thief = EventQueue("her_eventqueue_panty_thief") default her_ev_panty_thief_t1_e1 = Event(id="her_ev_panty_thief_t1_e1", label="hg_pr_panty_thief_T1_E1", req="states.her.tier == 1", autoenqueue=True, autodequeue=False, queue="her_eventqueue_panty_thief") default her_ev_panty_thief_t2_e1 = Event(id="her_ev_panty_thief_t2_e1", label="hg_pr_panty_thief_T2_E1", req="states.her.tier == 2", autoenqueue=True, autodequeue=False, queue="her_eventqueue_panty_thief") default her_ev_panty_thief_t3_e1 = Event(id="her_ev_panty_thief_t3_e1", label="hg_pr_panty_thief_e1_return", req="game.daytime==False") diff --git a/game/scripts/characters/hermione/events/potions/polyjuice_luna.rpy b/game/scripts/characters/hermione/events/potions/polyjuice_luna.rpy index 36280049..50fc73aa 100644 --- a/game/scripts/characters/hermione/events/potions/polyjuice_luna.rpy +++ b/game/scripts/characters/hermione/events/potions/polyjuice_luna.rpy @@ -576,7 +576,7 @@ label her_potion_luna_give: lun "Yes?" ("soft", "base", "raised", "mid") gen "What if you bump into her?" ("base", xpos="far_left", ypos="head") lun "Oh I wouldn't worry about that, [name_genie_hermione]..." ("grin", "narrow", "base", "R") - lun "She will probably think I'm some kind of wrackspurts-induced hallucination or something." ("open", "closed", "base", "mid") + lun "She will probably think I'm some kind of wrackspurt-induced hallucination or something." ("open", "closed", "base", "mid") gen "True." ("base", xpos="far_left", ypos="head") gen "Off you go then." ("base", xpos="far_left", ypos="head") lun "Good day, [name_genie_hermione]." ("base", "base", "base", "mid") diff --git a/game/scripts/characters/hermione/events/requests/flash_your_tits.rpy b/game/scripts/characters/hermione/events/requests/flash_your_tits.rpy index 381e9c7a..9bcae561 100644 --- a/game/scripts/characters/hermione/events/requests/flash_your_tits.rpy +++ b/game/scripts/characters/hermione/events/requests/flash_your_tits.rpy @@ -429,7 +429,7 @@ label hg_pr_flash_T4_E3: her "Instead, as I was outside in one of the courtyards..." her "... I just pulled my shirt up and pressed my bare chest against the window of a nearby classroom..." ("angry", "narrow", "base", "down") her "I stood there like that for several seconds..." - her "To make sure that at least someone would see them from the outside..." + her "To make sure that at least someone would see them.." her "I hope this still counts, [name_genie_hermione]..." ("angry", "base", "base", "mid") gen "*Hmm*..." ("base", xpos="far_left", ypos="head") gen "How many students would you estimate, being behind that window?" ("base", xpos="far_left", ypos="head") diff --git a/game/scripts/characters/hermione/events/requests/wear_my_cum.rpy b/game/scripts/characters/hermione/events/requests/wear_my_cum.rpy index 1b136af1..cebfb7e7 100644 --- a/game/scripts/characters/hermione/events/requests/wear_my_cum.rpy +++ b/game/scripts/characters/hermione/events/requests/wear_my_cum.rpy @@ -1,22 +1,811 @@ +### Leave office with cum on her ### + label start_hg_pr_cumslut: - # Public shaming: Wear cum - # TODO: Some events need to be rewritten so they follow cum layers limitations and actual game progression. - # Additionally, they should be converted into the event class. + #Setup $ current_payout = 50 if not _events_completed_any: gen "{size=-4}(Should I ask her to walk around with my cum on her?){/size}" ("base", xpos="far_left", ypos="head") - menu: "\"(Yes, let's do it!)\"": pass "\"(Not right now.)\"": $ _event.cancel() jump hermione_favor_menu + return +label hg_pr_cumslut: + + call start_hg_pr_cumslut + + her "" (xpos="mid", ypos="base", trans=fade) + + #Intro. + if not _events_completed_any: + gen "Today I have another small favour to ask of you." ("base", xpos="far_left", ypos="head") + her "What is it?" ("open", "base", "base", "mid") + gen "I'd like you to attend class..." ("base", xpos="far_left", ypos="head") + her "Right?" ("soft", "base", "base", "mid") + gen "After I cum on you." ("base", xpos="far_left", ypos="head") + + if not states.her.status.cumshot: + her "You want me to go to class...{w=0.4} With your cum on me?!?" ("angry", "wide", "base", "stare") + gen "That's right... So, why don't you jack me off and then--" ("base", xpos="far_left", ypos="head") + her "Are you crazy?!" ("disgust", "wide", "angry", "mid") + her "I think I better go..." ("disgust", "happyCl", "worried", "mid") + + call her_walk(action="leave") + + $ states.her.mood += 9 + + gen "(Perhaps I should show her the ropes before suggesting something like this.)" ("base", xpos="far_left", ypos="head") + gen "(*Heh-heh*...{w=0.4} Show her the ropes...)" ("grin", xpos="far_left", ypos="head") + + $ _event.cancel() + jump end_hermione_event + + if states.her.public_level < 15: + $ _event.cancel() + jump too_much_public + + play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed # Music + + if states.her.tier == 5: #Success + her "What?!?" ("angry", "base", "base", "stare") + her "You can't be serious!" ("angry", "squint", "base", "mid") + her "It's bad enough that I let you cum on me in private!" ("clench", "squint", "worried", "mid") + her @ cheeks blush "But you expect me to go out in public, with cum on my body?" ("angry", "narrow", "base", "R") + her @ cheeks blush "I think I better leave..." ("mad", "narrow", "base", "R") + gen "Wait!" ("base", xpos="far_left", ypos="head") + gen "What if nobody could see it?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "What do you mean by that? How would they not see it?" ("disgust", "narrow", "base", "mid") + gen "What if it was somewhere on your body where nobody would notice?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "If no one can see it, what's the point then?" ("disgust", "squint", "base", "mid") + gen "The point is, that you'll know that it's there." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Hmm*..." ("upset", "narrow", "base", "down") + gen "Go on, [name_hermione_genie]... Did you not let me cum on your body before?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "There's a difference... Previously, I was able to clean myself off before going out in public..." ("annoyed", "narrow", "base", "R") + her @ cheeks blush "...{w=0.4} If I were to accept this favour, I'd need to be greatly compensated for it." ("open", "closed", "worried", "mid") + gen "I'll give you thirty points." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Thirty?! I require at least seventy for such a filthy act!" ("scream", "squint", "base", "mid") + gen "Forty." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Sixty!" ("scream", "narrow", "base", "mid") + gen "Fifty points, final offer." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Fine...{w=0.4} Fifty it is." ("open", "narrow", "annoyed", "mid") + her @ cheeks blush "As long as nobody can see it." ("annoyed", "narrow", "base", "R") + else: + her @ cheeks blush "You want me to--" ("soft", "base", "base", "stare") + gen "Attend your classes, after I cum on your body..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "[name_genie_hermione]...{w=0.4} Don't you think it's enough that I let you cum on me in private?" ("open", "happy", "base", "mid") + gen "You tell me, [name_hermione_genie]...{w=0.4} I'm just coming up with new favours, so you can keep earning points." ("base", xpos="far_left", ypos="head") + gen "I'm sure you know how it works by now..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "But, everyone will see it!" ("angry", "happy", "base", "mid") + gen "Well, if that's the issue, then I'll be fine if I can finish somewhere on your body where it won't be so obvious..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("disgust", "base", "base", "mid") + her @ cheeks blush "Alright then...{w=0.4} I'll do it!" ("open", "happy", "base", "mid") + gen "Excellent..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "As long as you don't make a mess in plain sight..." ("open", "happy", "base", "mid") + gen "That will be up to you, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "[name_genie_hermione]?" ("soft", "base", "base", "mid") + gen "You'll be the one to decide where I finish." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Me? Why me?" ("angry", "base", "base", "stare") + gen "Would you rather I decide?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "No! I mean...{w=0.4} I just didn't expect you to--" ("disgust", "base", "base", "mid") + gen "I won't really have any choice either way, as you'll be the one to jerk me off." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Oh...{w=0.4} So, that's why..." ("soft", "narrow", "base", "down") + her @ cheeks blush "Alright fine...{w=0.4} If I get to decide, then I suppose I could...{w=0.4} \"Jerk you off\"." ("base", "narrow", "base", "R") + her "Oh, how many points would I receive for this by the way?" ("open", "base", "base", "mid") + gen "I was thinking thirty points, how does that sound?" ("base", xpos="far_left", ypos="head") + her "Just thirty?" ("annoyed", "happy", "base", "mid") + gen "Thirty points is generous enough." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Fifty points...{w=0.4} And I'll make sure that someone notices it." ("angry", "squint", "base", "mid") + gen "Really? Are you sure?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I--{w=0.2} Yes! As long as I don't have to make it too obvious..." ("angry", "squint", "base", "R") + gen "Alright then, fifty it is." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("base", "narrow", "base", "down") + + else: # Repeat Intro + random: + block: + gen "I've got a pearl necklace that I'd like you to wear around school today." ("base", xpos="far_left", ypos="head") + her "A pearl necklace?" ("soft", "base", "base", "mid") + gen "And by pearl necklace...{w=0.4} What I mean is semen." ("base", xpos="far_left", ypos="head") + block: + gen "There's a cake I'd like to be shown around school today." ("base", xpos="far_left", ypos="head") + her "A cake?" ("soft", "base", "base", "mid") + gen "Of course, I'll still need to decorate you a little bit before you head off, to make you presentable...." ("base", xpos="far_left", ypos="head") + her "Decorate...{w=0.4} Wait, are you calling me a cake?" ("angry", "base", "base", "stare") + gen "Of course, a delicious one at that! I mean, who wouldn't want a slice of such a stacked--" ("base", xpos="far_left", ypos="head") + her "Please, [name_genie_hermione]..." ("angry", "base", "base", "mid") + gen "A little bit of icing here or there should do the trick." ("base", xpos="far_left", ypos="head") + her "..." ("disgust", "base", "base", "mid") + gen "And by icing, I mean cum." ("base", xpos="far_left", ypos="head") + block: + gen "Have you been taking care of your body?" ("base", xpos="far_left", ypos="head") + her "My body, [name_genie_hermione]?" ("soft", "base", "base", "mid") + gen "Yes, [name_hermione_genie], your body." ("base", xpos="far_left", ypos="head") + her "I suppose...{w=0.4} I mean, I mean I clean myself regularly..." ("open", "base", "base", "mid") + gen "Well, not today, you won't." ("base", xpos="far_left", ypos="head") + gen "Today, I want you to head out to class with my cum on you." ("base", xpos="far_left", ypos="head") + + if states.her.tier == 5: + her "Again?" ("disgust", "base", "base", "mid") + her "Seriously?" ("disgust", "base", "base", "mid") + gen "Why not?" ("base", xpos="far_left", ypos="head") + her "And here I thought once would've been enough..." ("disgust", "base", "base", "R") + gen "Yes...{w=0.4} Perhaps I'm being too generous." ("base", xpos="far_left", ypos="head") + her "...{w=0.4} If I do this, can we agree you won't finish anywhere where people can see?" ("annoyed", "narrow", "base", "mid") + gen "That's up to you, [name_hermione_genie]...{w=0.4} You're the one who will be aiming the wand." ("base", xpos="far_left", ypos="head") + her "Right..." ("disgust", "narrow", "base", "mid") + else: + her "Oh...{w=0.4} I should've expected that's what you meant..." ("open", "base", "base", "R") + gen "And I expect you to make sure that at least someone notices it." ("base", xpos="far_left", ypos="head") + her "*Hmm*...{w=0.4} Alright then..." ("base", "narrow", "base", "R") + gen "Great, then let's get you ready..." ("base", xpos="far_left", ypos="head") + + +## Handjob section ## (Cum location choice, triggers subsequent return event for that tier) + + play music "music/(Orchestral) Playful Tension by Shadow16nh.ogg" fadein 1 if_changed + + $ _uniform = False #Puts on Uniform now. + $ _naked = False #Gets cum on her naked body, puts on uniform before she leaves. + + menu: + "\"You should probably be naked for this.\"": + her @ cheeks blush "Really?" ("open", "base", "base", "mid") + gen "Most certainly." ("base", xpos="far_left", ypos="head") + + $ _naked = True + "\"You should probably be clothed for this.\"": + her "Wearing my uniform?" ("base", "base", "base", "mid") + gen "That's right..." ("base", xpos="far_left", ypos="head") + + $ _uniform = True + + her @ cheeks blush "If you say so..." ("open", "closed", "base", "mid") + + stop music fadeout 4.0 + call hide_characters + show screen blkfade + with d3 + + if _uniform: + $ her_outfit_last.save() + $ hermione.equip(her_outfit_default) + else: #stripped + $ her_outfit_last.save() + $ hermione.strip("clothes") + + call her_chibi("stand",560,"base") + call gen_chibi("jerk_off",450,"base") + + hide screen blkfade + with fade + pause.8 + + + if states.her.tier == 5: + if not _events_completed_any: + gen "Splendid...{w=0.4} So, care to give me a hand?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "A hand?" ("open", "base", "base", "mid", xpos="base", ypos="base", flip=False) + gen "To get to the main part of the task, I'll need you to jerk me off." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "...{w=0.4} Why do you always do this, [name_genie_hermione]?" ("disgust", "narrow", "base", "mid") + gen "Do what?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Whenever I give you a finger, you take the whole hand. You're always up to some high jinks..." ("annoyed", "narrow", "base", "mid") + gen "I'm not sure whether I follow." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Weren't you supposed to just cum on me, and then send me out into the halls?" ("angry", "narrow", "base", "mid") + gen "First of all, I'm not making you do anything, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") + gen "Second of all, if I'm to produce said cum, then I require some effort on your part...{w=0.4} You should know how it works by now." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "{size=-4}Surely you should know how favour trading is supposed to work by now...{/size}" ("soft", "narrow", "base", "R") + gen "What was that?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Nothing..." ("open", "narrow", "base", "down") + gen "Alright then, time to paint the town white." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Ugh*...{w=0.4} Fine..." ("disgust", "narrow", "base", "mid") + + play music "music/(Orchestral) Playful Tension by Shadow16nh.ogg" fadein 1 if_changed # SEX THEME. + her @ cheeks blush "..........." ("upset", "narrow", "base", "down") + + nar "Hermione looks down at your dick, with an annoyed expression..." + + her @ cheeks blush "......................." ("angry", "narrow", "base", "down") + pause.1 + + call her_chibi_scene("hj_pause", trans=d9) + pause.8 + + nar "After a brief pause, she finally puts her slender hands around it and starts stroking..." + + call her_chibi_scene("hj", trans=d5) + call ctc + + gen "Very good [name_hermione_genie]..." ("base", xpos="far_left", ypos="head") + gen "Although, I must say that I expected a bit more enthusiasm..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I'm doing what you asked of me, [name_genie_hermione]... But I am not going to lie and say that I'm enthusiastic about it. That would cost you extra." ("open", "closed", "base", "mid") + gen "How could you possibly not feel enthusiastic? I'm already paying you a great amount of points, must you always be so greedy?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Hmph*... Nevermind then..." ("annoyed", "narrow", "base", "down") + gen "I'm sorry [name_hermione_genie], but if you can't show me some enthusiasm, then we won't be able to get to the main part of today's event...." ("base", xpos="far_left", ypos="head") + gen "If there's anything that can be done, then speak your mind." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("annoyed", "narrow", "base", "down") + her @ cheeks blush "You know, I was just thinking, that maybe just this once, I wasn't going to be the one ending up with the short end of the stick..." ("open", "closed", "base", "mid") + her @ cheeks blush "Yet, here I am, jerking you off...{w=0.4} Even though that wasn't a part of the agreement..." ("open", "narrow", "base", "down") + gen "I don't see how that equates to you receiving the short end of the stick..." ("base", xpos="far_left", ypos="head") + gen "On the contrary, I'd say you're receiving quite the long end of the stick..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Ugh*..." ("disgust", "narrow", "base", "R") + gen "..." ("base", xpos="far_left", ypos="head") + gen "*Hmm*... Tell you what..." ("base", xpos="far_left", ypos="head") + gen "What if you get to be the one to pick the target?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "You mean..." ("disgust", "squint", "base", "stare") + + nar "You feel Hermione's hands tense around your cock." + + her @ cheeks blush "You--{w=0.4} You're actually letting me decide..." ("angry", "narrow", "base", "down") + gen "Sure... You're holding it, after all." ("base", xpos="far_left", ypos="head") + if _uniform: + gen "As long as it's somewhere on you...{w=0.4} It can be on your shoes for all I care." ("base", xpos="far_left", ypos="head") + her "That's weird, but okay..." ("base", "base", "base", "mid") + gen "Shoes it is!" ("base", xpos="far_left", ypos="head") + else: + gen "As long as you let me finish on you...{w=0.4} It can be on your feet for all I care." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "That's weird, but okay..." ("angry", "narrow", "base", "down") + gen "Feet it is!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "No, that's not it! At least give me time to think it through!" ("angry", "happyCl", "base", "mid") + gen "Unless you want to be late for class, you better decide, and finish me off quickly." ("base", xpos="far_left", ypos="head") + + nar "Hermione increases her pace, jerking your cock with renewed vigour." + + gen "..." ("angry", xpos="far_left", ypos="head") + gen "So...{w=0.4} *Ngh*--{w=0.2} What are we thinking? A facial perhaps?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "A facial?!" ("angry", "base", "base", "mid") + her @ cheeks blush "No, it has to be somewhere where no one will be able to see it." ("angry", "narrow", "base", "mid") + gen "Ah...{w=0.4} Yes, of course...{w=0.4} So, why don't you make up your mind, I'm about to--" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Please [name_genie_hermione], I need some quiet so I can concentrate!" ("angry", "closed", "base", "down") + + nar "Hermione closes her eyes, trying to figure out the best location for your cum." + + gen "Too late! Here I come!" ("grin", xpos="far_left", ypos="head") + her @ cheeks blush "Already?! But I haven't--" ("angry", "base", "base", "stare") + else: + her @ cheeks blush "Another handjob then, I presume?" ("open", "base", "base", "R", xpos="base", ypos="base", flip=False) + gen "If you don't mind..." ("base", xpos="far_left", ypos="head") + + play music "music/(Orchestral) Playful Tension by Shadow16nh.ogg" fadein 1 if_changed # SEX THEME. + her @ cheeks blush "..........." ("soft", "narrow", "base", "down") + + nar "Hermione looks down at your dick..." + + her @ cheeks blush "......................." ("base", "narrow", "base", "down") + pause.1 + + call her_chibi_scene("hj_pause", trans=d9) + pause.8 + + nar "After a brief pause, she puts her slender hand around your member, and begins slowly stroking it..." + + call her_chibi_scene("hj", trans=d5) + call ctc + + gen "So, are you looking forward to attending your classes today?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I am...{w=0.4} I always enjoy the lectures." ("open", "closed", "base", "mid") + gen "That's not what I meant..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I know..." ("open", "happy", "base", "R") + + nar "Hermione slightly strengthens her grip around your cock, then picks up the pace." + + gen "Impatient, are we?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Oh...{w=0.4} Well, class is starting soon, and I'd rather not bring any unnecessary attention to myself by being late." ("angry", "narrow", "base", "R") + gen "Well then, in that case, there's no need to dilly-dally...{w=0.4} You've done this enough times to know what to do." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("angry", "narrow", "base", "down") + + nar "Hermione bends forward, giving the tip of your cock a quick kiss." + + play sound "sounds/kiss.ogg" + call her_chibi_scene("hj_kiss", trans=kissiris) + pause 2 + + call her_chibi_scene("hj", trans=d5) + pause.5 + + gen "*Ah*...{w=0.4} Yes, that's it [name_hermione_genie]...{w=0.4} You sure know how to give a cock the attention it deserves." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("disgust", "narrow", "base", "R") + + play sound "sounds/kiss.ogg" + call her_chibi_scene("hj_kiss", trans=kissiris) + pause 3 + + nar "As if reacting to your words, Hermione gives your cock another kiss..." + call ctc + + nar "This time her lips lingers for a moment..." + pause.5 + + gen "Very--{w=0.2} *Ngh*...{w=0.4} Very good, [name_hermione_genie]...{w=0.4} Now why don't you--" ("base", xpos="far_left", ypos="head") + + nar "Before finishing your sentence, you are interrupted by a slight tickle, as Hermione's tongue slides underneath the head of your cock." + + gen "*Ah*...{w=0.4} You're catching on quick..." ("base", xpos="far_left", ypos="head") + gen "Speaking off--{w=0.2} *Ngh*...{w=0.2} Catching on...{w=0.2} I'm about to finish!" ("base", xpos="far_left", ypos="head") + + nar "You look down at Hermione, who is still preoccupied, toying with the tip of your cock with her tongue..." + + gen "[name_hermione_genie]!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Mff*?" ("open_tongue", "closed", "base", "mid") + gen "I'm cumming!" ("base", xpos="far_left", ypos="head") + + call her_chibi_scene("hj", trans=d5) + pause.5 + + her @ cheeks blush "Wait, where was I supposed to--" ("angry", "base", "base", "stare") + + menu: + "\"Just put it under your top!\"" if _uniform: + # Cum under top + $ states.her.ev.hg_pf_cumslut.choice = "top" + + her @ cheeks blush "My top!" ("angry", "base", "base", "stare") + + stop music fadeout 1.0 + call her_chibi_scene("hj_cum_in_done", trans=d5) + pause.5 + + call cum_block + play sound "sounds/slick_01.ogg" + call her_chibi_scene("hj_cum_in", trans=d5) + pause.8 + + nar "Hermione swiftly pulls up her shirt, sliding your cock underneath...." + nar "The feeling of her soft skin rubbing against the tip of your cock makes you cum instantly..." + call ctc + + call her_chibi_scene("hj_cum_in_done", trans=d5) + + her @ cheeks blush "......." ("disgust", "squint", "base", "stare") + her @ cheeks blush "Well then...{w=0.4} That's that, I suppose..." ("disgust", "narrow", "base", "stare") + her @ cheeks blush "Hopefully no-one should notice it..." ("open", "closed", "base", "mid") + gen "Unless you've got swimming lessons today, I don't see how anyone would." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "We don't have swimming lessons..." ("annoyed", "narrow", "base", "mid") + gen "In any case... You better head off to class." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Right..." ("open", "squint", "base", "R") + + "\"Just figure it out, [name_hermione_genie]!\"" if _naked: + # Cum on naked body (under clothes) + $ states.her.ev.hg_pf_cumslut.choice = "clothes" + + nar "Trying her best to prevent the impending doom, you watch as Hermione's eyes dart between you and her body frantically." + gen "*Nnngh*--" ("angry", xpos="far_left", ypos="head") + her "Wait!" ("angry", "base", "base", "stare", cheeks="blush") + gen "{size=+5}*ARGH*!!! YES!!!{/size}" ("grin", xpos="far_left", ypos="head") + + call her_chibi_scene("hj_cum_on") + call cum_block + + $ hermione.set_cum(breasts="light", body="light") + + her @ cheeks blush "!!!!!!!!!!!" ("angry", "happyCl", "base", "down") + + call cum_block + + $ hermione.set_cum(crotch="heavy") + + gen "That's it! All over your body!" ("base", xpos="far_left", ypos="head") + her "..." ("angry", "narrow", "base", "down") + + call her_chibi_scene("hj_cum_on_done") + call ctc + + her "So sticky...{w=0.4} Well, I suppose that's not a bad thing, considering..." ("angry", "narrow", "base", "down") + her "Is that all, [name_genie_hermione]?" ("soft", "narrow", "base", "R") + gen "Ah...{w=0.4} Yes, I'm spent...{w=0.4} Although I could go again, once I've had the chance to recharge..." ("base", xpos="far_left", ypos="head") + her "You're not actually being serious, are you?" ("angry", "base", "base", "mid") + gen "I don't suppose you could kiss it for good luck before you leave?" ("base", xpos="far_left", ypos="head") + her "I don't think so, [name_genie_hermione]... I believe I did more than what was decided upon already." ("open", "happy", "base", "R") + gen "Eager, to attend classes are we?" ("base", xpos="far_left", ypos="head") + her "That's not--" ("angry", "squint", "base", "mid") + gen "You're free to go, [name_hermione_genie]...{w=0.4} Dismissed." ("base", xpos="far_left", ypos="head") + her "...{w=0.4} Let me just hide this mess first." ("angry", "narrow", "base", "down",cheeks=False) + + "\"Just use your head!\"": + # Cum on hair + $ states.her.ev.hg_pf_cumslut.choice = "hair" + + her "What! But how is that going to--" ("angry", "base", "base", "mid", cheeks="blush") + gen "Now, [name_hermione_genie]! Or there'll be consequences!" ("angry", xpos="far_left", ypos="head") + her "!!!" ("clench", "squint", "base", "stare") + + nar "Hermione bends down and holds your cock in front of her face." + gen "Get ready [name_hermione_genie], here it comes!" ("base", xpos="far_left", ypos="head") + gen "{size=+5}*ARGH*! YES!!!{/size}" ("grin", xpos="far_left", ypos="head") + her "Wait, this isn't going to--" ("angry", "squint", "base", "stare") + + nar "Just before the first spurt manages to escape your magnificent pole, Hermione points it away from her face..." + nar "However, her elation of success doesn't last long as you erupt all over the top of her head, covering her hair in your spunk..." + + play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed + + call her_chibi_scene("hj_cum_on") + call cum_block + + $ hermione.set_cum(hair="light") + + her "!!!!!!!!!!!" ("shock", "base", "base", "up") + + call cum_block + + $ hermione.set_cum(hair="heavy") + + gen "Ah..." ("base", xpos="far_left", ypos="head") + her ".............." ("angry", "base", "worried", "mid") + + call her_chibi_scene("hj_cum_on_done") + call ctc + + her "How could you!?" ("scream", "happy", "annoyed", "mid") + gen "How could I, what?" ("base", xpos="far_left", ypos="head") + her "You told me to just use my--" ("open", "base", "annoyed", "mid") + her "Oh..." ("disgust", "base", "base", "stare") + gen "Yes?" ("base", xpos="far_left", ypos="head") + her "*Hmph*...{w=0.4} Nevermind..." ("annoyed", "narrow", "base", "R") + gen "Now that the pipe's been cleaned, I believe it's time for you to head off to class." ("base", xpos="far_left", ypos="head") + her "Right..." ("open", "squint", "base", "R",cheeks=False) + + hide hermione_main + stop music fadeout 4.0 + + show screen blkfade + with d5 + + if _uniform: + nar "You shimmy back towards your desk, tucking your cock back into your robes along the way." + else: + nar "As Hermione covers up, you begin shimmying back towards your desk, tucking your cock back into your robes along the way." + $ hermione.equip(her_outfit_default) + + call gen_chibi("sit_behind_desk") + call her_chibi("stand","desk","base") + + hide screen blkfade + with d5 + pause.2 + + play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed + + gen "Oh, and one more thing..." ("base", xpos="far_left", ypos="head") + if not _events_completed_any: + her "Yes?" ("open", "base", "base", "mid") + gen "I will need some proof to know you've completed the task, so make sure you do not clean yourself before returning to me." ("base", xpos="far_left", ypos="head") + her "I can try, but I cannot guarantee I won't wipe it off accidentally by then..." ("open", "narrow", "base", "mid") + gen "If that's the case, we can simply repeat the whole ordeal..." ("base", xpos="far_left", ypos="head") + her "Right...{w=0.4} See you in the evening then..." ("open", "narrow", "base", "R") + else: + her "You'll need me to keep it on me as proof... I remember." ("open", "base", "base", "mid") + gen "Good girl..." ("base", xpos="far_left", ypos="head") + her "See you in the evening then..." ("open", "narrow", "base", "R") + + gen "Have a good rest of your day, [name_hermione_genie]...{w=0.4} Now, off you go." ("base", xpos="far_left", ypos="head") + her "Thanks..." ("soft", "narrow", "base", "down") + + call her_walk(action="leave") + + jump end_hermione_event + else: #Tier 6 + gen "Go on then, you know what to do..." ("base", xpos="far_left", ypos="head") + + play music "music/(Orchestral) Playful Tension by Shadow16nh.ogg" fadein 1 if_changed # SEX THEME. + her @ cheeks blush "..........." ("base", "narrow", "base", "down", xpos="base", ypos="base", flip=False) + + nar "Hermione pretends to be nonchalant as she leans closer and wraps her fingers around your throbbing member, but her eyes lock onto your cock with an intense look of lust..." + + her @ cheeks blush "......................." ("base", "narrow", "base", "down") + pause.1 + + call her_chibi_scene("hj_pause", trans=d9) + pause.8 + + nar "Without any fuss, she begins moving her hand up and down..." + + call her_chibi_scene("hj", trans=d5) + call ctc + + gen "That's it, [name_hermione_genie]...{w=0.4} Stroke that cock for me." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("base", "narrow", "base", "down") + + nar "Hermione's gaze, still focused intently on your throbbing member, begins picking up the pace..." + + gen "Very good, [name_hermione_genie]..." ("base", xpos="far_left", ypos="head") + gen "Now..." ("base", xpos="far_left", ypos="head") + + menu: + "\"Give my cock a loving kiss!\"": + her @ cheeks blush "A Loving--" ("angry", "narrow", "base", "down") + gen "Yes! Kiss it like a lover would!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("base", "narrow", "base", "down") + + play sound "sounds/kiss.ogg" + call her_chibi_scene("hj_kiss", trans=kissiris) + pause 3 + + nar "Hermione puckers her lips and bends forward to give your cock a tender kiss..." + call ctc + + nar "Expecting Hermione to pull a way, you're surprised that she doesn't just keep her mouth there, but that she also begins wiggling her tongue, against the tip..." + pause.5 + + gen "That's it [name_hermione_genie]...{w=0.4} Now that's what I'd call a lover's kiss!" ("base", xpos="far_left", ypos="head") + + her @ cheeks blush "..." ("open_tongue", "happy", "base", "up") + nar "Hermione looks up at you with a hint of pride, wiggling her tongue playfully once more, sending shivers down your body." + + gen "*Ngh*!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("soft", "closed", "base", "down") + + call her_chibi_scene("hj", trans=d5) + pause.5 + + her @ cheeks blush "*Mwah*!" ("grin", "squint", "base", "mid") + her @ cheeks blush "Satisfied?" ("grin", "happy", "base", "mid") + gen "Very!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Great...{w=0.4} I was hoping--" ("base", "narrow", "base", "down") + gen "Now take my satisfaction!" ("base", xpos="far_left", ypos="head") + + "\"Tell me how much you want my cum!\"": + her @ cheeks blush "I..." ("soft", "narrow", "base", "down") + gen "Hurry up!!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I want your cum!" ("angry", "happyCl", "base", "mid") + gen "Yes, I knew you'd say it, you saucy--" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Please, give me your cum, [name_genie_hermione]!" ("open_wide_tongue", "happy", "base", "up") + gen "*Ah*...{w=0.4} Yes, I'll give it to you..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I need it [name_genie_hermione]...{w=0.4} I need you to cum on me..." ("angry", "squint", "base", "up") + gen "Tell me how much you need it!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I...{w=0.4} If you don't give it to me, I'll go crazy! Please, [name_genie_hermione]!" ("mad", "narrow", "worried", "down") + + nar "As if trying to impress you, Hermione continues her handjob with renewed effort." + + gen "That's right slut...{w=0.4} How could you have ever lived without it." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I don't know! I don't know how I could have lived without any of this!" ("angry", "narrow", "base", "down") + gen "How does it make you feel to know that soon you'll be walking around the school with my spunk on yourself?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I...{w=0.4} I can't wait!" ("grin", "closed", "worried", "down") + her @ cheeks blush "Just thinking about every student and teacher looking upon me..." ("angry", "closed", "worried", "mid") + her @ cheeks blush "Watching me, casually go about my day...{w=0.4} While covered in your cum!" ("angry", "closed", "worried", "mid") + gen "*Ah*...{w=0.4} *Ah*..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Please [name_genie_hermione]...{w=0.4} I need it!" ("angry", "squint", "worried", "mid") + gen "Yes, [name_hermione_genie]...{w=0.4} And--" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "{size=+4}Give it to me!{/size}" ("clench", "happyCl", "worried", "down") + gen "{size=+4}You shall have it!{/size}" ("base", xpos="far_left", ypos="head") + + "\"Tell them how much of a slut you are!\"": + her @ cheeks blush "What do you mean by \"them\"--" ("angry", "base", "base", "mid") + gen "Do it [name_hermione_genie]! Tell them why you're doing this!" ("base", xpos="far_left", ypos="head") + gen "Tell them what you really want!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Tell who--" ("angry", "squint", "base", "mid") + gen "Tell your classmates that you want them to see what you've done!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "My classmates?!" ("clench", "base", "base", "stare") + gen "Yes, tell them about all the filthy things you've done for them!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "But..." ("mad", "squint", "worried", "mid") + gen "Imagine all your friends and classmates here, right now, watching you jerk off your headmaster, and begging him to cover your body in cum!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "You mean...{w=0.4} Oh, I see..." ("angry", "base", "base", "stare") + gen "Yes, [name_hermione_genie]...{w=0.4} Everyone's listening...{w=0.4} Tell them why you're doing it!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "E--{w=0.2} Everyone...{w=0.4} It's...{w=0.4} It's all true, I've been selling sexual favours!" ("angry", "closed", "base", "mid") + gen "Everyone gasps in shock! The rumours...{w=0.4} They were all true!" ("base", xpos="far_left", ypos="head") + gen "Hermione Granger...{w=0.4} The most talented student of the Gryffindor house...{w=0.4} Is nothing but a slut!?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "What?! No, I just wanted to help our house!" ("angry", "base", "base", "stare") + gen "Help? How is this helping? You're just whoring yourself out, just like the Slytherin girls!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "No, I--{w=0.2} I just wanted to help Gryffindor win the cup!" ("angry", "narrow", "worried", "stare_soft") + gen "Then why would you let them see you like this? Why wouldn't you let them live in blissful ignorance?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I...{w=0.4} I just wanted..." ("disgust", "narrow", "worried", "stare") + her @ cheeks blush "I just wanted to finally get recognized!" ("angry", "happyCl", "worried", "mid") + her @ cheeks blush "Please!" ("angry", "narrow", "worried", "stare") + her @ cheeks blush "Please! Someone! Anyone! Realise what I've been doing! What I've done to help you all!" ("angry", "squint", "worried", "stare") + her @ cheeks blush "I've done so many dirty things for the headmaster!" ("angry", "happyCl", "base", "stare") + her @ cheeks blush "All for you!" ("open", "happyCl", "base", "down") + her @ cheeks blush "Even though I know you'd never appreciate it!" ("disgust", "closed", "worried", "mid") + gen "Faster [name_hermione_genie]! Get those arms moving!" ("base", xpos="far_left", ypos="head") + + nar "Hermione, annoyed at the imaginary crowd, begins jerking your cock with renewed effort." + + gen "That's it! You're just whoring yourself out, for the sake of Gryffindor pride!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Yes! For the sake of--" ("angry", "base", "base", "stare") + gen "But surely that can't be true! She must just be another slut!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "It is true! I'll do anything that the headmaster wants! All for Gryffindor!" ("angry", "base", "base", "stare") + gen "Then take my cum, like the whore you are!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Yes [name_genie_hermione], give it to--" ("angry", "wide", "worried", "mid") + + her @ cheeks blush "Wait, where am I supposed to aim--" ("angry", "wide", "base", "stare") + + menu: + "\"Just keep on jerking, [name_hermione_genie]!\"" if _uniform: + # Cum under top + $ states.her.ev.hg_pf_cumslut.choice = "top" + + nar "Hermione continues moving her fingers swiftly against your length, and you feel yourself getting closer to finishing by the second." + gen "Get ready whore, here I come!" ("angry", xpos="far_left", ypos="head") + her @ cheeks blush "Wait!" ("angry", "base", "base", "stare") + gen "{size=+5}*ARGH*! YES!!! RIGHT ON THOSE TITS!{/size}" ("grin", xpos="far_left", ypos="head") + + her @ cheeks blush "My tits!" ("angry", "base", "base", "stare") + + stop music fadeout 1.0 + call her_chibi_scene("hj_cum_in_done", trans=d5) + pause.5 + + call cum_block + play sound "sounds/slick_01.ogg" + call her_chibi_scene("hj_cum_in", trans=d5) + pause.8 + + nar "Pulling up her shirt in one motion, Hermione quickly slides your cock between her tits..." + nar "As the sensation of her soft skin moving across your member hits you, you instantly start shooting load after load of cum in-between her tits..." + call ctc + + call her_chibi_scene("hj_cum_in_done", trans=d5) + + her @ cheeks blush "......." ("soft", "narrow", "base", "up") + her @ cheeks blush "I...{w=0.4} I did it..." ("soft", "closed", "base", "mid") + gen "You sure did..." ("base", xpos="far_left", ypos="head") + gen "Although, I think you would've had an easier time making someone notice if you had taken it on your clothes..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Hmm*...{w=0.4} Well, if I had done that, then everyone would definitely notice..." ("angry", "narrow", "base", "down") + gen "Your point?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("disgust", "base", "base", "mid") + gen "Well then [name_hermione_genie], you better head off to class." ("base", xpos="far_left", ypos="head") + her @ cheeks none "Right..." ("open", "squint", "base", "R") + + "-Stay Silent-" if _naked: + # Cum on crotch (under clothes) + $ states.her.ev.hg_pf_cumslut.choice = "crotch" + + nar "You watch Hermione's eyes, anxiously darting around the room as your inevitable eruption looms closer." + gen "Get ready slut, here it comes!" ("angry", xpos="far_left", ypos="head") + her "Wait!" ("angry", "happyCl", "base", "mid", cheeks="blush") + gen "{size=+5}*ARGH*! YES!!!{/size}" ("grin", xpos="far_left", ypos="head") + + play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed + + call her_chibi_scene("hj_cum_on") + call cum_block + + $ hermione.set_cum(crotch="light") + + her "!!!!!!!!!!!" ("angry", "base", "base", "down") + + $ hermione.set_cum(crotch="light") + + gen "That's it, all over your pussy!" ("base", xpos="far_left", ypos="head") + her "..." ("soft", "base", "base", "down") + + call her_chibi_scene("hj_cum_on_done") + call ctc + + her "......" ("base", "base", "base", "mid") + her "Will that be all, [name_genie_hermione]?" ("open", "base", "base", "mid") + gen "Yes...{w=0.4} That was great, [name_hermione_genie]...{w=0.4} Although, I don't suppose you could kiss it, for good luck?" ("base", xpos="far_left", ypos="head") + her "......" ("base", "narrow", "base", "mid",cheeks=False) + + hide hermione_main + play sound "sounds/kiss.ogg" + with kissiris + + call her_chibi_scene("hj_cum_on_done") + gen "Good girl..." ("base", xpos="far_left", ypos="head") + + "\"On your face!\"": + # Cum on face + $ states.her.ev.hg_pf_cumslut.choice = "face" + + nar "Hermione bends down and holds your cock against her face." + + gen "Get ready slut, here it comes!" ("base", xpos="far_left", ypos="head") + her "..." ("angry", "happyCl", "worried", "mid", cheeks="blush") + gen "{size=+5}*ARGH*! YES!!!{/size}" ("grin", xpos="far_left", ypos="head") + + nar "You erupt onto her face, dousing it in your spunk." + + play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed + + call her_chibi_scene("hj_cum_on") + call cum_block + + $ hermione.set_cum(face="light") + + her "!!!!!!!!!!!" ("angry", "happyCl", "base", "mid") + + call cum_block + + $ hermione.set_cum(face="heavy", hair="light") + + + gen "Ah... Yes! I feel so much better now..." ("base", xpos="far_left", ypos="head") + her ".............." ("disgust", "squint", "base", "mid") + + call her_chibi_scene("hj_cum_on_done") + call ctc + + her "My face...{w=0.4} It's all covered..." ("disgust", "narrow", "base", "down") + her "How am I supposed to hide this..." ("disgust", "happyCl", "base", "mid") + gen "I don't really care if you hide it or not, just don't miss your lectures..." ("base", xpos="far_left", ypos="head") + her "..." ("annoyed", "narrow", "base", "mid",cheeks=False) + + "\"In your hair!\"": + $ states.her.ev.hg_pf_cumslut.choice = "hair" + + nar "Hermione bends down and aims your cock towards her hair." + + gen "That's it slut, time make that hair even more messy!" + her "My hair isn't--" ("angry", "base", "base", "stare", cheeks="blush") + gen "{size=+5}*ARGH*! YES!!!{/size}" ("grin", xpos="far_left", ypos="head") + + nar "You let our a torrent of cum, all over Hermione's hair." + + play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed + + call her_chibi_scene("hj_cum_on") + call cum_block + + $ hermione.set_cum(hair="light") + + her "!!!!!!!!!!!" ("angry", "base", "base", "up") + + call cum_block + + $ hermione.set_cum(hair="heavy") + + gen "Ah... That's the ticket..." ("base", xpos="far_left", ypos="head") + her ".............." ("disgust", "squint", "base", "up") + + call her_chibi_scene("hj_cum_on_done") + call ctc + + her "My hair... Is not messy..." ("annoyed", "squint", "base", "mid") + gen "I see it as a positive thing." ("base", xpos="far_left", ypos="head") + her "What is that supposed to mean?" ("angry", "base", "base", "mid") + gen "It makes it way less likely that my cum will slide off." ("base", xpos="far_left", ypos="head") + her "..." ("disgust", "base", "base", "mid",cheeks=False) + + + hide hermione_main + stop music fadeout 4.0 + + show screen blkfade + with d5 + + if _uniform: + nar "Tucking your penis back into your trousers, you shimmy over to your desk." + else: + nar "While Hermione focuses on getting dressed, you stow your wand away, and sit down in your chair." + $ hermione.equip(her_outfit_default) + + call gen_chibi("sit_behind_desk") + call her_chibi("stand","desk","base") + + hide screen blkfade + with d5 + pause.2 + + play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed + + gen "Oh, and just to be clear..." ("base", xpos="far_left", ypos="head") + if not _events_completed_any: + her "Yes?" ("open", "base", "base", "mid") + gen "If you return to this office after classes, without any cum on you, I'll be very upset." ("base", xpos="far_left", ypos="head") + her "Alright...{w=0.4} Hopefully it won't dissolve on its own before then." ("open", "base", "base", "R") + gen "I wouldn't worry about that..." ("base", xpos="far_left", ypos="head") + her "A potency potion, is it?" ("soft", "squint", "base", "mid") + gen "Yep, that's it..." ("base", xpos="far_left", ypos="head") + her "Alright...{w=0.4} I'll see you later then..." ("open", "base", "base", "mid") + gen "Have fun..." ("base", xpos="far_left", ypos="head") + her "..." ("soft", "squint", "base", "R") + else: + her "Don't worry... I won't clean it off until after I've returned to your office." ("open", "base", "base", "mid") + gen "Very good..." ("base", xpos="far_left", ypos="head") + + gen "Have fun..." ("base", xpos="far_left", ypos="head") + her "..." ("soft", "squint", "base", "R") + + call her_walk(action="leave") + + jump end_hermione_event + label hg_pr_cumslut_fail: call start_hg_pr_cumslut @@ -36,945 +825,673 @@ label hg_pr_cumslut_fail: jump too_much_public -label hg_pr_cumslut_e1: +## Return events ## - call start_hg_pr_cumslut +label hg_pr_cumslut_T5_return: - her "" (xpos="mid", ypos="base", trans=fade) + if states.her.ev.hg_pf_cumslut.choice == "top": + jump hg_pr_cumslut_T5_top + elif states.her.ev.hg_pf_cumslut.choice == "clothes": + jump hg_pr_cumslut_T5_clothes + elif states.her.ev.hg_pf_cumslut.choice == "hair": + jump hg_pr_cumslut_T5_hair - gen "[name_hermione_genie]?" ("base", xpos="far_left", ypos="head") - her @ cheeks base "Yes, [name_genie_hermione]." ("base", "base", "base", "mid") +label hg_pr_cumslut_T6_return: - play music "music/(Orchestral) Playful Tension by Shadow16nh.ogg" fadein 1 if_changed + if states.her.ev.hg_pf_cumslut.choice == "top": + jump hg_pr_cumslut_T6_top + elif states.her.ev.hg_pf_cumslut.choice == "crotch": + jump hg_pr_cumslut_T6_crotch + elif states.her.ev.hg_pf_cumslut.choice == "face": + jump hg_pr_cumslut_T6_face + elif states.her.ev.hg_pf_cumslut.choice == "hair": + jump hg_pr_cumslut_T6_hair - gen "Today I have another small favour to ask of you." ("base", xpos="far_left", ypos="head") - her "What is it?" ("soft", "base", "base", "mid") - gen "I'd like you to attend class..." ("base", xpos="far_left", ypos="head") - her "Of course, not a problem..." ("base", "happyCl", "base", "mid") - gen "Glazed with my cum!" ("grin", xpos="far_left", ypos="head") - her "What?!?" ("shock", "wide", "base", "stare") - her "You can't be serious!" ("angry", "base", "angry", "mid") - her "It's bad enough that I let you cum on me in the first place!" ("annoyed", "narrow", "annoyed", "mid") - her "But in public?" ("angry", "narrow", "annoyed", "mid", emote="angry") - her "I think I better leave..." ("annoyed", "base", "angry", "mid") - gen "Wait!" ("base", xpos="far_left", ypos="head") - gen "What if nobody could see it?" ("base", xpos="far_left", ypos="head") - her "You mean like a spell?" ("soft", "narrow", "annoyed", "mid") - gen "That, or I could dump my load somewhere discreet." ("base", xpos="far_left", ypos="head") - her @ cheeks blush "Well... I suppose that would be alright..." ("annoyed", "narrow", "annoyed", "R") - her "But what's the point of it all?" ("annoyed", "base", "worried", "R") - gen "You'll know it's there, and so will I." ("grin", xpos="far_left", ypos="head") - her "*Hmm*..." ("annoyed", "narrow", "angry", "L") - her "How much would I be paid for this?" ("annoyed", "squint", "base", "mid") - gen "Thirty points." ("base", xpos="far_left", ypos="head") - her "Thirty?! I expect at least seventy for such a filthy act!" ("angry", "happyCl", "worried", "mid") - gen "Forty." ("base", xpos="far_left", ypos="head") - her "Sixty!" ("open", "closed", "angry", "mid") - gen "Fifty points, my final offer." ("base", xpos="far_left", ypos="head") - her "Okay, I'll do it." ("annoyed", "base", "worried", "R") - gen "Really?" ("base", xpos="far_left", ypos="head") - her @ cheeks blush "If nobody can see it then I guess it's okay..." ("annoyed", "narrow", "angry", "R") - gen "Splendid. Care to lend me a hand?" ("base", xpos="far_left", ypos="head") - her "*sigh*..." ("soft", "narrow", "worried", "down") +label hg_pr_cumslut_T5_top: + # Cum under top, professor McGonagall notices a stain. + $ hermione.equip(her_outfit_default) + $ hermione.set_cum(breasts="light", body="light") - hide hermione_main - call blkfade + call her_walk(action="enter", xpos="mid", ypos="base") - call her_chibi_scene("hj", "desk", "base") + her "...{w=0.4} I did it, [name_genie_hermione]." ("open", "closed", "base", "mid", xpos="mid", ypos="base", trans=fade) + her "I've kept your cum under my top, all day." ("open", "closed", "base", "mid") - call hide_blkfade - call ctc + gen "I'll be the judge of that..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "[name_genie_hermione]?" ("angry", "base", "base", "mid") + gen "Remove your top and bra for me, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Oh...{w=0.4} Right..." ("disgust", "narrow", "base", "down") - her "Why are you making me do this, [name_genie_hermione]?" ("angry", "base", "worried", "mid", ypos="head", flip=False) - gen "What do you mean?" ("base", xpos="far_left", ypos="head") - her "Why are you making me jerk you off..." ("angry", "narrow", "base", "down") - gen "You know why..." ("base", xpos="far_left", ypos="head") - her @ cheeks blush "Are you trying to mark me as yours?" ("normal", "narrow", "annoyed", "mid") - her @ cheeks blush "Like some common beast?" ("normal", "narrow", "worried", "mid") - gen "I'm not doing anything, my hands are right here." ("grin", xpos="far_left", ypos="head") - her "That may be so, but if I stop, Gryffindor will lose the house cup." ("annoyed", "narrow", "worried", "mid") - gen "And?" ("base", xpos="far_left", ypos="head") - her "Harry and Ron will be so disappointed..." ("annoyed", "base", "worried", "mid") - gen "So that's why you are doing this? For those two boys?" ("base", xpos="far_left", ypos="head") - her "Sort of... I'm not sure that they'd be too upset, though." ("annoyed", "base", "worried", "R") - gen "Are you sure that's the only reason?" ("base", xpos="far_left", ypos="head") - her "What?" ("upset", "wink", "base", "mid") - gen "I mean, you're answering all my summon requests--" ("base", xpos="far_left", ypos="head") - gen "--Doing whatever I tell you to do, whenever I tell you." ("base", xpos="far_left", ypos="head") - gen "Performing in front of your peers, because I ask of you." ("base", xpos="far_left", ypos="head") - her "..." ("disgust", "narrow", "base", "down") - gen "Tell you what, I'll give you a choice." ("base", xpos="far_left", ypos="head") - gen "So long as I cum on you, and you parade around school smelling like a slut today, Gryffindor will get fifty points." ("base", xpos="far_left", ypos="head") - her "How is that any different from what we've already agreed on?" ("disgust", "narrow", "base", "mid_soft") - gen "Because I'll let you choose where to take my load." ("base", xpos="far_left", ypos="head") - nar "You feel her hands tense around your cock." - her "You're letting me choose?" ("open", "base", "base", "mid") - gen "Yep." ("base", xpos="far_left", ypos="head") - gen "As long as you let me cum on you. You can even choose your feet for all I care." ("base", xpos="far_left", ypos="head") - her "Okay..." ("crooked_smile", "narrow", "base", "mid") - gen "Well, hurry up then, [name_hermione_genie], classes will start soon." ("base", xpos="far_left", ypos="head") - nar "She starts jerking your cock with renewed vigour." - gen "So, what will be your choice?" ("base", xpos="far_left", ypos="head") - her "I'm not sure." ("upset", "wink", "base", "mid") - her "I'm trying to think of a place no one will be able to see..." ("angry", "base", "base", "mid") - gen "You better think of something soon!" ("base", xpos="far_left", ypos="head") - her "Why's that?" ("open", "wink", "worried", "mid") - gen "Because I'm about to cum!" ("grin", xpos="far_left", ypos="head") - her "Already?! But I still haven't--" ("angry", "wide", "base", "stare") + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("top", "bra") + pause.5 - menu: - #"-Stay Silent-": # TODO: rewrite so it doesn't require to be "under" shirt, but on top of the existing cloth (if any at all) - # Cum under shirt - #$ _cum_location = 1 + gen "*Hmm*...{w=0.4} Yes, that's cum alright...{w=0.4} I'd recognize that slimy consistency from a mile away..." ("base", xpos="far_left", ypos="head") + gen "Good job [name_hermione_genie], you've completed your task with flying colours." ("base", xpos="far_left", ypos="head") - #nar "Hermione swiftly pulls her shirt up..." - #nar "You can feel her incredibly soft tits rubbing against the tip of your cock, making you cum!" - #gen "{size=+5}*ARGH*! YES!!!{/size}" ("angry", xpos="far_left", ypos="head") + if _events_filtered_completed_all: + menu: + "\"Fifty points to Gryffindor!\"": + $ gryffindor += 50 + her "Thank you [name_genie_hermione]..." ("open", "base", "base", "mid") - #call her_chibi_scene("hj_cum_in") - #call cum_block + jump hg_pr_cumslut_T5_top.end - # TODO Cum under shirt layer - - #her "!!!!!!!!!!!" ("shock", "wide", "base", "stare", xpos="right", ypos="base") - - #call her_chibi_scene("hj_cum_in_done") - #call ctc - - #her "Well, this shouldn't be too bad..." ("upset", "wink", "base", "mid") - #gen "I'm sure no one will notice." ("base", xpos="far_left", ypos="head") - #her "They better not." ("angry", "base", "angry", "mid") - - "\"Just keep on jerking, [name_hermione_genie]!\"": - # Cum on skirt - $ _cum_location = "bottom" - - nar "Hermione keeps jerking your cock, her gaze wandering about her own body." - gen "Get ready, you whore, here it comes!!!" ("angry", xpos="far_left", ypos="head") - her "Wait, I need more time--" ("shock", "wide", "worried", "mid") - gen "{size=+5}*ARGH*! YES!!!{/size}" ("grin", xpos="far_left", ypos="head") - - play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed - - call her_chibi_scene("hj_cum_on") - call cum_block - - $ hermione.set_cum(crotch="light") - - her "!!!!!!!!!!!" ("shock", "wide", "base", "stare", xpos="right", ypos="base") - - $ hermione.set_cum(crotch="heavy") - - gen "That's it! All over you, slut!" ("angry", xpos="far_left", ypos="head") - her "..." ("shock", "base", "worried", "down") - - call her_chibi_scene("hj_cum_on_done") - call ctc - - her "Y-you came all over my bottom half..." ("angry", "narrow", "worried", "mid") - - her "Will that be all, [name_genie_hermione]?" ("angry", "narrow", "worried", "mid") - gen "I don't suppose you could kiss it for good luck?" ("base", xpos="far_left", ypos="head") - her "I don't think so." ("annoyed", "narrow", "angry", "R") - gen "Well then that should be all, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") - - "\"Use your head, slut!\"": - # Cum on head - $ _cum_location = "face" - - nar "Hermione bends down and holds your cock in front of her face." - gen "Oh? Interesting! Get ready, here it comes!" ("base", xpos="far_left", ypos="head") - her "W-wait I--" ("scream", "wide", "base", "mid") - gen "{size=+5}*ARGH*! YES!!!{/size}" ("grin", xpos="far_left", ypos="head") - her "--I can't!" ("open", "wide", "worried", "mid") - - nar "Hermione moves your cock away from her face at the last second." - nar "You erupt all over the top of her head, covering her hair in your spunk." - - play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed - - call her_chibi_scene("hj_cum_on") - call cum_block - - $ hermione.set_cum(hair="light") - - her "!!!!!!!!!!!" ("shock", "wide", "base", "stare", xpos="right", ypos="base") - - $ hermione.set_cum(hair="heavy") - - gen "Yes! I Feel so much better now..." ("grin", xpos="far_left", ypos="head") - her ".............." ("normal", "happyCl", "worried", "mid") - - call her_chibi_scene("hj_cum_on_done") - call ctc - - her @ tears soft_blink "H-How could you!?" ("scream", "happyCl", "worried", "mid") - gen "How could I? What do you mean?" ("base", xpos="far_left", ypos="head") - her @ tears soft "You told me to use my head!" ("scream", "base", "angry", "mid") - gen "I did." ("base", xpos="far_left", ypos="head") - her @ tears soft_blink "Why would you do something like that then!?" ("mad", "happyCl", "worried", "mid") - gen "Sorry, what wrongdoing did I do?" ("base", xpos="far_left", ypos="head") - her @ tears soft "If I hadn't moved at the last second, my face would be covered!" ("angry", "base", "base", "mid") - gen "Don't blame me, that was your move, not mine." ("base", xpos="far_left", ypos="head") - her "What?" ("open", "base", "angry", "mid") - gen "I only said that you should use your head to think." ("base", xpos="far_left", ypos="head") - gen "I didn't mean it in a literal sense..." ("base", xpos="far_left", ypos="head") - her "You mean I didn't have to..." ("angry", "base", "worried", "R") - gen "Not at all." ("base", xpos="far_left", ypos="head") - gen "I thought you of all people would know what an idiom is." ("grin", xpos="far_left", ypos="head") - her "........." ("disgust", "narrow", "worried", "mid") - - hide hermione_main - call blkfade - - nar "You tuck your cock back into your robe." - - call gen_chibi("sit_behind_desk") - call her_chibi("stand","desk","base") - - call hide_blkfade - pause.2 - - call bld - gen "Oh, and one last thing before you head to class..." ("base", xpos="far_left", ypos="head") - her "What is it?" ("annoyed", "narrow", "annoyed", "mid") - gen "If you happen to report to me after class, with no traces of cum on you, Slytherin will get two hundred points." ("base", xpos="far_left", ypos="head") - her "{size=+10}Two hundred!? That is not fair!{/size}" ("shock", "wide", "base", "stare") - gen "It's unfair only if you cheat, and try washing it off." ("grin", xpos="far_left", ypos="head") - her "*tsk*!..." ("angry", "base", "angry", "mid") - - call her_walk(action="leave") - - gen "See you soon..." ("grin", xpos="far_left", ypos="head") - - jump end_hermione_event - -label hg_pr_cumslut_e2: - - call start_hg_pr_cumslut - - her "" (xpos="mid", ypos="base", trans=fade) - - her "Again?" ("angry", "wide", "base", "stare") - her "You cannot be serious!?" ("angry", "base", "angry", "mid") - her @ cheeks blush "I already let you do this to me once, isn't that enough?" ("annoyed", "narrow", "annoyed", "mid") - gen "It's enough when I say it's enough." ("base", xpos="far_left", ypos="head") - gen "Besides, was it really so bad the last time?" ("base", xpos="far_left", ypos="head") - her @ cheeks blush "Well I guess not..." ("annoyed", "base", "angry", "R") - her "But will it still be hidden this time?" ("annoyed", "base", "worried", "mid") - gen "That's up to you." ("base", xpos="far_left", ypos="head") - her "*Hmm*..." ("annoyed", "narrow", "angry", "R") - - her "How much will I be paid this time then?" ("open", "squint", "base", "mid") - gen "Twenty points." ("base", xpos="far_left", ypos="head") - her "Twenty!? we agreed on fifty last time!" ("clench", "base", "angry", "mid") - gen "Forty." ("base", xpos="far_left", ypos="head") - her "Seventy!" ("scream", "closed", "angry", "mid") - gen "Fifty points then, final offer." ("base", xpos="far_left", ypos="head") - her @ cheeks blush "Eighty and I'll let people see it." ("grin", "narrow", "base", "mid_soft") - gen "Really?" ("base", xpos="far_left", ypos="head") - her @ cheeks blush "As long as it isn't too obvious..." ("base", "narrow", "worried", "down") - gen "Deal!" ("grin", xpos="far_left", ypos="head") - her "..." ("soft", "narrow", "worried", "down") - - hide hermione_main - call blkfade - - call her_chibi_scene("hj", "desk", "base") - call hide_blkfade - call ctc - - her "Why are we doing this again, [name_genie_hermione]?" ("annoyed", "base", "base", "mid", ypos="head", flip=False) - gen "Let me answer your question with one of my own." ("base", xpos="far_left", ypos="head") - her "Okay..." ("open", "base", "base", "mid") - gen "Why are you jerking me off, [name_hermione_genie]?" ("base", xpos="far_left", ypos="head") - her "Because you asked me to..." ("soft", "narrow", "annoyed", "mid") - gen "And that's all there is to it?" ("base", xpos="far_left", ypos="head") - her "Yes... I think?" ("open", "wink", "worried", "mid") - gen "Are you sure?" ("base", xpos="far_left", ypos="head") - her "I don't know..." ("open", "base", "worried", "R") - gen "What is your other reason?" ("base", xpos="far_left", ypos="head") - her "if I don't do this, Gryffindor will lose the house cup." ("angry", "happyCl", "worried", "mid") - gen "You said the same thing the last time, but I still don't buy it." ("base", xpos="far_left", ypos="head") - her "It's not a lie..." ("angry", "base", "worried", "mid") - gen "No, it's not, but it's not a complete truth either." ("base", xpos="far_left", ypos="head") - gen "If you had to choose, would you rather win the house cup, or--" ("base", xpos="far_left", ypos="head") - gen "Would you rather make me a happy man." ("base", xpos="far_left", ypos="head") - her @ cheeks blush "Can't I do both?" ("annoyed", "base", "worried", "R") - gen "You certainly can... But I want you to be honest." ("base", xpos="far_left", ypos="head") - gen "I'm going to give you another choice--" ("base", xpos="far_left", ypos="head") - gen "You can stop jerking me off right now, leave the room and I'll give you a hundred points. However, I'll be very upset." ("base", xpos="far_left", ypos="head") - her "..." ("open", "base", "base", "mid") - her "What's the other option?" ("soft", "base", "worried", "mid") - gen "Or, you can continue what you're doing, take my load on you, but you'll get no points whatsoever." ("base", xpos="far_left", ypos="head") - her "..." ("shock", "wide", "base", "mid") - her "NO POINTS?" ("angry", "wide", "worried", "mid") - gen "None. However, you will make me very happy." ("base", xpos="far_left", ypos="head") - her "But that's... Can't you just pay me like usual--" ("angry", "base", "worried", "mid", emote="sweat") - gen "No, I cannot." ("base", xpos="far_left", ypos="head") - gen "The choice is yours however." ("base", xpos="far_left", ypos="head") - nar "You feel Hermione's hand tense around your cock." - her "You're making me choose? Between getting a hundred points for doing nothing--" ("angry", "happyCl", "angry", "mid") - her "--Or getting paid nothing for being treated like some cumrag from slytherin?" ("angry", "narrow", "annoyed", "mid", emote="angry") - gen "I would've phrased it differently, but yes, these are your choices, [name_hermione_genie]." ("grin", xpos="far_left", ypos="head") - her "{size=-5}Some choices they are...{/size}" ("disgust", "narrow", "base", "R") - gen "You might wish to make up your mind soon, your classes are about to start." ("base", xpos="far_left", ypos="head") - nar "Hermione ponders for a minute, you study her face in great detail, wondering what's going through her head." - nar "You can see the wheels turning as she contemplates her choices, as ridiculous as they may be." - nar "Her face is beet red, eyes unfocused. You nod to yourself, you think you know the answer." - nar "She starts jerking your cock with renewed vigour." - her @ cheeks blush "..." ("annoyed", "narrow", "angry", "R") - her @ cheeks blush "You better appreciate this..." ("open", "narrow", "angry", "R") - gen "Oh, trust me, I am feeling {b}very{/b} happy!" ("grin", xpos="far_left", ypos="head") - her "Really?" ("open", "base", "base", "mid") - gen "You're about to see how much I'm appreciating this!" ("grin", xpos="far_left", ypos="head") - her "What, Already? Where should I--" ("angry", "wide", "base", "stare") - - menu: - "-Stay Silent-": - # Cum on legs - $ _cum_location = "legs" - - nar "Hermione tries to think, but her mind is too distracted to think quick enough." - gen "Get ready slut, here it comes!" ("angry", xpos="far_left", ypos="head") - her "Wait, where am I supposed to--" ("shock", "wide", "worried", "mid") - gen "{size=+5}*ARGH*! YES!!!{/size}" ("grin", xpos="far_left", ypos="head") - nar "Hermione aims your cock lower, aiming it at her legs." - - play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed - - call her_chibi_scene("hj_cum_on") - call cum_block - - $ hermione.set_cum(legs="light") - - her "!!!!!!!!!!!" ("shock", "wide", "base", "stare", xpos="right", ypos="base") - - $ hermione.set_cum(legs="heavy") - - gen "That's it, all over your milky thighs." ("angry", xpos="far_left", ypos="head") - her "..." ("shock", "narrow", "worried", "down") - - call her_chibi_scene("hj_cum_on_done") - call ctc - - her "Are you happy now?" ("soft", "narrow", "annoyed", "mid") - gen "I've never been happier, but..." ("base", xpos="far_left", ypos="head") - her "...but?" ("normal", "wink", "annoyed", "mid") - gen "I don't suppose you could give it a kiss, you know, for good luck?" ("base", xpos="far_left", ypos="head") - her "......*sigh*" ("soft", "closed", "base", "up") - - hide hermione_main - call her_chibi_scene("hj_kiss") - play sound "sounds/kiss.ogg" - with kissiris - call ctc - - $ states.her.ev.give_me_a_handy.cock_kiss = True - - call her_chibi_scene("hj_cum_on_done") - gen "Good girl." ("base", xpos="far_left", ypos="head") - - "\"Just keep on jerking, [name_hermione_genie]!\"": - # Cum on shirt - $ _cum_location = "chest" - - nar "Hermione keeps jerking your cock, her eyes focused intently on it." - gen "Get ready slut, here I come!" ("angry", xpos="far_left", ypos="head") - her "Please not on my--" ("shock", "base", "worried", "mid") - gen "{size=+5}*ARGH*! YES!!! RIGHT ON THOSE TITS!{/size}" ("grin", xpos="far_left", ypos="head") - - play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed - - call her_chibi_scene("hj_cum_on") - call cum_block - - $ hermione.set_cum(breasts="light", body="light") - - her "!!!!!!!!!!!" ("shock", "wide", "base", "stare", xpos="right", ypos="base") - - $ hermione.set_cum(breasts="heavy") - - gen "That's it! Let it soak, slut!" ("grin", xpos="far_left", ypos="head") - her "..." ("annoyed", "narrow", "worried", "down") - - call her_chibi_scene("hj_cum_on_done") - call ctc - - her "It's all over me..." ("angry", "narrow", "worried", "mid") - gen "Not quite, but good enough." ("base", xpos="far_left", ypos="head") - her "I think I should go now..." ("annoyed", "narrow", "worried", "down") - - "\"Take it on your face slut!\"": - # Cum on face - $ _cum_location = "face" - - nar "Hermione bends down and holds your cock in front of her face." - gen "Get ready, here it comes!" ("base", xpos="far_left", ypos="head") - her "..." ("angry", "happyCl", "base", "mid") - gen "{size=+5}*ARGH*! YES!!!{/size}" ("grin", xpos="far_left", ypos="head") - her "..." ("angry", "happyCl", "angry", "down") - nar "You erupt onto her face, dousing her in your seemingly infinite spunk." - - play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed - - call her_chibi_scene("hj_cum_on") - call cum_block - - $ hermione.set_cum(face="light") - - her "!!!!!!!!!!!" ("shock", "happyCl", "base", "stare", xpos="right", ypos="base") - - $ hermione.set_cum(face="heavy", hair="light") - - gen "I Feel so much lighter now..." ("grin", xpos="far_left", ypos="head") - her ".............." ("normal", "happyCl", "worried", "mid") - - call her_chibi_scene("hj_cum_on_done") - call ctc - - her "[name_genie_hermione]!!!" ("scream", "happyCl", "worried", "mid") - her "You came all over my face!" ("scream", "closed", "angry", "mid") - gen "That's very perceptive of you." ("base", xpos="far_left", ypos="head") - her @ tears soft_blink "Why would you ask me to do that!?" ("mad", "happyCl", "worried", "mid") - her @ tears soft "I'm completely covered in your cum!" ("angry", "base", "base", "mid") - gen "You didn't have to listen to me." ("base", xpos="far_left", ypos="head") - her "..." ("angry", "base", "worried", "mid") - her "You told me to do it though..." ("annoyed", "base", "worried", "R") - - hide hermione_main - call blkfade - - nar "You tuck your cock back into your robe." - - call gen_chibi("sit_behind_desk") - call her_chibi("stand","desk","base") - - hide screen blktone - hide screen bld1 - call hide_blkfade - pause.2 - - call bld - gen "Oh and one last thing before you head to class." ("base", xpos="far_left", ypos="head") - her @ cheeks blush "Yes, I know... Don't wash it off before reporting in..." ("annoyed", "narrow", "annoyed", "R", xpos="right", ypos="base") - gen "Good, you learn quick." ("Grin", xpos="far_left", ypos="head") - her "........." ("annoyed", "narrow", "base", "R") - gen "Have fun! Tell your friends that Dumbledork sends his regards." ("grin", xpos="far_left", ypos="head") - her "Very funny..." ("disgust", "narrow", "worried", "mid") - - call her_walk(action="leave") - - jump end_hermione_event - -label hg_pr_cumslut_e3: - - call start_hg_pr_cumslut - - her "" (xpos="mid", ypos="base", trans=fade) - - her "Again? I just took a shower not too long ago..." ("open", "base", "worried", "mid") - gen "No worries, [name_hermione_genie], I'll give you another shower." ("grin", xpos="far_left", ypos="head") - her "I'm not sure we're talking about the same thing..." ("disgust", "narrow", "base", "mid") - gen "Only one way to find out." ("base", xpos="far_left", ypos="head") - her "*sigh*... I hope I don't regret it..." ("soft", "narrow", "base", "R") - - hide hermione_main - call blkfade - - call her_chibi_scene("hj", "desk", "base") - - call hide_blkfade - call ctc - - call bld - gen "Gods, you're good at this, [name_hermione_genie]!" ("base", xpos="far_left", ypos="head") - her "Thank you... I've been thinking about what you asked me the last time..." ("angry", "wink", "base", "mid", ypos="head", flip=False) - gen "Oh?" ("base", xpos="far_left", ypos="head") - her "You asked me for the reason why I do all this... Why I sell you all these favours..." ("open", "base", "angry", "mid") - her "I think it's time for me to come clean..." ("open", "closed", "worried", "mid") - gen "(*heh*)" ("grin", xpos="far_left", ypos="head") - gen "(I'm itching to make a joke, but perhaps it'd be wiser to let her speak.)" ("base", xpos="far_left", ypos="head") - her "I didn't lie when I said it was just to get more house points, so that gryffindor could win the house cup..." ("angry", "wink", "worried", "mid") - her @ cheeks blush "At first. But lately..." ("base", "narrow", "worried", "down") - her @ cheeks blush "I think...{w=0.5} I think I'm starting to enjoy it, [name_genie_hermione]." ("soft", "narrow", "base", "mid_soft") - her @ cheeks blush "Because seeing you happy, makes me happy..." ("base", "happyCl", "base", "mid") - gen "That's great... But what would really make me happy right now is you focusing a little more on the task at hand..." ("base", xpos="far_left", ypos="head") - her "Oh! Of course, [name_genie_hermione]... Silly me!" ("angry", "happy", "worried", "mid") - her "I need to learn how to multitask." ("annoyed", "narrow", "base", "stare") - her "it would come in handy." ("open", "squint", "base", "down") - gen "(*heh-heh*)" ("grin", xpos="far_left", ypos="head") - her "I think something's wrong with me, [name_genie_hermione]." ("open", "narrow", "worried", "mid") - her "Ever since you asked me to parade with your cum in public, I think--" ("open", "narrow", "annoyed", "up") - her "--I think something changed in me." ("grin", "narrow", "base", "dead") - her "I thought I hated it but the truth is..." ("grin", "narrow", "base", "dead") - her "I'm kind of enjoying it." ("soft", "narrow", "annoyed", "up") - her "Is it weird? Does that make me a slut, [name_genie_hermione]?" ("soft", "narrow", "worried", "mid") - - if "slut" in name_hermione_genie.lower(): - gen "Is that a rhetorical question, [name_hermione_genie]?" ("base", xpos="far_left", ypos="head") - her "Right... I guess it was..." ("silly", "narrow", "annoyed", "up") + "\"Now, tell me about your day.\"": + pass else: - gen "No, [name_hermione_genie], it does not." ("base", xpos="far_left", ypos="head") - her "Really? I'm relie--" ("base", "closed", "base", "up") - gen "--It makes you a {b}cumslut{/b}." ("grin", xpos="far_left", ypos="head") - her "I'm a what?" ("open", "squint", "annoyed", "mid") - gen "A cumslut. A cum-loving jizz guzzler." ("grin", xpos="far_left", ypos="head") - her "...So there's something wrong with me after all..." ("angry", "narrow", "annoyed", "down") - gen "I didn't say that." ("grin", xpos="far_left", ypos="head") - her "...?" ("soft", "wink", "worried", "mid") - gen "You may be a cumslut, but you're also {b}my{/b} cumslut, first and foremost." ("grin", xpos="far_left", ypos="head") - her @ cheeks blush "*Ah*{heart} Y-Your cumslut...?" ("disgust", "squint", "worried", "mid") - gen "Yes, you're my favourite cum receptacle, the smartest cumslut on the block." ("grin", xpos="far_left", ypos="head") - her @ cheeks blush "I'm your favourite... The smartest...{heart}{heart}" ("silly", "narrow", "base", "dead") - her @ cheeks blush "In that case..." ("base", "narrow", "low", "mid") + gen "Now, tell me about your day..." ("base", xpos="far_left", ypos="head") - her "Would you be so kind and douse your favourite cumslut with a fresh layer of your nasty jizz?" ("open_wide_tongue", "narrow", "annoyed", "up") - gen "Oh that did it, you filthy slut!" ("grin", xpos="far_left", ypos="head") - gen "HERE IT COMES!!!" ("angry", xpos="far_left", ypos="head") - her "Shoot it wherever you want [name_genie_hermione]..." ("open_wide_tongue", "narrow", "worried", "mid") + her @ cheeks blush "Oh...{w=0.4} Well, it was a pretty normal day... For the most part..." ("angry", "narrow", "base", "R") + her @ cheeks blush "I had potions, and then transfiguration afterwards." ("open", "squint", "base", "R") + gen "Any inkling that Severus may have realised what kind of predicament you had put yourself in?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I don't think so, [name_genie_hermione]...{w=0.4} Luckily, today's lesson was a quiz, so Professor Snape didn't have any reason to go near me..." ("soft", "narrow", "base", "mid") + gen "A quiz?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Yes, [name_genie_hermione]...{w=0.4} Our lessons often involve quizzes, reading or tests." ("open", "base", "base", "mid") + gen "(That man really has mastered the art of laziness...)" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "That said, professor McGonagall did notice a bit of a stain, during transfiguration class." ("soft", "narrow", "base", "down") + her @ cheeks blush "She's quite strict about cleanliness, so she held me back and gave me a lecture about it after class." ("open", "narrow", "base", "down") + gen "Did she happen to inquire the source of this stain?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "She did..." ("angry", "narrow", "base", "down") + her @ cheeks blush "I told her that I had spilled some {i}Wiggenweld potion{/i} down my front during potions class." ("disgust", "narrow", "worried", "down") + her @ cheeks blush "Unfortunately, she didn't believe me immediately..." ("annoyed", "narrow", "base", "down") + her @ cheeks blush "Apparently some students have been caught, putting {i}Dizziness Draught{/i} in that same area, just so they could get high off the fumes." ("open", "closed", "angry", "mid") + gen "Of course they would...{w=0.4} Either it's glue or permanent markers, they always figure out a way..." ("base", xpos="far_left", ypos="head") + gen "So, how did you prove it to her that it wasn't some of that dank draft?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "She...{w=0.4} *Ahem*...{w=0.4} I allowed her to sniff my chest..." ("soft", "narrow", "base", "down") + gen "You did what?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "What else was I supposed to do?" ("angry", "squint", "worried", "mid") + gen "Good point..." ("base", xpos="far_left", ypos="head") + gen "So, how did it turn out? Did she finally believe what you told her?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I believe so...{w=0.4} At least she confirmed that it wasn't {i}Dizziness Draught{/i}, and sent me on my way..." ("open", "closed", "base", "mid") + gen "So, she didn't confirm what it actually--" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I felt so bad, having to lie to her...{w=0.4} I really would've preferred not to." ("open", "narrow", "worried", "down") + gen "You wanted to tell her the truth?" ("base", xpos="far_left", ypos="head") + gen "Now, I never expected that, especially from you, [name_hermione_genie]!" ("grin", xpos="far_left", ypos="head") + her @ cheeks blush "That's not--{w=0.2} I just don't like being put in a spot where I am forced to--" ("angry", "squint", "worried", "mid") + gen "Very cunning of you, [name_hermione_genie]...{w=0.4} Fifty points to Gryffindor." ("base", xpos="far_left", ypos="head") + $ gryffindor += 50 + her @ cheeks blush "...{w=0.4} Thank you [name_genie_hermione]." ("disgust", "squint", "base", "mid") - menu: - "\"Take it on your tits!\"": - # Cum on shirt - $ _cum_location = "chest" - her "Please cover my tits with your sticky semen! I need it, [name_genie_hermione]!" ("silly", "narrow", "annoyed", "up", ypos="head", flip=False) - nar "Hermione keeps jerking your cock with a smile." - gen "Get ready whore, here comes your reward!" ("angry", xpos="far_left", ypos="head") - her "...{heart}" ("silly", "narrow", "base", "dead") - nar "Hermione leans back, protruding her chest to give you a better target." - - play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed - - call her_chibi_scene("hj_cum_on") - call cum_block - - $ hermione.set_cum(breasts="light", body="light") - - her "{heart}{heart}{heart}" ("silly", "narrow", "worried", "down", xpos="right", ypos="base") - gen "{size=+5}*ARGH*! YES!!! RIGHT between your TITS!{/size}" ("grin", xpos="far_left", ypos="head") - - $ hermione.set_cum(breasts="heavy") - - gen "That's it! All over your tits!" ("base", xpos="far_left", ypos="head") - her "......" ("soft", "narrow", "annoyed", "up") - - call her_chibi_scene("hj_cum_on_done") - call ctc - - her "It's so warm...{heart}" ("grin", "narrow", "base", "dead") - gen "That it is." ("base", xpos="far_left", ypos="head") - - "\"Take it on your face, slut!\"": - # Cum on face - $ _cum_location = "face" - nar "Hermione bends down and holds your cock in front of her face." - gen "Get ready cumslut, I'm going to paint your pretty face white!" ("angry", xpos="far_left", ypos="head") - her "Please do! I need it, [name_genie_hermione]!" ("grin", "narrow", "annoyed", "up", ypos="head", flip=False) - gen "{size=+5}*ARGH*! YES!!!{/size}" ("grin", xpos="far_left", ypos="head") - her "..." ("open_wide_tongue", "narrow", "annoyed", "up") - nar "You erupt onto her, dousing her entire face in thick layers of spunk." - - play music "music/Chipper Doodle v2.ogg" fadein 1 if_changed - call her_chibi_scene("hj_cum_on") - call cum_block - - $ hermione.set_cum(face="light") - - her "*Ahhh* {i}it'shhh sho warm and shticky{/i}.{heart}{heart}{heart}" ("open_wide_tongue", "narrow", "annoyed", "up",xpos="right",ypos="base") - - $ hermione.set_cum(face="heavy", hair="light") - - gen "Yes... I Feel so much better now..." ("grin", xpos="far_left", ypos="head") - her "{size=-2}Me too...{/size}" ("silly", "narrow", "worried", "dead") - - call her_chibi_scene("hj_cum_on_done") - call ctc - - gen "You did great, [name_hermione_genie], excellent performance!" ("grin", xpos="far_left", ypos="head") - gen "But I think it's time for your classes." ("base", xpos="far_left", ypos="head") - her "*Huh*? Classes?" ("silly", "happyCl", "worried", "mid") - her "Oh no, what have I done!!" ("normal", "wide", "worried", "mid") - - if _cum_location == "face": - her "I can't attend classes with your cum on my face!" ("shock", "happyCl", "worried", "mid") - elif _cum_location == "chest": - her "I can't attend classes with your cum on my chest!" ("angry", "happyCl", "worried", "mid") - - gen "Not with that attitude." ("base", xpos="far_left", ypos="head") - gen "I chose where to cum, but it was you who gave me the choice." ("base", xpos="far_left", ypos="head") - gen "Learn to live with the consequences of your actions, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") - her "But..." ("angry", "narrow", "worried", "mid") - gen "You're smart, you'll figure something out." ("base", xpos="far_left", ypos="head") - her "(......am I really, though?)" ("angry", "narrow", "worried", "down") + label .end: show screen blkfade - with d3 + with d5 - nar "You tuck your cock back into your robe." - - call her_chibi("stand", "desk", "base") - call gen_chibi("sit_behind_desk") - with d3 - pause.2 + $ hermione.wear("all") + stop music fadeout 5.0 + pause 1.5 hide screen blkfade - with d3 + with d5 - call bld - gen "I'll see you after classes. You know the drill." ("base", xpos="far_left", ypos="head") - her @ cheeks blush "... Yes, [name_genie_hermione]..." ("soft", "narrow", "annoyed", "down", xpos="right", ypos="base") - - call her_walk("door") - - her "(What am I going to do now?...)" ("annoyed", "happyCl", "low", "dead") + her "If that's all, then I'm off to have a long shower before bed..." ("open", "base", "base", "R") + gen "Go ahead [name_hermione_genie], and goodnight..." ("base", xpos="far_left", ypos="head") + her "Good night [name_genie_hermione]." ("open", "squint", "base", "mid") call her_walk(action="leave") + $ hermione.equip(her_outfit_last) jump end_hermione_event -label hg_pr_cumslut_e1_return: +label hg_pr_cumslut_T5_clothes: + # Cum on body, Slytherin slut catches on to the scent. + $ hermione.equip(her_outfit_default) + $ hermione.set_cum(breasts="light", body="light", crotch="heavy") call her_walk(action="enter", xpos="mid", ypos="base") - #if _cum_location == 1: # TODO: No can do. Requires rewrite. - # Cum under shirt - #her "... I did it, [name_genie_hermione]." ("base", "happy", "base", "mid",xpos="right",ypos="base") - #her "I kept your cum on me all day." ("base", "base", "base", "R") + her "...{w=0.4} I did it [name_genie_hermione]." ("open", "base", "base", "R", xpos="mid", ypos="base", trans=fade) + her "I kept your cum on my body, all day." ("open", "base", "base", "mid") - #menu: - #"\"Fifty points to Gryffindor!\"": - #$ gryffindor += 50 - #her "Thank you [name_genie_hermione], will that be all?" ("soft", "base", "base", "mid") - #gen "Yes [name_hermione_genie], you may leave now." ("base", xpos="far_left", ypos="head") + gen "You say that, but I'd rather see it, and make sure for myself..." ("base", xpos="far_left", ypos="head") + her "Right..." ("soft", "narrow", "base", "down") - #"\"Tell me about your day.\"": - #her "It was a pretty normal day, I had potions class and then transfiguration." ("open", "closed", "base", "mid") - #gen "And do you think that anyone noticed?" ("base", xpos="far_left", ypos="head") - #her "I don't think so [name_genie_hermione]. Ginny Weasley asked me about it during transfiguration class though." ("soft", "base", "base", "mid") - #gen "And what did you tell her?" ("base", xpos="far_left", ypos="head") - #her "I just said that I spilled some {i}Wiggenweld potion{/i} on myself in potions class." ("open", "base", "base", "mid") - #gen "Very cunning of you. Fifty points to Gryffindor." ("base", xpos="far_left", ypos="head") - #$ gryffindor += 50 - #her "Thank you [name_genie_hermione], if that's all I might head to bed." ("soft", "base", "base", "mid") - #gen "Very well, goodnight [name_hermione_genie]." ("base", xpos="far_left", ypos="head") - #her "Good night [name_genie_hermione]." ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("top", "bra") + pause.5 + call ctc - if _cum_location == "bottom": - # Cum on skirt + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("bottom", "panties") + pause.8 - $ hermione.set_cum(crotch="heavy") + gen "*Hmm*...{w=0.4} Yes, that's cum alright...{w=0.4} Either that, or some type of cornstarch mixture..." ("base", xpos="far_left", ypos="head") + her "You could smell it if you like..." ("annoyed", "narrow", "base", "mid") + gen "I'll pass on that for now, but thanks for the offer." ("base", xpos="far_left", ypos="head") + gen "Great job [name_hermione_genie], that's another favour, successfully completed." ("base", xpos="far_left", ypos="head") - her "... I did it [name_genie_hermione]." ("normal", "happyCl", "worried", "mid", xpos="mid", ypos="base", trans=fade) - her "I kept your cum on me all day!" ("angry", "happyCl", "worried", "mid",emote="sweat") - gen "(*Heh*, I would have never expected her to say that out loud...)" ("base", xpos="far_left", ypos="head") + if _events_filtered_completed_all: + menu: + "\"Fifty points to Gryffindor!\"": + $ gryffindor += 50 + her "Thank you [name_genie_hermione]..." ("open", "narrow", "base", "down") - if _events_filtered_completed_all: - menu: - "\"Fifty points to Gryffindor!\"": - $ gryffindor += current_payout - her "Thank you [name_genie_hermione], will that be all?" ("annoyed", "base", "worried", "R") - gen "Yes [name_hermione_genie], you may leave now." ("base", xpos="far_left", ypos="head") + jump hg_pr_cumslut_T5_clothes.end - jump hg_pr_cumslut_e1_return.end - - "\"Tell me about your day.\"": - pass - else: - gen "Tell me about your day, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") - - her "It was a pretty normal day at first. For starters I had potions class and then transfiguration...--" ("open", "base", "worried", "R") - gen "I want you tell me about the deed, not your boring classes." ("base", xpos="far_left", ypos="head") - gen "Did anyone notice the gift I left on you?" ("base", xpos="far_left", ypos="head") - her "Oh..." ("soft", "base", "worried", "mid") - her "I think some people did, [name_genie_hermione]." ("angry", "happyCl", "worried", "mid") - her "I could hear The first years all whispering as I walked past." ("angry", "base", "worried", "down") - gen "And how did you feel?" ("base", xpos="far_left", ypos="head") - her @ cheeks blush "Ashamed, but also a little excited. I just wish that they knew why I was doing this." ("angry", "narrow", "worried", "R") - gen "Speaking of which, fifty points to Gryffindor!" ("base", xpos="far_left", ypos="head") - $ gryffindor += current_payout - her "Oh, right the points, thank you [name_genie_hermione]." ("open", "narrow", "worried", "mid") - her "if that's all I might head to bed." ("normal", "narrow", "worried", "R") - gen "Very well, goodnight [name_hermione_genie]." ("base", xpos="far_left", ypos="head") - her "Good night [name_genie_hermione]." ("upset", "base", "worried", "mid") + "\"Now, tell me about your day.\"": + pass else: - # Cum on hair + gen "Now, tell me about your day." ("base", xpos="far_left", ypos="head") - $ hermione.set_cum(hair="heavy") - - her @ tears mascara "... I did it [name_genie_hermione]." ("upset", "narrow", "base", "dead", xpos="mid", ypos="base", trans=fade) - her @ tears mascara_soft_blink "I kept your cum on me all day." ("upset", "happyCl", "worried", "mid") - - if _events_filtered_completed_all: - menu: - "\"Fifty points to Gryffindor!\"": - $ gryffindor += 50 - $ states.her.mood += 5 - her @ tears mascara_soft "..." ("annoyed", "narrow", "annoyed", "mid") - gen "Well [name_hermione_genie], you may leave now." ("base", xpos="far_left", ypos="head") - her @ tears mascara "*Hmph*..." ("angry", "narrow", "annoyed", "mid", emote="angry") - - jump hg_pr_cumslut_e1_return.end - - "\"Tell me about your day.\"": - pass - else: - gen "Tell me about your day, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") - - $ states.her.mood += 10 - her @ tears mascara_soft_blink "My day..." ("normal", "happyCl", "worried", "mid") - her @ tears mascara_soft_blink "I've never been so ashamed!" ("angry", "happyCl", "worried", "mid",emote="sweat") - gen "Oh? Did your friends treat you poorly?" ("base", xpos="far_left", ypos="head") - her @ tears mascara_soft_blink "No! That's the worst part!" ("scream", "closed", "angry", "mid") - her @ tears mascara_soft_blink "I expected to be an outcast, to sit by myself and not have Ginny or Luna talk to me." ("annoyed", "base", "worried", "R") - her @ tears mascara "But they didn't even acknowledge the fact that I was covered in cum!" ("annoyed", "narrow", "angry", "R") - her @ tears mascara_soft_blink "They acted as if nothing was wrong." ("mad", "happyCl", "worried", "mid") - her @ tears mascara_soft_blink "Well... Maybe except for Luna, she was looking at me odd..." ("mad", "happyCl", "worried", "mid") - her @ tears mascara_soft_blink "At one point, she even tried to take a whiff at me... but Ginny..." ("mad", "happyCl", "worried", "mid") - her @ tears mascara_soft "I tried to provoke a response from Ginny by asking her what she thought of my hair!" ("angry", "base", "base", "mid") - gen "And what was her reaction?" ("base", xpos="far_left", ypos="head") - her @ tears mascara_soft_blink "She said that it suited me!" ("upset", "happyCl", "worried", "mid") - gen "Maybe they're just used to you acting like this." ("base", xpos="far_left", ypos="head") - her @ tears mascara_soft "That's the problem! They think that this slutty persona is who I am now!" ("angry", "base", "worried", "mid") - gen "Would it really be so bad if you let go for once? Take example from your friends." ("base", xpos="far_left", ypos="head") - her @ tears mascara "Let go... You tell me to--" ("angry", "wide", "worried", "mid") - her @ tears mascara "I'm leaving, [name_genie_hermione]." ("upset", "base", "angry", "R") + her "It was a pretty normal day, I had muggle studies and then astronomy." ("open", "squint", "base", "R") + gen "So, do you think that anyone noticed?" ("base", xpos="far_left", ypos="head") + her "I doubt it, [name_genie_hermione]...{w=0.4} It was spread out enough across my body, to not leave any obvious stains." ("open", "closed", "base", "mid") + gen "Oh...{w=0.4} Well that's rather anticlimactic... And somehow also ironic." ("base", xpos="far_left", ypos="head") + her "That said..." ("annoyed", "closed", "base", "mid") + gen "Oh?" ("base", xpos="far_left", ypos="head") + her "I think one of the Slytherin harlots may have caught a whiff of it." ("open", "happy", "base", "R") + gen "A whiff?" ("base", xpos="far_left", ypos="head") + her "Yes, [name_genie_hermione]...{w=0.4} It's quite pungent, after all..." + gen "Perhaps she thought it was a perfume." ("base", xpos="far_left", ypos="head") + her "She definitely knew that the smell wasn't a perfume, [name_genie_hermione]." ("disgust", "narrow", "base", "mid") + her "After all... The Slytherin harlots probably enjoy the scent of semen on the daily." ("grin", "closed", "annoyed", "mid") + gen "Just like a perfume!" ("base", xpos="far_left", ypos="head") + her "Sorry?" ("angry", "squint", "base", "mid") + gen "Just dilute it, throw a couple of French words in the title..." ("base", xpos="far_left", ypos="head") + her "..." ("disgust", "base", "base", "mid") + gen "And there you go... \"Fragrance de la ejaculate\"." ("base", xpos="far_left", ypos="head") + her "That...{w=0.4} Sounds so wrong." ("disgust", "closed", "base", "mid") + gen "Pardon my French." ("base", xpos="far_left", ypos="head") + gen "So, about this Slytherin girl..." ("base", xpos="far_left", ypos="head") + her "Harlot, [name_genie_hermione]." ("open", "narrow", "annoyed", "mid") + gen "Yes, Miss \"Harlot\"." ("base", xpos="far_left", ypos="head") + gen "I assume she confronted you about your scent, and then you let her smell your clothes?" ("base", xpos="far_left", ypos="head") + her "What?! Of course I didn't let her smell my clothes!" ("angry", "squint", "annoyed", "mid") + her "In fact, I didn't let her get anywhere near me!" ("open", "closed", "annoyed", "mid") + her "She was being so obvious when she first picked up the smell, I was able to get out of there before she got close." + gen "Like a bloodhound, tracking down its pray..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("angry", "closed", "annoyed", "mid") + gen "Well then, I better award you your points before we get off track...{w=0.4} Fifty points to Gryffindor!" ("base", xpos="far_left", ypos="head") + $ gryffindor += 50 + her "Thank you [name_genie_hermione]..." ("open", "narrow", "base", "down") label .end: + show screen blkfade + with d5 + + $ hermione.wear("all") + stop music fadeout 5.0 + pause 1.5 + + hide screen blkfade + with d5 + + her "If that's everything, then I better go and get this smell out of my clothes..." ("open", "base", "base", "R") + gen "Go ahead [name_hermione_genie], and goodnight..." ("base", xpos="far_left", ypos="head") + her "Good night [name_genie_hermione]." ("open", "squint", "base", "mid") + call her_walk(action="leave") + $ hermione.equip(her_outfit_last) jump end_hermione_event -label hg_pr_cumslut_e2_return: +label hg_pr_cumslut_T5_hair: + # Cum on hair, Hermione is mad as professor Binns brought it to attention, during History of magic. + $ hermione.equip(her_outfit_default) + $ hermione.set_cum(hair="heavy") call her_walk(action="enter", xpos="mid", ypos="base") - if _cum_location == "legs": - # Cum on legs + her "...{w=0.4} I did it [name_genie_hermione]." ("open", "narrow", "angry", "R", xpos="mid", ypos="base", trans=fade) + her "I kept your cum in my hair, all day." ("open", "narrow", "angry", "R") - $ hermione.set_cum(legs="heavy") + gen "Yes, I can certainly see that, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") - her "... I did it, [name_genie_hermione]." ("annoyed", "happy", "base", "mid", xpos="mid", ypos="base", trans=fade) - her "I kept your cum on me all day." ("normal", "base", "base", "R") + if _events_filtered_completed_all: + menu: + "\"Fifty points to Gryffindor!\"": + $ gryffindor += 50 + her "Thank you [name_genie_hermione]..." ("open", "narrow", "angry", "down") - if _events_filtered_completed_all: - menu: - "\"Good Work!\"": - her "Thank you [name_genie_hermione], will that be all?" ("soft", "base", "base", "mid") - gen "Yes [name_hermione_genie], you may leave now." ("base", xpos="far_left", ypos="head") + jump hg_pr_cumslut_T5_hair.end - jump hg_pr_cumslut_e2_return.end - - "\"Tell me about your day.\"": - pass - - gen "Tell me how your day went." ("base", xpos="far_left", ypos="head") - her "It was a pretty normal day, well, except for Luna..." ("open", "closed", "worried", "mid") - gen "What happened with Miss Lovegood?" ("base", xpos="far_left", ypos="head") - her "She kept trying to tell me that a Cornish pixie had left me a 'present'." ("annoyed", "narrow", "angry", "R") - gen "I have been called many things, but a cornish pixie? That's a first." ("base", xpos="far_left", ypos="head") - her "I didn't know what she was talking about at first. Cornish pixies are nasty little things that would never do anything nice." ("disgust", "narrow", "base", "mid_soft") - gen "(I've walked into that one...)" ("base", xpos="far_left", ypos="head") - gen "Well, what happened afterwards?" ("base", xpos="far_left", ypos="head") - her "I asked her to explain herself, and then she ran a finger up my leg, scooping up some of your cum!" ("angry", "base", "base", "mid_soft") - gen "Really?" ("base", xpos="far_left", ypos="head") - her "That's not all--" ("angry", "narrow", "base", "mid_soft") - her "She then put the slimy finger in her mouth, and gave it a taste!" ("open_tongue", "narrow", "base", "mid_soft") - gen "I don't believe you." ("base", xpos="far_left", ypos="head") - her "Oh believe me, I was just as shocked as you are right now." ("open", "closed", "base", "mid") - gen "I'll say this, you certainly have made this old man very happy." ("grin", xpos="far_left", ypos="head") - her "I'm glad, [name_genie_hermione]..." ("soft", "narrow", "worried", "L") - - elif _cum_location == "chest": - # Cum on shirt - - $ hermione.set_cum(breasts="heavy", body="light") - - her "... I did it, [name_genie_hermione]." ("normal", "happyCl", "worried", "mid", xpos="mid", ypos="base", trans=fade) - her "I kept your cum on me all day." ("angry", "happyCl", "worried", "mid",emote="sweat") - - if _events_filtered_completed_all: - menu: - "\"Good Work!\"": - her "Thank you [name_genie_hermione], will that be all?" ("annoyed", "base", "worried", "R") - gen "Yes [name_hermione_genie], you may leave now." ("base", xpos="far_left", ypos="head") - - jump hg_pr_cumslut_e2_return.end - - "\"Tell me about your day.\"": - pass - - gen "Tell me how your day was." ("base", xpos="far_left", ypos="head") - her "I had Defence against the dark arts class and then Herbology." ("annoyed", "base", "worried", "R") - gen "..." ("base", xpos="far_left", ypos="head") - her "R-right... I'll get to the point." ("grin", "happyCl", "worried", "mid") - her "I think most people noticed the stains, [name_genie_hermione]. I'm not sure if they all knew it was cum, though." ("open", "narrow", "worried", "down") - gen "How did that make you feel?" ("base", xpos="far_left", ypos="head") - her "Cheap... Facing everyone pointing out the stains and me trying to explain them was hard..." ("disgust", "narrow", "worried", "L") - gen "Was it as difficult as making the choice to skip on free points?" ("base", xpos="far_left", ypos="head") - her "I suppose not... As long as it makes you happy." ("open", "narrow", "worried", "mid") - gen "I'm glad to hear it. You are dismissed." ("base", xpos="far_left", ypos="head") + "\"Now, tell me about your day.\"": + pass else: - # Cum on face + gen "Tell me about your day." ("base", xpos="far_left", ypos="head") - $ hermione.set_cum(face="heavy", hair="light") + $ states.her.mood += 10 - her @ tears mascara "... I did it, [name_genie_hermione]." ("normal", "narrow", "base", "mid", xpos="mid", ypos="base", trans=fade) - her @ tears mascara "I kept your cum on my face...{w=0.8} all day." ("soft", "narrow", "low", "mid") + her "My day..." ("open", "narrow", "base", "down") + her "It was the worst day of my life!" ("angry", "base", "annoyed", "mid") + her "I've never felt so ashamed!" ("open", "closed", "annoyed", "mid") + gen "Did your friends treat you poorly?" ("base", xpos="far_left", ypos="head") + her "That's not--{w=0.2} I'm talking about the cum in my hair!" ("angry", "base", "angry", "mid") + gen "I see...{w=0.4} So, you didn't manage to keep it hidden, I take it?" ("base", xpos="far_left", ypos="head") + her "How could I have ever thought that I'd be able to keep this hidden..." ("open", "squint", "angry", "up") + gen "It wasn't Severus who noticed it, was it?" ("base", xpos="far_left", ypos="head") + her "I wish!" ("annoyed", "base", "annoyed", "mid") + gen "Really?" ("base", xpos="far_left", ypos="head") + her "At least Snape wouldn't have dared to bring attention to it." ("open", "base", "angry", "R") + her "No, it was Professor Binns, during our last lesson of today...{w=0.4} History of magic." ("open", "closed", "annoyed", "mid") + her "I had managed to stay clear of any suspicion all day, and figured that I was finally safe, since most of the other students sleep during his lectures." ("annoyed", "base", "angry", "R") + her "But towards the end of the lecture, somehow he spotted it, and started droning on about ghost ectoplasm." ("angry", "base", "worried", "mid") + gen "Ectoplasm?" ("base", xpos="far_left", ypos="head") + her "He kept pointing towards my hair, and telling us about things like its \"historical significance\", and so on." ("open", "base", "worried", "mid") + gen "So, the other students--" ("base", xpos="far_left", ypos="head") + her @ tears soft_blink "They all saw that my hair was covered in semen!" ("angry", "happyCl", "worried", "mid") #starts crying + gen "But, don't you think they assumed--" ("base", xpos="far_left", ypos="head") + her @ tears mascara_crying "Who knows what they assumed! I mean, there's even a men's bathroom close-by, perhaps they thought--" ("angry", "base", "annoyed", "mid") #mascara + gen "*Ahem*...{w=0.4} You've got something on your face, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") + gen "Would you like me to--" ("base", xpos="far_left", ypos="head") + her @ tears mascara_crying "Semen, is it? No doubt it's found its way down to my face!" ("annoyed", "base", "annoyed", "mid") + gen "No, it's just--" ("base", xpos="far_left", ypos="head") + her @ tears mascara_crying "*Hmph*!" ("upset", "base", "angry", "mid") - if _events_filtered_completed_all: - menu: - "\"Good Work!\"": - her @ tears mascara "..." ("annoyed", "narrow", "base", "dead") - gen "Well [name_hermione_genie], you may leave now." ("base", xpos="far_left", ypos="head") - her @ tears mascara "Did I at least make you happy?" ("open", "narrow", "annoyed", "mid") - gen "You did." ("base", xpos="far_left", ypos="head") - her @ tears mascara "I'm glad..." ("annoyed", "closed", "base", "mid") + label .end: - jump hg_pr_cumslut_e2_return.end + show screen blkfade + with d5 - "\"Tell me about your day.\"": - pass + $ hermione.wear("all") + stop music fadeout 5.0 + pause 1.5 - gen "Are you alright?" ("base", xpos="far_left", ypos="head") - her @ tears mascara "What do you think.." ("angry", "narrow", "worried", "mid") - gen "......Could you tell me what happened?" ("base", xpos="far_left", ypos="head") - her @ tears mascara "You want to know what happened...?" ("angry", "happy", "angry", "mid") - her @ tears mascara "Oh, you know, it was a completely normal day!" ("angry", "narrow", "angry", "mid") - gen "Really? Nothing strange happened at all?" ("base", xpos="far_left", ypos="head") - her @ tears mascara "No. Everyone treated me how I deserved to be treated." ("scream", "closed", "angry", "mid") - gen "And how's that?" ("base", xpos="far_left", ypos="head") - her @ tears mascara "Like a slut..." ("disgust", "base", "angry", "mid") - her @ tears mascara "Boys catcalled me..." ("annoyed", "narrow", "angry", "R") - her @ tears mascara "Girls have mocked me... Put me down..." ("mad", "closed", "worried", "mid") - her @ tears mascara_soft "Snape made me stand in front of others during one of his classes." ("angry", "base", "base", "mid") - gen "What for? Did he ask you to do something?" ("base", xpos="far_left", ypos="head") - her @ tears mascara_soft_blink "No, he asked nothing of me... He just made me stood there, with everyone looking at me..." ("angry", "happyCl", "worried", "mid") - gen "Did your friends say anything?" ("base", xpos="far_left", ypos="head") - her @ tears mascara_soft "That's the worst part. They said nothing." ("angry", "base", "worried", "mid") - her @ tears mascara_soft_blink "It's like they don't even care what I'm doing for them." ("angry", "happyCl", "worried", "mid") - gen "......" ("base", xpos="far_left", ypos="head") - her @ tears mascara "......" ("annoyed", "closed", "worried", "mid") - her @ tears mascara_soft "Did I...{w=0.5} make you happy at least?" ("soft", "narrow", "worried", "mid") - gen "You did more than that, you've made me very proud." ("base", xpos="far_left", ypos="head") - her "Really?" ("base", "narrow", "worried", "mid", tears="mascara") - gen "Truly." ("base", xpos="far_left", ypos="head") + hide screen blkfade + with d5 - her "(............)" ("soft", "narrow", "worried", "mid") - gen "Do you have something more to say?" ("base", xpos="far_left", ypos="head") - her @ cheeks blush "N-no, have a goodnight, [name_genie_hermione]." ("open", "narrow", "worried", "R") + her "If you'll excuse me...{w=0.4} I'm going to go and clean this mess off my head!" ("open", "base", "annoyed", "up") + gen "Alright then...{w=0.4} Just make sure to use warm water, and--" ("base", xpos="far_left", ypos="head") + her "*Hmph*!" ("annoyed", "base", "annoyed", "mid") + + call her_walk(action="leave") + + $ hermione.equip(her_outfit_last) + jump end_hermione_event + +label hg_pr_cumslut_T6_crotch: + # Cum on crotch, Luna touches it. + $ hermione.equip(her_outfit_default) + $ hermione.set_cum(crotch="heavy") + + call her_walk(action="enter", xpos="mid", ypos="base") + + her "...{w=0.4} I did it, [name_genie_hermione]." ("open", "base", "base", "mid", xpos="mid", ypos="base", trans=fade) + her "I kept your cum between my legs, all day." ("soft", "narrow", "base", "down") + gen "Great, let me see it."("base", xpos="far_left", ypos="head") + + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("bottom", "stockings") + pause.5 + call ctc + + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("panties") + pause.5 + call ctc + + gen "*Hmm*...{w=0.4} Very good [name_hermione_genie]...{w=0.4} It appears to still be there." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Ehm*...{w=0.4} That's good, I suppose..." ("base", "narrow", "base", "down") + + if _events_filtered_completed_all: + menu: + "\"Fifty points to Gryffindor!\"": + $ gryffindor += 50 + her "Thank you [name_genie_hermione]..." ("open", "narrow", "base", "down") + + jump hg_pr_cumslut_T6_crotch.end + + "\"Now, tell me about your day.\"": + pass + else: + gen "Tell me about your day, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") + + her @ cheeks blush "It was a pretty normal day, well, except for Luna..." ("annoyed", "narrow", "base", "down") + gen "Loony?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Luna Lovegood, [name_genie_hermione]..." ("open", "base", "base", "mid") + gen "What happened to Miss Lovegood?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Well...{w=0.4} I figured, since I was going to let someone notice it..." ("angry", "narrow", "base", "R") + her @ cheeks blush "That Luna would be the perfect person to show it to...{w=0.4} As she'd be the least likely person to judge me..." ("angry", "base", "base", "mid") + gen "Is that so?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Yes, [name_genie_hermione]...{w=0.4} Even with her--{w=0.2} Unique personality..." ("open", "happy", "base", "mid") + her @ cheeks blush "She's never once done anything malicious towards me...{w=0.4} Not on purpose anyway..." ("open", "base", "base", "mid") + her @ cheeks blush "That said...{w=0.4} She's not always able to hold back, which caused me a bit of trouble today..." ("soft", "narrow", "base", "R") + gen "Do tell..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Well, we were sitting close to each other in the library, when I decided it was a good time to attempt completing today's favour..." ("open", "base", "base", "mid") + her @ cheeks blush "Knowing her, she'll do anything to try and be helpful, so I thought that if I dropped my quill on the ground...{w=0.4} Then she'd be able to see up my skirt." ("open", "base", "base", "mid") + her @ cheeks blush "So, I lifted up my skirt a little, and then dropped my quill." ("open", "happy", "base", "mid") + her @ cheeks blush "Of course, as soon as it hit the ground, she immediately dove down for it." ("open", "closed", "base", "mid") + gen "Let me guess...{w=0.4} She saw the cum and immediately gasped, which brought the attention of the other students." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Ehm*...{w=0.4} Well, you're half right [name_genie_hermione]...{w=0.4} She spotted it, but she wasn't the one who brought the attention of the other students..." ("angry", "narrow", "base", "mid") + gen "Oh?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Well...{w=0.4} She was down there for quite a bit of time, and just as I started wondering what was going on--" ("angry", "narrow", "base", "down") + her @ cheeks blush "She suddenly ran a finger between my legs!" ("disgust", "base", "base", "mid") + gen "*Heh-heh*...{w=0.4} Such a curious girl, that one." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Yes...{w=0.4} Almost to a fault..." ("disgust", "squint", "base", "R") + gen "So, do you think anyone realised what had happened?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Ehm*...{w=0.4} I'm not sure [name_genie_hermione]...{w=0.4} They most certainly heard my reaction..." ("annoyed", "squint", "base", "mid") + her @ cheeks blush "At the very least, they would've seen Luna, down on the floor, between my legs..." ("angry", "narrow", "base", "mid") + gen "And you, lifting your skirt up?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Well, I quickly let go of it when I gasped...{w=0.4} So, I hope not." ("angry", "narrow", "base", "mid") + gen "What about Miss Lovegood? Did she voice her discovery?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "No, I grabbed her by her hand and dragged her out of there, before she could cause any ruckus..." ("open", "happy", "base", "mid") + gen "...{w=0.4} Well, that's not going to help if you wanted to avoid any rumours..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I...{w=0.4} I didn't really think of that..." ("disgust", "base", "base", "mid") + her @ cheeks blush "I was more concerned about getting the cum off of her grubby fingers..." ("disgust", "narrow", "base", "down") + gen "I see...{w=0.4} You wanted to leave some for yourself, didn't you..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "...{w=0.4} Do you truly believe that the amount she had on her finger would even make a dent in the mess that you had made?" ("disgust", "narrow", "base", "mid") + gen "Of course not...{w=0.4} I just wanted you to say it." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("base", "narrow", "worried", "R") + gen "So, how many points did we decide on? Forty was it?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I...{w=0.4} Yes, I think so..." ("open", "base", "base", "mid") + $ gryffindor += 40 + gen "In that case...{w=0.4} Forty points to Gryffindor." ("base", xpos="far_left", ypos="head") + her "...{w=0.4} Thank you, [name_genie_hermione]." ("base", "base", "base", "mid") + + label .end: + + show screen blkfade + with d5 + + $ hermione.wear("all") + stop music fadeout 5.0 + pause 1.5 + + hide screen blkfade + with d5 + + her "*Hmm*... I better go clean this off, or I won't have enough time before curfew..." ("open", "base", "base", "R") + gen "Go ahead [name_hermione_genie], and goodnight..." ("base", xpos="far_left", ypos="head") + her "Good night [name_genie_hermione]." ("open", "squint", "base", "mid") + + call her_walk(action="leave") + + $ hermione.equip(her_outfit_last) + jump end_hermione_event + +label hg_pr_cumslut_T6_top: + # Cum under top, Tonks smells it. + $ hermione.equip(her_outfit_default) + $ hermione.set_cum(breasts="heavy", body="light") + + call her_walk(action="enter", xpos="mid", ypos="base") + + her "...{w=0.4} I did it, [name_genie_hermione]." ("open", "base", "base", "mid", xpos="mid", ypos="base", trans=fade) + her "I've kept your cum under my top, all day." ("soft", "narrow", "base", "down") + + gen "I'll be the judge of that..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "[name_genie_hermione]?" ("open", "base", "base", "mid") + gen "Remove your top and bra for me, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Oh...{w=0.4} Right..." ("base", "narrow", "base", "down") + + play sound "sounds/cloth_sound3.ogg" + $ hermione.strip("top", "bra") + pause.5 + + gen "*Hmm*...{w=0.4} Yes, that's cum alright..." ("base", xpos="far_left", ypos="head") + gen "Good job [name_hermione_genie], you've completed your task with flying colours." ("base", xpos="far_left", ypos="head") + + if _events_filtered_completed_all: + menu: + "\"Fifty points to Gryffindor!\"": + $ gryffindor += 50 + her "Thank you [name_genie_hermione]..." ("open", "narrow", "base", "down") + + jump hg_pr_cumslut_T6_top.end + + "\"Now, tell me about your day.\"": + pass + else: + gen "Now, why don't you tell me a bit about your day." ("base", xpos="far_left", ypos="head") + + gen "Did you make sure that someone noticed?" ("base", xpos="far_left", ypos="head") + her "*Hmm*...{w=0.4} Possibly..." ("open", "happy", "base", "mid") + gen "Possibly?" ("base", xpos="far_left", ypos="head") + her "I think professor Tonks may have realised something, during today's \"Defence Against the Dark Arts\" class." ("open", "squint", "base", "mid") + gen "Truly? She doesn't have some magical essence detector, does she? That would explain quite a few things." ("base", xpos="far_left", ypos="head") + her "No, that's not it...{w=0.4} Well, she might have...{w=0.4} But she wasn't using anything like that today, at least." ("open", "happy", "base", "R") + gen "Yet she still managed to...{w=0.4} Well, now you've got me even more curious..." ("base", xpos="far_left", ypos="head") + her "I suppose I'll just tell you... Although it requires a bit of a lead up." ("soft", "squint", "base", "mid") + gen "Go on..." ("base", xpos="far_left", ypos="head") + her "Well...{w=0.4} We have been taking turns, reading through the chapters of \"The Dark Forces: A Guide to Self-Protection\" out loud for the other students." ("open", "base", "base", "mid") + her "Today happened to be my turn, and we had just reached the chapter about werewolves, where the author talked about their methods of overpowering their prey." ("base", "base", "base", "mid") + her "While I was focused on reading, Professor Tonks was patrolling the class, walking by the rows of seats, making sure no one was misbehaving." ("open", "base", "base", "R") + her "Everything was moving along as usual, until..." ("disgust", "squint", "base", "R") + gen "Yes?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Until I reached the section that talked about how difficult it is to defend yourself against a werewolf attack." ("open", "happy", "base", "R") + her @ cheeks blush "It was at that point that Professor Tonks stopped right behind me." ("soft", "narrow", "base", "down") + her @ cheeks blush "She then pushed herself up against my back, and she either scoffed or giggled as I went through the list of possible werewolf deterrents." ("soft", "narrow", "base", "down") + her @ cheeks blush "Once the class had finished, she held me back, and asked if I would like to learn about a true and tested method on how to prevent a werewolf attack." ("open", "happy", "base", "mid") + gen "You obliged, I presume?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I did! Although I was a little bit confused at first as to why she wouldn't have just taught the whole class..." ("angry", "squint", "base", "mid") + her @ cheeks blush "Of course, my question was soon answered, once she brought out one of her notebooks..." ("soft", "narrow", "base", "down") + gen "Go on..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Well..." ("angry", "narrow", "base", "down") + her @ cheeks blush "Her notes went into vivid detail, talking about pheromones and how their smell affects the behaviour of a werewolf..." ("angry", "closed", "base", "mid") + gen "I see...{w=0.4} Very interesting..." ("base", xpos="far_left", ypos="head") + gen "Hold on...{w=0.4} What does all of this have to do with--{w=0.2} Oh, I see..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Yes, I believe that the main reason why she asked me to stay was because she had smelled something similar on me..." ("angry", "narrow", "base", "mid") + gen "So, you think that with her experience, she recognized the smell?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Yes, I believe that may have been the case..." ("open", "closed", "base", "mid") + gen "A semen demon, that one is...{w=0.4} She probably got drawn towards my manly scent, and couldn't help herself--" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "[name_genie_hermione]!" ("angry", "squint", "worried", "mid") + her @ cheeks blush "M--{w=0.2} Maybe she didn't know what it was! Yes, she probably asked me to stay because of my interest in learning!" ("disgust", "base", "worried", "down") + gen "Interest in learning, you say?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Yes [name_genie_hermione]! She must've just thought--" ("angry", "base", "base", "mid") + gen "Well, that's disappointing... Then perhaps I've been a bit too generous with the amount of points for this favour..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "The amount--{w=0.2} Oh wait!" ("angry", "base", "base", "stare") + her @ cheeks blush "No, she definitely knew [name_genie_hermione]! I'm sure of it!" ("grin", "base", "worried", "mid") + gen "Really? You didn't sound so certain, just a moment ago..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "No, she definitely knew! I could tell she was sniffing me while standing behind me, as I was reading!" ("grin", "happyCl", "worried", "mid") + gen "I knew it...{w=0.4} My manly musk is irresistible to any woman!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("grin", "narrow", "worried", "down") #Nervous smile + $ gryffindor += 50 + gen "Very well [name_hermione_genie], I shall award you the points...{w=0.4} Fifty points to Gryffindor!" ("base", xpos="far_left", ypos="head") + her "*Phew*... Thank you, [name_genie_hermione]..." ("base", "base", "base", "mid") + + label .end: + + show screen blkfade + with d5 + + $ hermione.wear("all") + stop music fadeout 5.0 + pause 1.5 + + hide screen blkfade + with d5 + + her "If that's all, then I should probably go and clean this off..." ("open", "base", "base", "R") + gen "Go ahead [name_hermione_genie], and goodnight..." ("base", xpos="far_left", ypos="head") + her "Good night [name_genie_hermione]." ("open", "squint", "base", "mid") + + call her_walk(action="leave") + + $ hermione.equip(her_outfit_last) + jump end_hermione_event + +label hg_pr_cumslut_T6_face: + # Cum on face + $ hermione.equip(her_outfit_default) + $ hermione.set_cum(face="heavy", hair="light") + + call her_walk(action="enter", xpos="mid", ypos="base") + + her @ tears mascara "...{w=0.4} I did it, [name_genie_hermione]." ("normal", "narrow", "base", "mid", xpos="mid", ypos="base", trans=fade) + her @ tears mascara "I kept your cum on my face...{w=0.8} all day." ("soft", "narrow", "worried", "mid") + + if _events_filtered_completed_all: + menu: + "\"Good Work!\"": + her @ tears mascara "..." ("annoyed", "narrow", "base", "dead") + gen "Well then... You may leave now." ("base", xpos="far_left", ypos="head") + her @ tears mascara "Did I complete my task?" ("open", "narrow", "annoyed", "mid") + gen "You did... Fifty points to Gryffindor!" ("base", xpos="far_left", ypos="head") + $ gryffindor += 50 + her @ tears mascara "I'm glad..." ("annoyed", "closed", "base", "mid") + + jump hg_pr_cumslut_T6_face.end + + "\"Tell me about your day.\"": + pass + + gen "Are you alright?" ("base", xpos="far_left", ypos="head") + her @ tears mascara "What do you think..." ("angry", "narrow", "worried", "mid") + gen "...... Could you tell me what happened?" ("base", xpos="far_left", ypos="head") + her @ tears mascara "You want to know what happened...?" ("angry", "happy", "angry", "mid") + her @ tears mascara "Oh, you know, it was a completely normal day!" ("angry", "narrow", "angry", "mid") + gen "Really? Nothing strange happened at all?" ("base", xpos="far_left", ypos="head") + her @ tears mascara "No. Everyone treated me how I deserved to be treated." ("scream", "closed", "angry", "mid") + gen "And how's that?" ("base", xpos="far_left", ypos="head") + her @ tears mascara "Like a slut..." ("disgust", "base", "angry", "mid") + her @ tears mascara "The boys catcalled me..." ("annoyed", "narrow", "angry", "R") + her @ tears mascara "The girls mocked me... Put me down..." ("mad", "closed", "worried", "mid") + her @ tears mascara_soft "Snape smirked and stopped me as I tried to rush past him in the dungeon." ("angry", "base", "base", "mid") + gen "What for? Did he ask you to do something?" ("base", xpos="far_left", ypos="head") + her @ tears mascara_soft_blink "No, he asked nothing of me... He just made me stand there, while he stared at my face..." ("angry", "happyCl", "worried", "mid") + gen "What about your friends?" ("base", xpos="far_left", ypos="head") + her @ tears mascara_soft "My... My friends..." ("angry", "base", "worried", "mid") + her @ tears mascara_soft_blink "I hope they'll appreciate what I'm doing for them." ("angry", "happyCl", "worried", "mid") + gen "That's not what I was---" ("base", xpos="far_left", ypos="head") + her @ tears mascara "......" ("annoyed", "closed", "worried", "mid") + gen "Ahem..." ("base", xpos="far_left", ypos="head") + $ gryffindor += 50 + gen "Very well [name_hermione_genie], I shall award you the points...{w=0.4} Fifty points to Gryffindor!" ("base", xpos="far_left", ypos="head") + her @ tears mascara "Thank you, [name_genie_hermione]..." ("open", "closed", "worried", "mid") + + label .end: + + show screen blkfade + with d5 + + $ hermione.wear("all") + stop music fadeout 5.0 + pause 1.5 + + her @ tears mascara "" ("soft", "narrow", "worried", "mid") + + hide screen blkfade + with d5 + + her @ tears mascara "(............)" ("soft", "narrow", "worried", "down") + gen "Something on your mind, [name_hermione_genie]?" ("base", xpos="far_left", ypos="head") + her @ tears mascara "N-no, have a good night, [name_genie_hermione]." ("open", "narrow", "worried", "R") gen "Goodnight, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") - $ hermione.set_face(tears=False) - - label .end: - call her_walk(action="leave") + $ hermione.equip(her_outfit_last) jump end_hermione_event -label hg_pr_cumslut_e3_return: + +label hg_pr_cumslut_T6_hair: + # Cum on hair, Hippogriff licks it. + $ hermione.equip(her_outfit_default) + $ hermione.set_cum(hair="light") call her_walk(action="enter", xpos="mid", ypos="base") - if _cum_location == "chest": - # Cum on shirt + her "...{w=0.4} I did it, [name_genie_hermione]." ("open", "happy", "base", "mid", xpos="mid", ypos="base", trans=fade) + her "I kept your cum in my hair...{w=0.4} All day." ("soft", "closed", "base", "mid") + gen "Yes, I can certainly see that..." ("base", xpos="far_left", ypos="head") - $ hermione.set_cum(breasts="heavy") + if _events_filtered_completed_all: + menu: + "\"Fifty points to Gryffindor!\"": + $ gryffindor += 50 + her "Thank you [name_genie_hermione]..." ("open", "narrow", "base", "down") - nar "Hermione returns to your office, her breasts still stained with the remains of your mighty load." - her "......[name_genie_hermione]." ("annoyed", "squint", "angry", "R", xpos="mid", ypos="base", trans=fade) - gen "Oh, did you finish your task--" ("base", xpos="far_left", ypos="head") - her "What do you think?!" ("angry", "happyCl", "worried", "mid", emote="sweat") - gen "(*Hmm*)" ("base", xpos="far_left", ypos="head") + jump hg_pr_cumslut_T6_hair.end - if _events_filtered_completed_all: - menu: - "\"Good Work!\"": - her "......" ("base", "base", "base", "mid") - gen "You may leave now." ("base", xpos="far_left", ypos="head") - - jump hg_pr_cumslut_e3_return.end - - "\"Tell me about your day.\"": - pass - - gen "Tell me what's up." ("base", xpos="far_left", ypos="head") - her "Your school sucks, that's what is up!" ("annoyed", "narrow", "angry", "R") - gen "I guess school sucks for some more, while others do the sucking." ("grin", xpos="far_left", ypos="head") - her "...*glares*..." ("annoyed", "narrow", "annoyed", "mid") - gen "*Ahem* Please, go on." ("base", xpos="far_left", ypos="head") - her "After I left your office, I was close to having a panic attack, so I rushed towards the bathrooms." ("annoyed", "narrow", "angry", "R") - her "Unfortunately for me, the bathrooms were occupied by a bunch of sluts from Slytherin..." ("open", "narrow", "angry", "R") - gen "Interesting." ("base", xpos="far_left", ypos="head") - her "So, as soon as I entered, they noticed my state of disarray... And the white stains on my chest." ("angry", "narrow", "angry", "down") - her "I tried to hide it, and rush inside one of the stalls, but as soon as tried to go past them--" ("open", "narrow", "angry", "R") - her "--one of them grabbed me by the arm, and asked me if I blew a Gallopogriff, because, here I quote--" ("open", "narrow", "worried", "L") - her "\"nobody cums that much\"..." ("annoyed", "narrow", "angry", "mid") - gen "(Little do they know...)" ("base", xpos="far_left", ypos="head") - gen "What happened then?" ("base", xpos="far_left", ypos="head") - her "You won't believe it..." ("angry", "narrow", "angry", "R") - gen "Try me." ("base", xpos="far_left", ypos="head") - her "She... She started a conversation with me." ("upset", "narrow", "angry", "mid") - gen "That's all? She just wanted to have a chat with you?" ("base", xpos="far_left", ypos="head") - her "What do you mean 'that's all'?" ("open", "happy", "angry", "mid") - her "Me, a Gryffindor, chit-chatting with the enemy?!" ("angry", "happy", "angry", "mid") - gen "I think you're exaggerating a little..." ("base", xpos="far_left", ypos="head") - gen "She's still one of my students, you know." ("base", xpos="far_left", ypos="head") - her "True... But still..." ("annoyed", "narrow", "angry", "R") - gen "Anyway, what happened next?" ("base", xpos="far_left", ypos="head") - her "Well... I was so shooked that I didn't really know what to do so..." ("open", "narrow", "angry", "mid") - her @ cheeks blush "I went with the flow, and skipped class." ("annoyed", "narrow", "angry", "R") - gen "You \"went with the flow\", *huh*?" ("base", xpos="far_left", ypos="head") - her @ cheeks blush "Y-yes, that's one of the expressions I learned from our interaction." ("annoyed", "narrow", "low", "R") - gen "Sounds to me like you've had a positive interaction with one of the Slytherins." ("base", xpos="far_left", ypos="head") - her @ cheeks blush "That may be true, but she's still a Slytherin, and one good egg doesn't make the others smell any less!" ("angry", "narrow", "angry", "R") - gen "It looks like you're deflecting the fact that not all Slytherins are bad, but if you say so." ("base", xpos="far_left", ypos="head") - her "*Hmph*..." ("annoyed", "narrow", "angry", "R") - gen "I think I've heard enough for now." ("base", xpos="far_left", ypos="head") - gen "Dismissed." ("base", xpos="far_left", ypos="head") + "\"Now, tell me about your day.\"": + pass else: - # Cum on face + gen "Tell me about your day, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") - $ hermione.set_cum(face="heavy", hair="light") - - nar "Hermione returns to your office, her face caked with patches of cum." - her @ cheeks blush "I did it, [name_genie_hermione]." ("angry", "happy", "base", "down", xpos="mid", ypos="base", trans=fade) - her @ cheeks blush "I kept your cum on me all day." ("open", "narrow", "base", "R") - - if _events_filtered_completed_all: - - menu: - "\"Good Work!\"": - her "Thank you, [name_genie_hermione]. Is that everything?" ("soft", "happy", "base", "R") - gen "Yes [name_hermione_genie], you can go clean up now." ("base", xpos="far_left", ypos="head") - - jump hg_pr_cumslut_e3_return.end - - "\"Tell me about your day.\"": - pass - - her @ cheeks blush "As for my day..." ("upset", "happy", "base", "R") - her @ cheeks blush "It was a normal day [name_genie_hermione]. Well. Whatever the new normal is for me now." ("soft", "narrow", "annoyed", "R") - her @ cheeks blush "I got called names again, and some of the boys asked me if I wanted \"a refill\"." ("open", "narrow", "base", "L") - her @ cheeks blush "Cho Chang has caught a glimpse of me before class, and started laughing..." ("angry", "narrow", "worried", "down") - gen "And how did that make you feel?" ("base", xpos="far_left", ypos="head") - her @ cheeks blush "Embarrased..." ("disgust", "narrow", "base", "mid") - gen "Would it help knowing she went through the same thing?" ("base", xpos="far_left", ypos="head") - her "D-did she?" ("shock", "base", "worried", "mid") - gen "You know me. What do you think?" ("base", xpos="far_left", ypos="head") - her "... I guess that's a yes." ("grin", "narrow", "annoyed", "mid") - her "I'll throw it at her face the next time I see her! The slut will never see it coming!" ("grin", "narrow", "annoyed", "up") - gen "(I hope a little competition between them doesn't hurt...)" ("base", xpos="far_left", ypos="head") - gen "I think we're done here. Good work, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") - her "Thank you, [name_genie_hermione]." ("grin", "happy", "worried", "mid") + gen "Did anything noteworthy happen?" ("base", xpos="far_left", ypos="head") + her "Well..." ("disgust", "base", "base", "R") + her @ cheeks blush "Not really... Today was completely normal." ("upset", "squint", "base", "R") + gen "Truly? Nothing strange happened at all?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Ehm*...{w=0.4} No..." ("angry", "squint", "worried", "R") + gen "Somehow I don't believe you..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "How do you--" ("angry", "base", "worried", "mid") + gen "Well, your tone, for one." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Oh..." ("disgust", "happy", "base", "mid") + gen "And you also appear to have less cum in your hair than when you left my office..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Alright, fine, something did happen..." ("disgust", "narrow", "worried", "down") + gen "Great, and I assume someone took notice?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Ehm*...{w=0.4} Some... thing noticed, yes..." ("soft", "narrow", "worried", "R") + gen "\"Some... thing\", [name_hermione_genie]?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Yes [name_genie_hermione]... To be honest, I don't even know where to begin..." ("soft", "happy", "base", "mid") + gen "Well, now I'm even more curious..." ("base", xpos="far_left", ypos="head") + gen "Just start at the beginning." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Alright... Well...{w=0.4} In the morning, we had muggle studies..." ("open", "narrow", "base", "down") + her @ cheeks blush "We were going over muggle fashion, so I used that oportunity to cover my head with an old-fashioned top-hat..." ("open", "base", "base", "mid") + her @ cheeks blush "I even managed to convince the teacher to let me keep it, and I wore it, all throughout lunch and until our next lesson." ("angry", "narrow", "base", "down") + gen "You wore a top-hat during lunch?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I...{w=0.4} Yes..." ("disgust", "narrow", "base", "mid") + gen "*Heh*...{w=0.4} That must've looked so silly!" ("grin", xpos="far_left", ypos="head") + her @ cheeks blush "[name_genie_hermione]!" ("angry", "narrow", "angry", "mid") + gen "Sorry...{w=0.4} Go on..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Once the lunch break finished, we had \"Care of magical creatures\"...{w=0.4} Which is when things took a turn..." ("angry", "squint", "worried", "R") + gen "Oh no..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "What do you--{w=0.2} No, gross! Nothing like that happened, [name_genie_hermione], I can assure you!" ("angry", "base", "worried", "mid") + gen "So, you're not telling me that some creature licked the cum off your hair?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Oh...{w=0.4} Yes, that is what happened..." ("disgust", "squint", "base", "mid") + gen "What did you think I was talking--" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Nothing!" ("angry", "happyCl", "base", "mid") + gen "..." ("base", xpos="far_left", ypos="head") + gen "So...{w=0.4} Would you like to elaborate?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Not in particular..." ("angry", "narrow", "base", "R") + menu: + "\"Will you, though?\"": + her @ cheeks blush "*Ugh*...{w=0.4} Fine..." ("disgust", "narrow", "base", "mid") + her @ cheeks blush "We were working with hippogriffs today..." ("open", "closed", "base", "mid") + her @ cheeks blush "As you already know, with hippogriffs, you're meant to show politeness before mounting them." ("open", "happy", "base", "R") + gen "Yes...{w=0.4} As any wizard should know." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Any--{w=0.2} I'm talking about riding it!" ("angry", "narrow", "angry", "mid") + gen "..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "On its back!" ("open", "base", "angry", "mid") + gen "Bareback?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Argh*...{w=0.4} I can't believe how dirty your mind is!" ("open", "closed", "annoyed", "mid") + gen "I've not said anything [name_hermione_genie]...{w=0.4} You're the one making assumptions." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "But, you said...{w} Well, I suppose you didn't..." ("angry", "narrow", "base", "down") + gen "So, you removed the top-hat, and bowed to this creature, and then it licked some cum off your hair?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Yes [name_genie_hermione]...{w=0.4} That's precisely what happened." ("angry", "narrow", "base", "down") + gen "So, you're telling me that there's saliva in your hair?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Yes [name_genie_hermione]..." ("open", "narrow", "base", "down") + gen "Gross!" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "What do you mean?! How's that any different to having just cum in your hair!?" ("angry", "narrow", "angry", "mid") + gen "Cum...{w=0.4} Mixed with saliva of some creature..." ("base", xpos="far_left", ypos="head") + gen "You're lucky that nobody used an identify spell on it... That would've been hard to explain." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "A what, spell?" ("disgust", "narrow", "base", "mid") + gen "I suppose they would've had to touch it for that...{w=0.4} Anyway, I think I've heard enough, for today...{w=0.4} Unless you've got more to tell me?" ("base", xpos="far_left", ypos="head") + "\"Alright then...\"": + gen "I suppose I've heard enough, for today...{w=0.4} Unless you've got anything more to tell me?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "*Ehm*...{w=0.4} No, that's about it." ("soft", "squint", "base", "R") + gen "*Hmm*...{w=0.4} Well, that's unfortunate..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "[name_genie_hermione]?" ("soft", "base", "base", "mid") + gen "I thought you would've been able to complete any task I set for you by now..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "But, I thought I did--" ("angry", "base", "base", "mid") + gen "You were supposed to make sure that \"someone\" noticed it...{w=0.4} Not \"some thing\", [name_hermione_genie]..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "...{w} I suppose I can't argue against that logic..." ("disgust", "narrow", "base", "down") + gen "Better luck next time, [name_hermione_genie]." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Next time..." ("angry", "narrow", "base", "down") + her @ cheeks blush "Alright then..." ("open", "narrow", "base", "down") label .end: + show screen blkfade + with d5 + + $ hermione.wear("all") + stop music fadeout 5.0 + pause 1.5 + + hide screen blkfade + with d5 + + her "If that's all, then I better go clean my hair..." ("open", "base", "base", "R") + gen "Go ahead [name_hermione_genie], and goodnight..." ("base", xpos="far_left", ypos="head") + her "Good night [name_genie_hermione]." ("open", "squint", "base", "mid") + call her_walk(action="leave") + $ hermione.equip(her_outfit_last) jump end_hermione_event + diff --git a/game/scripts/characters/hermione/events/tentacles.rpy b/game/scripts/characters/hermione/events/tentacles.rpy index c10ba8f1..5be634bf 100644 --- a/game/scripts/characters/hermione/events/tentacles.rpy +++ b/game/scripts/characters/hermione/events/tentacles.rpy @@ -13,20 +13,20 @@ label tentacle_scene_intro: $ d_flag_03 = False label .spell: if d_flag_01 and d_flag_02 and d_flag_03: - jump .after_spell + jump .after_spell menu: - "\"Open Sesame!\"" if not d_flag_01: - $ d_flag_01 = True - gen "...{w=0.8} Guess not..." ("base", xpos="far_left", ypos="head") - jump .spell - "\"Hocus Pocus!\"" if not d_flag_02: - $ d_flag_02 = True - gen "...{w=0.8} Damn..." ("base", xpos="far_left", ypos="head") - jump .spell - "\"Abracadabra!\"" if not d_flag_03: - $ d_flag_03 = True - gen "...{w=0.8} ..." ("base", xpos="far_left", ypos="head") - jump .spell + "\"Open Sesame!\"" if not d_flag_01: + $ d_flag_01 = True + gen "...{w=0.8} Guess not..." ("base", xpos="far_left", ypos="head") + jump .spell + "\"Hocus Pocus!\"" if not d_flag_02: + $ d_flag_02 = True + gen "...{w=0.8} Damn..." ("base", xpos="far_left", ypos="head") + jump .spell + "\"Abracadabra!\"" if not d_flag_03: + $ d_flag_03 = True + gen "...{w=0.8} ..." ("base", xpos="far_left", ypos="head") + jump .spell label .after_spell: gen "Work, you stupid scroll, or I'll throw you in the fire!" ("angry", xpos="far_left", ypos="head") diff --git a/game/scripts/characters/hermione/favors.rpy b/game/scripts/characters/hermione/favors.rpy index 117ed54f..3f68cf37 100644 --- a/game/scripts/characters/hermione/favors.rpy +++ b/game/scripts/characters/hermione/favors.rpy @@ -1,4 +1,4 @@ - +default her_eventqueue_talk_to_me = EventQueue("her_eventqueue_talk_to_me") default her_ev_talk_to_me_t1_e1 = Event(id="her_ev_talk_to_me_t1_e1", label="hg_pf_talk_T1_intro_E1", priority=5, req="states.her.tier == 1", queue="her_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["end_hg_pf_talk"]) default her_ev_talk_to_me_t1_e2 = Event(id="her_ev_talk_to_me_t1_e2", label="hg_pf_talk_T1_E1", priority=6, req="states.her.tier == 1", queue="her_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, ignore_labels=["end_hg_pf_talk"]) default her_ev_talk_to_me_t2_e1 = Event(id="her_ev_talk_to_me_t2_e1", label="hg_pf_talk_T2_intro_E1", priority=5, req="states.her.tier == 2", queue="her_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["end_hg_pf_talk"]) @@ -7,9 +7,11 @@ default her_ev_talk_to_me_t3_e1 = Event(id="her_ev_talk_to_me_t3_e1", label="hg_ default her_ev_talk_to_me_t3_e2 = Event(id="her_ev_talk_to_me_t3_e2", label="hg_pf_talk_T3_intro_E2", priority=6, req="states.her.tier >= 3", queue="her_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["end_hg_pf_talk", "hg_pf_talk_tonks_T3_intro_E1", "hg_pf_talk_tonks_T3_E1"]) default her_ev_talk_to_me_t3_e3 = Event(id="her_ev_talk_to_me_t3_e3", label="hg_pf_talk_T3_repeat", priority=7, req="states.her.tier >= 3", queue="her_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, ignore_labels=["end_hg_pf_talk", "hg_pf_talk_tonks_T3_intro_E1", "hg_pf_talk_tonks_T3_E1"]) +default her_eventqueue_talk_to_me_tonks = EventQueue("her_eventqueue_talk_to_me_tonks") default her_ev_talk_to_me_tonks_t3_e1 = Event(id="her_ev_talk_to_me_tonks_t3_e1", label="hg_pf_talk_tonks_T3_intro_E1", priority=5, req="states.her.tier >= 3", queue="her_eventqueue_talk_to_me_tonks", autoenqueue=True, autodequeue=False, repeat=False) default her_ev_talk_to_me_tonks_t3_e2 = Event(id="her_ev_talk_to_me_tonks_t3_e2", label="hg_pf_talk_tonks_T3_E1", priority=6, req="states.her.tier >= 3", queue="her_eventqueue_talk_to_me_tonks", autoenqueue=True, autodequeue=False) +default her_eventqueue_admire_panties = EventQueue("her_eventqueue_admire_panties") default her_ev_admire_panties_t1_e1 = Event(id="her_ev_admire_panties_t1_e1", label="hg_pf_admire_panties_T1_intro_E1", priority=5, req="states.her.tier == 1", queue="her_eventqueue_admire_panties", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["end_hg_pf_admire_panties"]) default her_ev_admire_panties_t1_e2 = Event(id="her_ev_admire_panties_t1_e2", label="hg_pf_admire_panties_T1_E1", priority=6, req="states.her.tier == 1", queue="her_eventqueue_admire_panties", autoenqueue=True, autodequeue=False, ignore_labels=["end_hg_pf_admire_panties"]) default her_ev_admire_panties_t2_e1 = Event(id="her_ev_admire_panties_t2_e1", label="hg_pf_admire_panties_T2_intro_E1", priority=5, req="states.her.tier == 2", queue="her_eventqueue_admire_panties", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["end_hg_pf_admire_panties"]) @@ -20,6 +22,7 @@ default her_ev_admire_panties_t4_e1 = Event(id="her_ev_admire_panties_t4_e1", la default her_ev_admire_panties_t4_e2 = Event(id="her_ev_admire_panties_t4_e2", label="hg_pf_admire_panties_T4_E1", priority=6, req="states.her.tier >= 4", queue="her_eventqueue_admire_panties", autoenqueue=True, autodequeue=False, ignore_labels=["end_hg_pf_admire_panties"]) default her_ev_admire_panties_t4_e3 = Event(id="her_ev_admire_panties_t4_e3", label="hg_pf_admire_panties_T4_E2", priority=7, req="states.her.tier >= 4", queue="her_eventqueue_admire_panties", autoenqueue=True, autodequeue=False, ignore_labels=["end_hg_pf_admire_panties"]) +default her_eventqueue_admire_breasts = EventQueue("her_eventqueue_admire_breasts") default her_ev_admire_breasts_t1_e1 = Event(id="her_ev_admire_breasts_t1_e1", label="hg_pf_admire_breasts_T1_intro_E1", priority=5, req="states.her.tier == 1", queue="her_eventqueue_admire_breasts", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["end_hg_pf_admire_breasts"]) default her_ev_admire_breasts_t1_e2 = Event(id="her_ev_admire_breasts_t1_e2", label="hg_pf_admire_breasts_T1_intro_E2", priority=6, req="states.her.tier == 1", queue="her_eventqueue_admire_breasts", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["end_hg_pf_admire_breasts"]) default her_ev_admire_breasts_t1_e3 = Event(id="her_ev_admire_breasts_t1_e3", label="hg_pf_admire_breasts_T1_E2", priority=7, req="states.her.tier == 1", queue="her_eventqueue_admire_breasts", autoenqueue=True, autodequeue=False, ignore_labels=["end_hg_pf_admire_breasts"]) @@ -32,6 +35,7 @@ default her_ev_admire_breasts_t4_e1 = Event(id="her_ev_admire_breasts_t4_e1", la default her_ev_admire_breasts_t4_e2 = Event(id="her_ev_admire_breasts_t4_e2", label="hg_pf_admire_breasts_T4_E1", priority=6, req="states.her.tier >= 4", queue="her_eventqueue_admire_breasts", autoenqueue=True, autodequeue=False, ignore_labels=["end_hg_pf_admire_breasts", "hg_pf_admire_breasts_T4"]) default her_ev_admire_breasts_t4_e3 = Event(id="her_ev_admire_breasts_t4_e3", label="hg_pf_admire_breasts_T4_E2", priority=7, req="states.her.tier >= 4", queue="her_eventqueue_admire_breasts", autoenqueue=True, autodequeue=False, ignore_labels=["end_hg_pf_admire_breasts", "hg_pf_admire_breasts_T4"]) +default her_eventqueue_grope = EventQueue("her_eventqueue_grope") default her_ev_grope_t1_e1 = Event(id="her_ev_grope_t1_e1", label="hg_pf_grope_T1_E1", priority=5, req="states.her.tier == 1", queue="her_eventqueue_grope", autoenqueue=True, autodequeue=False) default her_ev_grope_t2_e1 = Event(id="her_ev_grope_t2_e1", label="hg_pf_grope_T2_intro_E1", priority=5, req="states.her.tier == 2", queue="her_eventqueue_grope", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["hg_pf_grope_breasts_T2", "hg_pf_grope_ass_T2", "hg_pf_grope_ass_T2_back", "hg_pf_grope_ass_T2_front", "hg_pf_grope_ass_T2_continue", "hg_pf_grope_breasts_T2_continue"]) default her_ev_grope_t2_e2 = Event(id="her_ev_grope_t2_e2", label="hg_pf_grope_T2_E1", priority=6, req="states.her.tier == 2", queue="her_eventqueue_grope", autoenqueue=True, autodequeue=False, ignore_labels=["hg_pf_grope_breasts_T2", "hg_pf_grope_ass_T2", "hg_pf_grope_ass_T2_back", "hg_pf_grope_ass_T2_front", "hg_pf_grope_ass_T2_continue", "hg_pf_grope_breasts_T2_continue"]) @@ -41,6 +45,7 @@ default her_ev_grope_t4_e1 = Event(id="her_ev_grope_t4_e1", label="hg_pf_grope_T default her_ev_grope_t4_e2 = Event(id="her_ev_grope_t4_e2", label="hg_pf_grope_T4_intro_E2", priority=6, req="states.her.tier >= 4", queue="her_eventqueue_grope", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["hg_pf_grope_breasts_T4", "hg_pf_grope_ass_T4", "hg_pf_grope_ass_T4_back", "hg_pf_grope_ass_T4_front", "hg_pf_grope_ass_T4_continue", "hg_pf_grope_breasts_T4_continue"]) default her_ev_grope_t4_e3 = Event(id="her_ev_grope_t4_e3", label="hg_pf_grope_T4_E2", priority=7, req="states.her.tier >= 4", queue="her_eventqueue_grope", autoenqueue=True, autodequeue=False, ignore_labels=["hg_pf_grope_breasts_T4", "hg_pf_grope_ass_T4", "hg_pf_grope_ass_T4_back", "hg_pf_grope_ass_T4_front", "hg_pf_grope_ass_T4_continue", "hg_pf_grope_breasts_T4_continue"]) +default her_eventqueue_strip_for_me = EventQueue("her_eventqueue_strip_for_me") default her_ev_strip_for_me_t1_e1 = Event(id="her_ev_strip_for_me_t1_e1", label="hg_pf_strip_T1_E1", priority=5, req="states.her.tier == 1", queue="her_eventqueue_strip_for_me", autoenqueue=True, autodequeue=False) default her_ev_strip_for_me_t2_e1 = Event(id="her_ev_strip_for_me_t2_e1", label="hg_pf_strip_T2_E1", priority=5, req="states.her.tier == 2", queue="her_eventqueue_strip_for_me", autoenqueue=True, autodequeue=False) default her_ev_strip_for_me_t3_e1 = Event(id="her_ev_strip_for_me_t3_e1", label="hg_pf_strip_T3_intro_E1", priority=5, req="states.her.tier == 3", queue="her_eventqueue_strip_for_me", autoenqueue=True, autodequeue=False, repeat=False) @@ -50,6 +55,7 @@ default her_ev_strip_for_me_t4_e1 = Event(id="her_ev_strip_for_me_t4_e1", label= default her_ev_strip_for_me_t4_e2 = Event(id="her_ev_strip_for_me_t4_e2", label="hg_pf_strip_T4_intro_E2", priority=6, req="states.her.tier >= 4", queue="her_eventqueue_strip_for_me", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["hg_pf_strip_T4", "hg_pf_strip_T4_snape", "hg_pf_strip_T4_masturbate", "hg_pf_strip_T4_watch", "hg_pf_strip_T4_fingering", "hg_pf_strip_T5_fingering", "hg_pf_strip_T6_fingering"]) default her_ev_strip_for_me_t4_e3 = Event(id="her_ev_strip_for_me_t4_e3", label="hg_pf_strip_T4_E2", priority=7, req="states.her.tier >= 4", queue="her_eventqueue_strip_for_me", autoenqueue=True, autodequeue=False, ignore_labels=["hg_pf_strip_T4", "hg_pf_strip_T4_snape", "hg_pf_strip_T4_masturbate", "hg_pf_strip_T4_watch", "hg_pf_strip_T4_fingering", "hg_pf_strip_T5_fingering", "hg_pf_strip_T6_fingering"]) +default her_eventqueue_handjob = EventQueue("her_eventqueue_handjob") default her_ev_handjob_t1_e1 = Event(id="her_ev_handjob_t1_e1", label="hg_pf_handjob_T1_E1", priority=5, req="states.her.tier == 1", queue="her_eventqueue_handjob", autoenqueue=True, autodequeue=False) default her_ev_handjob_t2_e1 = Event(id="her_ev_handjob_t2_e1", label="hg_pf_handjob_T2_E1", priority=5, req="states.her.tier == 2", queue="her_eventqueue_handjob", autoenqueue=True, autodequeue=False) default her_ev_handjob_t3_e1 = Event(id="her_ev_handjob_t3_e1", label="hg_pf_handjob_T3_E1", priority=5, req="states.her.tier == 3", queue="her_eventqueue_handjob", autoenqueue=True, autodequeue=False) @@ -60,6 +66,7 @@ default her_ev_handjob_t5_e1 = Event(id="her_ev_handjob_t5_e1", label="hg_pf_han default her_ev_handjob_t5_e2 = Event(id="her_ev_handjob_t5_e2", label="hg_pf_handjob_T5_intro_E2", priority=6, req="states.her.tier >= 5", queue="her_eventqueue_handjob", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["hg_pf_handjob_2", "hg_pf_handjob_2_cumming", "hg_pf_handjob_2_continue"]) default her_ev_handjob_t5_e3 = Event(id="her_ev_handjob_t5_e3", label="hg_pf_handjob_T5_repeat", priority=7, req="states.her.tier >= 5", queue="her_eventqueue_handjob", autoenqueue=True, autodequeue=False, ignore_labels=["hg_pf_handjob_2", "hg_pf_handjob_2_cumming", "hg_pf_handjob_2_continue"]) +default her_eventqueue_titjob = EventQueue("her_eventqueue_titjob") default her_ev_titjob_t1_e1 = Event(id="her_ev_titjob_t1_e1", label="hg_pf_titjob_T1_E1", priority=5, req="states.her.tier == 1", queue="her_eventqueue_titjob", autoenqueue=True, autodequeue=False) default her_ev_titjob_t2_e1 = Event(id="her_ev_titjob_t2_e1", label="hg_pf_titjob_T2_E1", priority=5, req="states.her.tier == 2", queue="her_eventqueue_titjob", autoenqueue=True, autodequeue=False) default her_ev_titjob_t3_e1 = Event(id="her_ev_titjob_t3_e1", label="hg_pf_titjob_T3_E1", priority=5, req="states.her.tier == 3", queue="her_eventqueue_titjob", autoenqueue=True, autodequeue=False) @@ -70,6 +77,7 @@ default her_ev_titjob_t6_e1 = Event(id="her_ev_titjob_t6_e1", label="hg_pf_titjo default her_ev_titjob_t6_e2 = Event(id="her_ev_titjob_t6_e2", label="hg_pf_titjob_T6_intro_E2", priority=6, req="states.her.tier >= 6", queue="her_eventqueue_titjob", autoenqueue=True, autodequeue=False, repeat=False, ignore_labels=["hg_pf_titjob_2", "hg_pf_titjob_2_cumming", "hg_pf_titjob_2_continue"]) default her_ev_titjob_t6_e3 = Event(id="her_ev_titjob_t6_e3", label="hg_pf_titjob_T6_repeat", priority=7, req="states.her.tier >= 6", queue="her_eventqueue_titjob", autoenqueue=True, autodequeue=False, ignore_labels=["hg_pf_titjob_2", "hg_pf_titjob_2_cumming", "hg_pf_titjob_2_continue"]) +default her_eventqueue_blowjob = EventQueue("her_eventqueue_blowjob") default her_ev_blowjob_t1_e1 = Event(id="her_ev_blowjob_t1_e1", label="hg_pf_blowjob_T1_E1", priority=5, req="states.her.tier == 1", queue="her_eventqueue_blowjob", autoenqueue=True, autodequeue=False) default her_ev_blowjob_t2_e1 = Event(id="her_ev_blowjob_t2_e1", label="hg_pf_blowjob_T2_E1", priority=5, req="states.her.tier == 2", queue="her_eventqueue_blowjob", autoenqueue=True, autodequeue=False) default her_ev_blowjob_t3_e1 = Event(id="her_ev_blowjob_t3_e1", label="hg_pf_blowjob_T3_E1", priority=5, req="states.her.tier == 3", queue="her_eventqueue_blowjob", autoenqueue=True, autodequeue=False) @@ -81,6 +89,7 @@ default her_ev_blowjob_t6_e1 = Event(id="her_ev_blowjob_t6_e1", label="hg_pf_blo default her_ev_blowjob_t6_e2 = Event(id="her_ev_blowjob_t6_e2", label="hg_pf_blowjob_T6_hidden_repeat", priority=6, req="states.her.tier >= 6", queue="her_eventqueue_blowjob", autoenqueue=True, autodequeue=False, ignore_labels=["hg_pf_blowjob_1", "hg_pf_blowjob_2", "hg_pf_hidden_blowjob", "hg_hidden_blowjob_snape", "hg_hidden_blowjob_tonks", "hg_hidden_blowjob_luna", "hg_hidden_blowjob_cumming"]) default her_ev_blowjob_t6_e3 = Event(id="her_ev_blowjob_t6_e3", label="hg_pf_blowjob_T6_repeat", priority=7, req="states.her.tier >= 6", queue="her_eventqueue_blowjob", autoenqueue=True, autodequeue=False, ignore_labels=["hg_pf_blowjob_1", "hg_pf_blowjob_2", "hg_pf_hidden_blowjob", "hg_hidden_blowjob_snape", "hg_hidden_blowjob_tonks", "hg_hidden_blowjob_luna", "hg_hidden_blowjob_cumming"]) +default her_eventqueue_sex = EventQueue("her_eventqueue_sex") default her_ev_sex_t1_e1 = Event(id="her_ev_sex_t1_e1", label="hg_pf_sex_T1_E1", priority=5, req="states.her.tier == 1", queue="her_eventqueue_sex", autoenqueue=True, autodequeue=False) default her_ev_sex_t2_e1 = Event(id="her_ev_sex_t2_e1", label="hg_pf_sex_T2_E1", priority=5, req="states.her.tier == 2", queue="her_eventqueue_sex", autoenqueue=True, autodequeue=False) default her_ev_sex_t3_e1 = Event(id="her_ev_sex_t3_e1", label="hg_pf_sex_T3_E1", priority=5, req="states.her.tier == 3", queue="her_eventqueue_sex", autoenqueue=True, autodequeue=False) @@ -91,15 +100,16 @@ default her_ev_sex_t6_e2 = Event(id="her_ev_sex_t6_e2", label="hg_pf_sex_T6_intr default her_ev_sex_t6_e3 = Event(id="her_ev_sex_t6_e3", label="hg_pf_sex_T6_intro_E3", priority=7, req="states.her.tier >= 6", queue="her_eventqueue_sex", autoenqueue=True, autodequeue=False, repeat=False) default her_ev_sex_t6_e4 = Event(id="her_ev_sex_t6_e4", label="hg_pf_sex_T6_E3", priority=8, req="states.her.tier >= 6", queue="her_eventqueue_sex", autoenqueue=True, autodequeue=False) +default her_eventqueue_anal = EventQueue("her_eventqueue_anal") default her_ev_anal_t6_e1 = Event(id="her_ev_anal_t6_e1", label="hg_anal_sex_1_intro", priority=5, req="states.her.tier >= 6", queue="her_eventqueue_anal", autoenqueue=True, autodequeue=False, repeat=False) default her_ev_anal_t6_e2 = Event(id="her_ev_anal_t6_e2", label="hg_anal_sex_2_intro", priority=6, req="states.her.tier >= 6", queue="her_eventqueue_anal", autoenqueue=True, autodequeue=False, repeat=False) default her_ev_anal_t6_e3 = Event(id="her_ev_anal_t6_e3", label="hg_anal_sex_3", priority=7, req="states.her.tier >= 6", queue="her_eventqueue_anal", autoenqueue=True, autodequeue=False) define hermione_favors = [ - ("her_eventqueue_talk_to_me", "Talk to me!"), - ("her_eventqueue_admire_breasts", "Show me your tits!"), - ("her_eventqueue_admire_panties", "Show me your panties!"), - ("her_eventqueue_grope", "Grope her!"), + ("her_eventqueue_talk_to_me", "Talk to me!"), + ("her_eventqueue_admire_breasts", "Show me your tits!"), + ("her_eventqueue_admire_panties", "Show me your panties!"), + ("her_eventqueue_grope", "Grope her!"), ("her_eventqueue_strip_for_me", "Strip for me!"), ("her_eventqueue_handjob", "Give me a handy!"), ("her_eventqueue_titjob", "Give me a tittyjob!"), diff --git a/game/scripts/characters/hermione/requests.rpy b/game/scripts/characters/hermione/requests.rpy index 9dc1393b..a2fcd600 100644 --- a/game/scripts/characters/hermione/requests.rpy +++ b/game/scripts/characters/hermione/requests.rpy @@ -10,6 +10,7 @@ default her_ev_flirt_students_t3_e1 = Event(id="her_ev_flirt_students_t3_e1", la default her_ev_flirt_students_t3_e2 = Event(id="her_ev_flirt_students_t3_e2", label="hg_pr_flirt_T3_E2", req="game.daytime == False") default her_ev_flirt_students_t3_e3 = Event(id="her_ev_flirt_students_t3_e3", label="hg_pr_flirt_T3_E3", req="game.daytime == False") +default her_eventqueue_flirt_students = EventQueue("her_eventqueue_flirt_students") default her_ev_flirt_students_t1_e1_hub = Event(id="her_ev_flirt_students_t1_e1_hub", label="hg_pr_flirt", req="states.her.tier == 1", autoenqueue=True, autodequeue=False, queue="her_eventqueue_flirt_students", subevents=["her_ev_flirt_students_t1_e1"]) default her_ev_flirt_students_t1_e2_hub = Event(id="her_ev_flirt_students_t1_e2_hub", label="hg_pr_flirt", req="states.her.tier == 1", autoenqueue=True, autodequeue=False, queue="her_eventqueue_flirt_students", subevents=["her_ev_flirt_students_t1_e2"]) default her_ev_flirt_students_t1_e3_hub = Event(id="her_ev_flirt_students_t1_e3_hub", label="hg_pr_flirt", req="states.her.tier == 1", autoenqueue=True, autodequeue=False, queue="her_eventqueue_flirt_students", subevents=["her_ev_flirt_students_t1_e3"]) @@ -30,6 +31,7 @@ default her_ev_flirt_teachers_t3_e1 = Event(id="her_ev_flirt_teachers_t3_e1", la default her_ev_flirt_teachers_t3_e2 = Event(id="her_ev_flirt_teachers_t3_e2", label="hg_pr_flirt_teacher_T3_E2", req="game.daytime == False") default her_ev_flirt_teachers_t3_e3 = Event(id="her_ev_flirt_teachers_t3_e3", label="hg_pr_flirt_teacher_T3_E3", req="game.daytime == False") +default her_eventqueue_flirt_teachers = EventQueue("her_eventqueue_flirt_teachers") default her_ev_flirt_teachers_t1_e1_hub = Event(id="her_ev_flirt_teachers_t1_e1_hub", label="hg_pr_flirt_teacher", req="states.her.tier == 1", autoenqueue=True, autodequeue=False, queue="her_eventqueue_flirt_teachers", subevents=["her_ev_flirt_teachers_t1_e1"]) default her_ev_flirt_teachers_t1_e2_hub = Event(id="her_ev_flirt_teachers_t1_e2_hub", label="hg_pr_flirt_teacher", req="states.her.tier == 1", autoenqueue=True, autodequeue=False, queue="her_eventqueue_flirt_teachers", subevents=["her_ev_flirt_teachers_t1_e2"]) default her_ev_flirt_teachers_t1_e3_hub = Event(id="her_ev_flirt_teachers_t1_e3_hub", label="hg_pr_flirt_teacher", req="states.her.tier == 1", autoenqueue=True, autodequeue=False, queue="her_eventqueue_flirt_teachers", subevents=["her_ev_flirt_teachers_t1_e3"]) @@ -50,6 +52,7 @@ default her_ev_grope_public_t4_e1 = Event(id="her_ev_grope_public_t4_e1", label= default her_ev_grope_public_t4_e2 = Event(id="her_ev_grope_public_t4_e2", label="hg_pr_grope_T4_E2", req="game.daytime == False") default her_ev_grope_public_t4_e3 = Event(id="her_ev_grope_public_t4_e3", label="hg_pr_grope_T4_E3", req="game.daytime == False") +default her_eventqueue_grope_public = EventQueue("her_eventqueue_grope_public") default her_ev_grope_public_t1_e1_hub = Event(id="her_ev_grope_public_t1_e1_hub", label="hg_pr_grope_fail", req="states.her.tier == 1", autoenqueue=True, autodequeue=False, queue="her_eventqueue_grope_public") default her_ev_grope_public_t2_e1_hub = Event(id="her_ev_grope_public_t2_e1_hub", label="hg_pr_grope", req="states.her.tier == 2", autoenqueue=True, autodequeue=False, queue="her_eventqueue_grope_public", subevents=["her_ev_grope_public_t2_e1"]) default her_ev_grope_public_t2_e2_hub = Event(id="her_ev_grope_public_t2_e2_hub", label="hg_pr_grope", req="states.her.tier == 2", autoenqueue=True, autodequeue=False, queue="her_eventqueue_grope_public", subevents=["her_ev_grope_public_t2_e2"]) @@ -71,6 +74,7 @@ default her_ev_flash_public_t5_e1 = Event(id="her_ev_flash_public_t5_e1", label= default her_ev_flash_public_t5_e2 = Event(id="her_ev_flash_public_t5_e2", label="hg_pr_flash_T5_E2", req="game.daytime == False") default her_ev_flash_public_t5_e3 = Event(id="her_ev_flash_public_t5_e3", label="hg_pr_flash_T5_E3", req="game.daytime == False") +default her_eventqueue_flash_public = EventQueue("her_eventqueue_flash_public") default her_ev_flash_public_t1_to_t3 = Event(id="her_ev_flash_public_t1_to_t3", label="hg_pr_flash_fail", req="states.her.tier < 3", autoenqueue=True, autodequeue=False, queue="her_eventqueue_flash_public") default her_ev_flash_public_t3_e1_hub = Event(id="her_ev_flash_public_t3_e1_hub", label="hg_pr_flash", req="states.her.tier == 3", autoenqueue=True, autodequeue=False, queue="her_eventqueue_flash_public", subevents=["her_ev_flash_public_t3_e1"]) default her_ev_flash_public_t3_e2_hub = Event(id="her_ev_flash_public_t3_e2_hub", label="hg_pr_flash", req="states.her.tier == 3", autoenqueue=True, autodequeue=False, queue="her_eventqueue_flash_public", subevents=["her_ev_flash_public_t3_e2"]) @@ -91,6 +95,7 @@ default her_ev_kiss_public_t4_e3 = Event(id="her_ev_kiss_public_t4_e3", label="h default her_ev_kiss_public_t5_e1 = Event(id="her_ev_kiss_public_t5_e1", label="hg_pr_kiss_T5_E1", req="game.daytime==False") default her_ev_kiss_public_t5_e2 = Event(id="her_ev_kiss_public_t5_e2", label="hg_pr_kiss_T5_E2", req="game.daytime==False") +default her_eventqueue_kiss_public = EventQueue("her_eventqueue_kiss_public") default her_ev_kiss_public_t1_to_t3 = Event(id="her_ev_kiss_public_t1_to_t3", label="hg_pr_kiss_fail", req="states.her.tier < 3", autoenqueue=True, autodequeue=False, queue="her_eventqueue_kiss_public") default her_ev_kiss_public_t3_e1_hub = Event(id="her_ev_kiss_public_t3_e1_hub", label="hg_pr_kiss", req="states.her.tier == 3", autoenqueue=True, autodequeue=False, queue="her_eventqueue_kiss_public", subevents=["her_ev_kiss_public_t3_e1"]) default her_ev_kiss_public_t3_e2_hub = Event(id="her_ev_kiss_public_t3_e2_hub", label="hg_pr_kiss", req="states.her.tier == 3", autoenqueue=True, autodequeue=False, queue="her_eventqueue_kiss_public", subevents=["her_ev_kiss_public_t3_e2"]) @@ -111,6 +116,7 @@ default her_ev_handjob_public_t6_e1 = Event(id="her_ev_handjob_public_t6_e1", la default her_ev_handjob_public_t6_e2 = Event(id="her_ev_handjob_public_t6_e2", label="hg_pr_handjob_T6_E2", req="game.daytime==False") default her_ev_handjob_public_t6_e3 = Event(id="her_ev_handjob_public_t6_e3", label="hg_pr_handjob_T6_E3", req="game.daytime==False") +default her_eventqueue_handjob_public = EventQueue("her_eventqueue_handjob_public") default her_ev_handjob_public_t1_to_t4 = Event(id="her_ev_handjob_public_t1_to_t4", label="hg_pr_handjob_fail", req="states.her.tier < 4", autoenqueue=True, autodequeue=False, queue="her_eventqueue_handjob_public") default her_ev_handjob_public_t4_e1_hub = Event(id="her_ev_handjob_public_t4_e1_hub", label="hg_pr_handjob", req="states.her.tier == 4", autoenqueue=True, autodequeue=False, queue="her_eventqueue_handjob_public", subevents=["her_ev_handjob_public_t4_e1"]) default her_ev_handjob_public_t4_e2_hub = Event(id="her_ev_handjob_public_t4_e2_hub", label="hg_pr_handjob", req="states.her.tier == 4", autoenqueue=True, autodequeue=False, queue="her_eventqueue_handjob_public", subevents=["her_ev_handjob_public_t4_e2"]) @@ -129,6 +135,7 @@ default her_ev_blowjob_public_t6_e1 = Event(id="her_ev_blowjob_public_t6_e1", la default her_ev_blowjob_public_t6_e2 = Event(id="her_ev_blowjob_public_t6_e2", label="hg_pr_blowjob_T6_E2", req="game.daytime==False") default her_ev_blowjob_public_t6_e3 = Event(id="her_ev_blowjob_public_t6_e3", label="hg_pr_blowjob_T6_E3", req="game.daytime==False") +default her_eventqueue_blowjob_public = EventQueue("her_eventqueue_blowjob_public") default her_ev_blowjob_public_t1_to_t5 = Event(id="her_ev_blowjob_public_t1_to_t5", label="hg_pr_blowjob_fail", req="states.her.tier < 5", autoenqueue=True, autodequeue=False, queue="her_eventqueue_blowjob_public") default her_ev_blowjob_public_t5_e1_hub = Event(id="her_ev_blowjob_public_t5_e1_hub", label="hg_pr_blowjob", req="states.her.tier == 5", autoenqueue=True, autodequeue=False, queue="her_eventqueue_blowjob_public", subevents=["her_ev_blowjob_public_t5_e1"]) default her_ev_blowjob_public_t5_e2_hub = Event(id="her_ev_blowjob_public_t5_e2_hub", label="hg_pr_blowjob", req="states.her.tier == 5", autoenqueue=True, autodequeue=False, queue="her_eventqueue_blowjob_public", subevents=["her_ev_blowjob_public_t5_e2"]) @@ -142,19 +149,30 @@ default her_ev_sex_public_t6_e2 = Event(id="her_ev_sex_public_t6_e2", label="hg_ default her_ev_sex_public_t6_e3 = Event(id="her_ev_sex_public_t6_e3", label="hg_pr_sex_T6_E3", req="game.daytime==False") default her_ev_sex_public_t6_e4 = Event(id="her_ev_sex_public_t6_e4", label="hg_pr_sex_T6_E4", req="game.daytime==False") +default her_eventqueue_sex_public = EventQueue("her_eventqueue_sex_public") default her_ev_sex_public_t1_to_t6 = Event(id="her_ev_sex_public_t1_to_t6", label="hg_pr_sex_fail", req="states.her.tier < 6", autoenqueue=True, autodequeue=False, queue="her_eventqueue_sex_public") default her_ev_sex_public_t6_e1_hub = Event(id="her_ev_sex_public_t6_e1_hub", label="hg_pr_sex", req="states.her.tier >= 6", autoenqueue=True, autodequeue=False, repeat=False, queue="her_eventqueue_sex_public", subevents=["her_ev_sex_public_t6_e1", "her_ev_sex_public_t6_e2"]) default her_ev_sex_public_t6_e2_hub = Event(id="her_ev_sex_public_t6_e2_hub", label="hg_pr_sex", req="states.her.tier >= 6", autoenqueue=True, autodequeue=False, queue="her_eventqueue_sex_public", subevents=["her_ev_sex_public_t6_e3"]) default her_ev_sex_public_t6_e3_hub = Event(id="her_ev_sex_public_t6_e3_hub", label="hg_pr_sex", req="states.her.tier >= 6", autoenqueue=True, autodequeue=False, queue="her_eventqueue_sex_public", subevents=["her_ev_sex_public_t6_e4"]) -default her_ev_cumslut_public_t5_e1 = Event(id="her_ev_cumslut_public_t5_e1", label="hg_pr_cumslut_e1_return", req="game.daytime==False") -default her_ev_cumslut_public_t5_e2 = Event(id="her_ev_cumslut_public_t5_e2", label="hg_pr_cumslut_e2_return", req="game.daytime==False") -default her_ev_cumslut_public_t5_e3 = Event(id="her_ev_cumslut_public_t5_e3", label="hg_pr_cumslut_e3_return", req="game.daytime==False") +default her_ev_cumslut_public_t5_e1 = Event(id="her_ev_cumslut_public_t5_e1", label="hg_pr_cumslut_T5_return", req="game.daytime==False") +default her_ev_cumslut_public_t5_e2 = Event(id="her_ev_cumslut_public_t5_e2", label="hg_pr_cumslut_T5_return", req="game.daytime==False") +default her_ev_cumslut_public_t5_e3 = Event(id="her_ev_cumslut_public_t5_e3", label="hg_pr_cumslut_T5_return", req="game.daytime==False") +default her_ev_cumslut_public_t6_e1 = Event(id="her_ev_cumslut_public_t6_e1", label="hg_pr_cumslut_T6_return", req="game.daytime==False") +default her_ev_cumslut_public_t6_e2 = Event(id="her_ev_cumslut_public_t6_e2", label="hg_pr_cumslut_T6_return", req="game.daytime==False") +default her_ev_cumslut_public_t6_e3 = Event(id="her_ev_cumslut_public_t6_e3", label="hg_pr_cumslut_T6_return", req="game.daytime==False") +default her_ev_cumslut_public_t6_e4 = Event(id="her_ev_cumslut_public_t6_e4", label="hg_pr_cumslut_T6_return", req="game.daytime==False") +default her_eventqueue_cumslut_public = EventQueue("her_eventqueue_cumslut_public") default her_ev_cumslut_public_t1_to_t5 = Event(id="her_ev_cumslut_public_t1_to_t5", label="hg_pr_cumslut_fail", req="states.her.tier < 5", autoenqueue=True, autodequeue=False, queue="her_eventqueue_cumslut_public") -default her_ev_cumslut_public_t5_e1_hub = Event(id="her_ev_cumslut_public_t5_e1_hub", label="hg_pr_cumslut_e1", req="states.her.tier >= 5", autoenqueue=True, autodequeue=False, queue="her_eventqueue_cumslut_public", subevents=["her_ev_cumslut_public_t5_e1"]) -default her_ev_cumslut_public_t5_e2_hub = Event(id="her_ev_cumslut_public_t5_e2_hub", label="hg_pr_cumslut_e2", req="states.her.tier >= 5", autoenqueue=True, autodequeue=False, queue="her_eventqueue_cumslut_public", subevents=["her_ev_cumslut_public_t5_e2"]) -default her_ev_cumslut_public_t5_e3_hub = Event(id="her_ev_cumslut_public_t5_e3_hub", label="hg_pr_cumslut_e3", req="states.her.tier >= 5", autoenqueue=True, autodequeue=False, queue="her_eventqueue_cumslut_public", subevents=["her_ev_cumslut_public_t5_e3"]) +default her_ev_cumslut_public_t5_e1_hub = Event(id="her_ev_cumslut_public_t5_e1_hub", label="hg_pr_cumslut", req="states.her.tier == 5", autoenqueue=True, autodequeue=False, queue="her_eventqueue_cumslut_public", subevents=["her_ev_cumslut_public_t5_e1"]) +default her_ev_cumslut_public_t5_e2_hub = Event(id="her_ev_cumslut_public_t5_e2_hub", label="hg_pr_cumslut", req="states.her.tier == 5", autoenqueue=True, autodequeue=False, queue="her_eventqueue_cumslut_public", subevents=["her_ev_cumslut_public_t5_e2"]) +default her_ev_cumslut_public_t5_e3_hub = Event(id="her_ev_cumslut_public_t5_e3_hub", label="hg_pr_cumslut", req="states.her.tier == 5", autoenqueue=True, autodequeue=False, queue="her_eventqueue_cumslut_public", subevents=["her_ev_cumslut_public_t5_e3"]) +default her_ev_cumslut_public_t6_e1_hub = Event(id="her_ev_cumslut_public_t6_e1_hub", label="hg_pr_cumslut", req="states.her.tier >= 6", autoenqueue=True, autodequeue=False, queue="her_eventqueue_cumslut_public", subevents=["her_ev_cumslut_public_t6_e1"]) +default her_ev_cumslut_public_t6_e2_hub = Event(id="her_ev_cumslut_public_t6_e2_hub", label="hg_pr_cumslut", req="states.her.tier >= 6", autoenqueue=True, autodequeue=False, queue="her_eventqueue_cumslut_public", subevents=["her_ev_cumslut_public_t6_e2"]) +default her_ev_cumslut_public_t6_e3_hub = Event(id="her_ev_cumslut_public_t6_e3_hub", label="hg_pr_cumslut", req="states.her.tier >= 6", autoenqueue=True, autodequeue=False, queue="her_eventqueue_cumslut_public", subevents=["her_ev_cumslut_public_t6_e3"]) +default her_ev_cumslut_public_t6_e4_hub = Event(id="her_ev_cumslut_public_t6_e3_hub", label="hg_pr_cumslut", req="states.her.tier >= 6", autoenqueue=True, autodequeue=False, queue="her_eventqueue_cumslut_public", subevents=["her_ev_cumslut_public_t6_e4"]) + define hermione_requests = [ ("her_eventqueue_flirt_students", "Flirt with students!"), @@ -166,4 +184,4 @@ define hermione_requests = [ ("her_eventqueue_blowjob_public", "Give a blowjob!"), ("her_eventqueue_cumslut_public", "Act like a cumslut!"), ("her_eventqueue_sex_public", "Have sex!") -] \ No newline at end of file +] diff --git a/game/scripts/characters/hermione/summon.rpy b/game/scripts/characters/hermione/summon.rpy index e05690f9..342223f7 100644 --- a/game/scripts/characters/hermione/summon.rpy +++ b/game/scripts/characters/hermione/summon.rpy @@ -18,8 +18,6 @@ label summon_hermione: label hermione_requests: - # Reset - call reset_menu_position her "" (xpos="base",ypos="base") menu: @@ -153,11 +151,11 @@ label hermione_favor_menu: label .skip_points_check: - if her_level_up != None: + if her_level_up is not None: call tutorial("milestones") menu: - "-Level Up-" (icon="interface/icons/small/levelup.webp") if her_level_up != None: + "-Level Up-" (icon="interface/icons/small/levelup.webp") if her_level_up is not None: call hermione_level_up(tier=her_level_up) jump hermione_favor_menu @@ -262,7 +260,7 @@ label hermione_favor_menu: gen "Are you sure it's not within your house best interests?" ("base", xpos="far_left", ypos="head") her "What do you mean?" ("soft", "happy", "base", "mid") gen "Think about the future..." ("grin", xpos="far_left", ypos="head") - + label .convinced: if states.her.level >=20: diff --git a/game/scripts/characters/hermione/talk.rpy b/game/scripts/characters/hermione/talk.rpy index dace750b..198b5b8b 100644 --- a/game/scripts/characters/hermione/talk.rpy +++ b/game/scripts/characters/hermione/talk.rpy @@ -171,7 +171,7 @@ label hermione_talk: jump hermione_change_fail "-Mudblood-": $ temp_name = "Mudblood" - if states.her.level >= 22: + if states.her.level >= 22 and states.her.status.sex: jump hermione_change else: jump hermione_change_fail @@ -199,7 +199,87 @@ label hermione_talk: label genie_change: - her "Okay, from now on I'll call you [name_genie_hermione]." ("base", "base", "base", "mid") + # NickName responses + if name_genie_hermione == "Sir": + if states.her.level < 19: + random: + her "Certainly, [name_genie_hermione]." ("base", "base", "base", "mid") + her "Yes, [name_genie_hermione]." ("base", "base", "base", "mid") + her "Of course, [name_genie_hermione]." ("base", "base", "base", "mid") + else: + her "Do I really have to be so formal, [name_genie_hermione]?" ("annoyed", "happy", "base", "mid") + her "...{w=0.4} Alright then." ("open", "happy", "base", "mid") + elif name_genie_hermione == "Dumbledore": + if states.her.level < 3: + her "You'd like me to call you...{w=0.4} [name_genie_hermione]?" ("soft", "base", "base", "mid") + gen "That's my name...{w=0.4} Right?" ("base", xpos="far_left", ypos="head") + her "Yes, but...{w=0.4} You're a teacher." ("angry", "base", "base", "mid") + gen "So?" ("base", xpos="far_left", ypos="head") + her "Well...{w=0.4} I just figured...{w=0.4} Alright then..." ("soft", "squint", "base", "R") + else: + her "Of course, [name_genie_hermione]." ("base", "base", "base", "mid") + elif name_genie_hermione == "Professor": + her "Certainly, [name_genie_hermione]." ("base", "base", "base", "mid") + elif name_genie_hermione == "Old man": + her "Old man?" ("soft", "base", "base", "mid") + gen "That's right." ("base", xpos="far_left", ypos="head") + her "Okay then, if you say so..." ("base", "base", "base", "mid") + elif name_genie_hermione == "Genie": + her "Why, [name_genie_hermione]?" ("soft", "base", "base", "mid") + gen "Because that's my--" ("base", xpos="far_left", ypos="head") + gen "*Err*..." ("angry", xpos="far_left", ypos="head") + gen "Because the main role of a headmaster is to grant the wishes of their students!" ("grin", xpos="far_left", ypos="head") + her "..." ("soft", "happy", "base", "mid") + gen "Don't you reckon it'd be a fitting nickname?" ("base", xpos="far_left", ypos="head") + her "Isn't the primary responsibility of the headmaster to prepare students for life after school and to ensure their overall well-being?" ("open", "base", "base", "mid") + gen "Well, you could say that I've ensured your well-being by granting your wish to earn points for your house..." ("base", xpos="far_left", ypos="head") + her "I guess...{w=0.4} Although--" ("disgust", "base", "base", "mid") + gen "Although I suppose compared to a genie, I could always change my mind..." ("base", xpos="far_left", ypos="head") + her "Well, since you'd never do that, then I suppose calling you [name_genie_hermione] would be fitting!" ("angry", "closed", "worried", "mid") + gen "Yes! That's what I thought!" ("base", xpos="far_left", ypos="head") + elif name_genie_hermione == "My Lord": + if states.her.level < 13: + her "*Hmm*... Well, I suppose you're technically a high-ranking member of an institution..." ("soft", "base", "base", "R") + gen "A befitting title, is it not?" ("base", xpos="far_left", ypos="head") + her "But, is it not a bit...{w=0.4} Old fashioned?" ("open", "base", "base", "mid") + gen "Just because it's old...{w=0.4} I mean...{w=0.4} Well, I like it, okay?" ("base", xpos="far_left", ypos="head") + her "I see... If you say so, [name_genie_hermione]." ("base", "base", "base", "mid") + elif states.her.level < 22: + her "If you say so, [name_genie_hermione]." ("base", "base", "base", "mid") + else: + her "Of course, [name_genie_hermione]..." ("base", "base", "base", "mid") + elif name_genie_hermione == "Darling": + if states.her.level < 13: + her "[name_genie_hermione]?!" ("angry", "base", "base", "stare") + gen "That's right... Unless, you think I'm not important to you?" ("base", xpos="far_left", ypos="head") + her "I... Well, I suppose..." ("disgust", "base", "base", "stare") + elif states.her.level < 19: + her "[name_genie_hermione]..." ("soft", "narrow", "base", "down") + her "Alright then..." ("base", "narrow", "base", "down") + else: + her "Yes, [name_genie_hermione]..." ("base", "base", "base", "mid") + elif name_genie_hermione == "Lord Voldemort": + her "You want me to call you--" ("angry", "base", "base", "stare") + her "I was under the impression that witches and wizards usually avoided mentioning that name." ("angry", "base", "base", "mid") + gen "Is that so?" ("base", xpos="far_left", ypos="head") + her "From what I've read--" ("open", "closed", "base", "mid") + gen "You shall not use the lord's name in vain?" ("base", xpos="far_left", ypos="head") + her "*Huh*?" ("disgust", "base", "base", "mid") + gen "I'm sure using it's fine, as long as you're not being disrespectful..." ("base", xpos="far_left", ypos="head") + her "I... Alright then..." ("disgust", "happy", "base", "mid") + elif name_genie_hermione == "Daddy": + if states.her.level < 22: + her "*Ehm*... Of course, [name_genie_hermione]." ("disgust", "happy", "base", "down") + else: + her "Yes, [name_genie_hermione]." ("base", "base", "base", "mid") + elif name_genie_hermione == "Master": + if states.her.level < 22: + her "[name_genie_hermione]..." ("soft", "narrow", "base", "down") + her "Alright then..." ("base", "narrow", "base", "down") + else: + her "Yes, [name_genie_hermione]..." ("base", "base", "base", "mid") + else: + her "Okay, from now on, I'll call you [name_genie_hermione]." ("base", "base", "base", "mid") jump hermione_talk label genie_change_fail: @@ -209,110 +289,95 @@ label genie_change_fail: label hermione_change: if temp_name == "Miss Granger": if states.her.level <=0: - her "Sure, [name_genie_hermione]." ("base", "base", "base", "mid") + random: + her "Sure, [name_genie_hermione]." ("base", "base", "base", "mid") + her "Of course, [name_genie_hermione]." ("base", "base", "base", "mid") else: her "You don't have to be so formal, [name_genie_hermione], you know?" ("base", "closed", "base", "mid") her "" ("base", "base", "base", "mid") elif temp_name == "Hermione": - her "Of course [name_genie_hermione]." ("base", "base", "base", "mid") + her "Of course, [name_genie_hermione]." ("base", "base", "base", "mid") elif temp_name == "Girl": - if states.her.level >=1 and states.her.level < 3: - her "This girl thing again?" ("annoyed", "happy", "base", "mid") - her "*sigh*..." ("soft", "happy", "base", "R") - elif states.her.level >=3: - her "Fine... I don't mind." ("soft", "base", "base", "R") + if states.her.level < 3: + her "This \"girl\" thing again?" ("annoyed", "happy", "base", "mid") + her "*Sigh*..." ("soft", "happy", "base", "R") + elif states.her.level < 13: + her "Fine...{w=0.4} I don't mind." ("soft", "base", "base", "R") + else: + her "Of course..." ("soft", "base", "base", "R") elif temp_name == "Nerd": - if states.her.level >=3 and states.her.level < 5: - her "*sigh* I just enjoy books, that's all." ("annoyed", "narrow", "worried", "down") + if states.her.level < 5: + her "*Sigh*...{w=0.4} I just enjoy books, that's all." ("annoyed", "narrow", "worried", "down") gen "I'm sure you'll find other things to enjoy soon enough..." ("base", xpos="far_left", ypos="head") her "Like what exactly?" ("normal", "narrow", "base", "mid_soft") gen "Nothing to worry about, things will work out..." ("base", xpos="far_left", ypos="head") gen "Nerd..." ("grin", xpos="far_left", ypos="head") - her "*tsk* ..." ("soft", "narrow", "base", "R_soft") + her "*Tsk* ..." ("soft", "narrow", "base", "R_soft") her "" ("normal", "narrow", "base", "R_soft") - elif states.her.level >= 5 and states.her.level < 19: + elif states.her.level < 19: her "I can be a bit nerdy sometimes I suppose..." ("angry", "happyCl", "base", "mid", emote="sweat") her "" ("base", "base", "base", "mid") - elif states.her.level >= 19: + else: her "I don't read as much as I used to anymore." ("grin", "narrow", "base", "R_soft", emote="sweat") her "" ("base", "narrow", "base", "mid_soft") elif temp_name == "Hottie": - if states.her.level >=5 and states.her.level < 7: + if states.her.level < 7: her @ cheeks blush "[name_genie_hermione]?!" ("angry", "wide", "angry", "mid") gen "What? That's true, you're hot." ("base", xpos="far_left", ypos="head") her @ cheeks blush "That's inappropriate." ("annoyed", "base", "worried", "R") her "But I'll let it slide, I guess." - elif states.her.level >=7 and states.her.level < 19: + elif states.her.level < 19: her "Thank you, [name_genie_hermione]." ("soft", "wink", "base", "mid") her "" ("normal", "base", "base", "mid") - elif states.her.level >=19: + else: her @ cheeks blush "... Glad you think so." ("smile", "wink", "base", "mid") her @ cheeks blush "" ("base","happy", "base", "mid") - elif temp_name == "Good Girl": - if states.her.level >=5 and states.her.level < 7: - her "Well, I do try my best, [name_genie_hermione]." ("base", "closed", "base", "mid") - her "" ("base", "base", "base", "mid") - elif states.her.level >=7 and states.her.level < 19: + elif temp_name == "Good Girl": #Custom nickname (21+) + if states.her.level <=23: her "I'm not sure if I'd qualify, but fine." ("annoyed", "wink", "base", "mid") her "" ("normal", "base", "base", "mid") - elif states.her.level >=19: - her @ cheeks blush "I could act like a good girl if you really want me to..." ("smile", "wink", "base", "mid") + else: + her @ cheeks blush "I'm not sure that's true..." ("soft", "narrow", "base", "mid") + her @ cheeks blush "But I could act like a good girl if you really want me to..." ("smile", "wink", "base", "mid") her @ cheeks blush "" ("base","happy", "base", "mid") elif temp_name == "Angel": - if states.her.level >=7 and states.her.level < 9: + if states.her.level < 9: her "What's going on with these silly nicknames of yours all of a sudden?" ("normal", "squint", "angry", "mid") gen "What do you mean by silly?" ("base", xpos="far_left", ypos="head") - her @ cheeks blush "Ugh, forget I said anything..." ("open", "narrow", "base", "down") + her @ cheeks blush "*Ugh*... forget I said anything..." ("open", "narrow", "base", "down") her @ cheeks blush "" ("normal", "base", "base", "R") - elif states.her.level >=9 and states.her.level < 19: + elif states.her.level < 19: her @ cheeks blush "I like it..." ("soft", "narrow", "base", "R_soft") her @ cheeks blush "" ("base", "narrow", "base", "R_soft") - elif states.her.level >= 19: + else: + her @ cheeks blush "After everything you've put me through, I certainly must be..." ("base", "narrow", "base", "R_soft") her @ cheeks blush "I'm surprised I didn't grow wings yet." ("base", "narrow", "worried", "mid_soft") - elif temp_name == "Little Girl": - if states.her.level >=7 and states.her.level < 9: - her "What's going on with these silly nicknames of yours all of a sudden?" ("normal", "squint", "angry", "mid") - gen "What do you mean by silly?" ("base", xpos="far_left", ypos="head") - her "It makes it sound as if I'm your..." ("soft", "base", "worried", "R") - her @ cheeks blush "Ugh, forget I said anything..." ("open", "narrow", "base", "down") - her @ cheeks blush "" ("normal", "base", "base", "R") - elif states.her.level >=9 and states.her.level < 19: - her "Bit of an odd request but..." ("normal", "narrow", "base", "down") - her @ cheeks blush "I like it..." ("soft", "narrow", "base", "R_soft") - her @ cheeks blush "" ("base", "narrow", "base", "R_soft") - elif states.her.level >= 19: - her @ cheeks blush "Yes, [name_genie_hermione]." ("base", "narrow", "worried", "mid_soft") - elif temp_name == "Bad Girl": - if states.her.level >=9 and states.her.level < 11: - her "I guess I am a bit." ("soft", "narrow", "worried", "down") - her "I did fail that test after all..." ("disgust", "narrow", "base", "down") - her "" ("normal", "narrow", "worried", "mid_soft") - her "" ("normal", "base", "base", "mid") - elif states.her.level >=11 and states.her.level < 17: - her @ cheeks blush "I may be a little bit naughty at times." ("base", "happy", "base", "R") - elif states.her.level >=17: - her @ cheeks blush "I may be a little bit naughty at times." ("base", "happy", "base", "R") - her @ cheeks blush "" ("base", "base", "base", "mid") + elif temp_name == "Little Girl": #Custom nickname (21+) + her @ cheeks blush "Little...{w=0.4} Girl..." ("soft", "narrow", "worried", "mid_soft") + her @ cheeks blush "Yes, [name_genie_hermione]..." ("base", "narrow", "worried", "mid_soft") + elif temp_name == "Bad Girl": #Custom nickname (21+) + her @ cheeks blush "I suppose I may be a little bit naughty at times." ("base", "happy", "base", "R") + her @ cheeks blush "" ("base", "base", "base", "mid") elif temp_name == "Minx": - if states.her.level >=9 and states.her.level < 11: + if states.her.level < 15: her "I guess I am a bit." ("soft", "narrow", "worried", "down") her "" ("normal", "narrow", "worried", "mid_soft") - elif states.her.level >=11 and states.her.level < 17: + elif states.her.level < 19: her @ cheeks blush "I may be a little bit naughty at times." ("base", "happy", "base", "R") - elif states.her.level >=17: + else: her @ cheeks blush "I may be a little bit naughty at times." ("base", "happy", "base", "R") her @ cheeks blush "" ("base", "base", "base", "mid") elif temp_name == "Princess": - if states.her.level >= 11 and states.her.level < 13: - her @ cheeks blush "That would make you my prince wouldn't it?" ("open", "base", "base", "R") + if states.her.level < 15: + her @ cheeks blush "That would make you my prince, wouldn't it?" ("open", "base", "base", "R") her @ cheeks blush "" ("base", "base", "base", "mid") - elif states.her.level >= 13: - her "Yes... My prince." ("smile","happy", "base", "mid") + else: + her "Yes...{w=0.4} My prince." ("smile","happy", "base", "mid") gen "..." ("base", xpos="far_left", ypos="head") - her "I-I mean, [name_genie_hermione]." ("smile", "happyCl", "base", "mid", emote="sweat") + her "I--{w=0.2} I mean, [name_genie_hermione]." ("smile", "happyCl", "base", "mid", emote="sweat") her "" ("base", "base", "base", "mid") elif temp_name == "Pet": - if states.her.level >= 11 and states.her.level < 13: + if states.her.level < 15: her "You want to call me....{w=0.5} a pet?" ("normal", "squint", "angry", "mid") gen "Yes." ("base", xpos="far_left", ypos="head") her ".... {w=0.5}.... {w=0.5}.... {w=0.5}...." ("normal", "happy", "base", "mid") @@ -321,196 +386,175 @@ label hermione_change: her "May I at least know why?" ("open", "squint", "base", "mid") gen "No." ("base", xpos="far_left", ypos="head") her "...." ("annoyed", "base", "worried", "mid") - elif states.her.level >= 13: + else: her "*Meow*" ("smile","happyCl", "base", "mid") her "" ("smile","happy", "base", "mid") gen "Don't do that..." ("base", xpos="far_left", ypos="head") her "Such a party pooper." ("annoyed","happyCl", "base", "mid") her "" ("base", "base", "base", "mid") elif temp_name == "Bitch": - if states.her.level >=13 and states.her.level < 15: + if states.her.level < 19: her "Isn't this a bit inappropriate [name_genie_hermione]?" ("mad", "narrow", "worried", "down") gen "And doing favours for house points isn't?" ("base", xpos="far_left", ypos="head") her @ cheeks blush "Fine..." ("base", "narrow", "base", "down") - elif states.her.level >= 15 and states.her.level < 17: + elif states.her.level < 21: her @ cheeks blush "..." ("normal", "narrow", "worried", "down") gen "Any objections?" ("base", xpos="far_left", ypos="head") her @ cheeks blush "..." ("soft", "base", "worried", "R") gen "Okay then..." ("grin", xpos="far_left", ypos="head") - elif states.her.level >= 17: + else: her @ cheeks blush "Alright." ("base", "happyCl", "base", "mid") her @ cheeks blush "" ("base","happy", "base", "mid") elif temp_name == "Slut": - if states.her.level >=15 and states.her.level < 17: - her "[name_genie_hermione]?!" ("shock", "wide", "worried", "stare") - her "You can't just call someone that!" ("mad", "wide", "base", "stare") - gen "It'll just be between us..." ("base", xpos="far_left", ypos="head") - her "..." ("disgust", "squint", "base", "mid") - gen "Nothing to add?" ("base", xpos="far_left", ypos="head") - her "" ("clench", "closed", "base", "mid", emote="angry") - gen "So you'll let me call you that or not?" ("base", xpos="far_left", ypos="head") - her "{size=+5}FINE!{/size}" ("clench", "closed", "angry", "mid", emote="angry") - gen "..." ("base", xpos="far_left", ypos="head") - her "" ("normal", "narrow", "angry", "R") - elif states.her.level >= 17: - her @ cheeks blush "I guess if you have to call me that, sure..." ("base", "narrow", "base", "down") - elif states.her.level >= 19: + if states.her.level < 21: + her @ cheeks blush "I suppose if you have to call me that, sure..." ("base", "narrow", "base", "down") + else: her @ cheeks blush "I don't mind..." ("smile", "happyCl", "base", "mid") elif temp_name == "Cumslut": - if states.her.level >= 17 and states.her.level < 19: - her "A cumslut?!" ("open", "wide", "worried", "stare") - gen "Something wrong?" ("base", xpos="far_left", ypos="head") - her @ cheeks blush "You have to even ask?" ("soft", "narrow", "worried", "down") - her @ cheeks blush "This is so degrading..." ("normal", "narrow", "base", "down") - her @ cheeks blush "(But I kinda am a slut begging for cum aren't I...)" ("base", "happyCl", "base", "mid") - elif states.her.level >= 19: + if states.her.level < 22: + her "I suppose if you have to call me that, sure..." ("base", "narrow", "base", "down") + else: her "..." ("soft", "narrow", "base", "up") her @ cheeks blush "(When did I start enjoying it so much...)" ("open", "narrow", "base", "up") - her @ cheeks blush "(That taste, the texture...)" ("open", "narrow", "annoyed", "up") + her @ cheeks blush "(That taste, even the texture...)" ("open", "narrow", "annoyed", "up") her @ cheeks blush "(So warm, sticky, and--)" ("silly", "narrow", "base", "up") gen "Are you okay there, [temp_name]?" ("base", xpos="far_left", ypos="head") her "Wha--" ("mad", "wide", "base", "stare") her @ cheeks blush "Of course I am!" ("smile", "base", "base", "R") elif temp_name == "Slytherin Whore": - if states.her.level >=19 and states.her.level < 21: - her "Do you really have to call me that, [name_genie_hermione]?" ("disgust", "base", "worried", "mid") - her @ cheeks blush "Referring to me as a bitch or a slut for your own amusement is one thing..." ("mad", "narrow", "worried", "down") - her "You're aware of how much I loathe Slytherin." ("open", "narrow", "worried", "mid_soft") - her "And I'm definitely not a whore..." ("soft", "closed", "base", "mid") - her "I refuse!" - menu: - "-Say it's fine-": - gen "Fine, I won't call you that..." ("base", xpos="far_left", ypos="head") - her "You won't?" ("open", "base", "base", "mid") - her "" ("soft", "base", "base", "mid") - gen "Of course..." ("base", xpos="far_left", ypos="head") - her "I am glad we're on the same page on this one, [name_genie_hermione]." ("open", "closed", "base", "mid") - her "" ("base", "closed", "base", "mid") - gen "In fact, from this point forward you don't have to call me [name_genie_hermione] or exchange any favours..." ("base", xpos="far_left", ypos="head") - her "" ("soft", "base", "base", "mid", emote="confused") - gen "Let's just void this whole... deal of yours, shall we?" ("base", xpos="far_left", ypos="head") - her "B-but, [name_genie_hermione]?!" ("mad", "wide", "base", "mid", emote="shocked") - her "" ("mad", "wide", "base", "mid") - gen "I must apologise {b}Miss Granger{/b}, I thought we had come to some kind of agreeable arrangement by now..." ("base", xpos="far_left", ypos="head") - her "But I--" ("mad", "wide", "worried", "stare") - gen "I should have known better to believe that this sort of thing would work out..." ("base", xpos="far_left", ypos="head") - her "Maybe I coul--" ("clench","happyCl", "worried", "stare") - gen "I thought we both had what we wanted..." ("base", xpos="far_left", ypos="head") - her "Liste--" ("soft", "narrow", "worried", "down") - her "" ("normal", "closed", "angry", "mid") - gen "Might as well hand in my resignation with the ministry and--" ("base", xpos="far_left", ypos="head") - with hpunch - her @ cheeks blush "{size=+10}I AM A SLYTHERIN WHORE!!!{/size}" ("scream", "closed", "angry", "mid") - her "" ("normal", "closed", "base", "mid") - gen "..." ("base", xpos="far_left", ypos="head") - her "Now please, [name_genie_hermione]... Let's just forget this conversation ever happened." ("disgust", "base", "worried", "mid") - gen "Are you sure that's what you want, [temp_name]?" ("base", xpos="far_left", ypos="head") - her "... Yes." ("disgust", "narrow", "worried", "down", emote="sweat") - gen "(This girl really is beyond redemption...)" ("base", xpos="far_left", ypos="head") - her "" ("base", "narrow", "worried", "down") - "-Threaten her-": - gen "Either accept my offer or Gryffindor lose five hundred points..." ("angry", xpos="far_left", ypos="head") - with hpunch - her "FIVE HUNDRED?!" ("shock", "wide", "base", "stare") - her "[name_genie_hermione]... This is blackmailing!" ("scream", "closed", "angry", "mid") - her "" ("mad", "closed", "angry", "mid") - gen "It is?" ("base", xpos="far_left", ypos="head") - her @ cheeks blush "What else would it be?" ("mad", "base", "angry", "mid") - gen "Negotiations..." ("grin", xpos="far_left", ypos="head") - her @ cheeks blush "You..." ("clench", "closed", "angry", "mid") - gen "That's not an answer..." ("base", xpos="far_left", ypos="head") - her @ cheeks blush "{size=-10}Okay...{/size}" ("soft", "narrow", "angry", "R") - gen "What was that? I didn't hear you." ("base", xpos="far_left", ypos="head") - her @ cheeks blush "I said yes, you can call me a Slytherin whore... or whatever." ("normal", "narrow", "annoyed", "mid") - her @ cheeks blush "Happy now?!" ("open", "closed", "angry", "mid") - gen "Very." ("grin", xpos="far_left", ypos="head") - her @ cheeks blush "{size=-6}You are the worst.{/size}" ("normal", "narrow", "base", "R_soft") - $ states.her.mood += 15 - elif states.her.level >= 21: - her "Please, [name_genie_hermione], couldn't you call me something else instead?" ("open", "base", "worried", "mid") - gen "But where's the fun in that?" ("base", xpos="far_left", ypos="head") - her @ cheeks blush "Why do I even bother... *sigh*" ("soft", "narrow", "base", "R_soft") + her "Do you really have to call me that, [name_genie_hermione]?" ("disgust", "base", "worried", "mid") + her @ cheeks blush "Referring to me as a bitch or a slut for your own amusement is one thing..." ("mad", "narrow", "worried", "down") + her "I know you're aware of how much I loathe Slytherin..." ("open", "narrow", "worried", "mid_soft") + her "And I'm definitely not a whore..." ("soft", "closed", "base", "mid") + her "I refuse!" + menu: + "-Say it's fine-": + gen "Fine, I won't call you that..." ("base", xpos="far_left", ypos="head") + her "You won't?" ("open", "base", "base", "mid") + her "" ("soft", "base", "base", "mid") + gen "Of course..." ("base", xpos="far_left", ypos="head") + her "I am glad we're on the same page on this one, [name_genie_hermione]." ("open", "closed", "base", "mid") + her "" ("base", "closed", "base", "mid") + gen "In fact, from this point forward you don't have to call me [name_genie_hermione], or exchange any favours..." ("base", xpos="far_left", ypos="head") + her "" ("soft", "base", "base", "mid", emote="confused") + gen "Let's just void this whole... deal of yours, shall we?" ("base", xpos="far_left", ypos="head") + her "B-but, [name_genie_hermione]?!" ("mad", "wide", "base", "mid", emote="shocked") + her "" ("mad", "wide", "base", "mid") + gen "I must apologise {b}Miss Granger{/b}, I thought we had come to some kind of agreeable arrangement by now..." ("base", xpos="far_left", ypos="head") + her "But I--" ("mad", "wide", "worried", "stare") + gen "I should have known better to believe that this sort of thing would work out..." ("base", xpos="far_left", ypos="head") + her "Maybe I could--" ("clench","happyCl", "worried", "stare") + gen "I thought we both had what we wanted..." ("base", xpos="far_left", ypos="head") + her "Listen--" ("soft", "narrow", "worried", "down") + her "" ("normal", "closed", "angry", "mid") + gen "Might as well hand in my resignation with the ministry and--" ("base", xpos="far_left", ypos="head") + with hpunch + her @ cheeks blush "{size=+10}I AM A SLYTHERIN WHORE!!!{/size}" ("scream", "closed", "angry", "mid") + her "" ("normal", "closed", "base", "mid") + gen "..." ("base", xpos="far_left", ypos="head") + her "Now please, [name_genie_hermione]... Let's just forget this conversation ever happened." ("disgust", "base", "worried", "mid") + gen "Are you sure that's what you want, [temp_name]?" ("base", xpos="far_left", ypos="head") + her "... Yes." ("disgust", "narrow", "worried", "down", emote="sweat") + gen "(This girl really is beyond redemption...)" ("base", xpos="far_left", ypos="head") + her "" ("base", "narrow", "worried", "down") + "-Threaten her-": + gen "Either accept my offer or Gryffindor lose five hundred points..." ("angry", xpos="far_left", ypos="head") + with hpunch + her "{size=+4}Five hundred?!{/size}" ("shock", "wide", "base", "stare") + her "[name_genie_hermione]... This is blackmailing!" ("scream", "closed", "angry", "mid") + her "" ("mad", "closed", "angry", "mid") + gen "It is?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "What else would it be?" ("mad", "base", "angry", "mid") + gen "Negotiations..." ("grin", xpos="far_left", ypos="head") + her @ cheeks blush "You..." ("clench", "closed", "angry", "mid") + gen "That's not an answer..." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "{size=-10}Okay...{/size}" ("soft", "narrow", "angry", "R") + gen "What was that? I didn't hear you." ("base", xpos="far_left", ypos="head") + her @ cheeks blush "I said yes, you can call me a Slytherin whore... or whatever." ("normal", "narrow", "annoyed", "mid") + her @ cheeks blush "Happy now?!" ("open", "closed", "angry", "mid") + gen "Very." ("grin", xpos="far_left", ypos="head") + her @ cheeks blush "{size=-6}You are the worst.{/size}" ("normal", "narrow", "base", "R_soft") + $ states.her.mood += 15 elif temp_name == "Mudblood": - if states.her.level >= 21 and states.her.status.sex: - her "A{w=0.5}...{w=0.5} {size=+6}{b}{cps=20}mud{w=0.5}blood{/cps}{/b}?!{/size}" ("shock", "wide", "base", "stare") - her "Did I hear you right, [name_genie_hermione]?!" ("normal", "wide", "base", "mid") - menu: - "-Confirm-": - pass - "-!!!{b}ABORT ABORT ABORT{/b}!!!-{#LINT_IGNORE}": - gen "What? Of course not!" ("angry", xpos="far_left", ypos="head") - gen "I said..." ("base", xpos="far_left", ypos="head") - gen "(I have to think fast)" ("angry", xpos="far_left", ypos="head") - menu: - "-Mass flood-": - gen "I said mass flood!" ("angry", xpos="far_left", ypos="head") - her "Mass flood?" ("soft", "base", "base", "mid") - gen "Are you deaf or something?" ("base", xpos="far_left", ypos="head") - if game.weather == "rain": - her "I was pretty sure you said--" ("open", "base", "base", "mid") - her "" ("normal", "base", "base", "R") - gen "Look outside the window, it's raining is it not?" ("base", xpos="far_left", ypos="head") - her "I{w=0.5}...{w=0.5} Yes, you are right [name_genie_hermione]." ("normal", "closed", "base", "mid") - gen "Of course I am." ("base", xpos="far_left", ypos="head") - her "So what did you want to talk about?" ("base", "base", "base", "mid") - else: - her "[name_genie_hermione], but it's not raining..." ("normal", "closed", "base", "mid") - her @ cheeks blush "" ("disgust", "narrow", "base", "down") - gen "Last time I had my dick in you, it felt like a mass flood." ("grin", xpos="far_left", ypos="head") - her @ cheeks blush "[name_genie_hermione]..." ("disgust", "closed", "base", "mid") - gen "What? It's true, I swear!" ("grin", xpos="far_left", ypos="head") - her @ cheeks blush "..." ("soft", "narrow", "worried", "down") - "-Mad stud-": - gen "I said mad stud!" ("angry", xpos="far_left", ypos="head") - her "Mad stud?" ("soft", "base", "base", "mid") - gen "My dick, your ass, bud." ("grin", xpos="far_left", ypos="head") - her @ cheeks blush "Really..." ("disgust", "narrow", "base", "mid_soft") - her @ cheeks blush "You can be so childish sometimes, [name_genie_hermione]..." ("annoyed", "narrow", "base", "R_soft") - jump hermione_talk - her "Why would you even suggest calling me such a thing..." ("scream", "squint", "angry", "mid") - her @ tears soft "It's like the most offensive thing you could call someone like..." ("shock", "squint", "angry", "mid") - her @ tears soft_blink "Like..." ("open", "happyCl", "worried", "mid") - her @ tears mascara_crying "Someone like..." ("open", "narrow", "worried", "down") - her @ tears mascara_soft "Me..." ("disgust", "narrow", "worried", "down") - her @ tears mascara "" ("disgust", "happyCl", "worried", "mid") - menu: - "-Try to calm her down-": - her @ tears mascara "" ("disgust", "narrow", "worried", "mid_soft") - gen "Now, now, there's no need to cry." ("base", xpos="far_left", ypos="head") - gen "Do you know why I call you these things, Miss Granger?" ("base", xpos="far_left", ypos="head") - her @ tears mascara "... No?" ("disgust", "narrow", "worried", "mid_soft") - gen "It's so that you'll come to know that words are just words, and they only hurt if you let them." ("base", xpos="far_left", ypos="head") - her @ tears mascara "..." ("normal", "narrow", "worried", "mid_soft") - gen "Once you truly understand that nothing will hold you back." ("base", xpos="far_left", ypos="head") - gen "And you'll be at your utmost potential." ("grin", xpos="far_left", ypos="head") - her @ tears mascara "You really think so?" ("open", "narrow", "worried", "mid_soft") - her @ tears mascara "" ("normal", "narrow", "worried", "mid_soft") - gen "Yes, in fact I do." ("base", xpos="far_left", ypos="head") - her @ tears mascara "Thank you, [name_genie_hermione]." ("normal", "closed", "base", "mid") - her @ tears mascara "I can do it, I know I can." ("base", "narrow", "worried", "mid_soft") - "-Tell her she deserves it-": - gen "You deserve to be called a slut, a whore and a mudblood... Just look at you." ("angry", xpos="far_left", ypos="head") - her @ tears mascara_soft_blink "..." ("scream", "happyCl", "worried", "mid") - her @ tears mascara_soft "" ("disgust", "happyCl", "worried", "mid") - gen "You walk into my office and sell your body for the sole reason that it will make Gryffindor happy to win the house cup." ("angry", xpos="far_left", ypos="head") - her @ tears mascara_soft_blink "..." ("open", "happyCl", "worried", "mid") - her @ tears mascara_soft "" ("disgust", "happyCl", "worried", "mid") - gen "Bending over onto my desk and let yourself be taken like a some common harlot..." ("angry", xpos="far_left", ypos="head") - her @ tears mascara_soft "I..." ("disgust", "narrow", "worried", "mid_soft") - gen "Letting your headmaster thrust himself upon you, and taking my load like your life depended on it..." ("angry", xpos="far_left", ypos="head") - her @ tears mascara_soft "..." ("normal", "happyCl", "worried", "mid") - her @ tears mascara "" ("normal", "narrow", "worried", "mid_soft") - gen "I bet you don't even care about the points anymore..." ("base", xpos="far_left", ypos="head") - her @ tears mascara "I..." ("normal", "narrow", "worried", "down") - her @ tears mascara "" ("normal", "narrow", "annoyed", "up") - gen "You are nothing more than a whore..." ("base", xpos="far_left", ypos="head") - her @ tears mascara "" ("annoyed", "narrow", "annoyed", "up") - gen "{size=+4}{b}MY{/b}{/size} whore!" ("grin", xpos="far_left", ypos="head") - her @ tears mascara "" ("disgust", "narrow", "base", "up") - gen "And I {b}will{/b} call you however I want!" ("base", xpos="far_left", ypos="head") - her @ tears mascara "...." ("angry", "narrow", "base", "up") + her "A...{w=0.5} {size=+6}{b}{cps=20}mud{w=0.5}blood{/cps}{/b}?!{/size}" ("shock", "wide", "base", "stare") + her "Did I hear you right, [name_genie_hermione]?!" ("normal", "wide", "base", "mid") + menu: + "-Confirm-": + pass + "-!!!{b}ABORT ABORT ABORT{/b}!!!-{#LINT_IGNORE}": + gen "What? Of course not!" ("angry", xpos="far_left", ypos="head") + gen "I said..." ("base", xpos="far_left", ypos="head") + gen "(I have to think fast)" ("angry", xpos="far_left", ypos="head") + menu: + "-Mass flood-": + gen "I said mass flood!" ("angry", xpos="far_left", ypos="head") + her "Mass flood?" ("soft", "base", "base", "mid") + gen "Are you deaf or something?" ("base", xpos="far_left", ypos="head") + if game.weather == "rain": + her "I was pretty sure you said--" ("open", "base", "base", "mid") + her "" ("normal", "base", "base", "R") + gen "Look outside the window, it's raining is it not?" ("base", xpos="far_left", ypos="head") + her "I{w=0.5}...{w=0.5} Yes, you are right [name_genie_hermione]." ("normal", "closed", "base", "mid") + gen "Of course I am." ("base", xpos="far_left", ypos="head") + her "So what did you want to talk about?" ("base", "base", "base", "mid") + else: + her "[name_genie_hermione], but it's not raining..." ("normal", "closed", "base", "mid") + her @ cheeks blush "" ("disgust", "narrow", "base", "down") + gen "Last time I had my dick in you, it felt like a mass flood." ("grin", xpos="far_left", ypos="head") + her @ cheeks blush "[name_genie_hermione]..." ("disgust", "closed", "base", "mid") + gen "What? It's true, I swear!" ("grin", xpos="far_left", ypos="head") + her @ cheeks blush "..." ("soft", "narrow", "worried", "down") + "-Mad stud-": + gen "I said mad stud!" ("angry", xpos="far_left", ypos="head") + her "Mad stud?" ("soft", "base", "base", "mid") + gen "My dick, your ass, bud." ("grin", xpos="far_left", ypos="head") + her @ cheeks blush "Really..." ("disgust", "narrow", "base", "mid_soft") + her @ cheeks blush "You can be so childish sometimes, [name_genie_hermione]..." ("annoyed", "narrow", "base", "R_soft") + jump hermione_talk + her "Why would you even suggest calling me such a thing..." ("scream", "squint", "angry", "mid") + her @ tears soft "It's like the most offensive thing you could call someone like..." ("shock", "squint", "angry", "mid") + her @ tears soft_blink "Like..." ("open", "happyCl", "worried", "mid") + her @ tears mascara_crying "Someone like..." ("open", "narrow", "worried", "down") + her @ tears mascara_soft "Me..." ("disgust", "narrow", "worried", "down") + her @ tears mascara "" ("disgust", "happyCl", "worried", "mid") + menu: + "-Try to calm her down-": + her @ tears mascara "" ("disgust", "narrow", "worried", "mid_soft") + gen "Now, now, there's no need to cry." ("base", xpos="far_left", ypos="head") + gen "Do you know why I call you these things, Miss Granger?" ("base", xpos="far_left", ypos="head") + her @ tears mascara "... No?" ("disgust", "narrow", "worried", "mid_soft") + gen "It's so that you'll come to know that words are just words, and they only hurt if you let them." ("base", xpos="far_left", ypos="head") + her @ tears mascara "..." ("normal", "narrow", "worried", "mid_soft") + gen "Once you truly understand that nothing will hold you back." ("base", xpos="far_left", ypos="head") + gen "And you'll be at your utmost potential." ("grin", xpos="far_left", ypos="head") + her @ tears mascara "You really think so?" ("open", "narrow", "worried", "mid_soft") + her @ tears mascara "" ("normal", "narrow", "worried", "mid_soft") + gen "Yes, in fact I do." ("base", xpos="far_left", ypos="head") + her @ tears mascara "Thank you, [name_genie_hermione]." ("normal", "closed", "base", "mid") + her @ tears mascara "I can do it, I know I can." ("base", "narrow", "worried", "mid_soft") + "-Tell her she deserves it-": + gen "You deserve to be called a slut, a whore and a mudblood... Just look at you." ("angry", xpos="far_left", ypos="head") + her @ tears mascara_soft_blink "..." ("scream", "happyCl", "worried", "mid") + her @ tears mascara_soft "" ("disgust", "happyCl", "worried", "mid") + gen "You walk into my office and sell your body for the sole reason that it will make Gryffindor happy to win the house cup." ("angry", xpos="far_left", ypos="head") + her @ tears mascara_soft_blink "..." ("open", "happyCl", "worried", "mid") + her @ tears mascara_soft "" ("disgust", "happyCl", "worried", "mid") + gen "Bending over onto my desk and let yourself be taken like a some common harlot..." ("angry", xpos="far_left", ypos="head") + her @ tears mascara_soft "I..." ("disgust", "narrow", "worried", "mid_soft") + gen "Letting your headmaster thrust himself upon you, and taking my load like your life depended on it..." ("angry", xpos="far_left", ypos="head") + her @ tears mascara_soft "..." ("normal", "happyCl", "worried", "mid") + her @ tears mascara "" ("normal", "narrow", "worried", "mid_soft") + gen "I bet you don't even care about the points anymore..." ("base", xpos="far_left", ypos="head") + her @ tears mascara "I..." ("normal", "narrow", "worried", "down") + her @ tears mascara "" ("normal", "narrow", "annoyed", "up") + gen "You are nothing more than a whore..." ("base", xpos="far_left", ypos="head") + her @ tears mascara "" ("annoyed", "narrow", "annoyed", "up") + gen "{size=+4}{b}MY{/b}{/size} whore!" ("grin", xpos="far_left", ypos="head") + her @ tears mascara "" ("disgust", "narrow", "base", "up") + gen "And I {b}will{/b} call you however I want!" ("base", xpos="far_left", ypos="head") + her @ tears mascara "...." ("angry", "narrow", "base", "up") else: #Custom/fallback - her "That's a bit odd... But sure, you can call me that." ("soft", "squint", "base", "mid") + her "That's a bit odd...{w=0.4} But sure, you can call me that." ("soft", "squint", "base", "mid") $ name_hermione_genie = temp_name jump hermione_talk @@ -524,21 +568,35 @@ label hermione_change_fail: her "{size=-4}And I'm not a nerd...{/size}" ("annoyed", "base", "worried", "mid") if states.her.level >= 1: her "(I think...)" ("annoyed", "base", "worried", "R") + elif temp_name == "Hottie": + her "I don't think that would be appropriate, [name_genie_hermione]..." ("open", "closed", "base", "mid") + gen "You'd feel a lot better if you tried to be less critical of yourself..." ("base", xpos="far_left", ypos="head") + her "*Huh*?" ("open", "base", "base", "mid") + elif temp_name == "Angel": + her "I certainly am!" ("open", "closed", "base", "mid") + her "But I won't let you call me that..." ("open", "base", "base", "mid") + elif temp_name == "Minx": + her "That is neither appropriate, nor true!" ("annoyed", "closed", "base", "mid") elif temp_name == "Good Girl": her "I'm not letting you call me that, [name_genie_hermione]!" ("open", "closed", "angry", "mid") if states.her.level >= 3: her "(Although it's kinda cute he said that...)" ("base", "base", "base", "R") - elif temp_name == "Little Girl": - her "I won't let you call me that, [name_genie_hermione]!" ("open", "closed", "angry", "mid") - if states.her.level >= 5: - her "(I hope they'd grow out more...)" ("disgust", "narrow", "worried", "down") - her "*sigh*" ("annoyed", "closed", "base", "mid") - her "" ("normal", "base", "base", "R") - elif temp_name == "Bad Girl": - her "I am not a [temp_name]!" ("open", "base", "angry", "mid") - if states.her.level >= 7: - her "(Or am I...?)" ("disgust", "base", "base", "R") - her "" ("normal", "base", "base", "R") + #elif temp_name == "Little Girl": + #her "What's going on with these silly nicknames of yours all of a sudden?" ("normal", "squint", "angry", "mid") + #gen "What do you mean by silly?" ("base", xpos="far_left", ypos="head") + #her "It makes it sound as if I'm your..." ("soft", "base", "worried", "R") + #her "I won't let you call me that, [name_genie_hermione]!" ("open", "closed", "angry", "mid") + #if states.her.level >= 16: + #her "(Surely my chest is big enough...)" ("disgust", "narrow", "worried", "down") + #her "*Sigh*" ("annoyed", "closed", "base", "mid") + #her "" ("normal", "base", "base", "R") + #elif temp_name == "Bad Girl": + #her "I guess I am a bit." ("soft", "narrow", "worried", "down") + #her "I did fail that test after all..." ("disgust", "narrow", "base", "down") + #her "Wait... You meant it in a--{w=0.2} I am not a [temp_name]!" ("open", "base", "angry", "mid") + #if states.her.level >= 7: + #her "(Or am I...?)" ("disgust", "base", "base", "R") + #her "" ("normal", "base", "base", "R") elif temp_name == "Princess": her "This is inappropriate, [name_genie_hermione]!" ("open", "base", "angry", "mid") if states.her.level >= 9: @@ -547,6 +605,37 @@ label hermione_change_fail: her "Are you joking, [name_genie_hermione]?" ("open", "base", "worried", "mid") if states.her.level >= 11: her "(Why would he even suggest that?)" ("annoyed", "base", "base", "R") + elif temp_name == "Bitch": + her "I am not a dog!" ("open", "closed", "angry", "mid") + gen "That's not..." ("base", xpos="far_left", ypos="head") + gen "Alrighty then..." ("base", xpos="far_left", ypos="head") + elif temp_name == "Slut": + her "[name_genie_hermione]?!" ("shock", "wide", "worried", "stare") + her "You can't just call someone that!" ("mad", "wide", "base", "stare") + gen "It'll just be between us..." ("base", xpos="far_left", ypos="head") + her "..." ("disgust", "squint", "base", "mid") + gen "Nothing to add?" ("base", xpos="far_left", ypos="head") + her "" ("clench", "closed", "base", "mid", emote="angry") + gen "So, you'll let me call you that or not?" ("base", xpos="far_left", ypos="head") + her "{size=+5}No!{/size}" ("clench", "closed", "angry", "mid", emote="angry") + gen "..." ("base", xpos="far_left", ypos="head") + elif temp_name == "Cumslut": + her "{size=+5}A what?!{/size}" ("open", "wide", "worried", "stare") + gen "Something wrong?" ("base", xpos="far_left", ypos="head") + her @ cheeks blush "Do you even have to ask?" ("soft", "narrow", "angry", "down") + her @ cheeks blush "Calling someone--{w=0.4} That is so degrading!" ("angry", "narrow", "angry", "down") + her "I won't allow it!" ("angry", "closed", "angry", "down") + elif temp_name == "Slytherin Whore": + her "What did you just call me?!" ("open", "wide", "worried", "stare") + gen "*Err*... Nothing..." ("base", xpos="far_left", ypos="head") + her "*Hmph*..." ("annoyed", "narrow", "angry", "mid") + elif temp_name == "Mudblood": + her "A...{w=0.5} A...{w=0.5}{nw}" ("shock", "wide", "base", "stare") + her "A... A... M--Mm..." ("normal", "wide", "base", "stare") + gen "(This will end up badly...)" ("base", xpos="far_left", ypos="head") + gen "Mad stud! That's what I said!" ("base", xpos="far_left", ypos="head") + her "*Huh?*" ("normal", "wide", "base", "mid") + gen "Let's resume the favour trading... You mad stud, you..." ("base", xpos="far_left", ypos="head") else: her "I won't let you call me that!" ("shock", "closed", "angry", "mid") her "" ("normal", "base", "angry", "mid") diff --git a/game/scripts/characters/hermione/vars.rpy b/game/scripts/characters/hermione/vars.rpy index 407315dd..c2def48b 100644 --- a/game/scripts/characters/hermione/vars.rpy +++ b/game/scripts/characters/hermione/vars.rpy @@ -125,6 +125,7 @@ default states.her.ev.potions.polyjuice_luna_nude = False default states.her.ev.maid.intro_complete = False default states.her.ev.talk_to_me.caught_masturbating = False default states.her.ev.flirt_with_students.done_before = False +default states.her.ev.hg_pf_cumslut.choice = None default her_level_up = None # TODO: This var is used in an overly complicated manner, it should be removed once the issues are resolved. default current_job = None # TODO: Jobs should be using event class with enqueue feature instead. diff --git a/game/scripts/characters/hermione/wardrobe_reactions.rpy b/game/scripts/characters/hermione/wardrobe_reactions.rpy index f5e19d54..bd3f8cae 100644 --- a/game/scripts/characters/hermione/wardrobe_reactions.rpy +++ b/game/scripts/characters/hermione/wardrobe_reactions.rpy @@ -833,7 +833,6 @@ label her_reaction_equip_outfit(item): her "Ouch!" hide screen blkfade - her @ cheeks blush "" ("angry", "squint", "base", "mid") ##################### ## Egyptian Outfit ## diff --git a/game/scripts/characters/hooch/common.rpy b/game/scripts/characters/hooch/common.rpy index 08c21fcf..4deedae3 100644 --- a/game/scripts/characters/hooch/common.rpy +++ b/game/scripts/characters/hooch/common.rpy @@ -60,7 +60,7 @@ init python: hooch.animation = animation redraw = True - if flip != None: + if flip is not None: hooch.xzoom = -1 if flip else 1 redraw = True diff --git a/game/scripts/characters/luna/chibi.rpy b/game/scripts/characters/luna/chibi.rpy index bf02caaa..ab1ee509 100644 --- a/game/scripts/characters/luna/chibi.rpy +++ b/game/scripts/characters/luna/chibi.rpy @@ -100,15 +100,16 @@ label lun_chibi_scene(action="reset", xpos="mid", ypos="base"): $ chair_left_OBJ.hidden = True if action == "reset": - $ menu_y = 0.5 call lun_chibi("stand", xpos, ypos) call gen_chibi("sit_behind_desk") elif action in ("sit_on_lap", "sit_on_lap_grope"): show screen luna_chibi_scene("ch_lun_scene " + action, pos=(218, 205)) - elif action in ("inspect_idle", "inspect_idle_naked", "inspect_lean_idle_naked", "inspect_grope_breasts_naked", - "inspect_grope_vagina_naked", "inspect_lean_grope_breasts_naked", "inspect_lean_grope_vagina_naked"): + elif action in ( + "inspect_idle", "inspect_idle_naked", "inspect_lean_idle_naked", "inspect_grope_breasts_naked", + "inspect_grope_vagina_naked", "inspect_lean_grope_breasts_naked", "inspect_lean_grope_vagina_naked" + ): show screen luna_chibi_scene("ch_lun_scene " + action, pos=(218, 205)) return diff --git a/game/scripts/characters/luna/chitchats.rpy b/game/scripts/characters/luna/chitchats.rpy index 26ad1325..614003df 100644 --- a/game/scripts/characters/luna/chitchats.rpy +++ b/game/scripts/characters/luna/chitchats.rpy @@ -53,11 +53,11 @@ label luna_chitchat: block: lun "[name_genie_luna]...{w=0.4} There's something I've been meaning to ask you." ("open", "closed", "base", "mid") lun "Could we avoid putting up so many mistletoes during the holiday celebrations?" ("soft", "base", "base", "mid") - lun "It would highly decrease the risk of a Nargle infestation." ("open", "base", "base", "mid") + lun "It would highly decrease the risk of a nargle infestation." ("open", "base", "base", "mid") block: lun "Why are there no school trips at Hogwarts?" ("open", "base", "raised", "mid") - lun "I'd love to take one to Sweden and look for the Crumple-Horned Snorkack." ("grin", "base", "base", "mid") + lun "I'd love to take one to Sweden and look for the crumple-horned snorkack." ("grin", "base", "base", "mid") block: lun "[name_genie_luna], you really need to do something about Peeves." ("annoyed", "base", "base", "R") @@ -155,14 +155,50 @@ label luna_chitchat: block: lun "How come you're so skilled at unhooking a woman's bra, [name_genie_luna]?" ("open", "base", "base", "down") - lun "Wait, what am I saying...{w=0.4} Of course the great Albus Dumbledore can do it with ease..." ("angry", "wide", "base", "mid") + lun "Wait, what am I saying...{w=0.4} Of course the great Albus Dumbledore can do it with ease..." ("angry", "wide", "base", "mid") - # elif states.lun.tier == 4: + elif states.lun.tier == 4: - # lun "My fingers just aren't big enough to get rid of these spurts properly." - # lun "I hope well be able to find even more ways to get rid of them." + random: + block: + lun "My fingers just aren't enough to get rid of these spurts properly." ("open", "narrow", "base", "downR") + lun "I hope we'll be able to find even more ways to get rid of them." ("soft", "narrow", "base", "mid") - # lun "I can't believe how slippery it got down there when you had me touch myself." - # lun "A bunch of slimy buggers is what they are!" + block: + lun "I can't believe how slippery it got down there when you had me touch myself." ("angry", "narrow", "base", "down") + lun "Such a slimy bunch of buggers!" ("angry", "base", "base", "mid") + + block: + lun "I can't wait to see what kind of method you've got in store for me next!" ("grin", "base", "base", "mid") + lun "If only my other classes could be this fun." ("grin", "narrow", "base", "mid") + + block: + lun "Master baiter, master baiter, I could never hate her!" ("smile", "closed", "base", "mid") + lun "Sorry [name_genie_luna]... I think peeves' chanting may have got to me." ("soft", "base", "base", "stare") + + block: + lun "I've noticed that I'm quite ticklish under my feet." ("soft", "base", "base", "down") + lun "Hold on... I wonder if wrackspurts are also affected by gravity..." ("mad", "base", "base", "mid") + + block: + lun "I never once thought that a finger would be able to fit inside me so easily." ("soft", "base", "raised", "down") + lun "I mean... I hadn't even considered putting a finger inside me before..." ("angry", "closed", "base", "mid") + + block: + lun "I've got a feeling... That tonight's gonna be a good night... That tonight's gonna be a go-ood night..." ("smile", "closed", "base", "mid") + lun "Oh, sorry [name_genie_luna]... We've been listening to this classical muggle song during our muggle studies, and I can't get it out of my head." ("angry", "wink", "base", "mid") + + block: + lun "It's a bit embarrassing to say..." ("soft", "narrow", "base", "downR") + lun "But I think I may have wet the bed last night." ("open", "narrow", "base", "downR") + lun "It appears I've gained the ability to expel the wrackspurts in my sleep..." ("angry", "base", "base", "mid") + + block: + lun "I feel quite comfortable being naked." ("open", "closed", "base", "mid") + lun "Of course, there's always the risk of wrackspurts getting inside, but at least I don't have to worry about my underwear getting wet." ("grin", "base", "base", "mid") + + block: + lun "I wonder if you'd be able to brew some sort of smell strengthening potion..." ("soft", "base", "base", "R") + lun "That way we could locate wrackspurts by the smell..." ("soft", "base", "base", "R") return diff --git a/game/scripts/characters/luna/common.rpy b/game/scripts/characters/luna/common.rpy index f4ddc843..3084c3d1 100644 --- a/game/scripts/characters/luna/common.rpy +++ b/game/scripts/characters/luna/common.rpy @@ -72,7 +72,7 @@ init python: luna.animation = animation redraw = True - if flip != None: + if flip is not None: luna.xzoom = -1 if flip else 1 redraw = True diff --git a/game/scripts/characters/luna/events/favors/inspect_her_body.rpy b/game/scripts/characters/luna/events/favors/inspect_her_body.rpy index 994925a9..26e61796 100644 --- a/game/scripts/characters/luna/events/favors/inspect_her_body.rpy +++ b/game/scripts/characters/luna/events/favors/inspect_her_body.rpy @@ -33,6 +33,10 @@ label ll_pf_inspect_end: if states.lun.level < 9: $ states.lun.level += 1 + elif states.lun.tier == 4: + if states.lun.level < 12: + $ states.lun.level += 1 + jump end_luna_event ### Tier 2 ### @@ -42,7 +46,7 @@ label ll_pf_inspect_T2_E1_intro: call ll_pf_inspect gen "Ready for your physical, [name_luna_genie]?" ("grin", xpos="far_left", ypos="head") - lun "My physical, [name_genie_luna]?" ("open", "base", "raised", "mid") + lun "My physical, [name_genie_luna]?" ("open", "base", "raised", "mid", xpos="base", ypos="base", trans=d3) gen "Your inspection!" ("grin", xpos="far_left", ypos="head") lun "Oooh...{w=0.3} The inspection!" ("grin", "base", "base", "mid") lun "Yes, I'm ready!" ("base", "base", "base", "mid") @@ -114,9 +118,9 @@ label ll_pf_inspect_T2_E1_intro: nar "Focusing your attention on the girl's breasts, you feel your cock harden more and more with each stroke..." - lun "Great! So, what do I have to do to get the Wrackspurts out of them?" ("smile", "base", "base", "mid") + lun "Great! So, what do I have to do to get the wrackspurts out of them?" ("smile", "base", "base", "mid") gen "*Mmm*...{w=0.4} The what, sorry?" ("base", xpos="far_left", ypos="head") - lun "The Wrackspurts, [name_genie_luna]..." ("open", "base", "raised", "mid") + lun "The wrackspurts, [name_genie_luna]..." ("open", "base", "raised", "mid") gen "*Ah*...{w=0.4} Those bloody things." ("base", xpos="far_left", ypos="head") gen "Let's see..." ("base", xpos="far_left", ypos="head") gen "Tell...{w=0.4} *Ngh*...{w=0.4} Tell me a bit about them..." ("base", xpos="far_left", ypos="head") @@ -132,7 +136,7 @@ label ll_pf_inspect_T2_E1_intro: lun "[name_genie_luna]?" ("open", "base", "raised", "mid") gen "What?!" ("angry", xpos="far_left", ypos="head") gen "Oh yes...{w=0.3} Your tits!" ("grin", xpos="far_left", ypos="head") - gen "It appears the Spurts gather around sensitive areas..." ("base", xpos="far_left", ypos="head") + gen "It appears the spurts gather around sensitive areas..." ("base", xpos="far_left", ypos="head") gen "So with that in mind..." ("base", xpos="far_left", ypos="head") gen "Would you say that your breasts fit that description, [name_luna_genie]?" ("base", xpos="far_left", ypos="head") lun "*Hmm*...{w=0.4} Well, my nipples do get a bit hard and sensitive whenever they bothered me previously..." ("open", "narrow", "base", "downL") @@ -153,7 +157,7 @@ label ll_pf_inspect_T2_E1_intro: nar "You keep stroking your cock, thinking about what you'd do to those nipples..." lun @ cheeks blush "Wait...{w=0.4} So I've been doing it wrong the whole time!?" ("angry", "base", "base", "mid") - gen "Yes...{w=0.4} *Nghh*...{w=0.4} It appears what you've been feeling is the Spurts trying to get out, you see..." ("base", xpos="far_left", ypos="head") + gen "Yes...{w=0.4} *Nghh*...{w=0.4} It appears what you've been feeling is the spurts trying to get out, you see..." ("base", xpos="far_left", ypos="head") lun "Ooooh..." ("open", "base", "base", "stare") lun "That makes so much sense!" ("grin", "wide", "base", "mid") lun @ cheeks blush "I can't believe I didn't think of that before!" ("angry", "base", "base", "down") @@ -212,8 +216,8 @@ label ll_pf_inspect_T2_E1_intro: nar "Luna turns back around, and as you get a full view of her front, you feel yourself getting close to the edge." lun @ cheeks blush "So that's how you came up with the idea of rubbing your penis, [name_genie_luna]!" ("grin", "wink", "base", "mid", trans=dissolve) - lun @ cheeks blush "To bait the Wrackspurts to one spot!" ("crooked_smile", "base", "base", "mid") - lun @ cheeks blush "Since your penis is a sensitive area, rubbing it gets the Wrackspurts all excited..." ("smile", "closed", "base", "mid") + lun @ cheeks blush "To bait the wrackspurts to one spot!" ("crooked_smile", "base", "base", "mid") + lun @ cheeks blush "Since your penis is a sensitive area, rubbing it gets the wrackspurts all excited..." ("smile", "closed", "base", "mid") nar "*Fap* *Fap* *Fap*..." @@ -276,7 +280,7 @@ label ll_pf_inspect_T2_E1_intro: nar "Luna starts grinding her legs together uncomfortably..." - gen "Well perhaps--" ("base", xpos="far_left", ypos="head") + gen "Well, perhaps--" ("base", xpos="far_left", ypos="head") lun @ cheeks blush "I know!" ("smile", "wide", "base", "mid") lun @ cheeks blush "[name_genie_luna]...{w=0.2} Why don't you teach me?" ("smile", "base", "base", "mid") gen "..." ("grin", xpos="far_left", ypos="head") @@ -368,7 +372,7 @@ label ll_pf_inspect_T2_E1_intro: hide screen blkfade with d5 - lun "" ("base", "base", "base", "mid", xpos="base", ypos="base", flip=False, trans=dissolve) + lun "" ("base", "base", "base", "mid", xpos="base", ypos="base", flip=False, trans=d3) pause .2 if game.daytime: @@ -394,7 +398,7 @@ label ll_pf_inspect_T2_E2_intro: call ll_pf_inspect gen "Alright, time to give those spurts a run for their money..." ("base", xpos="far_left", ypos="head") - lun "Finally!" ("clench", "narrow", "base", "down") + lun "Finally!" ("clench", "narrow", "base", "down", xpos="base", ypos="base", trans=d3) gen "Now, are you sure you're ready for this--" ("base", xpos="far_left", ypos="head") if luna.is_any_worn("robe", "accessory"): @@ -455,118 +459,208 @@ label ll_pf_inspect_T2_E2_intro: show screen blkfade with d5 - nar "Luna rushes up to your desk, and without any further instructions, plants her cheeks firmly in your lap, waiting for your next move expectantly." + nar "You get out of your clothes, as Luna rushes up to you..." + nar "Without any further instructions, she plants her cheeks firmly in your lap, waiting for your next move expectantly." + + #Luna CG in Genie lap + if game.daytime: + show lun_inspect legs_together eyes_closed as cg zorder 16 + else: + show lun_inspect legs_together eyes_closed as cg zorder 16 at color_temperature(1.0) - #Fades back to Luna in your lap - call lun_chibi_scene("inspect_idle_naked") hide screen blkfade with d5 nar "Before moving on, you can't help but pick up the sounds of her shallow breaths and the unusual warmth, despite her current state of undress, coming off her body." - nar "You feel your cock harden slightly beneath your robes, almost at the verge of pressing up in between the girl's cheeks." - gen "*Ahem*...{w=0.4} So...{w} The sensitive areas we discussed previously." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Mmm*..." ("soft", "closed", "low", "mid", xpos="mid", ypos="base", flip=True, trans=dissolve) - gen "[name_luna_genie]?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "(His breath on the back of my neck... It's making me all tingly again...)" ("soft", "closed", "worried", "mid") - gen "Luna?" ("base", xpos="far_left", ypos="head") - gen "I guess we'll start with your breasts then..." ("grin", xpos="far_left", ypos="head") + nar "You feel your cock twitch slightly, as if signalling your eagerness to let it press up in between the girl's cheeks." + gen "*Ahem*...{w=0.4} So...{w} The sensitive areas we discussed previously." - call lun_chibi_scene("inspect_grope_breasts_naked") - with d3 - pause 2 - call lun_chibi_scene("inspect_idle_naked") - with d3 + show lun_inspect mouth_soft as cg with d3 - lun @ cheeks blush "Ooooh!" ("open", "wide", "base", "stare") + lun "*Mmm*..." + gen "[name_luna_genie]?" + + show lun_inspect eyes_halflid_up mouth_base as cg with d3 + + lun "(His breath on the back of my neck... It's making me all tingly again...)" + gen "Luna?" + gen "I guess we'll start with your breasts then..." + + show lun_inspect arms_touch_tits eyebrows_shocked eyes_wide_up mouth_grin as cg with d3 + + lun "Ooooh!" + + show lun_inspect eyebrows_base eyes_base_stare as cg with d3 + + gen "*Hmm*... You're remarkably more sensitive than I thought..." + + show lun_inspect eyebrows_raised eyes_base_right mouth_open as cg with d3 + + lun "I am? Is that a good thing?" + gen "It certainly shows great promise..." + + show lun_inspect eyebrows_base eyes_base_down mouth_base as cg with d3 + + lun "I'm glad..." + gen "Now then... Let's try something..." + + show lun_inspect eyes_base_right mouth_open as cg with d3 + + lun "What are you--" + + show lun_inspect arms_grab eyebrows_angry eyes_closed mouth_grin as cg with d3 + lun "*Ah*...{w=0.8}{nw}" + show lun_inspect arms_touch_tits eyebrows_base as cg + + lun "*Ah*...{fast}{w=0.4}{nw}" + + show lun_inspect eyes_halflid_down as cg + + lun "*Ah*...{fast}" nar "You give Luna's breasts a light squeeze, which causes a shudder to go down her spine..." - gen "How did that feel?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ehm*..." ("soft", "narrow", "base", "down") - gen "Good?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "I...{w=0.4} Yes...{w=0.4} I wasn't sure if good was the right word--" ("mad", "base", "base", "down") - gen "Excellent...{w=0.4} Then focus on that feeling..." ("base", xpos="far_left", ypos="head") + gen "How did that feel?" - call lun_chibi_scene("inspect_grope_breasts_naked") + show lun_inspect eyes_halflid_right blush mouth_base as cg with d3 - nar "You begin kneading Luna's breasts... Her nipples firmly locked between your fingers." + lun "*Ehm*..." + gen "Good?" - lun @ cheeks blush "*Ah*..." ("open", "happyCl", "low", "mid") - lun @ cheeks blush "[name_genie_luna]...{w=0.4} I think it's working...{w=0.4} I feel a lot more sensitive than before..." ("soft", "happyCl", "base", "mid") - gen "Good...{w=0.4} That means the spurts are building up." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ah*...{w=0.4} Finally...{w=0.4} Keep going, [name_genie_luna]..." ("angry", "happyCl", "base", "stare") + show lun_inspect eyebrows_shocked eyes_base_down as cg with d3 - nar "As you continue, Luna tightens her thighs around your legs, and subconsciously pushes her ass back towards your abdomen." - nar "Her cheeks lightly grace your hardening cock, and as they do, the tip of your cock manages to wiggle its way out of your robes." + lun "I...{w=0.4} Yes...{w=0.4} I wasn't sure if \"good\" was the right word--" + gen "Excellent...{w=0.4} Then focus on that feeling..." - lun @ cheeks blush "*Mmm*...{w=0.4} [name_genie_luna]..." ("base", "closed", "base", "mid") - gen "You're doing a great job [name_luna_genie]..." ("base", xpos="far_left", ypos="head") - gen "Make sure to keep focusing on that feeling." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "But [name_genie_luna], I think I feel the wrackspurts--" ("mad", "closed", "annoyed", "mid") + show lun_inspect arms_grab eyebrows_base eyes_closed as cg with d3 + + nar "You begin kneading Luna's breasts... Her nipples gracing the sides your fingers." + + show lun_inspect mouth_soft as cg with d3 + + lun "*Ah*..." + + show lun_inspect eyes_halflid_right mouth_soft as cg with d3 + + lun "[name_genie_luna]...{w=0.4} I think it's working...{w=0.4} I feel a lot more sensitive than before..." + + show lun_inspect arms_touch_tits as cg with d3 + gen "Good...{w=0.4} That means the spurts are building up." + + show lun_inspect mouth_base as cg with d3 + + lun "*Ah*...{w=0.4} Finally...{w=0.4} Keep going, [name_genie_luna]..." nar "You stop your kneading and give her another squeeze, just slightly harder than previously." - lun @ cheeks blush "*Ah*..." ("grin", "closed", "base", "L") + show lun_inspect arms_grab eyebrows_angry eyes_base_stare mouth_grin as cg with d3 + pause 0.4 + show lun_inspect -arms_grab arm_right_down arm_left_hold eyebrows_base eyes_base_stare mouth_open as cg with d3 - nar "And as you do, Luna clenches her butt-cheeks around the bottom of your shaft, the tip of your penis now sticking out of your robes right above her tailbone." + nar "As you do, Luna jerks her body, and you quickly let go of her breasts." - lun @ cheeks blush "I--" ("soft", "closed", "base", "mid") + #Ass shot Overlay + show lun_inspect as cg zorder 15 - nar "You run your fingers along the sides of her breasts, lightly brushing against her." + show image "#00000080" as cg_effect1 zorder 15 + with d3 + show lun_grind_border as cg_effect2 zorder 15 at cg_transition + if game.daytime: + show lun_grind resting as cg2 zorder 16 at cg_transition + else: + show lun_grind resting as cg2 zorder 16 at color_temperature(1.0), cg_transition - lun @ cheeks blush "*Ah*...{w=0.4} Yes, it definitely feels a lot more intense than...{w=0.4} *Mmm*..." ("open", "closed", "base", "mid") - lun @ cheeks blush "But I'm not feeling that--{w=0.2} *Ah*...{w=0.4} Relief you mentioned..." ("mad", "closed", "base", "mid") - lun @ cheeks blush "My body still feels as if--{w=0.2} *Ah*...{w=0.4} As if I'm on fire, [name_genie_luna]..." ("angry", "happyCl", "base", "mid") + pause 1 - nar "Luna gives up to the sensation, and starts rubbing her ass against you... The tip of your cock sliding between her ass-cheeks with each thrust." + nar "Suddenly, Luna's thighs tighten around your legs, as she pushes her ass back towards your abdomen." + nar "Her cheeks lightly grace your hardening cock, and as they do, it manages to wiggle its way to rest against her butthole." + nar "Luna, doesn't seem to care that you've let go of her breasts and is instead staring intently into your eyes." - gen "(If this keeps going, then this bitch in heat will make me bust before she does...)" ("angry", xpos="far_left", ypos="head") - lun @ cheeks blush "I think something is happening...{w=0.4} I feel woozy, [name_genie_luna]..." ("angry", "happyCl", "low", "mid") + lun "[name_genie_luna]..." + lun "[name_genie_luna], I think I'm sensing something different..." - call lun_chibi_scene("inspect_lean_grope_breasts_naked") - nar "Luna slumps forward slightly...{w=0.4} Her ass-cheeks, now fully embracing the bottom of your shaft." + nar "As Luna calls for you, a pulse races down your cock, tickling her tight butthole." - lun @ cheeks blush "(Is...{w=0.4} Is that his...)" ("clench", "narrow", "base", "downL") + lun "*Ah*..." - call lun_chibi_scene("inspect_grope_breasts_naked") - nar "Arching her back up again, Luna's cheeks slide over your cock once more, which is enough to bring you over the edge." + nar "As Luna lets out another moan, she instinctively puts more of her weight onto you, heightening the pleasurable sensation at the tip of your cock." - gen "*ARGH*!!!" ("angry", xpos="far_left", ypos="head") - lun @ cheeks blush "" ("clench", "narrow", "base", "stare") #surprised - pause .5 - gen "(You've done it now slut!)" ("angry", xpos="far_left", ypos="head") - gen "(Take this!)" ("angry", xpos="far_left", ypos="head") + show lun_grind resting_spread as cg2 with d3 + gen "(*Ngh*... If only I could--)" - call cum_block + show lun_grind spring_out as cg2 with d3 + play sound "sounds/boing02.ogg" + pause 0.8 - call lun_chibi_scene("inspect_idle_naked") - nar "With a rush of pleasure, you unload a torrent of semen across Lunas back, completely covering it with your seed." + nar "Just as you start feeling yourself getting engulfed, your cock slides out to rest against Luna's crack." - lun @ cheeks blush "(What's he--)" ("clench", "narrow", "base", "R") #Pleasure/confused + show lun_grind idle as cg2 with d3 - gen "*Ah*!!!" ("angry", xpos="far_left", ypos="head") - call cum_block + gen "(Damn it...)" - nar "And with a soft groan, you let out a final spurt, emptying your entire sack on the girl..." - nar "Your semen, which reached all the way up onto her hair, slowly begins sliding down her back." + show lun_grind grind as cg2 with d3 - gen "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "[name_genie_luna], I think...{w=0.4} I feel a bit faint..." ("mad", "narrow", "low", "down") - gen "*Ah*...{w=0.4} No, you just need to--{w=0.2} *Ah*...{w=0.4} To push through--" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "No [name_genie_luna]...{w=0.4} It's as if a chill is going down my spine...{w=0.4} It doesn't feel right." ("clench", "wide", "base", "stare") - lun @ cheeks blush "It's nowhere near the feeling of relief that you described..." ("disgust", "narrow", "base", "stare") - gen "*Err*...{w=0.4} Well I--" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "I think I need to--" ("disgust", "narrow", "base", "down") - gen "No, wait!" ("angry", xpos="far_left", ypos="head") + nar "With the sensation gone, Luna starts rubbing up against you." + call ctc + + lun "*Ah*...{w=0.4} I definitely felt something happening for a moment..." + lun "Although, I'm not sensing that--{w=0.2} *Ah*...{w=0.4} Relief you mentioned..." + lun "My body still feels as if--{w=0.2} *Ah*...{w=0.4} As if I'm on fire, [name_genie_luna]..." + gen "(If this keeps going, then this bitch in heat will make me bust before she does...)" + lun "I think something is happening...{w=0.4} I feel woozy, [name_genie_luna]..." + + nar "The sound of Luna's voice starts to fade away as her rubbing brings you closer and closer to the edge..." + + lun "*Ah*... [name_genie_luna]... Something is--" + + nar "Luna's cheeks pushes against your cock once more, which is enough to bring you over the edge." + + gen "(You've done it now slut!)" + gen "(Take this!)" + gen "*ARGH*!!!" + + show lun_grind cumshot as cg2 with d3 + pause 1 + + nar "You grab Luna's ass, and as a rush of pleasure courses through your body, you unload a torrent of semen all over it." + + lun "(What did he just--)" + gen "*Ah*..." + + nar "While you return to your senses, your semen slowly begins sliding down her crack." + + show lun_inspect eyebrows_shocked eyes_halflid_right as cg + hide cg2 + hide cg_effect2 + hide cg_effect1 with d3 + + gen "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." + + show lun_inspect eyebrows_worried eyes_halflid_down mouth_soft as cg with d3 + + lun "[name_genie_luna], I think...{w=0.4} I feel a bit faint..." + gen "*Ah*...{w=0.4} No, you just need to--{w=0.2} *Ah*...{w=0.4} To push through--" + + show lun_inspect eyebrows_worried eyes_halflid_right mouth_open as cg with d3 + lun "No [name_genie_luna]...{w=0.4} It's as if a chill is going down my spine...{w=0.4} It doesn't feel right." + + show lun_inspect eyes_halflid_down as cg with d3 + lun "It's nowhere near the feeling of relief that you described..." + + gen "*Err*...{w=0.4} Well I--" + + show lun_inspect eyes_closed mouth_soft as cg with d3 + lun "I think I need to--" + gen "No, wait!" show screen blkfade with d5 - nar "Luna, now shaking slightly, stands up and makes her way to the front of your desk, leaving a noticeable wet streak across your robes." - nar "She begins dressing herself, keeping her eyes on the floor the entire time." + nar "Luna, now shaking slightly, stands up and makes her way to the front of your desk, leaving a noticeable wet streak across your legs." + nar "You both begin dressing yourselves, and you can't help but notice that Luna is keeping her eyes on the floor the entire time." $ luna.wear("all") hide luna_main + hide cg call lun_chibi("stand", "desk", "base") - call lun_chibi_scene("reset") hide screen blkfade with d5 #Fade back to Luna in front of your desk. @@ -576,8 +670,9 @@ label ll_pf_inspect_T2_E2_intro: nar "Luna shuffles uncomfortably and then glances up at you, seemingly unable to find what to say..." gen "(Good job me...{w=0.4} I have royally fucked it up this time.)" ("base", xpos="far_left", ypos="head") + gen "(Of course, me of all people would blow my load too soon!)" ("base", xpos="far_left", ypos="head") gen "Look, accidents happen to the best of--" ("base", xpos="far_left", ypos="head") - lun "I'm sorry [name_genie_luna]!" ("angry", "narrow", "worried", "mid", xpos="base", ypos="base", flip=False, trans=dissolve) + lun "I'm sorry [name_genie_luna]!" ("angry", "narrow", "worried", "mid", xpos="mid", ypos="base", flip=False, trans=dissolve) gen "..." ("angry", xpos="far_left", ypos="head") lun "You were right..." ("upset", "narrow", "worried", "down") lun "I guess I wasn't ready..." ("open", "closed", "worried", "down") @@ -655,255 +750,412 @@ label ll_pf_inspect_T2_E3_intro: call ll_pf_inspect gen "Ready for another attempt?" ("base", xpos="far_left", ypos="head") - lun "I...{w=0.3} Yes [name_genie_luna], I believe so..." ("open", "narrow", "base", "downL") + lun "I...{w=0.3} Yes [name_genie_luna], I believe so..." ("open", "narrow", "base", "downL", xpos="base", ypos="base", trans=d3) #Luna walks towards desk and it fades to black call lun_walk("desk") show screen blkfade with d5 - nar "Luna absent-mindedly walks up and scoots in front of you." + nar "As you disrobe, Luna absent-mindedly walks up and scoots in front of you." - if luna.is_any_worn("top", "bottom", "robe"): - call lun_chibi_scene("inspect_idle") + #Luna CG in Genie lap + + if luna.is_worn("top"): + show lun_inspect spread_legs shirt as cg else: - call lun_chibi_scene("inspect_idle_naked") + show lun_inspect spread_legs bra as cg + if luna.is_worn("bottom"): + show lun_inspect spread_legs skirt as cg + if luna.is_worn("stockings"): + show lun_inspect spread_legs stockings as cg + + if game.daytime: + show lun_inspect spread_legs eyebrows_worried eyes_halflid_stare mouth_soft bra panties arm_right_down as cg + else: + show lun_inspect spread_legs eyebrows_worried eyes_halflid_stare mouth_soft bra panties arm_right_down as cg at color_temperature(1.0) + hide screen blkfade with d5 - gen "*Err*...{w=0.3} I think you've forgotten something [name_luna_genie]." ("base", xpos="far_left", ypos="head") - lun "*Huh*?" ("soft", "narrow", "base", "mid", xpos="mid", ypos="base", flip=True, trans=dissolve) + gen "*Err*...{w=0.3} I think you've forgotten something, [name_luna_genie]." - if luna.is_any_worn("top", "bottom", "robe"): - gen "Your clothes..." ("base", xpos="far_left", ypos="head") + show lun_inspect eyebrows_shocked eyes_halflid_right as cg with d3 + lun "*Huh*?" + + if luna.is_any_worn("top", "bottom", "stockings"): + gen "Your clothes..." else: - gen "Your underwear..." ("base", xpos="far_left", ypos="head") + gen "Your underwear..." - lun "Oh...{w=0.3} Right..." ("angry", "narrow", "base", "down") - gen "You seem awfully distracted today." ("base", xpos="far_left", ypos="head") - lun "*Ehm*...{w=0.3} To tell you the truth...{w=0.3} I'm a bit worried that it's not going to work again, [name_genie_luna]." ("open", "narrow", "base", "downL") - gen "Now, I wouldn't worry about that...{w=0.3} I'm confident it will work this time." ("base", xpos="far_left", ypos="head") - lun "But how can you be so sure, [name_genie_luna]?" ("mad", "narrow", "base", "mid") - lun "Maybe it's different for us women, maybe we aren't able to expel the wrackspurts like you men do." ("angry", "narrow", "base", "mid") - gen "I'm quite certain that the process isn't too dissimilar...{w=0.3} I'm confident that with my help--" ("base", xpos="far_left", ypos="head") - lun "But {i}how{/i} do you know, [name_genie_luna]?" ("angry", "narrow", "base", "mid") - gen "Just trust me on this one [name_luna_genie]." ("base", xpos="far_left", ypos="head") - lun "*Hmm*..." ("upset", "narrow", "base", "downL") - gen "(She doesn't seem convinced.)" ("base", xpos="far_left", ypos="head") - gen "(Oh, wait...{w=0.3} I know!)" ("grin", xpos="far_left", ypos="head") + show lun_inspect eyebrows_base eyes_halflid_down mouth_open as cg with d3 - gen "*Ahem*...{w=0.3} [name_luna_genie]?" ("base", xpos="far_left", ypos="head") - lun "Yes [name_genie_luna]?" ("upset", "base", "base", "mid") - gen "Tell me...{w=0.3} How were those spratters described in your father's paper again?" ("base", xpos="far_left", ypos="head") - lun "Let me think.{w=0.5} They're invisible creatures that enter inside your ears and make your brain go all fuzzy." ("angry", "base", "base", "mid") - gen "And...{w=0.3} Wasn't there an instruction on how to expel them?" ("base", xpos="far_left", ypos="head") - lun "Why yes, by thinking positively..." ("soft", "narrow", "base", "mid") - lun "But that's not working, [name_genie_luna]...{w=0.3} It isn't my brain that's getting all fuzzy because of them..." ("clench", "narrow", "base", "mid") - gen "Then tell me...{w=0.3} What else have we learned about them thus far?" ("base", xpos="far_left", ypos="head") - lun "*Uhm*..." ("upset", "base", "base", "downR") - lun "We have learned that you can lure them out to a particularly sensitive body area, through positive thoughts. Then, you need to rub that spot energetically to finally expel them..." ("angry", "narrow", "base", "down") - lun "But we have already tried that [name_genie_luna], and it didn't work!" ("annoyed", "narrow", "base", "R") - gen "I managed to do it by myself...{w=0.3} So you must have done something wrong..." ("base", xpos="far_left", ypos="head") - lun "*Hmm*..." ("upset", "narrow", "base", "downL") - gen "(Putting the pieces together...{w=0.3} And...)" ("base", xpos="far_left", ypos="head") - lun "Oh! I know!" ("smile", "wide", "base", "stare") - lun "I was possibly thinking too much about the wrackspurts, and how glad I'd be to finally get rid of them." ("mad", "wide", "base", "mid") - lun "What I should have done instead was project positive thoughts onto the area itself!" ("smile", "narrow", "base", "down") - gen "Exactly!" ("grin", xpos="far_left", ypos="head") - gen "Ignore intrusive thoughts that may pop into your head, and just focus on your body, on how it feels..." ("base", xpos="far_left", ypos="head") - gen "Let the sensations engulf you completely, until your mind is clear..." ("base", xpos="far_left", ypos="head") - gen "Leave the rest to the fate..." ("base", xpos="far_left", ypos="head") - lun "That's smart, [name_genie_luna], maybe I should try that." ("crooked_smile", "narrow", "base", "mid") - gen "Now then... Ready for another try?" ("base", xpos="far_left", ypos="head") - lun "Yes, I'm ready [name_genie_luna]!" ("base", "base", "base", "mid") + lun "Oh...{w=0.3} Right..." + gen "You seem awfully distracted today." - if luna.is_any_worn("robe", "top", "bottom", "accessory"): - gen "Let's get you out of those clothes first, shall we..." ("base", xpos="far_left", ypos="head") + show lun_inspect eyebrows_worried eyes_halflid_down mouth_annoyed as cg with d3 + + lun "*Ehm*...{w=0.3} To tell you the truth...{w=0.3} I'm a bit worried that it's not going to work again, [name_genie_luna]." + gen "Now, I wouldn't worry about that...{w=0.3} I'm confident it will work this time." + + show lun_inspect eyes_base_right as cg with d3 + + lun "But how can you be so sure, [name_genie_luna]?" + + show lun_inspect eyebrows_base mouth_open as cg with d3 + + lun "Maybe it's different for us women, maybe we aren't able to expel the wrackspurts like you men do." + gen "I'm quite certain that the process isn't too dissimilar...{w=0.3} I'm confident that with my help--" + + show lun_inspect eyebrows_worried as cg with d3 + + lun "But {i}how{/i} do you know, [name_genie_luna]?" + gen "Just trust me on this one, [name_luna_genie]." + + show lun_inspect eyes_halflid_down mouth_neutral as cg with d3 + + lun "*Hmm*..." + gen "(She doesn't seem convinced.)" + gen "(Oh, wait...{w=0.3} I know!)" + gen "*Ahem*...{w=0.3} [name_luna_genie]?" + + show lun_inspect mouth_open as cg with d3 + + lun "Yes [name_genie_luna]?" + gen "Tell me...{w=0.3} How were those spratters described in your father's paper again?" + + show lun_inspect eyebrows_raised mouth_soft as cg with d3 + + lun "Let me think...{w=0.5} They're invisible creatures that enter inside your ears and make your brain go all fuzzy." + gen "And...{w=0.3} Wasn't there an instruction on how to expel them?" + + show lun_inspect eyebrows_shocked eyes_base_down as cg with d3 + + lun "Why yes, by thinking positively..." + + show lun_inspect eyes_base_right mouth_annoyed as cg with d3 + + lun "But that's not working, [name_genie_luna]...{w=0.3} It isn't my brain that's getting all fuzzy because of them..." + gen "Then tell me...{w=0.3} What else have we learned about them thus far?" + + show lun_inspect eyes_base_up as cg with d3 + + lun "*Uhm*..." + + show lun_inspect eyes_base_right mouth_open as cg with d3 + + lun "We have learned that you can lure them out to a particularly sensitive body area, through positive thoughts. Then, you need to rub that spot energetically to finally expel them..." + + show lun_inspect eyebrows_angry eyes_halflid_right mouth_open as cg with d3 + + lun "But we have already tried that [name_genie_luna], and it didn't work!" + gen "I managed to do it by myself...{w=0.3} So you must have done something wrong..." + + show lun_inspect eyes_halflid_down mouth_annoyed as cg with d3 + + lun "*Hmm*..." + gen "(Putting the pieces together...{w=0.3} And...)" + + show lun_inspect eyebrows_shocked eyes_wide_stare mouth_open as cg with d3 + + lun "Oh! I know!" + + show lun_inspect eyes_wide_right as cg with d3 + + lun "I was possibly thinking too much about the wrackspurts, and how glad I'd be to finally get rid of them." + + show lun_inspect eyebrows_base eyes_base_right mouth_base as cg with d3 + + lun "What I should have done instead was project positive thoughts onto the area itself!" + gen "Exactly!" + gen "Ignore intrusive thoughts that may pop into your head, and just focus on your body, on how it feels..." + gen "Let the sensations engulf you completely, until your mind is clear..." + gen "Leave the rest to fate..." + + show lun_inspect mouth_grin as cg with d3 + + lun "That's smart, [name_genie_luna], maybe I should try that." + gen "Now then... Ready for another try?" + + show lun_inspect eyes_base_down mouth_base as cg with d3 + + lun "Yes, I'm ready [name_genie_luna]!" + + if luna.is_any_worn("top", "bottom", "stockings"): + gen "Let's get you out of those clothes first, shall we..." else: - gen "Now, let me help you get you out of those pesky undergarments..." ("base", xpos="far_left", ypos="head") + gen "Now, let me help you get you out of those pesky undergarments..." - #Fade to black - show screen blkfade - with d5 - if luna.is_any_worn("robe", "top", "bottom", "accessory"): + if luna.is_any_worn("top", "bottom", "stockings"): + show lun_inspect eyebrows_angry mouth_annoyed as cg with d3 + nar "Luna shuffles around for a bit, attempting to get out of her clothing. The limited space between you and the desk is making it somewhat difficult." - lun "It's a bit cramped in here, [name_genie_luna]...{w=0.4} Should I scoot out and--" ("base", "base", "base", "mid") - gen "No, that won't be necessary, [name_luna_genie]...{w=0.4} Let me help you." + show lun_inspect eyebrows_base eyes_halflid_down mouth_soft as cg with d3 - if luna.is_worn("robe"): - nar "You unclasp Luna's outerwear and let it drop to the ground behind her." + lun "It's a bit cramped in here, [name_genie_luna]...{w=0.4} Should I scoot out and--" + gen "No, that won't be necessary, [name_luna_genie]...{w=0.4} Let me help you." + else: + gen "Allow me..." if luna.is_worn("top"): nar "You swiftly pull Luna's top over her head...{w=0.4} Her breasts bounce a little, then settle still as the offending piece of clothing is taken off." + + play sound "sounds/cloth_sound3.ogg" play sound "sounds/boing02.ogg" + show lun_inspect spread_legs eyes_wide_down mouth_open -shirt as cg with d3 pause .4 - lun "Whoa!" ("base", "base", "base", "mid") + lun "Whoa!" #Luna always wears underwear at this stage nar "You unhook Luna's bra with ease, and let it drop to the floor, right in front of her." + play sound "sounds/cloth_sound3.ogg" + show lun_inspect spread_legs -bra as cg with d3 + + show lun_inspect spread_legs blush eyes_halflid_right mouth_soft as cg with d3 + nar "She glances back at you, her cheeks flushed, and a look of surprise painted across her face, caused by your unusual dexterity." - lun "Have you done this before, [name_genie_luna]?" ("base", "base", "base", "mid") - gen "Let's not make this about me, [name_luna_genie]. Free your mind of intrusive thoughts." ("base", xpos="far_left", ypos="head") - lun "Okay, I'll try." ("soft", "base", "base", "mid") + show lun_inspect spread_legs mouth_open as cg with d3 + + lun "Have you done this before, [name_genie_luna]?" + gen "Let's not make this about me, [name_luna_genie]. Free your mind of intrusive thoughts." + + show lun_inspect spread_legs eyes_halflid_down mouth_base as cg with d3 + lun "Okay, I'll try." if luna.is_worn("bottom", "panties"): - nar "Noticing Luna's ever-increasing excitement, you put your hands on either side of her hips, and pull both fabrics down, in one singular motion..." - $ luna.strip("bottom", "panties") - elif luna.is_worn("bottom"): - nar "Noticing Luna's ever-increasing excitement, you put your hands on either side of her hips, and pull the fabric down swiftly..." + nar "Noticing Luna's ever-increasing excitement, you put your hands on either side of her hips and pull both fabrics down, in one singular motion..." + play sound "sounds/cloth_sound3.ogg" + show lun_inspect spread_legs -skirt -panties as cg with d3 + pause 0.5 elif luna.is_worn("panties"): - nar "You oggle Luna's choice of underwear, before swiftly pulling them down right to her ankles..." + nar "You ogle at Luna's underwear, before swiftly pulling them down right to her ankles..." + play sound "sounds/cloth_sound3.ogg" + show lun_inspect spread_legs -panties as cg with d3 + pause 0.5 - lun @ cheeks blush "" ("clench", "narrow", "base", "downR") - $ luna.strip("clothes") - pause .2 - hide screen blkfade - #Fade back to Naked Luna in front of genie - call lun_chibi_scene("inspect_idle_naked") - with d5 + show lun_inspect spread_legs eyebrows_shocked eyes_wide_down mouth_open as cg with d3 - lun @ cheeks blush "[name_genie_luna]!" ("clench", "narrow", "base", "downR") - gen "Yes, [name_luna_genie]?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ehm*...{w=0.4} Never mind..." ("soft", "narrow", "base", "down") - gen "Okay. In that case, let the exorcism commence--." ("base", xpos="far_left", ypos="head") - gen "--*Err*, I mean the expulsion." ("angry", xpos="far_left", ypos="head") - lun @ cheeks blush "..." ("base", "narrow", "base", "down") #blush + lun "[name_genie_luna]!" + gen "Yes, [name_luna_genie]?" + + show lun_inspect spread_legs eyebrows_base eyes_halflid_left mouth_soft as cg with d3 + + lun "*Ehm*...{w=0.4} Never mind..." + gen "Okay. In that case, let the exorcism commence--." + gen "--*Err*, I mean the expulsion." + if luna.is_worn("stockings"): + + show lun_inspect spread_legs eyebrows_raised eyes_halflid_right as cg with d3 + + lun "What about my socks?" + gen "Your--{w=0.2} Oh, right! Get those grippers out for me, will you?" + + show lun_inspect spread_legs eyebrows_raised eyes_halflid_down as cg with d3 + + nar "Luna looks slightly confused for a second about what you meant, but then she shrugs it off and quickly takes off her socks..." + play sound "sounds/cloth_sound3.ogg" + show lun_inspect spread_legs -stockings as cg with d3 + + else: + show lun_inspect spread_legs eyebrows_raised eyes_halflid_down as cg with d3 + lun "..." + + show lun_inspect spread_legs eyebrows_shocked eyebrows_shocked eyes_wide_stare arms_grab mouth_grin as cg with d3 + + nar "Without hesitation, you reach around Luna and start fondling her breasts." + + show lun_inspect spread_legs eyebrows_base eyes_halflid_stare mouth_base as cg with d3 - call lun_chibi_scene("inspect_grope_breasts_naked") - nar "Without hesitation, you reach forward and grab and start fondling Luna's breasts." nar "As she feels your touch, any doubts in Luna's mind are washed away, letting the sensations overtake her." - lun @ cheeks blush "*Ah*...{w=0.4} [name_genie_luna]..." ("soft", "closed", "base", "mid") + show lun_inspect spread_legs eyes_closed mouth_soft as cg with d3 + + lun "*Ah*...{w=0.4} [name_genie_luna]..." + + show lun_inspect spread_legs arms_touch_tits as cg with d3 nar "You move your attention towards Luna's sensitive areas... Gently sliding your fingers across her nipples, then across the sides of her breasts and back again." - lun @ cheeks blush "*Mmm*..." ("normal", "closed", "base", "mid") + show lun_inspect spread_legs eyebrows_worried mouth_base as cg with d3 + + lun "*Mmm*..." nar "You continue massaging Luna's breasts and the silence is only broken by her moans as your fingers pass across her nipples." - lun @ cheeks blush "*Ah*...{w=0.4} *Ah*...{w=0.4} *Mmmm*..." ("soft", "closed", "base", "mid") + show lun_inspect spread_legs mouth_open as cg with d3 + + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} *Mmmm*..." nar "Luna, getting more and more excited by your touch, pushes her ass towards you once more." - - call lun_chibi_scene("inspect_lean_grope_breasts_naked") nar "As it graces your cock, you struggle not to get hard..." - gen "(Nnnn-{w=0.2} Not today!)" ("angry", xpos="far_left", ypos="head") + gen "(Nnnn-{w=0.2} Not today!)" + + show lun_inspect legs_together mouth_soft as cg with d3 - lun @ cheeks blush "" ("normal", "closed", "base", "mid") nar "Determined to keep your composure this time, you move your gaze down to see Luna rubbing her thighs together." - gen "(Well then...{w=0.4} Looks like she's ready.)" ("grin", xpos="far_left", ypos="head") + gen "(Well then...{w=0.4} Looks like she's ready.)" + + show lun_inspect legs_together -arms_touch_tits arm_right_down arm_left_hold eyes_halflid_right as cg with d3 - call lun_chibi_scene("inspect_lean_idle_naked") - lun @ cheeks blush "" ("soft", "narrow", "base", "R") nar "As you remove your hands from Luna's breasts, she opens her eyes, confused as to why you stopped." + + show lun_inspect legs_together arm_right_touch_pussy_pause as cg with d3 + nar "Without saying anything, you place your hand across her pussy, and give it a gentle rub." - lun @ cheeks blush "Ooooh!" ("crooked_smile", "wide", "base", "stare") + show lun_inspect legs_together eyebrows_shocked eyes_wide_stare mouth_grin as cg with d3 - call lun_chibi_scene("inspect_lean_grope_vagina_naked") + lun "Ooooh!" nar "A shudder passes through Luna's body from your initial touch." + + show lun_inspect legs_together arm_right_touch_pussy as cg with d3 #fingering loop + nar "You then begin moving your forefinger up and down her slit with increasing ease, as her pussy becomes wetter and wetter." - lun @ cheeks blush "*Ah*...{w=0.4} [name_genie_luna]...{w=0.4} This feels a lot different to you--{w=0.2} *Ah*...{w=0.4} Touching my breasts..." ("open", "wink", "base", "R") - gen "(You ain't seen nothing yet...)" ("base", xpos="far_left", ypos="head") + show lun_inspect legs_together eyebrows_base eyes_base_right as cg with d3 + lun "*Ah*...{w=0.4} [name_genie_luna]...{w=0.4} This feels a lot different to you--{w=0.2} *Ah*...{w=0.4} Touching my breasts..." + gen "(You ain't seen nothing yet...)" + + show lun_inspect legs_together eyes_closed mouth_base as cg with d3 + pause 1 nar "As you continue rubbing her, the excitement in her voice gnaws at your steadily decreasing patience..." - lun @ cheeks blush "*Ah*...{w=0.3} *Ah*...{w=0.3} *Ah*..." ("soft", "narrow", "base", "up") - gen "Ready, [name_luna_genie]?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "" ("soft", "narrow", "base", "up") #pleasure - pause .8 - gen "[name_luna_genie]?" ("base", xpos="far_left", ypos="head") - gen "..." ("base", xpos="far_left", ypos="head") - gen "(Fuck it...)" ("base", xpos="far_left", ypos="head") + show lun_inspect spread_legs arm_right_touch_pussy_pause as cg with d3 + + nar "As if by instinct, Luna spreads her legs once more, allowing you even easier access." + gen "Ready, [name_luna_genie]?" + lun "*Mmm*..." + gen "[name_luna_genie]?" + gen "..." + gen "(Fuck it...)" play sound "sounds/slick_02.ogg" + show lun_inspect legs_together arm_right_touch_pussy_inserted eyebrows_shocked eyes_wide_stare mouth_open as cg with d3 with kissiris pause .5 - call lun_chibi_scene("inspect_lean_idle_naked") - lun @ cheeks blush "..." ("scream", "wide", "base", "stare") #wide eyed - lun @ cheeks blush "[name_genie_luna]!" ("scream", "base", "base", "mid") + lun "[name_genie_luna]!" + nar "As you begin penetrating Luna with your index finger, she clenches her legs together in surprise." - nar "As you penetrate Luna with your index finger, she clenches her legs together in surprise." + show lun_inspect legs_together eyebrows_base eyes_wide_right mouth_soft as cg with d3 - lun @ cheeks blush "[name_genie_luna]...{w=0.4} Your finger slipped inside of me..." ("clench", "wide", "base", "mid") - gen "I know..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "What do you--" ("clench", "narrow", "base", "mid") + lun "[name_genie_luna]...{w=0.4} Your finger slipped inside of me..." + gen "I know..." + lun "What do you--" - call lun_chibi_scene("inspect_lean_grope_vagina_naked") play background "sounds/slickloop.ogg" fadein 2 - nar "You begin moving your finger inside of Luna, slowly increasing the pace, her words soon replaced by the sounds of increasing pleasure." + show lun_inspect legs_together arm_right_touch_pussy as cg with d3 - lun @ cheeks blush "*Ah*...{w=0.4} My word...{w=0.3} *Ah*...{w=0.4} I never...{w=0.3} *Ah*..." ("soft", "narrow", "base", "stare") - gen "(*Hmm*...{w=0.4} Perhaps I shouldn't go so hard on her...)" ("base", xpos="far_left", ypos="head") + nar "You begin moving your finger inside of Luna, slowly increasing the pace, her words are soon replaced by the sounds of increasing pleasure." + + show lun_inspect legs_together eyes_closed mouth_open as cg with d3 + + lun "*Ah*...{w=0.4} My word...{w=0.3} *Ah*...{w=0.4} I never...{w=0.3} *Ah*..." + gen "(*Hmm*...{w=0.4} Perhaps I shouldn't go so hard on her...)" stop background fadeout 2 - nar "You stop your movement for a second to give Luna some breathing room, but as you do, she starts moving her hips back and forth on her own." - gen "(Never mind, then...)" ("grin", xpos="far_left", ypos="head") - gen "*Tsk*... Such impatience with the youths these days..." ("grin", xpos="far_left", ypos="head") - lun @ cheeks blush "..." ("base", "narrow", "base", "up") #Looks back at you - gen "Very well [name_luna_genie]..." ("base", xpos="far_left", ypos="head") - gen "In that case I won't hold back on you." ("base", xpos="far_left", ypos="head") + show lun_inspect spread_legs arm_right_touch_pussy_pause mouth_soft as cg with d3 + nar "You stop your movement for a second to give Luna some breathing room, but as you do, she spreads her legs once more." + + gen "(Never mind, then...)" + gen "*Tsk*... Such impatience with the youths these days..." + + show lun_inspect spread_legs eyes_halflid_down as cg with d3 + + lun "..." + gen "Very well, [name_luna_genie]..." + gen "In that case, I won't hold back on you." play sound "sounds/slick_02.ogg" + show lun_inspect spread_legs arm_right_touch_pussy_inserted eyes_halflid_up mouth_open_tongue as cg with d3 with kissiris + pause 1 - lun @ cheeks blush "*Ah*!!!" ("scream", "wide", "base", "stare") #Wide eyed + lun "*Ah*!!!" play background "sounds/slickloopfast.ogg" - nar "You insert another finger and begin pumping them in and out, the walls of her pussy clinging onto your fingers with each insertion." + show lun_inspect spread_legs arm_right_touch_pussy as cg with d3 + nar "You insert a finger and begin pumping it in and out, the walls of her pussy clinging on to it with each insertion." + pause 1 - lun @ cheeks blush "*Ah*...{w=0.3} *Ah*...{w=0.3} *Ah*..." ("open", "happyCl", "base", "stare") + show lun_inspect spread_legs eyes_halflid_up as cg with d3 + + lun "*Ah*...{w=0.3} *Ah*...{w=0.3} *Ah*..." nar "Luna, now completely lost in pleasure, begins shaking slightly, prompting you to pick up the pace even further." play background "sounds/slickloopveryfast.ogg" - lun @ cheeks blush "[name_genie_luna]...{w=0.3} This...{w=0.3} is...{w=0.3} amazing...{w=0.3} I... {w=0.3} never...{w=0.3} thought--" ("soft", "happyCl", "base", "stare") - gen "Then don't...{w=0.3} Focus on the feeling!" ("angry", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ah*...{w=0.3} Yes...{w=0.3} [name_genie_luna]." ("soft", "closed", "base", "stare") - lun @ cheeks blush "*N-n-ngh*!!!" ("grin", "closed", "base", "mid") + show lun_inspect spread_legs mouth_open as cg with d3 - nar "Not showing her any mercy, you continue pumping your fingers in and out of her rapidly." + lun "[name_genie_luna]...{w=0.3} This...{w=0.3} is...{w=0.3} amazing...{w=0.3} I... {w=0.3} never...{w=0.3} thought--" + gen "Then don't...{w=0.3} Focus on the feeling!" - lun @ cheeks blush "*Ah*...{w=0.5} [name_genie_luna]...{w=0.4} I think this is it!" ("mad", "narrow", "base", "stare") - lun @ cheeks blush "I'm...{w=0.3} *Ah*...{w=0.3} I'm--" ("open_tongue", "narrow", "base", "up") - gen "Yes girl, let all of it out!" ("angry", xpos="far_left", ypos="head") + show lun_inspect spread_legs eyes_halflid_down as cg with d3 - nar "You insert your fingers one last time... As Luna's body finally gives in, her entire weight drops onto your hand and your fingers penetrates her down to the base." + lun "*Ah*...{w=0.3} Yes...{w=0.3} [name_genie_luna]." - lun @ cheeks blush "I'm cumming!!" ("mad", "base", "base", "ahegao") - lun @ cheeks blush "*Nngh*...{w=0.8}{nw}" ("clench", "base", "base", "ahegao") + show lun_inspect spread_legs eyes_closed mouth_soft as cg with d3 + + lun "*N-n-ngh*!!!" + + nar "Not showing her any mercy, you continue pumping your finger in and out of her rapidly." + + show lun_inspect spread_legs eyebrows_worried mouth_open as cg with d3 + + lun "*Ah*...{w=0.5} [name_genie_luna]...{w=0.4} I think this is it!" + + show lun_inspect spread_legs eyebrows_angry as cg with d3 + + lun "I'm...{w=0.3} *Ah*...{w=0.3} I'm--" + gen "Yes girl, let all of it out!" + + show lun_inspect legs_together arm_right_touch_pussy_inserted eyebrows_worried mouth_grin as cg with d3 + + nar "You insert your fingers one last time... As Luna's body finally gives in, she locks her legs onto your hand and your finger penetrates her down to the base." + + show lun_inspect legs_together eyebrows_angry eyes_base_up as cg with d3 + lun "I'm cumming!!" + + show lun_inspect legs_together eyes_closed as cg with d3 + lun "*Nngh*...{w=0.8}{nw}" with kissiris stop background fadeout 2 play sound "sounds/slick_01.ogg" - lun @ cheeks blush "*Nngh*...{fast} *Ah*!" ("open_wide_tongue", "narrow", "base", "ahegao") + show lun_inspect head_back_legs_together eyes_base_up mouth_open_ahegao as cg with d3 + lun "*Nngh*...{fast} *Ah*!" - call lun_chibi_scene("inspect_lean_idle_naked") - gen "(By the great--)" ("angry", xpos="far_left", ypos="head") + gen "(By the great--)" with kissiris play sound "sounds/slick_01.ogg" - lun @ cheeks blush "*AAAAAH*!!!" ("crooked_smile", "narrow", "base", "ahegao") + show lun_inspect head_back_legs_together eyes_base_up_hearts mouth_open_ahegao_spit as cg with d3 + + lun "*AAAAAH*!!!" nar "Your fingers now locked inside of Luna, you feel her entire body spasms as wave after wave of pleasure passes through her body." - lun @ cheeks blush "Wow...{w=0.5} That was--{w=0.8}{nw}" ("crooked_smile", "narrow", "base", "stare") + + show lun_inspect legs_together eyes_closed mouth_base as cg with d3 + nar "Finally after the last wave hits her, she settles down..." + lun "Wow...{w=0.5} That was--{w=0.8}{nw}" with kissiris play sound "sounds/slick_01.ogg" - lun @ cheeks blush "Wow... That was--{fast} *Ah*..." ("open", "narrow", "base", "ahegao") + show lun_inspect legs_together eyes_halflid_up mouth_grin as cg + lun "Wow... That was--{fast} *Ah*..." - lun @ cheeks blush "*Mmm*...{w=0.4} You were right...{w=0.3} That...{w=0.3} That relief..." ("soft", "narrow", "base", "up") + show lun_inspect legs_together eyes_closed as cg with d3 + lun "*Mmm*...{w=0.4} You were right...{w=0.3} That...{w=0.3} That relief..." show screen blkfade with d5 @@ -916,22 +1168,23 @@ label ll_pf_inspect_T2_E3_intro: nar "Admiring your work, you watch as a streak of liquid runs down her leg before settling on the floor." - lun @ cheeks blush "[name_genie_luna]..." ("base", "base", "base", "mid", xpos="base", ypos="base", flip=False, trans=dissolve) + lun "[name_genie_luna]..." $ luna.wear("all") + hide luna_main + hide cg centered "{size=+7}{color=#cbcbcb}Some time later...{/color}{/size}" call lun_chibi("stand", "desk", "base") - call lun_chibi_scene("reset") hide screen blkfade with d5 lun "[name_genie_luna], that was incredible!" ("base", "narrow", "base", "mid") - lun "Did you see how many Wrackspurts I expelled?" ("crooked_smile", "base", "raised", "mid") + lun "Did you see how many wrackspurts I expelled?" ("crooked_smile", "base", "raised", "mid", xpos="mid", ypos="base", flip=False) gen "Very impressive indeed." ("base", xpos="far_left", ypos="head") lun "I can't believe we finally did it!" ("crooked_smile", "happyCl", "base", "mid") - lun "Finally, a foolproof way of expelling Wrackspurts from other areas than your brain!" ("crooked_smile", "narrow", "base", "mid") + lun "Finally, a foolproof way of expelling wrackspurts from other areas than your brain!" ("crooked_smile", "narrow", "base", "mid") gen "Quite the discovery! I'm sure we'll be able to help a lot of backed up people." ("grin", xpos="far_left", ypos="head") lun "Yes!" ("grin", "base", "base", "mid") lun "So, what next? We've solved it now, right?" ("grin", "base", "raised", "mid") @@ -943,7 +1196,7 @@ label ll_pf_inspect_T2_E3_intro: gen "No!" ("angry", xpos="far_left", ypos="head") gen "I need to watch--{w=0.2} *Err*...{w=0.4} Instruct you, so you can alleviate yourself properly and safely." ("base", xpos="far_left", ypos="head") lun "Oh, of course [name_genie_luna]!" ("mad", "base", "base", "mid") - lun "Hopefully the Wrackspurts will leave me alone until then..." ("angry", "narrow", "base", "downL") #blush looking down + lun "Hopefully the wrackspurts will leave me alone until then..." ("angry", "narrow", "base", "downL") #blush looking down gen "Hopefully..." ("base", xpos="far_left", ypos="head") gen "(Although I doubt it.)" ("base", xpos="far_left", ypos="head") @@ -981,7 +1234,7 @@ label ll_pf_inspect_T2_E4_repeat: gen "How are you feeling, [name_luna_genie]?" ("base", xpos="far_left", ypos="head") gen "Have those spratters been bothering you any further?" ("base", xpos="far_left", ypos="head") - lun "I'm feeling a little bit better, [name_genie_luna]." ("soft", "narrow", "low", "down") + lun "I'm feeling a little bit better, [name_genie_luna]." ("soft", "narrow", "low", "down", xpos="base", ypos="base", trans=d3) lun "Although I began feeling them move around again once I was on the way to my dorm, just thinking about our last session." ("upset", "narrow", "base", "downL") gen "Well, that's to be expected." ("base", xpos="far_left", ypos="head") @@ -998,128 +1251,202 @@ label ll_pf_inspect_T2_E4_repeat: show screen blkfade with d5 - $ luna.strip("clothes") + nar "Luna quickly rushes up to your desk, and begins undressing both you and herself..." + + #Luna CG in Genie lap + if game.daytime: + show lun_inspect legs_together eyes_halflid_right arm_right_down as cg zorder 16 + else: + show lun_inspect legs_together eyes_halflid_right arm_right_down as cg zorder 16 at color_temperature(1.0) - #Fades back to Luna in your lap - call lun_chibi_scene("inspect_idle_naked") hide screen blkfade with d5 - gen "Now then..." ("base", xpos="far_left", ypos="head") - gen "Time to get these spratters worked up..." ("base", xpos="far_left", ypos="head") + gen "Now then..." + gen "Time to get these spratters worked up..." - call lun_chibi_scene("inspect_grope_breasts_naked") nar "You grab onto Luna's breasts and begin massaging them." - lun "*Eeek*!!" ("clench", "wide", "base", "stare", xpos="mid", ypos="base", flip=True, trans=dissolve) - gen "[name_luna_genie]?" ("base", xpos="far_left", ypos="head") - lun "Oh...{w=0.2} Sorry, [name_genie_luna]!" ("angry", "happyCl", "base", "mid") - lun "Your hands are a bit cold." ("angry", "narrow", "base", "stare") - gen "Then let's get them warmed up, shall we?" ("base", xpos="far_left", ypos="head") + show lun_inspect legs_together arms_grab eyebrows_angry eyes_closed mouth_soft as cg with d3 + pause 0.8 + + lun "*Eeek*!!{w=0.4}{nw}" + + show lun_inspect legs_together -arms_grab arm_right_down arm_left_hold eyebrows_angry eyes_wide_stare mouth_open as cg + + lun "*Eeek*!!{fast}" + + gen "[name_luna_genie]?" + + show lun_inspect legs_together eyebrows_worried eyes_wide_right mouth_open as cg with d3 + + lun "Oh...{w=0.2} Sorry, [name_genie_luna]!" + + show lun_inspect legs_together eyebrows_worried eyes_base_right mouth_grin as cg with d3 + + lun "Your hands are a bit cold." + gen "Then let's get them warmed up, shall we?" + + show lun_inspect legs_together arms_touch_tits eyes_halflid_right mouth_soft as cg with d3 + nar "You spread your fingers apart and drag them across the sides of Luna's nipples, increasing your grip around them with each motion." - lun @ cheeks blush "*Ah*..." ("soft", "closed", "base", "mid") - gen "How's this, [name_luna_genie]?" ("base", xpos="far_left", ypos="head") - gen "Feeling any build up yet?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Mmm*...{w=0.4} Yes, [name_genie_luna]..." ("open", "closed", "base", "mid") - gen "Good..." ("base", xpos="far_left", ypos="head") + nar "You sense the firmness of Luna's nipples soften slightly as your hands begin to warm up." + + show lun_inspect legs_together blush eyes_halflid_up mouth_open as cg with d3 + + lun "*Ah*..." + gen "How's this, [name_luna_genie]?" + gen "Feeling any build up yet?" + + show lun_inspect legs_together eyebrows_base mouth_soft as cg with d3 + + lun "*Mmm*...{w=0.4} Yes, [name_genie_luna]..." + gen "Good..." + + show lun_inspect legs_together arms_grab as cg with d3 + nar "You begin moving your hands in a circular motion, squeezing her breasts together and pulling them apart over and over..." - lun @ cheeks blush "*Mmm*..." ("soft", "closed", "base", "mid") - nar "Luna, whose thoughts are now enveloped by the sensations of your touch, pushes her crotch towards you once again, as if desperate to feel you inside of her..." + show lun_inspect legs_together eyes_closed mouth_base as cg with d3 - call lun_chibi_scene("inspect_lean_idle_naked") - with d3 + lun "*Mmm*..." - lun @ cheeks blush "" ("base", "closed", "base", "mid") - gen "*Hmm*...{w=0.4} Looks like someone's eager..." ("base", xpos="far_left", ypos="head") - gen "Very well then, [name_luna_genie]." ("base", xpos="far_left", ypos="head") + show lun_inspect spread_legs moist as cg with d3 + pause 1 - call lun_chibi_scene("inspect_lean_grope_vagina_naked") - lun @ cheeks blush "Ooooh..." ("grin", "narrow", "base", "up") + nar "Luna, whose thoughts are now enveloped by the sensations of your touch, spreads her legs open, as if desperate to feel you inside of her..." + + gen "*Hmm*...{w=0.4} Looks like someone's eager..." + gen "Very well then, [name_luna_genie]." + + #Pose touch pussy + show lun_inspect spread_legs -arms_grab arm_right_touch_pussy_pause eyes_halflid_up mouth_grin as cg with d3 + + lun "Ooooh..." nar "Luna shivers slightly as your hand graces her pussy..." nar "You notice that she's already wet, as your fingers slide across her with ease..." - gen "Looks like someone's been looking forward to this..." ("base", xpos="far_left", ypos="head") - gen "Better not let you wait any further then." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "I--" ("base", "narrow", "base", "up") + gen "Looks like someone's been looking forward to this..." + gen "Better not let you wait any further then." - call lun_chibi_scene("inspect_lean_idle_naked") play sound "sounds/slick_02.ogg" - + show lun_inspect spread_legs arm_right_touch_pussy_inserted eyebrows_shocked eyes_wide_stare mouth_soft as cg with d3 with kissiris - lun @ cheeks blush "{heart}*Ngh*{heart}..." ("crooked_smile", "narrow", "base", "up") - gen "There we go..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "You're...{w=0.4} They're inside me again..." ("grin", "narrow", "base", "up") - gen "Yes indeed [name_luna_genie]..." ("base", xpos="far_left", ypos="head") - gen "And two fingers already...{w=0.4} Looks like you're getting better at this..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Oh...{w=0.4} Thank--" ("soft", "narrow", "base", "stare") + + lun "{heart}*Oooooh*{heart}..." + gen "There we go..." + + show lun_inspect spread_legs eyes_wide_right mouth_grin as cg with d3 + + lun "You're...{w=0.4} It slid inside me again..." + gen "Yes indeed, [name_luna_genie]..." + gen "And quite easily, I might add..." + gen "It seems as if you've gotten quite used to this already..." + + show lun_inspect spread_legs eyebrows_base mouth_base as cg with d3 + + lun "Oh...{w=0.4} Thank--" play background "sounds/slickloop.ogg" fadein 2 - call lun_chibi_scene("inspect_lean_grope_vagina_naked") + show lun_inspect spread_legs arm_right_touch_pussy as cg with d3 - nar "You begin pumping your fingers quickly into Luna's pussy..." - lun @ cheeks blush "*Ah*!!!" ("clench", "base", "base", "stare") - nar "Taken by surprise, Luna clenches her thighs, which only strengthens her grip around your fingers..." - lun @ cheeks blush "*Ah*... [name_genie_luna]!" ("angry", "narrow", "base", "R") - gen "That's it [name_luna_genie]...{w=0.4} Keep that grip steady, and this will be over before you know it..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ah*...{w=0.3} *Ah*...{w=0.3} But [name_genie_luna]--" ("open", "happyCl", "base", "mid") - nar "As you keep pumping your fingers repeatedly inside of Luna, you feel her grip loosen slightly..." - lun @ cheeks blush "I...{w=0.4} I..." ("upset", "happyCl", "base", "mid") - lun @ cheeks blush "{size=+5}I don't want it to be over!{/size}" ("scream", "narrow", "worried", "stare") - gen "Too bad!" ("base", xpos="far_left", ypos="head") + nar "You begin pumping your finger quickly into Luna's pussy..." + + show lun_inspect legs_together eyebrows_shocked eyes_wide_up mouth_open_tongue as cg with d3 + + lun "*Ah*!!!" + nar "Taken by surprise, Luna clenches her thighs, which only strengthens her grip around your finger..." + + show lun_inspect legs_together eyebrows_base eyes_halflid_up mouth_open as cg with d3 + + lun "*Ah*... [name_genie_luna]!" + gen "That's it [name_luna_genie]...{w=0.4} Keep that grip steady, and this will be over before you know it..." + + show lun_inspect legs_together eyebrows_worried mouth_soft as cg with d3 + + lun "*Ah*...{w=0.3} *Ah*...{w=0.3} But [name_genie_luna]--" + + show lun_inspect spread_legs as cg with d3 + + nar "As you keep pumping your finger repeatedly inside of Luna, you feel her grip loosen slightly..." + + show lun_inspect spread_legs eyebrows_angry eyes_closed as cg with d3 + + lun "I...{w=0.4} I..." + + show lun_inspect spread_legs eyebrows_angry eyes_halflid_up mouth_open_tongue_spit as cg with d3 + + lun "{size=+5}I don't want it to be over!{/size}" + gen "Too bad!" nar "Not showing any mercy on the girl, you keep pumping faster and faster in and out of her pussy." play background "sounds/slickloopfast.ogg" + show lun_inspect spread_legs eyebrows_worried as cg with d3 - lun @ cheeks blush "*Ah*...{w=0.4} *Ah*...{w=0.4} No..." ("clench", "narrow", "base", "stare") - lun @ cheeks blush "Not yet!" ("mad", "happyCl", "base", "mid") + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} No..." + + stop background + show lun_inspect legs_together arm_right_touch_pussy_inserted eyebrows_angry eyes_closed mouth_neutral as cg with d3 + + lun "Not yet!" + nar "Luna, trying to keep that sensation going, clamps her legs together as not to let herself cum." play background "sounds/slickloopveryfast.ogg" + show lun_inspect legs_together arm_right_touch_pussy as cg with d3 - nar "Luna, trying to keep that sensation going, tries to get a hold of herself as not to let herself cum." + nar "Refusing to admit defeat, you begin wiggling your finger inside her with increased ferocity." - lun @ cheeks blush "*Ah*...{w=0.2} *Ah*...{w=0.2} *Ah*..." ("open", "happyCl", "base", "mid") + show lun_inspect legs_together eyebrows_worried mouth_soft as cg with d3 - nar "Taking it as a challenge, you insert your fingers all the way in, which proves to be enough for the girl." + lun "[name_genie_luna]...{w=0.2} *Ah*...{w=0.2} Please..." + + nar "Taking her pleas as a challenge, you insert your finger all the way in, which proves to be enough for the girl." + + show lun_inspect legs_together eyes_halflid_up mouth_open_tongue_spit as cg with d3 - call lun_chibi_scene("inspect_lean_idle_naked") lun @ cheeks blush "*Ah*...{w=0.2} No...{w=0.3} I'm cumming!!" ("clench", "happyCl", "worried", "mid") - with kissiris + show lun_inspect head_back_spread_legs squirt eyes_base_up_hearts mouth_open_ahegao_spit as cg with d3 play sound "sounds/slick_01.ogg" + pause 0.6 - lun @ cheeks blush "*AAAAAH*!!!" ("clench", "narrow", "base", "up") - nar "Luna's thighs clench around you, as waves of pleasure washes over her." + lun "*AAAAAH*!!!{w=0.4}{nw}" + show lun_inspect head_back_spread_legs -squirt wet as cg + lun "*AAAAAH*!!!{fast}" - lun @ cheeks blush "*Ah*...{w=0.2} I'm...{w=0.2} I'm--" ("mad", "narrow", "base", "stare") + nar "Luna's pussy convulses against your finger, as waves of pleasure washes over her." with kissiris play sound "sounds/slick_01.ogg" stop background fadeout 2 - lun @ cheeks blush "*Ah*..." ("grin", "narrow", "base", "up") - lun @ cheeks blush "*Mmm*..." ("base", "happyCl", "low", "up") + show lun_inspect head_back_legs_together arm_right_touch_pussy_pause mouth_open as cg with d3 + + lun "*Ah*..." + + show lun_inspect legs_together eyes_closed mouth_base as cg with d3 + + lun "*Mmm*..." show screen blkfade with d5 $ luna.wear("all") + hide luna_main nar "Luna, completely exhausted, slumps onto your desk once again." nar "You pull your chair back to give her some space." - lun @ cheeks blush "*Mmm*..." ("base", "narrow", "base", "down", xpos="base", ypos="base", flip=False, trans=dissolve) - centered "{size=+7}{color=#cbcbcb}Some time later...{/color}{/size}" call lun_chibi("stand", "desk", "base") - call lun_chibi_scene("reset") + hide cg hide screen blkfade with d5 gen "Well done, [name_luna_genie]!" ("base", xpos="far_left", ypos="head") gen "Looks like you managed to spurt even more than last time!" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Mmm*...{w=0.4} Thank you, [name_genie_luna]." ("base", "closed", "base", "mid") + lun @ cheeks blush "*Mmm*...{w=0.4} Thank you, [name_genie_luna]." ("base", "closed", "base", "mid", xpos="mid", ypos="base", flip=False, trans=d3) gen "Holding them in for as long as possible was very clever!" ("base", xpos="far_left", ypos="head") lun @ cheeks blush "Oh-- I...{w=0.3} Yes, thank you!" ("soft", "narrow", "base", "downR") gen "Are you okay, [name_luna_genie]?" ("base", xpos="far_left", ypos="head") @@ -1149,207 +1476,325 @@ label ll_pf_inspect_T3_E1_repeat: call ll_pf_inspect gen "Would you like me to help you with--" ("base", xpos="far_left", ypos="head") - lun "Yes please!" ("grin", "base", "base", "stare") + lun "Yes please!" ("grin", "base", "base", "stare", xpos="base", ypos="base", trans=d3) #Luna walks towards desk and it fades to black call lun_walk("desk") show screen blkfade with d5 - $ luna.strip("clothes") + if luna.is_any_worn("clothes"): + $ luna.strip("clothes") + nar "Luna quickly rushes up to your desk, and begins undressing both you and herself..." + else: + nar "Luna quickly rushes up to your desk, and begins undressing you..." + + if game.daytime: + show lun_inspect legs_together eyes_base_down mouth_grin as cg zorder 16 + else: + show lun_inspect legs_together eyes_base_down mouth_grin as cg zorder 16 at color_temperature(1.0) - #Fades back to Luna in your lap - call lun_chibi_scene("inspect_idle_naked") hide screen blkfade with d5 - gen "You didn't even let me finish my sentence..." ("base", xpos="far_left", ypos="head") - lun "Oh...{w=0.4} Was this not what you meant, [name_genie_luna]?" ("angry", "base", "base", "R", xpos="mid", ypos="base", flip=True, trans=dissolve) - gen "That's not the...{w} Well I suppose..." ("base", xpos="far_left", ypos="head") - lun "I hope I'm not too much of a bother, [name_genie_luna]..." ("soft", "narrow", "worried", "downL") - lun "I know your time is valuable." ("open", "narrow", "base", "downL") - gen "Assisting my students is part of my job, [name_luna_genie]." ("base", xpos="far_left", ypos="head") + gen "You didn't even let me finish my sentence..." + + show lun_inspect eyebrows_raised eyes_base_right mouth_soft as cg with d3 + + lun "Oh...{w=0.4} Was this not what you meant, [name_genie_luna]?" + gen "That's not the--{w=0.2} Well, I suppose..." + + show lun_inspect eyebrows_worried as cg with d3 + + lun "I hope I'm not too much of a bother, [name_genie_luna]..." + lun "I know your time is valuable." + gen "Assisting my students is part of my job, [name_luna_genie]." if game.daytime: - gen "Even if that meant treating you for an entire day, then so be it..." ("base", xpos="far_left", ypos="head") + gen "Even if that meant treating you for an entire day, then so be it..." else: - gen "Even if that meant treating you all night, then so be it..." ("base", xpos="far_left", ypos="head") + gen "Even if that meant treating you all night, then so be it..." - lun "Really? You'd do that?" ("clench", "base", "base", "mid") - gen "If that's what is required of me..." ("base", xpos="far_left", ypos="head") - lun "*Hmm*..." ("annoyed", "narrow", "base", "downL") - gen "(Is she really considering it?)" ("base", xpos="far_left", ypos="head") - lun "I wouldn't want you to feel obligated just because it's part of your job..." ("open", "narrow", "base", "mid") - lun "I think I will still be fine with the amount of time we're spending on the treatment for now." ("base", "narrow", "base", "down") - gen "Good to hear." ("base", xpos="far_left", ypos="head") - gen "(I've got enough wankers cramp as it is...)" ("base", xpos="far_left", ypos="head") - gen "So, are you ready to begin your treatment?" ("base", xpos="far_left", ypos="head") - lun "Yes... Please go ahead [name_genie_luna]..." ("base", "base", "base", "mid") + show lun_inspect eyebrows_shocked eyes_wide_right mouth_open as cg with d3 - gen "Then just relax, and let me take care of it." ("base", xpos="far_left", ypos="head") + lun "Really? You'd do that?" + gen "If that's what is required of me..." - call lun_chibi_scene("inspect_grope_breasts_naked") + show lun_inspect blush eyebrows_raised eyes_base_down mouth_base as cg with d3 + + lun "*Hmm*..." + gen "(Is she really considering it?)" + + show lun_inspect blush eyebrows_base eyes_closed mouth_open as cg with d3 + + lun "I wouldn't want you to feel obligated just because it's part of your job..." + lun "I think I will still be fine with the amount of time we're spending on the treatment for now." + gen "Good to hear." + gen "(I've got enough wankers cramp as it is...)" + gen "So, are you ready to begin your treatment?" + + show lun_inspect blush eyebrows_base eyes_base_down mouth_base as cg with d3 + + lun "Yes... Please go ahead, [name_genie_luna]..." + gen "Then just relax, and let me take care of it." + + show lun_inspect arms_touch_tits eyebrows_shocked eyes_wide_up mouth_grin as cg with d3 nar "Grabbing onto Luna's breasts, you begin massaging them gently." - lun "*Ah*..." ("open", "closed", "base", "mid") + lun "*Ah*..." nar "Luna immediately shudders, and lets out a soft moan as a response to your touch." - gen "(All day... Such a silly girl, I doubt she'd last an hour...)" ("base", xpos="far_left", ypos="head") - nar "You let go of Luna's breasts and give her nipples a quick pinch." - lun "Ouch!" ("mad", "wide", "base", "up") - gen "Whops." ("base", xpos="far_left", ypos="head") + gen "(All day... Such a silly girl, I doubt she'd last an hour...)" + nar "You give Luna's nipples a quick pinch." + + play sound "sounds/plushie.ogg" + with hpunch + show lun_inspect arms_touch_tits eyebrows_angry eyes_wide_stare mouth_open as cg with d3 + + lun "Ouch!" + gen "(What the--{w=0.2} Did her tits just make a squeaking sound?)" menu: "-Pinch her again-": + + show lun_inspect arms_touch_tits eyebrows_shocked eyes_wide_up as cg with d3 + with hpunch + nar "You quickly pinch Luna's nipples again, and she jumps slightly by surprise." - lun @ cheeks blush "Ow, Ow, Ow!!" ("clench", "happyCl", "base", "mid") - lun @ cheeks blush "[name_genie_luna]!" ("mad", "narrow", "worried", "R") - gen "Just give it a moment... It will feel better soon..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Are you--" ("angry", "closed", "base", "down") + + show lun_inspect arms_touch_tits eyebrows_angry eyes_closed mouth_annoyed as cg with d3 + + lun "Ow, Ow, Ow!!" + gen "(*Hmm*... No sound this time... Maybe I need to pinch them a bit harder...)" + + show lun_inspect arms_touch_tits eyebrows_shocked eyes_wide_up mouth_open as cg with d3 + with hpunch + + lun "[name_genie_luna]!" + gen "Just give it a moment... It will feel better soon..." + lun "Are you--" + + show lun_inspect arms_touch_tits eyebrows_angry eyes_closed mouth_annoyed as cg with d3 + with hpunch nar "You pinch her again, even harder this time, and Luna suddenly jerks her body forward." - call lun_chibi_scene("inspect_lean_idle_naked") + lun "Stop it [name_genie_luna]...{w=0.4} I can't..." + + show lun_inspect -arms_touch_tits arm_right_down arm_left_hold eyebrows_shocked eyes_wide_stare as cg with d3 - lun @ cheeks blush "Stop it [name_genie_luna]...{w=0.4} I can't..." ("mad", "happyCl", "worried", "mid") nar "As you let go of her tits, Luna's words trail off slightly..." - gen "Can't what, [name_luna_genie]?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "That's odd..." ("mad", "narrow", "base", "down") - lun @ cheeks blush "It feels kind of nice, after you let go of them." ("soft", "narrow", "base", "down") - gen "More sensitive?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Yes..." ("soft", "narrow", "base", "mid") - lun @ cheeks blush "Do it again [name_genie_luna]!" ("angry", "base", "base", "mid") - gen "Again?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Yes, again!" ("angry", "base", "base", "R") - gen "If you say so..." ("base", xpos="far_left", ypos="head") + gen "Can't what, [name_luna_genie]?" + + show lun_inspect eyebrows_base eyes_base_down mouth_soft as cg with d3 + + lun "That's odd..." + + show lun_inspect eyes_halflid_down as cg with d3 + + lun "It feels kind of nice, after you let go of them." + gen "More sensitive?" + + show lun_inspect mouth_base as cg with d3 + + lun "Yes..." + + show lun_inspect eyes_wide_down mouth_open as cg with d3 + + lun "Do it again, [name_genie_luna]!" + gen "Again?" + + show lun_inspect eyebrows_angry mouth_grin as cg with d3 + + lun "Yes, again!" + gen "If you say so..." + + show lun_inspect arms_touch_tits eyes_closed as cg with d3 + with hpunch - call lun_chibi_scene("inspect_lean_grope_breasts_naked") nar "You pinch Luna's nipples again, and being fully ready for it this time, you only hear a short intake of breath." - lun @ cheeks blush "" ("soft", "base", "base", "up") - nar "Releasing your grip on her nipples, you begin brushing your fingertips along the sides of her breasts, up and around her nipples." - lun @ cheeks blush "*Ah*...{w=0.4} How...{w=0.4} How strange..." ("open", "closed", "base", "mid") + + show lun_inspect eyebrows_base as cg with d3 + + nar "Feeling finished with her nipples, you begin brushing your fingertips along the sides of her breasts, up and around her nipples." + + show lun_inspect mouth_base as cg with d3 + + lun "*Ah*...{w=0.4} How...{w=0.4} How strange..." nar "Luna, now enjoying the heightened sensitivity of her nipples, begins to relax, her breathing slowing down more and more." - lun @ cheeks blush "..." ("base", "closed", "base", "mid") - gen "(Am I just giving her a massage now?)" ("base", xpos="far_left", ypos="head") + lun "..." + gen "(Am I just giving her a massage now?)" "-Don't-": - lun @ cheeks blush "Please be careful [name_genie_luna]..." ("angry", "narrow", "base", "mid") + + show lun_inspect eyebrows_worried mouth_soft as cg with d3 + + lun "Please be careful, [name_genie_luna]..." nar "Trying not to give into the temptation, you resume massaging Luna's breasts." nar "Her breathing soon begins slowing down, and you feel her previously tense grip around your legs starting to relax." - lun @ cheeks blush "..." ("base", "closed", "base", "mid") + show lun_inspect eyebrows_base eyes_closed mouth_base as cg with d3 + lun "..." - gen "*Hmm*..." ("base", xpos="far_left", ypos="head") - gen "(Am I just giving her a massage now?)" ("base", xpos="far_left", ypos="head") + gen "*Hmm*..." + gen "(Am I just giving her a massage now?)" - lun @ cheeks blush "*Ah*....." ("base", "closed", "base", "mid") + show lun_inspect mouth_open as cg with d3 + + lun "*Ah*....." nar "You suddenly feel her beginning to go limp in your hands, and realise that your grip is the only thing preventing her from slumping forward." - call lun_chibi_scene("inspect_lean_grope_breasts_naked") - with d3 - gen "*Err*... Are you--" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Mmm*..." ("base", "closed", "base", "mid") - gen "[name_luna_genie]?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "..." ("base", "closed", "base", "mid") - gen "[name_luna_genie]?" ("base", xpos="far_left", ypos="head") + gen "*Err*... Are you--" + + show lun_inspect mouth_base as cg with d3 + + lun "*Mmm*..." + gen "[name_luna_genie]?" + lun "..." + gen "[name_luna_genie]?" + + show lun_inspect -arms_touch_tits arm_right_down arm_left_hold eyes_halflid_stare mouth_soft as cg with d3 - call lun_chibi_scene("inspect_lean_idle_naked") nar "You let go of Luna's breasts, and she goes stiff, opening her eyes in confusion." - lun @ cheeks blush "*Huh*?" ("soft", "narrow", "base", "stare") - gen "I believe our purpose here isn't for me to massage you until you fall asleep..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Oh... Right..." ("base", "narrow", "base", "downL") + show lun_inspect eyes_halflid_right as cg with d3 + + lun "*Huh*?" + gen "I believe our purpose here isn't for me to massage you until you fall asleep..." + + show lun_inspect eyes_halflid_down as cg with d3 + + lun "Oh... Right..." + + show lun_inspect legs_together arm_right_touch_pussy as cg with d3 #fingering loop - call lun_chibi_scene("inspect_lean_grope_vagina_naked") nar "You stick your hand down between Luna's legs, and begin rubbing your fingers along her slit." - lun @ cheeks blush "*Ah*..." ("soft", "closed", "base", "mid") + show lun_inspect eyes_halflid_stare mouth_open as cg with d3 + + lun "*Ah*..." nar "As you brush up against her, you notice how wet she is already." - gen "*Hmm*... Looks like that massage helped after all..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." ("open", "closed", "low", "mid") - nar "Moving your forefinger up and down against Luna, you hear her breathing becoming more and more erratic, and you feel your cock twitch slightly against your robes." - gen "(Time to bust this thing wide open...)" ("base", xpos="far_left", ypos="head") + gen "*Hmm*... Looks like that massage helped after all..." + + show lun_inspect eyes_closed as cg with d3 + + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." + nar "Moving your forefinger up and down against Luna, you hear her breathing becoming more and more erratic, and you feel your cock twitch slightly against her." + gen "(Time to bust this thing wide open...)" + + show lun_inspect arm_right_touch_pussy_pause as cg with d3 nar "You stop your movements, giving Luna just a brief moment of anticipation before you push a finger inside." - call lun_chibi_scene("inspect_lean_idle_naked") + show lun_inspect eyes_halflid_up mouth_grin arm_right_touch_pussy_inserted as cg with d3 play sound "sounds/slick_02.ogg" - with kissiris - lun @ cheeks blush "{heart}*Ngh*{heart}..." ("grin", "closed", "base", "stare") + lun "{heart}*Ngh*{heart}..." + show lun_inspect spread_legs moist arm_right_touch_pussy as cg with d3 play background "sounds/slickloop.ogg" fadein 2 - call lun_chibi_scene("inspect_lean_grope_vagina_naked") nar "You begin moving your finger inside Luna's pussy, as if playfully searching for her weak spot." - lun @ cheeks blush "*Ah*... What are... What are you doing [name_genie_luna]..." ("grin", "narrow", "base", "up") - gen "Oh... You know... Just looking for something..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ah*...{w=0.4} Looking...{w=0.4} *Ah*...{w=0.4} What are you--" ("grin", "narrow", "base", "up") + show lun_inspect mouth_soft as cg with d3 - gen "Why I'll never find it at this rate... Better get some of my friends to help." ("base", xpos="far_left", ypos="head") + lun "*Ah*... What are... What are you doing [name_genie_luna]..." + gen "Oh... You know... Just looking for something..." + + show lun_inspect mouth_open as cg with d3 + + lun "*Ah*...{w=0.4} Looking...{w=0.4} *Ah*...{w=0.4} What are you--" + gen "Why I'll never find it at this rate... Better pick up the pace." + + play background "sounds/slickloopfast.ogg" + nar "You begin fingering Luna, with a nearly desperate level of determination." + + show lun_inspect eyebrows_worried eyes_closed as cg with d3 + + lun "*Ah*...{w=0.4} [name_genie_luna]..." + gen "*Hmm*... I still can't find it..." + lun "*Ah*...{w=0.3} *Ah*...{w=0.3} Are you...{w=0.3} Are you sure..." + + nar "You keep moving your finger inside Luna, and as you do, you feel her clench around it slightly." + gen "Yes...{w=0.3} Although, maybe it's just hiding somewhere too far for me to reach..." + + show lun_inspect mouth_soft as cg with d3 + + lun "*Ah*...{w=0.3} It...{w=0.3} What exactly are you looking--" + gen "If I'm correct, it should be around..." play sound "sounds/slick_02.ogg" - play background "sounds/slickloopfast.ogg" - nar "You push another finger inside her, and begin moving them around." + stop background + show lun_inspect arm_right_touch_pussy_pause as cg with d3 + show lun_inspect arm_right_touch_mound eyebrows_shocked eyes_wide_up mouth_open_tongue as cg with d3 - lun @ cheeks blush "*Ah*...{w=0.4} [name_genie_luna]..." ("soft", "narrow", "base", "up") - gen "*Hmm*... Some lousy friends they are... I still can't find it..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ah*...{w=0.3} *Ah*...{w=0.3} Are you...{w=0.3} Are you sure..." ("base", "narrow", "base", "up") - - nar "You keep moving your fingers inside Luna, and as you do, you feel her clench around them slightly." - - gen "Yes...{w=0.3} Although maybe it's just hiding..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ah*...{w=0.3} It...{w=0.3} What is--" ("soft", "narrow", "base", "up") - gen "Better call in an expert..." ("base", xpos="far_left", ypos="head") - nar "Keeping your fingers moving inside Luna, you move your thumb and press it up against her clit." - lun @ cheeks blush "*Oooooh*!!!" ("grin", "wide", "base", "up") - gen "There it is!" ("base", xpos="far_left", ypos="head") + gen "Here!" + nar "You suddenly push hard against Luna's womb." + lun "*Oooooh*!!!" + gen "Yes... This spot feels about right..." + gen "Now, the question is... Can I make it all the way in there..." + play sound "sounds/slick_02.ogg" play background "sounds/slickloopveryfast.ogg" - nar "You start rubbing your thumb against Luna's clit as your fingers move rapidly inside her." - lun @ cheeks blush "*Ah*...{w=0.2} *Ah*...{w=0.2} *Ah*..." ("grin", "base", "base", "up") + show lun_inspect arm_right_touch_pussy eyebrows_base eyes_halflid_up as cg with d3 + + nar "You push your finger inside Luna, then start pumping it quickly in and out." + lun "*Ah*...{w=0.2} *Ah*...{w=0.2} *Ah*..." nar "Luna's moans reverberates around your office, and you notice her legs beginning to shake slightly." + gen "*Hmm*... It seems I can't reach the depth I hoped for from this angle.... What if--" + + show lun_inspect legs_together eyebrows_angry eyes_closed mouth_annoyed as cg with d3 + nar "Luna's moans suddenly stops, and she clenches her thighs tight around your hand." + nar "Even while firmly locked between her thighs, you still manage to keep your finger going." - call lun_chibi_scene("inspect_lean_idle_naked") - lun @ cheeks blush "*Ah*...{w=0.2} I'm...{w=0.3} I'm cumming!!" ("grin", "happyCl", "base", "stare") + show lun_inspect spread_legs moist mouth_neutral as cg with d3 - with kissiris - play sound "sounds/slick_01.ogg" + nar "Admitting defeat, Luna spreads her legs once more." - lun @ cheeks blush "*AAAAAH*!!!" ("grin", "narrow", "base", "up") - nar "Even with your hand locked firmly between her thighs, you still manage to keep your fingers going." + show lun_inspect mouth_open as cg with d3 - lun @ cheeks blush "*Ah*...{w=0.2} I'm...{w=0.2} I'm--" ("grin", "narrow", "base", "stare") + lun "*Ah*...{w=0.4} I'm...{w=0.3} almost...{w=0.4}{nw}" - with kissiris - play sound "sounds/slick_01.ogg" stop background fadeout 2 + play sound "sounds/slick_02.ogg" + show lun_inspect eyes_base_up arm_right_touch_mound as cg - lun @ cheeks blush "*Ah*..." ("grin", "narrow", "base", "up") - lun @ cheeks blush "*Mmm*..." ("base", "closed", "low", "up") + lun "*Ah*... I'm...{fast} {size=+5}Cumming!!{/size}" + + show lun_inspect eyes_base_up mouth_open_tongue as cg with d3 + + play sound "sounds/slick_01.ogg" + show lun_inspect squirt as cg with d3 + with kissiris + pause 0.3 + show lun_inspect -squirt wet as cg + + lun "*AAAAAH*!!!" + + show lun_inspect eyes_closed mouth_base as cg with d3 + + lun "*Ah*...{w=0.2} I'm...{w=0.2} I'm--" + lun "*Mmm*..." show screen blkfade with d5 $ luna.wear("all") + hide luna_main nar "Luna's legs buckle completely as she puts her full weight onto your desk." nar "You watch her body move up and down for a while, her legs twitching slightly every now and then as liquid runs down her legs." nar "After some time, she manages to push herself up and get off your desk." - - hide luna_main call lun_chibi("stand", "desk", "base") - call lun_chibi_scene("reset") + hide cg hide screen blkfade with d5 gen "How was that, [name_luna_genie]?" ("base", xpos="far_left", ypos="head") - lun "How did you do that, [name_genie_luna]?" ("mad", "base", "base", "mid", xpos="base", ypos="base", flip=False, trans=dissolve) + lun "How did you do that, [name_genie_luna]?" ("mad", "base", "base", "mid", xpos="mid", ypos="base", flip=False, trans=d3) gen "Do what?" ("base", xpos="far_left", ypos="head") - lun "The thing you did with your thumb." ("angry", "base", "base", "mid") - gen "Oh that...{w=0.4} Well I just called in an expert didn't I?" ("base", xpos="far_left", ypos="head") - gen "Nice bloke to have at hand isn't he?" ("base", xpos="far_left", ypos="head") - lun "Very..." ("base", "narrow", "base", "stare") + lun "The thing you did... When you pushed near my stomach..." ("angry", "base", "base", "mid") + gen "Oh that...{w=0.4} Well, I can't reveal all my secrets, can I?" ("base", xpos="far_left", ypos="head") + lun "..." ("base", "narrow", "base", "stare") gen "So, feeling better now?" ("base", xpos="far_left", ypos="head") lun "Yes, [name_genie_luna]...{w=0.4} Thank you..." ("base", "base", "base", "mid") @@ -1366,3 +1811,405 @@ label ll_pf_inspect_T3_E1_repeat: call lun_walk(action="leave") jump ll_pf_inspect_end + +label ll_pf_inspect_T4_E1_repeat: + + call ll_pf_inspect + + gen "Need a hand?" ("base", xpos="far_left", ypos="head") + lun "A hand, [name_genie_luna]?" ("soft", "base", "raised", "mid", xpos="base", ypos="base", trans=d3) + gen "I thought you might be feeling the effects of the spurts... So, I figured you might want to sit in my lap and let me help you out for a bit." ("base", xpos="far_left", ypos="head") + lun "But, didn't you already teach me how to take care of them myself?" ("soft", "base", "base", "mid") + gen "Yes, and I'm sure you've had a lot of practice, but since I'm available, there's the option of me helping out..." ("base", xpos="far_left", ypos="head") + gen "Or would you rather do it yourself?" ("base", xpos="far_left", ypos="head") + lun "Of course not!" ("angry", "base", "base", "stare") + lun "I mean..." ("angry", "base", "base", "mid") + lun "What about you, [name_genie_luna]?" ("open", "base", "base", "downL") + gen "This is as important for you, as it is for me." ("base", xpos="far_left", ypos="head") + lun "It is?" ("disgust", "base", "base", "mid") + gen "If the spurts manage to get to you, then you won't be able to assist me with my research at the required level." ("base", xpos="far_left", ypos="head") + lun "Required level?" ("soft", "narrow", "base", "stare") + gen "See! You can't even focus, [name_luna_genie]!" ("base", xpos="far_left", ypos="head") + lun "But I am--" ("angry", "base", "base", "mid") + gen "If you're unable to focus on the task, who knows what might happen!" ("base", xpos="far_left", ypos="head") + gen "The spurts could force you to slap my cheek!" ("base", xpos="far_left", ypos="head") + lun "Your cheek?!" ("angry", "base", "base", "mid") + gen "My cheek!" ("base", xpos="far_left", ypos="head") + gen "Or even worse... Make you pull my finger!" ("base", xpos="far_left", ypos="head") + lun "Really?!" ("angry", "base", "base", "stare") + gen "Yes, and trust me... You'd want to avoid that at all cost." ("base", xpos="far_left", ypos="head") + lun "Why... What would--" ("disgust", "base", "base", "mid") + gen "Irreversible consequences!" ("base", xpos="far_left", ypos="head") + lun "!!!" ("mad", "base", "base", "mid") + gen "Let's just say that the desert didn't used to be the wasteland that it is today." ("base", xpos="far_left", ypos="head") + lun "My heavens!" ("angry", "base", "base", "mid") + + if luna.is_any_worn("clothes"): + hide luna_main + pause .5 + + $ _wearing_clothes = True + $ luna.strip("clothes") + lun "[name_genie_luna], help me before it's too late!" ("angry", "narrow", "base", "mid") + gen "Whoa, how did you do that so fast?!" ("base", xpos="far_left", ypos="head") + + #Luna quickly walks up towards desk, fades to black + call lun_walk("desk", "base", speed=1.75) + show screen blkfade + with d5 + + nar "As you undress, Luna rushes up to your desk, and jumps into your lap with such force that you fall into the chair." + + if game.daytime: + show lun_inspect spread_legs eyebrows_worried eyes_base_right mouth_open as cg zorder 16 + else: + show lun_inspect spread_legs eyebrows_worried eyes_base_right mouth_open as cg zorder 16 at color_temperature(1.0) + + hide screen blkfade + with d5 + + lun "Hurry, [name_genie_luna]! Put your finger inside me!" + gen "Already? But, what about the foreplay?" + gen "(Wait... Since when did I start caring about foreplay?)" + + show lun_inspect eyebrows_raised eyes_base_down as cg with d3 + + lun "Just do it already!" + gen "Suit yourself..." + + show lun_inspect arm_right_touch_pussy_pause as cg with d3 + + nar "You move your hand down to Luna's pussy and attempt to push a finger inside." + + show lun_inspect eyebrows_worried eyes_wide_stare mouth_soft as cg with d3 + + lun "Ouch!" + + show lun_inspect eyebrows_angry eyes_wide_down as cg with d3 + + lun "Wait! What's going on?!" + gen "I was trying to tell you..." + gen "Sometimes you're going to need a bit of--" + + show lun_inspect eyes_base_down mouth_open as cg with d3 + + lun "It's the wrackspurts, and their naughty tricks!" + lun "They must be blocking the entrance somehow!" + gen "..." + + show lun_inspect eyes_halflid_right as cg with d3 + + lun "[name_genie_luna], we must lure them away from the entrance! Grab my breasts!" + gen "(By the great desert sands... What have I created...)" + + show lun_inspect arms_touch_tits eyes_base_down as cg with d3 + + lun "Good...{w=0.4} Now if you massage them, I'm sure the wrackspurts--" + + show lun_inspect eyebrows_shocked mouth_base as cg with d3 + + lun "Wait...{w=0.4} I'm so silly, why am I telling you what to do... Of course you already know!" + gen "Certainly, [name_luna_genie]...{w=0.4} Although while you know that I know, how am I supposed to know that you know what I know?" + + show lun_inspect eyebrows_raised eyes_halflid_right mouth_annoyed as cg with d3 + + lun "*Huh*?" + gen "I'm proposing that you instruct me on what to do during this session." + gen "That way, I can ensure you've remembered everything I've shown you so far." + + show lun_inspect eyebrows_shocked eyes_base_right mouth_grin as cg with d3 + + lun "Oh, good idea [name_genie_luna]!" + + show lun_inspect eyes_base_down as cg with d3 + + lun "Then massage my breasts!" + gen "One breast massage, coming up." + gen "Or is it \"breasts\" massage, since you've got two of--" + + show lun_inspect eyebrows_base mouth_annoyed as cg with d3 + + lun "Hurry!" + gen "Righto..." + + show lun_inspect arms_grab eyes_base_up mouth_soft as cg with d3 + + nar "Following Luna's outcry, you begin gently massaging her breasts." + + show lun_inspect eyes_closed as cg with d3 + + lun "*Ah*...{w=0.4} I--{w=0.2} *Ngh*...{w=0.4} I think it's working." + lun "I can feel them gathering already." + gen "Truly?" + + show lun_inspect blush mouth_open as cg with d3 + + lun "*Ah*...{w=0.4} How...{w=0.4} How do you feel, [name_genie_luna]?" + gen "Me?" + + show lun_inspect eyes_halflid_right mouth_soft as cg with d3 + + lun "*Mmm*...{w=0.4} Yes, please tell me..." + gen "I'm not sure what you're talking--" + + show lun_inspect mouth_base as cg with d3 + + lun "My breasts...{w=0.4} Do they feel nice?" + menu: + "\"Of course!\"": + gen "They're very pleasant." + "\"I've felt better.\"": + + show lun_inspect eyes_halflid_down mouth_neutral as cg with d3 + + lun "Oh..." + gen "Your nipples must not be hard enough yet." + "\"If you can call these breasts...\"": + + show lun_inspect eyes_base_right mouth_annoyed as cg with d3 + + lun "W--{w=0.4} What?!" + gen "The word \"breasts\" is not enough to describe these glorious mounds of flesh!" + + show lun_inspect eyes_base_down mouth_base as cg with d3 + + lun "*Ah*...{w=0.4} Really?" + + show lun_inspect eyebrows_raised mouth_open as cg with d3 + + lun "So...{w=0.4} What do you like about them exactly?" + gen "Well... They're soft, squishy, and fun to play with, there's nothing better than a good pair of--" + + show lun_inspect arms_touch_tits eyebrows_base mouth_soft as cg with d3 + nar "Luna suddenly clenches her ass around your cock, which makes you lose your focus for a moment." + + gen "*Ahem*...{w=0.4} That said, it is quite a contentious subject..." + + show lun_inspect eyes_halflid_right as cg with d3 + + lun "*Mhm*?" + gen "*Ah*...{w=0.4} Yes, some people prefer the roundness and firmness of an--" + + show lun_inspect eyebrows_raised eyes_base_right mouth_open as cg with d3 + + lun "[name_genie_luna]?" + gen "Yes?" + + show lun_inspect eyebrows_base as cg with d3 + + lun "You've stopped massaging me." + gen "So I have..." + + show lun_inspect arms_grab as cg with d3 + show lun_inspect eyes_closed mouth_base as cg with d3 + + lun "*Mmm*..." + + show lun_inspect eyes_halflid_down as cg with d3 + + lun "So, you think my breasts are fun to play with?" + gen "Very much so." + + show lun_inspect mouth_grin as cg with d3 + + lun "*Giggles*" + gen "What's so funny about that?" + + show lun_inspect eyebrows_shocked eyes_base_down mouth_grin as cg with d3 + + lun "Well, it's just that I had never really considered playing with them..." + + show lun_inspect mouth_base as cg with d3 + + lun "Before you showed me, they were just sort of...{w=0.4} There." + gen "I suppose the reason I find them fascinating and fun to play with is due to not having access to them at all times." + gen "I mean, it's all for the sake of research, of course....{w=0.4} I'm taking mental notes of all the differences between men and women...{w=0.4} Yes, that's it..." + + show lun_inspect eyebrows_raised eyes_base_right mouth_base as cg with d3 + + lun "In that case, should we to try to find out if there's a way to lure them away from your penis next?" + gen "*Err*..." + lun "I presume we wouldn't want your penis to get clogged up with spurts like what just happened to me, right?" + gen "Right...{w=0.4} However, since I have you, I'm assured that won't happen." + + show lun_inspect eyebrows_base eyes_halflid_right as cg with d3 + + lun "Let's hope..." + gen "Either way, let's not forget that we're focusing on you right now..." + + show lun_inspect eyes_halflid_down as cg with d3 + + lun "Oh, right..." + lun "In that case..." + lun "Could you perhaps assist me with testing the sensitivity of my nipples?" + gen "Certainly..." + + show lun_inspect arms_touch_tits eyebrows_angry eyes_wide_stare mouth_open as cg with d3 + with hpunch + + nar "You give Luna's nipples a quick pinch, and in return, you feel her ass clench around your cock." + lun "*Ngh*!" + gen "How was that?" + + show lun_inspect eyebrows_worried eyes_halflid_right as cg with d3 + + lun "*Ah*...{w=0.4} Very...{w=0.4} fun..." + gen "Truly?" + + show lun_inspect eyes_base_down as cg with d3 + + lun "Yes..." + gen "*Hmm*... Then let's try it again." + + with hpunch + show lun_inspect eyebrows_shocked eyes_wide_up mouth_open as cg with d3 + nar "You pinch Luna's nipples again, and feel her ass clench even harder around your cock." + + lun "Ouch!" + gen "How's that?" + + show lun_inspect eyebrows_worried eyes_closed mouth_annoyed as cg with d3 + + lun "I...{w=0.4} Very, very fun, [name_genie_luna]!" + gen "There's no need to be untruthful with me, [name_luna_genie]..." + + show lun_inspect eyebrows_base eyes_halflid_down mouth_soft as cg with d3 + + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} But, I wasn't--" + gen "So, what now? Would you like me to move on to something else?" + + show lun_inspect eyebrows_shocked eyes_base_down as cg with d3 + + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} You could--{w=0.2} Could you stroke my breasts for a bit, [name_genie_luna]?" + gen "Good idea...{w=0.4} We should take advantage of your heightened sensitivity..." + + show lun_inspect eyebrows_base eyes_closed as cg with d3 + nar "You begin brushing your fingers gently against Luna's nipples." + + show lun_inspect moist mouth_base as cg with d3 + + lun "*Mmm*..." + + nar "As you continue stroking her, you notice some wetness forming in-between Luna's legs." + nar "You feel your dick twitch slightly beneath her, and decide to try and move things along swiftly." + + show lun_inspect -arms_touch_tits arm_left_hold arm_right_down as cg with d3 + gen "*Ahem*...{w=0.4} [name_luna_genie]?" + + #Luna starts touching her pussy + show lun_inspect luna_arm_masturbate as cg with d3 + + nar "Luna, fully focused on the rising sensation between her legs, begins rubbing her pussy on her own." + nar "You start feeling yourself getting hard, and your dick soon presses up against her underside." + + show lun_inspect mouth_open as cg with d3 + + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." + gen "[name_luna_genie]...{w=0.4} I've got this crazy idea...{w=0.4} What if I tried inserting--" + + nar "Suddenly, and with a jolt, Luna's entire body starts shaking." + + show lun_inspect luna_arm_idle eyes_base_up mouth_open_tongue as cg with d3 + + stop background fadeout 2 + play sound "sounds/slick_01.ogg" + show lun_inspect squirt as cg with d3 + with kissiris + pause 0.3 + show lun_inspect -squirt wet as cg + + lun "*Aaaah*!!!" + + gen "What the--" + + show lun_inspect eyes_halflid_down mouth_soft as cg with d3 + + lun "What--{w=0.4} What just happened?" + gen "*Heh-heh*...{w=0.4} It appears you've managed to get there on your own." + + show lun_inspect eyebrows_shocked eyes_base_down mouth_open as cg with d3 + + lun "W--{w=0.2} What?!" + + show screen blkfade + with d5 + + nar "Luna swiftly jumps off your lap, her eyes immediately fixing on the streaks of wetness running down the inner sides of your legs." + nar "Still quivering from the intense pleasure, she stumbles backwards a bit, then grabs hold of the side of your desk." + nar "Finally, after catching her breath, she lets go and addresses the situation." + + call lun_chibi("stand", "desk", "base") + hide luna_main + + $ luna.set_cum(pussy="squirt_post") + + hide cg + hide screen blkfade + with d5 + + lun "How...{w=0.4} How on earth did that happen?!" ("angry", "narrow", "base", "down", xpos="mid", ypos="base", flip=False, trans=d3) + gen "You may not have realised, but you started touching yourself..." ("base", xpos="far_left", ypos="head") + lun "I--{w=0.2} I did?" ("disgust", "base", "base", "stare") + gen "Indeed... You almost had me going as well." ("base", xpos="far_left", ypos="head") + lun "You... Going..." ("disgust", "base", "base", "mid") + gen "(Here we go...)" ("base", xpos="far_left", ypos="head") + lun "Going where?" ("soft", "base", "base", "mid") + + if game.daytime: + gen "I think it's about time for you to head back to class..." ("base", xpos="far_left", ypos="head") + else: + gen "I think it's about time you went to bed..." ("base", xpos="far_left", ypos="head") + + lun "Oh...{w=0.4} Okay!" ("base", "base", "base", "mid") + + if _wearing_clothes: + $ renpy.sound.play("sounds/cloth_sound3.ogg") + $ luna.wear("all") + $ luna.set_cum(None) + with d3 + pause .5 + + gen "Perhaps we should consider having you pick up \"English\" as a secondary subject." ("base", xpos="far_left", ypos="head") + lun "English?" ("soft", "base", "base", "mid") + lun "But, [name_genie_luna]... There are no \"English\" classes at Hogwarts." ("upset", "base", "base", "mid") + gen "What?!" ("base", xpos="far_left", ypos="head") + lun "Our mummies and daddies are meant to teach us certain subjects before we start proper schooling." ("open", "base", "base", "mid") + lun "Well... My daddy did in my case..." ("open", "base", "base", "down") + gen "But, do your parents not need to work?" ("base", xpos="far_left", ypos="head") + lun "Well... There's also the option of private tutoring." ("soft", "base", "base", "mid") + lun "And if you're muggle born, you are usually put in a muggle school before being transferred to Hogwarts." ("open", "base", "base", "mid") + gen "But what if you're not a muggle born, and you can't afford a private tutor?" ("base", xpos="far_left", ypos="head") + lun "I... I don't know." ("soft", "base", "base", "up") + gen "(How do they expect me to do my job when the system is flawed at its core...)" ("base", xpos="far_left", ypos="head") + gen "(Oh, well... It's clear that nobody else gives a rat's ass about the future of this country, so why should I...)" ("base", xpos="far_left", ypos="head") + lun "[name_genie_luna], why are you asking me these questions?" ("soft", "base", "base", "mid") + gen "*Huh*?" ("base", xpos="far_left", ypos="head") + gen "Oh... *Err*... I just thought I'd show you how important it is to be able to identify and analyse the flaws in our society..." ("base", xpos="far_left", ypos="head") + gen "Identifying, analysing and finding solutions is needed... To progress as a species and all that..." ("base", xpos="far_left", ypos="head") + lun "I see... Finding solutions..." ("soft", "base", "base", "down") + lun "What if we established a system in which the affluent allocate a portion of their income to make resources such as private tutoring accessible to everyone, thereby guaranteeing a higher standard of education for all?" ("base", "base", "base", "mid") + gen "Good one." ("base", xpos="far_left", ypos="head") + lun "" ("soft", "base", "base", "mid") #confused + call ctc + + gen "Anyhow... I presume you feel better now?" ("base", xpos="far_left", ypos="head") + lun "Oh... Yes, thank you, [name_genie_luna]!" ("grin", "base", "base", "mid") + gen "You're very welcome." ("base", xpos="far_left", ypos="head") + if game.daytime: + lun "I better head to bed then." ("base", "base", "base", "mid") + gen "Don't you mean \"class\"?" ("base", xpos="far_left", ypos="head") + lun "Oh, yeah!" ("smile", "happyCl", "base", "mid") + lun "Bye!" ("base", "base", "base", "mid") + else: + lun "I better head back to class then." ("base", "base", "base", "mid") + gen "Don't you mean \"bed\"?" ("base", xpos="far_left", ypos="head") + lun "Oh, yeah...{w=0.4} Good night!" ("smile", "happyCl", "base", "mid") + + call lun_walk(action="leave") + + gen "(That girl is something else...)" ("base", xpos="far_left", ypos="head") + + $ _wearing_clothes = False + $ luna.set_cum(None) + + jump ll_pf_inspect_end diff --git a/game/scripts/characters/luna/events/favors/masturbate_for_me.rpy b/game/scripts/characters/luna/events/favors/masturbate_for_me.rpy index ba8c53ea..8e066ad8 100644 --- a/game/scripts/characters/luna/events/favors/masturbate_for_me.rpy +++ b/game/scripts/characters/luna/events/favors/masturbate_for_me.rpy @@ -46,7 +46,7 @@ label ll_pf_masturbate_end: $ states.lun.level += 1 elif states.lun.tier == 4: - if states.lun.level < 16: + if states.lun.level < 12: $ states.lun.level += 1 jump end_luna_event @@ -60,7 +60,7 @@ label ll_pf_masturbate_T3_E1_intro: call ll_pf_masturbate gen "So, have the wickerspats finally left you alone [name_luna_genie]?" ("base", xpos="far_left", ypos="head") - lun "Not at all, [name_genie_luna]... In fact... They've been worse than ever." ("angry", "narrow", "base", "downL", trans=dissolve) + lun "Not at all, [name_genie_luna]... In fact... They've been worse than ever." ("angry", "narrow", "base", "downL", xpos="base", ypos="base", trans=d3) gen "Really?" ("base", xpos="far_left", ypos="head") nar "Luna shifts her thighs together uncomfortably." lun "Yes..." ("annoyed", "narrow", "base", "mid") #seductive @@ -109,9 +109,9 @@ label ll_pf_masturbate_T3_E1_intro: gen "Good..." gen "Now then..." gen "Let's try some self-applied massage to start with." - lun @ cheeks blush "A--{w=0.2} Alright." ("soft", "narrow", "base", "down") + lun "A--{w=0.2} Alright." ("soft", "narrow", "base", "down",cheeks="blush") gen "Don't worry, I'll be here to give you some guidance." - lun @ cheeks blush "Thank you, [name_genie_luna]." ("base", "narrow", "base", "down") + lun "Thank you, [name_genie_luna]." ("base", "narrow", "base", "down") show screen blkfade @@ -124,133 +124,133 @@ label ll_pf_masturbate_T3_E1_intro: hide screen blkfade with d3 - lun @ cheeks blush "*Ah*..." ("open", "narrow", "base", "up") + lun "*Ah*..." ("open", "narrow", "base", "up") gen "Is everything alright, [name_luna_genie]?" - lun @ cheeks blush "*Ah*...{w=0.3} of course, [name_genie_luna]!" ("soft", "narrow", "base", "stare") - lun @ cheeks blush "My fingers are just a bit cold..." ("normal", "narrow", "base", "mid") + lun "*Ah*...{w=0.3} of course, [name_genie_luna]!" ("soft", "narrow", "base", "stare") + lun "My fingers are just a bit cold..." ("normal", "narrow", "base", "mid") gen "That's fine... Just try rubbing yourself, and your fingers will warm up in just a moment." - lun @ cheeks blush "*Ah*...{w=0.3} Yes [name_genie_luna]..." ("angry", "narrow", "low", "stare") + lun "*Ah*...{w=0.3} Yes [name_genie_luna]..." ("angry", "narrow", "low", "stare") gen "..." - lun @ cheeks blush "*Ah*...{w=0.3} is this how it should be done?" ("soft", "base", "base", "mid") + lun "*Ah*...{w=0.3} is this how it should be done?" ("soft", "base", "base", "mid") gen "As long as it's feeling good, then I'm sure it's working. Just keep going, and you'll soon be rid of those nasty Wickerspoons." - lun @ cheeks blush "I'm glad..." ("base", "narrow", "base", "down") - lun @ cheeks blush "Although it feels a bit different compared to when you helped me..." ("annoyed", "narrow", "base", "down") + lun "I'm glad..." ("base", "narrow", "base", "down") + lun "Although it feels a bit different compared to when you helped me..." ("annoyed", "narrow", "base", "down") gen "That's to be expected... Another person's touch will always feel different to your own." - lun @ cheeks blush "Okay..." ("upset", "base", "base", "down") + lun "Okay..." ("upset", "base", "base", "down") nar "Luna moves her hand around beneath her skirt before stopping again." - lun @ cheeks blush "It's just..." ("upset", "narrow", "base", "mid") - lun @ cheeks blush "As nice as this massage feels..." ("soft", "narrow", "base", "mid") - lun @ cheeks blush "It's not really scratching that same itch, [name_genie_luna]..." ("annoyed", "narrow", "base", "mid") + lun "It's just..." ("upset", "narrow", "base", "mid") + lun "As nice as this massage feels..." ("soft", "narrow", "base", "mid") + lun "It's not really scratching that same itch, [name_genie_luna]..." ("annoyed", "narrow", "base", "mid") gen "I guess I do have that slight magic touch..." gen "*Hmm*..." - lun @ cheeks blush "Am I doing it wrong, [name_genie_luna]?" ("upset", "narrow", "base", "down") + lun "Am I doing it wrong, [name_genie_luna]?" ("upset", "narrow", "base", "down") gen "Certainly not, but this might be trickier than I initially thought..." - lun @ cheeks blush "Really?" ("soft", "base", "base", "mid") + lun "Really?" ("soft", "base", "base", "mid") gen "It would seem that those nasty critters are trying to hide!" - lun @ cheeks blush "Hide? But I thought touching myself would lure them--" ("mad", "narrow", "base", "down") + lun "Hide? But I thought touching myself would lure them--" ("mad", "narrow", "base", "down") gen "Don't worry [name_luna_genie]... As long as you're still feeling that itch, then they can't have gone far." gen "Although this means you'll have to chase them down." - lun @ cheeks blush "Chase them down?" ("angry", "narrow", "base", "down") + lun "Chase them down?" ("angry", "narrow", "base", "down") gen "I'll be here to guide you through it of course..." - lun @ cheeks blush "Okay..." ("soft", "base", "base", "mid") + lun "Okay..." ("soft", "base", "base", "mid") gen "Ready?" - lun @ cheeks blush "Yes." ("angry", "base", "base", "mid") + lun "Yes." ("angry", "base", "base", "mid") gen "Close your eyes..." - lun @ cheeks blush "" ("normal", "closed", "base", "mid") #eyes closed + lun "" ("normal", "closed", "base", "mid") #eyes closed call ctc gen "Very good...{w} Now I want you to block out everything else." - lun @ cheeks blush "Alright, [name_genie_luna]..." ("open", "closed", "base", "mid") + lun "Alright, [name_genie_luna]..." ("open", "closed", "base", "mid") gen "Imagine standing alone in your bedroom..." - lun @ cheeks blush "" ("normal", "closed", "base", "mid") + lun "" ("normal", "closed", "base", "mid") call ctc gen "Empty your mind of all intrusive thoughts..." - lun @ cheeks blush "" ("normal", "closed", "annoyed", "mid") + lun "" ("normal", "closed", "annoyed", "mid") call ctc gen "Now... Focus on where the itch is coming from..." - lun @ cheeks blush "" ("upset", "closed", "annoyed", "mid") + lun "" ("upset", "closed", "annoyed", "mid") call ctc gen "Then once you've found it, I want you to chase down that feeling with your fingers." - lun @ cheeks blush "" ("annoyed", "closed", "annoyed", "mid") + lun "" ("annoyed", "closed", "annoyed", "mid") call ctc gen "And catch it!" - lun @ cheeks blush "I-- I can't... I can't find it..." ("angry", "closed", "base", "mid") + lun "I-- I can't... I can't find it..." ("angry", "closed", "base", "mid") - lun @ cheeks blush "It's like trying to grab rays of sunlight..." ("angry", "closed", "base", "mid") + lun "It's like trying to grab rays of sunlight..." ("angry", "closed", "base", "mid") gen "Don't try to grab a hold of it, just brush against it with the tips of your fingers." - lun @ cheeks blush "" ("soft", "closed", "annoyed", "mid") + lun "" ("soft", "closed", "annoyed", "mid") call ctc - lun @ cheeks blush "" ("normal", "closed", "annoyed", "mid") + lun "" ("normal", "closed", "annoyed", "mid") call ctc nar "Luna desperately moves her hand around beneath her skirt." - lun @ cheeks blush "I... I think I've lost them again, [name_genie_luna]..." ("angry", "closed", "base", "mid") + lun "I... I think I've lost them again, [name_genie_luna]..." ("angry", "closed", "base", "mid") gen "Try moving your hand up a bit more..." - lun @ cheeks blush "Up a bit--" ("angry", "closed", "low", "mid") + lun "Up a bit--" ("angry", "closed", "low", "mid") - lun @ cheeks blush "*Ah*..." ("grin", "closed", "worried", "mid") - lun @ cheeks blush "*Mmm*..." ("base", "closed", "base", "mid") + lun "*Ah*..." ("grin", "closed", "worried", "mid") + lun "*Mmm*..." ("base", "closed", "base", "mid") nar "Luna gives off a soft moan under her breath." gen "(There we go...)" - lun @ cheeks blush "This... This area is even more itchy, [name_genie_luna]..." ("base", "closed", "low", "mid") + lun "This... This area is even more itchy, [name_genie_luna]..." ("base", "closed", "low", "mid") gen "Excellent... That means you've managed to chase them down." gen "Just keep your eyes closed and begin gently moving your fingers in a circular motion over the area." - lun @ cheeks blush "Oooh! {heart}" ("grin", "closed", "base", "mid") - lun @ cheeks blush "*Ah*...{w=0.3} Yes...{w=0.3} I think it's working, [name_genie_luna]!" ("grin", "closed", "annoyed", "mid") + lun "Oooh! {heart}" ("grin", "closed", "base", "mid") + lun "*Ah*...{w=0.3} Yes...{w=0.3} I think it's working, [name_genie_luna]!" ("grin", "closed", "annoyed", "mid") gen "*Shhh*...{w=0.3} Don't speak...{w=0.3} Just focus." - lun @ cheeks blush "" ("grin", "closed", "base", "mid") + lun "" ("grin", "closed", "base", "mid") gen "Empty your mind and only think about what makes you feel good..." - lun @ cheeks blush "Okay..." ("base", "closed", "base", "mid") - lun @ cheeks blush "" ("soft", "closed", "low", "mid") + lun "Okay..." ("base", "closed", "base", "mid") + lun "" ("soft", "closed", "low", "mid") call ctc - lun @ cheeks blush "*Ah*..." ("open", "closed", "base", "mid") - lun @ cheeks blush "[name_genie_luna]..." ("soft", "closed", "base", "mid") - lun @ cheeks blush "*Ah*...{w=0.3} [name_genie_luna]..." ("soft", "closed", "base", "mid") - lun @ cheeks blush "I think..." ("open", "closed", "base", "mid") - lun @ cheeks blush "*Ah*..." ("open", "closed", "base", "mid") - lun @ cheeks blush "I think I've almost..." ("soft", "closed", "base", "mid") + lun "*Ah*..." ("open", "closed", "base", "mid") + lun "[name_genie_luna]..." ("soft", "closed", "base", "mid") + lun "*Ah*...{w=0.3} [name_genie_luna]..." ("soft", "closed", "base", "mid") + lun "I think..." ("open", "closed", "base", "mid") + lun "*Ah*..." ("open", "closed", "base", "mid") + lun "I think I've almost..." ("soft", "closed", "base", "mid") gen "*Shhh*..." nar "You see Luna's hand move swiftly beneath her skirt." - lun @ cheeks blush "*Mmmm*..." ("base", "closed", "base", "mid") - lun @ cheeks blush "*Ah*..." ("open", "closed", "base", "mid") - lun @ cheeks blush "*A-ah*..." ("grin", "closed", "base", "mid") - lun @ cheeks blush "Yes..." ("grin", "closed", "low", "mid") - lun @ cheeks blush "*Ah*... *Ah*...{heart}" ("grin", "closed", "low", "mid") - lun @ cheeks blush "{size=+4}*Mmm*...{w=0.3} Yes...{heart}{/size}" ("crooked_smile", "narrow", "base", "up") - lun @ cheeks blush "{size=+8}*Ah*...{w=0.3} *Ah*...{/size}" ("crooked_smile", "narrow", "base", "up") + lun "*Mmmm*..." ("base", "closed", "base", "mid") + lun "*Ah*..." ("open", "closed", "base", "mid") + lun "*A-ah*..." ("grin", "closed", "base", "mid") + lun "Yes..." ("grin", "closed", "low", "mid") + lun "*Ah*... *Ah*...{heart}" ("grin", "closed", "low", "mid") + lun "{size=+4}*Mmm*...{w=0.3} Yes...{heart}{/size}" ("crooked_smile", "narrow", "base", "up") + lun "{size=+8}*Ah*...{w=0.3} *Ah*...{/size}" ("crooked_smile", "narrow", "base", "up") gen "That's it--" nar "Luna now desperately trying to cum, moves her hand even faster." lun @ cheeks blush "*Ah*! I think they're attacking me, [name_genie_luna]!" ("crooked_smile", "base", "base", "up") - lun @ cheeks blush "I... I can't stop moving my--" ("grin", "happyCl", "base", "mid") - gen "Keep going, you're doing it!" - lun @ cheeks blush "*Ah*...{w=0.4} Yes [name_genie_luna]...{heart}" ("crooked_smile", "happyCl", "base", "up") - lun @ cheeks blush "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*...{w=0.4}" ("soft", "happyCl", "base", "up") - lun @ cheeks blush "*Ngh*... It's...{w=0.3} I'm--" ("grin", "happyCl", "base", "mid") + lun "I... I can't stop moving my--" ("grin", "happyCl", "base", "mid") + gen "Keep going! You're doing it!" + lun "*Ah*...{w=0.4} Yes [name_genie_luna]...{heart}" ("crooked_smile", "happyCl", "base", "up") + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*...{w=0.4}" ("soft", "happyCl", "base", "up") + lun "*Ngh*... It's...{w=0.3} I'm--" ("grin", "happyCl", "base", "mid") play sound "sounds/slick_01.ogg" with kissiris - lun @ cheeks blush "*Ah*!" ("grin", "narrow", "base", "ahegao") + lun "*Ah*!" ("grin", "narrow", "base", "ahegao") - lun @ cheeks blush "*Mmm*..." ("grin", "narrow", "base", "up") + lun "*Mmm*..." ("grin", "narrow", "base", "up") gen "Well done--" play sound "sounds/slick_01.ogg" with kissiris - lun @ cheeks blush "*Ah*!" ("crooked_smile", "narrow", "base", "up") + lun "*Ah*!" ("crooked_smile", "narrow", "base", "up") - lun @ cheeks blush "..." ("soft", "narrow", "base", "stare") - lun @ cheeks blush "{size=-5}*Sigh*...{/size}" ("base", "closed", "low", "mid") + lun "..." ("soft", "narrow", "base", "stare") + lun "{size=-5}*Sigh*...{/size}" ("base", "closed", "low", "mid") #end of masturbate section (Cuts to Normal office screen with blkfade) show screen blkfade @@ -267,38 +267,38 @@ label ll_pf_masturbate_T3_E1_intro: gen "Well, will you look at that... You're a natural..." ("grin", xpos="far_left", ypos="head") gen "So, the {i}wickspots{/i} have left you alone now, I take it?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "I...{w=0.4} I believe so, [name_genie_luna]..." ("open", "narrow", "base", "down", xpos="mid", ypos="base", trans=dissolve) - lun @ cheeks blush "At least that nasty itch appears to have gone away." ("base", "narrow", "base", "down") + lun "I...{w=0.4} I believe so, [name_genie_luna]..." ("open", "narrow", "base", "down", xpos="mid", ypos="base", trans=dissolve) + lun "At least that nasty itch appears to have gone away." ("base", "narrow", "base", "down") gen "Excellent!" ("grin", xpos="far_left", ypos="head") gen "Then my work here is done!" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Oh*..." ("soft", "base", "base", "mid") - lun @ cheeks blush "You want me to leave already, [name_genie_luna]?" ("open", "base", "base", "mid") + lun "*Oh*..." ("soft", "base", "base", "mid") + lun "You want me to leave already, [name_genie_luna]?" ("open", "base", "base", "mid") gen "If there's nothing else I can help you with?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ehm*...{w=0.4} Well, I was just wondering..." ("soft", "narrow", "base", "R") - lun @ cheeks blush "What do I do if the feeling comes back, [name_genie_luna]?" ("angry", "narrow", "base", "mid") - lun @ cheeks blush "Do I just get rid of them myself from now on?" ("soft", "narrow", "base", "mid") + lun "*Ehm*...{w=0.4} Well, I was just wondering..." ("soft", "narrow", "base", "R") + lun "What do I do if the feeling comes back, [name_genie_luna]?" ("angry", "narrow", "base", "mid") + lun "Do I just get rid of them myself from now on?" ("soft", "narrow", "base", "mid") gen "Certainly not!" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "..." ("base", "base", "base", "mid") #happy + lun "..." ("base", "base", "base", "mid") #happy gen "I need to supervise every development until you've mastered the art of masturbation." ("base", xpos="far_left", ypos="head") gen "Preventing this outbreak is now my top priority." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Really? Thank you so much, [name_genie_luna]." ("base", "happyCl", "base", "mid") + lun "Really? Thank you so much, [name_genie_luna]." ("base", "happyCl", "base", "mid") gen "Certainly." ("base", xpos="far_left", ypos="head") gen "Bestow shall I in you, my teaching of all, young padawan!" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Sorry?" ("soft", "base", "base", "mid") - lun @ cheeks blush "I'm not sure exactly what you mean, [name_genie_luna]." ("angry", "narrow", "base", "mid") + lun "Sorry?" ("soft", "base", "base", "mid",cheeks=False) + lun "I'm not sure exactly what you mean, [name_genie_luna]." ("angry", "narrow", "base", "mid") gen "Yes, Indeed... You still have more to learn before reaching your true potential..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Huh*?" ("upset", "narrow", "base", "mid") + lun "*Huh*?" ("upset", "narrow", "base", "mid") gen "Once you've learned how to control the force, I shall bestow on you my saber of light." ("base", xpos="far_left", ypos="head") gen "And as my meta chlorines flow through your body--" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "[name_genie_luna]?" ("angry", "base", "base", "mid") + lun "[name_genie_luna]?" ("angry", "base", "base", "mid") gen "Oh yeah, that's not canon anymore is it..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "..." ("annoyed", "base", "base", "mid") #Confused + lun "..." ("annoyed", "base", "base", "mid") #Confused gen "..." ("base", xpos="far_left", ypos="head") gen "That shall do for today, [name_luna_genie]..." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Okay..." ("base", "narrow", "base", "mid") + lun "Okay..." ("base", "narrow", "base", "mid") gen "Off you pop." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Right." ("open", "base", "base", "mid") - lun @ cheeks blush "Bye then..." ("base", "base", "base", "mid") + lun "Right." ("open", "base", "base", "mid") + lun "Bye then..." ("base", "base", "base", "mid") call lun_walk(action="leave") @@ -314,7 +314,7 @@ label ll_pf_masturbate_T3_E2_intro: call ll_pf_masturbate gen "[name_luna_genie], tell me how you've been." ("base", xpos="far_left", ypos="head") - lun "I've been okay [name_genie_luna]... But it appears the wrackspurts have come back again..." ("open", "narrow", "base", "down", trans=dissolve) + lun "I've been okay [name_genie_luna]... But it appears the wrackspurts have come back again..." ("open", "narrow", "base", "down", xpos="base", ypos="base", trans=d3) gen "Oh no... Such a shame!" ("base", xpos="far_left", ypos="head") lun "Every time I think about the things we've done in here..." ("soft", "narrow", "base", "down") lun "It just makes them feel so much... Stronger..." ("angry", "narrow", "base", "mid") @@ -380,7 +380,7 @@ label ll_pf_masturbate_T3_E2_intro: $ luna.set_cum(pussy="wet") with d3 - lun @ cheeks blush "Finally..." ("angry", "narrow", "base", "down") + lun "Finally..." ("angry", "narrow", "base", "down",cheeks="blush") gen "You seem relieved." gen "(And rather wet...)" @@ -393,61 +393,61 @@ label ll_pf_masturbate_T3_E2_intro: $ luna.set_pose("hand_on_pussy_and_breast") $ luna.strip("bottom", "panties") - lun @ cheeks blush "*Ah*..." ("grin", "narrow", "base", "up") - lun @ cheeks blush "I've not been able to stop thinking about this since last time..." ("grin", "narrow", "base", "stare") - lun @ cheeks blush "I worry those slimy wrackspurts have infested the dormitories, because I'm having trouble sleeping as well..." ("angry", "narrow", "base", "down") + lun "*Ah*..." ("grin", "narrow", "base", "up") + lun "I've not been able to stop thinking about this since last time..." ("grin", "narrow", "base", "stare") + lun "I worry those slimy wrackspurts have infested the dormitories, because I'm having trouble sleeping as well..." ("angry", "narrow", "base", "down") gen "That's quite possible..." - lun @ cheeks blush "It's--{w=0.2} *Ah*...{w=0.3} It's weird...{w=0.3} I almost feel glad I've got them..." ("angry", "closed", "base", "mid") - lun @ cheeks blush "Getting rid of them feels...{w=0.4} so...{w=0.3} so...{w=0.3}{nw}" ("angry", "closed", "low", "mid") - lun @ cheeks blush "Getting rid of them feels... so... so...{fast} good..." ("grin", "narrow", "base", "stare") + lun "It's--{w=0.2} *Ah*...{w=0.3} It's weird...{w=0.3} I almost feel glad I've got them..." ("angry", "closed", "base", "mid") + lun "Getting rid of them feels...{w=0.4} so...{w=0.3} so...{w=0.3}{nw}" ("angry", "closed", "low", "mid") + lun "Getting rid of them feels... so... so...{fast} good..." ("grin", "narrow", "base", "stare") gen "The positive feelings must be your body telling you that you're doing the right thing, by expelling them..." - lun @ cheeks blush "*Ah*..." ("grin", "narrow", "base", "up") - lun @ cheeks blush "I must be...{w=0.3} *Ah*...{w=0.3} Expelling a lot of them then..." ("base", "narrow", "base", "stare") - lun @ cheeks blush "*Ah*... [name_genie_luna], I'm feeling hot all over..." ("angry", "happyCl", "base", "mid") - lun @ cheeks blush "And that itch... It's all over my--" ("angry", "narrow", "base", "down") - lun @ cheeks blush "*Ah*..." ("soft", "happyCl", "base", "down") + lun "*Ah*..." ("grin", "narrow", "base", "up") + lun "I must be...{w=0.3} *Ah*...{w=0.3} Expelling a lot of them then..." ("base", "narrow", "base", "stare") + lun "*Ah*... [name_genie_luna], I'm feeling hot all over..." ("angry", "happyCl", "base", "mid") + lun "And that itch... It's all over my--" ("angry", "narrow", "base", "down") + lun "*Ah*..." ("soft", "happyCl", "base", "down") gen "That means your body is ready for the next step..." - lun @ cheeks blush "[name_genie_luna]...{w=0.3} *Ah*... I'm not sure I'm ready..." ("angry", "happyCl", "base", "mid") + lun "[name_genie_luna]...{w=0.3} *Ah*... I'm not sure I'm ready..." ("angry", "happyCl", "base", "mid") gen "Nonsense..." gen "Just take it slow and gently push a finger in..." - lun @ cheeks blush "*Ah*...{w=0.3} *Ah*...{w=0.3} Alright..." ("open", "happyCl", "base", "mid") + lun "*Ah*...{w=0.3} *Ah*...{w=0.3} Alright..." ("open", "happyCl", "base", "mid") nar "Luna begins rubbing a finger across her slit... Still a little apprehensive about putting it inside..." - lun @ cheeks blush "*Ah*...{w=0.3} [name_genie_luna]..." ("soft", "happyCl", "base", "mid") + lun "*Ah*...{w=0.3} [name_genie_luna]..." ("soft", "happyCl", "base", "mid") gen "Gently..." - lun @ cheeks blush "Gently...{w=0.4} Okay..." ("angry", "closed", "base", "mid") - lun @ cheeks blush "*Nnnngh*..." ("clench", "happyCl", "base", "mid") + lun "Gently...{w=0.4} Okay..." ("angry", "closed", "base", "mid") + lun "*Nnnngh*..." ("clench", "happyCl", "base", "mid") #Finger inserted play sound "sounds/slick_02.ogg" with kissiris - lun @ cheeks blush "*Ah*..." ("base", "narrow", "base", "up") - lun @ cheeks blush "I...{w=0.3} I did it, [name_genie_luna]..." ("grin", "narrow", "base", "up") + lun "*Ah*..." ("base", "narrow", "base", "up") + lun "I...{w=0.3} I did it, [name_genie_luna]..." ("grin", "narrow", "base", "up") gen "How does it feel?" - lun @ cheeks blush "It...{w=0.3} Good...{w=0.5} Just a bit strange..." ("soft", "narrow", "base", "stare") + lun "It...{w=0.3} Good...{w=0.5} Just a bit strange..." ("soft", "narrow", "base", "stare") gen "Try moving it in and out." - lun @ cheeks blush "Alright..." ("soft", "narrow", "base", "down") + lun "Alright..." ("soft", "narrow", "base", "down") play background "sounds/slickloop.ogg" fadein 2 #Luna fingering nar "Luna starts pushing her fingers in and out, the sounds of her moaning becoming more and more shallow as she goes on." - lun @ cheeks blush "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." ("open", "closed", "base", "mid") - lun @ cheeks blush "How--{w=0.2} *Ah*...{w=0.4} How is it looking?" ("soft", "closed", "base", "up") + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." ("open", "closed", "base", "mid") + lun "How--{w=0.2} *Ah*...{w=0.4} How is it looking?" ("soft", "closed", "base", "up") gen "Very good [name_luna_genie]... You're very pretty..." - lun @ cheeks blush "*Ah*...{w=0.3} I'm--{w=0.2} *Ah*...{w=0.4} I'm pretty, [name_genie_luna]?" ("angry", "narrow", "base", "stare") + lun "*Ah*...{w=0.3} I'm--{w=0.2} *Ah*...{w=0.4} I'm pretty, [name_genie_luna]?" ("angry", "narrow", "base", "stare") gen "Why yes, [name_luna_genie]. Your body is very nice..." - lun @ cheeks blush "[name_genie_luna]--{w=0.2} *Ah*...{w=0.4} That's not what I--{w=0.4}{nw}" ("angry", "narrow", "base", "mid") - lun @ cheeks blush "[name_genie_luna]-- *Ah*... That's not what I--{fast} *Ah*..." ("angry", "closed", "base", "mid") - lun @ cheeks blush "I merely wanted to know if I was doing it right..." ("soft", "closed", "base", "mid") + lun "[name_genie_luna]--{w=0.2} *Ah*...{w=0.4} That's not what I--{w=0.4}{nw}" ("angry", "narrow", "base", "mid") + lun "[name_genie_luna]-- *Ah*... That's not what I--{fast} *Ah*..." ("angry", "closed", "base", "mid") + lun "I merely wanted to know if I was doing it right..." ("soft", "closed", "base", "mid") gen "I know." - lun @ cheeks blush "*Ah*...{w=0.3} [name_genie_luna]?" ("soft", "narrow", "base", "stare") - gen "Take your top off for me will you..." - lun @ cheeks blush "*Ah*...{w=0.3} *Ah*...{w=0.3} Okay..." ("open", "narrow", "base", "up") + lun "*Ah*...{w=0.3} [name_genie_luna]?" ("soft", "narrow", "base", "stare") + gen "Take your top off for me, will you..." + lun "*Ah*...{w=0.3} *Ah*...{w=0.3} Okay..." ("open", "narrow", "base", "up") #Luna takes out finger stop background fadeout 2 - lun @ cheeks blush "" ("base", "narrow", "base", "stare") + lun "" ("base", "narrow", "base", "stare") $ luna.set_pose("default") pause 1 @@ -455,73 +455,73 @@ label ll_pf_masturbate_T3_E2_intro: $ luna.strip("top", "bra") with d5 - lun @ cheeks blush "" ("grin", "narrow", "base", "down") + lun "" ("grin", "narrow", "base", "down") pause 1 - lun @ cheeks blush "" ("grin", "narrow", "base", "mid") + lun "" ("grin", "narrow", "base", "mid") call ctc gen "Now keep going, [name_luna_genie]..." - lun @ cheeks blush "Yes [name_genie_luna]..." ("grin", "narrow", "base", "mid") + lun "Yes [name_genie_luna]..." ("grin", "narrow", "base", "mid") $ luna.set_pose("hand_on_pussy_and_breast") #Luna rubs herself again - lun @ cheeks blush "*Mmm*..." ("base", "closed", "base", "mid") + lun "*Mmm*..." ("base", "closed", "base", "mid") gen "That's it... Keep rubbing that cute slit of yours..." - lun @ cheeks blush "*Ah*...{w=0.4} *Ah*...{w=0.4}*Ah*..." ("soft", "closed", "base", "down") + lun "*Ah*...{w=0.4} *Ah*...{w=0.4}*Ah*..." ("soft", "closed", "base", "down") gen "Look at me [name_luna_genie]." - lun @ cheeks blush "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." ("soft", "narrow", "base", "mid") + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." ("soft", "narrow", "base", "mid") gen "Show me your tongue..." - lun @ cheeks blush "*Ah*...{w=0.4} My...{w=0.4} My tongue?" ("angry", "base", "base", "mid") - lun @ cheeks blush "Is this part of our research?" ("angry", "base", "base", "R") + lun "*Ah*...{w=0.4} My...{w=0.4} My tongue?" ("angry", "base", "base", "mid") + lun "Is this part of our research?" ("angry", "base", "base", "R") gen "Yes... Open your mouth as wide as you can please." - lun @ cheeks blush "But--" ("open", "base", "base", "mid") + lun "But--" ("open", "base", "base", "mid") gen "Say \"Aaaa\"..." - lun @ cheeks blush "*Aaaa*...{w=0.1}{nw}" ("open", "closed", "base", "mid") - lun @ cheeks blush "*Aaaa*...{fast}{w=0.1}{nw}" ("open_tongue", "closed", "base", "mid") - lun @ cheeks blush "*Aaaa*...{fast}" ("open_wide_tongue", "closed", "base", "mid") + lun "*Aaaa*...{w=0.1}{nw}" ("open", "closed", "base", "mid") + lun "*Aaaa*...{fast}{w=0.1}{nw}" ("open_tongue", "closed", "base", "mid") + lun "*Aaaa*...{fast}" ("open_wide_tongue", "closed", "base", "mid") gen "Good..." gen "I want you to know how much I appreciate that you chose to come to me with this problem of yours [name_luna_genie]..." #Luna stops - lun @ cheeks blush "" ("soft", "narrow", "base", "mid") + lun "" ("soft", "narrow", "base", "mid") call ctc - lun @ cheeks blush "[name_genie_luna] I--" ("angry", "narrow", "base", "mid") + lun "[name_genie_luna] I--" ("angry", "narrow", "base", "mid") gen "Keep going... Put a finger in again..." - lun @ cheeks blush "Yes [name_genie_luna]..." ("angry", "narrow", "base", "down") + lun "Yes [name_genie_luna]..." ("angry", "narrow", "base", "down") #Luna puts finger in again play sound "sounds/slick_02.ogg" with kissiris - lun @ cheeks blush "*Mmm*..." ("soft", "narrow", "base", "up") + lun "*Mmm*..." ("soft", "narrow", "base", "up") gen "Good girl... Now get it moving... Get those spurts out..." - lun @ cheeks blush "" ("base", "narrow", "base", "up") + lun "" ("base", "narrow", "base", "up") call ctc play background "sounds/slickloop.ogg" fadein 2 #Luna fingering - lun @ cheeks blush "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." ("open", "closed", "base", "mid") - lun @ cheeks blush "[name_genie_luna]... *Ah*...{w=0.3} I feel them building up again..." ("soft", "closed", "base", "mid") + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*..." ("open", "closed", "base", "mid") + lun "[name_genie_luna]... *Ah*...{w=0.3} I feel them building up again..." ("soft", "closed", "base", "mid") gen "Good girl, then try going a bit faster..." - lun @ cheeks blush "Oh-- Okay..." ("soft", "closed", "base", "mid") + lun "Oh-- Okay..." ("soft", "closed", "base", "mid") play background "sounds/slickloopfast.ogg" - lun @ cheeks blush "*Ah*...{w=0.2}*Ah*...{w=0.2}*Ah*..." ("open", "narrow", "base", "up") - lun @ cheeks blush "I think...{w=0.3} *Ah*...{w=0.3} I'm about to...{w=0.3} *Ah*..." ("angry", "narrow", "base", "up") + lun "*Ah*...{w=0.2}*Ah*...{w=0.2}*Ah*..." ("open", "narrow", "base", "up") + lun "I think...{w=0.3} *Ah*...{w=0.3} I'm about to...{w=0.3} *Ah*..." ("angry", "narrow", "base", "up") gen "Oh, are you cumming already?" - lun @ cheeks blush "*Ah*... Yes, I'm--" ("angry", "narrow", "base", "stare") - lun @ cheeks blush "*Ah*...{w=0.3} I'm cumming [name_genie_luna]!!{heart}{heart}" ("grin", "happyCl", "base", "up") + lun "*Ah*... Yes, I'm--" ("angry", "narrow", "base", "stare") + lun "*Ah*...{w=0.3} I'm cumming [name_genie_luna]!!{heart}{heart}" ("grin", "happyCl", "base", "up") play sound "sounds/slick_01.ogg" with kissiris - lun @ cheeks blush "*Ah*!{heart}" ("grin", "narrow", "base", "up") + lun "*Ah*!{heart}" ("grin", "narrow", "base", "up") nar "You see a flush of red roll over Luna's face as her body twitches from the throes of her orgasm." @@ -529,7 +529,7 @@ label ll_pf_masturbate_T3_E2_intro: with kissiris $ luna.set_cum(pussy="squirt_post") - lun @ cheeks blush "*Ah*...{heart}" ("open_tongue", "narrow", "base", "ahegao") + lun "*Ah*...{heart}" ("open_tongue", "narrow", "base", "ahegao") nar "Despite this, her fingers remain a flurry of movement until a final wave of pleasure washes over her." play sound "sounds/slick_01.ogg" @@ -537,7 +537,7 @@ label ll_pf_masturbate_T3_E2_intro: stop background fadeout 2 #Finger stops moving - lun @ cheeks blush "*Mmm*...{heart}" ("base", "happyCl", "base", "mid") + lun "*Mmm*...{heart}" ("base", "happyCl", "base", "mid") hide cg show screen blkfade @@ -559,20 +559,21 @@ label ll_pf_masturbate_T3_E2_intro: call weather_sound gen "It seems those Wickedspots have been giving you a fair bit of grief, haven't they?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ah*...{w=0.3} {heart}yes{heart}..." ("base", "narrow", "base", "down", xpos="mid", ypos="base", trans=dissolve) + lun "*Ah*...{w=0.3} {heart}yes{heart}..." ("base", "narrow", "base", "down", xpos="mid", ypos="base", trans=dissolve) gen "Don't worry, that should sort them out for now..." ("base", xpos="far_left", ypos="head") gen "Feeling better?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Yes... I'm feeling much better now... Thank you [name_genie_luna]." ("base", "base", "base", "mid") + lun "Yes... I'm feeling much better now... Thank you [name_genie_luna]." ("base", "base", "base", "mid") gen "I take it my words of encouragement were effective?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "I...{w=0.4} Yes [name_genie_luna]..." ("soft", "narrow", "base", "R") + lun "I...{w=0.4} Yes [name_genie_luna]..." ("soft", "narrow", "base", "R") gen "Excellent." ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "*Ehm*..." ("soft", "narrow", "base", "down") - lun @ cheeks blush "So the things you said..." ("open", "narrow", "base", "down") - lun @ cheeks blush "About me being pretty..." ("normal", "narrow", "base", "down") + lun "*Ehm*..." ("soft", "narrow", "base", "down") + lun "So the things you said..." ("open", "narrow", "base", "down") + lun "About me being pretty..." ("normal", "narrow", "base", "down") gen "Yes?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Was that just to help me with..." ("soft", "narrow", "base", "downL") - lun @ cheeks blush "Actually... Forget I asked [name_genie_luna]..." ("angry", "narrow", "base", "downL") - lun @ cheeks blush "I... I'll just head back to my dorms now..." ("angry", "base", "base", "R") + lun "Was that just to help me with..." ("soft", "narrow", "base", "downL") + lun "Actually... Forget I asked, [name_genie_luna]..." ("angry", "narrow", "base", "downL") + lun "I... I'll just head back to my dorms now..." ("angry", "base", "base", "R") + lun "" ("mad", "base", "base", "R",cheeks=False) gen "Of course, good job today--" ("base", xpos="far_left", ypos="head") call lun_walk(action="leave") @@ -589,7 +590,7 @@ label ll_pf_masturbate_T3_E3_intro: call ll_pf_masturbate gen "Alright then, time for you to--" ("base", xpos="far_left", ypos="head") - lun "Finally..." ("mad", "base", "base", "mid", trans=dissolve) + lun "Finally..." ("mad", "base", "base", "mid", xpos="base", ypos="base", trans=d3) call lun_walk("desk", "base") pause .3 @@ -605,7 +606,7 @@ label ll_pf_masturbate_T3_E3_intro: $ luna.set_cum(pussy="wet") $ luna.strip("clothes") - lun @ cheeks blush "" ("grin", "narrow", "base", "mid") + lun "" ("grin", "narrow", "base", "mid",cheeks="blush") stop weather fadeout 4 @@ -616,11 +617,11 @@ label ll_pf_masturbate_T3_E3_intro: # hand moving slow - lun @ cheeks blush "*Ah*... {heart} Yes..." ("grin", "narrow", "base", "up") + lun "*Ah*... {heart} Yes..." ("grin", "narrow", "base", "up") gen "By the great desert sands! You're sopping wet!" - lun @ cheeks blush "I'm sorry [name_genie_luna]... I just...{w=0.3} Need this really bad...{heart}" ("mad", "happyCl", "base", "stare") - lun @ cheeks blush "These Wrackspurts...{w=0.4} *Ah*..." ("upset", "happyCl", "base", "mid") - lun @ cheeks blush "They've been very tiresome..." ("angry", "narrow", "base", "up") + lun "I'm sorry [name_genie_luna]... I just...{w=0.3} Need this really bad...{heart}" ("mad", "happyCl", "base", "stare") + lun "These wrackspurts...{w=0.4} *Ah*..." ("upset", "happyCl", "base", "mid") + lun "They've been very tiresome..." ("angry", "narrow", "base", "up") nar "Without being prompted, Luna pushes a finger inside her and starts fingering herself." @@ -628,48 +629,48 @@ label ll_pf_masturbate_T3_E3_intro: play sound "sounds/slick_02.ogg" with kissiris - lun @ cheeks blush "*Ah*...{heart}" ("grin", "narrow", "base", "up") + lun "*Ah*...{heart}" ("grin", "narrow", "base", "up") #Luna fingering play background "sounds/slickloop.ogg" fadein 2 - lun @ cheeks blush "" ("grin", "closed", "base", "mid") + lun "" ("grin", "closed", "base", "mid") gen "You're becoming quite the expert at this..." - lun @ cheeks blush "*Ah*...{w=0.4} I'm just doing--{w=0.2} *Ah*...{w=0.4} What you've taught me [name_genie_luna]..." ("soft", "closed", "base", "mid") + lun "*Ah*...{w=0.4} I'm just doing--{w=0.2} *Ah*...{w=0.4} What you've taught me [name_genie_luna]..." ("soft", "closed", "base", "mid") gen "Don't be so modest [name_luna_genie]... It takes a lot of willpower and determination to get to where you are." - lun @ cheeks blush "*Ah*... Really?" ("soft", "narrow", "base", "stare") + lun "*Ah*... Really?" ("soft", "narrow", "base", "stare") gen "Absolutely...{w=0.4} You're a natural!" gen "I'd even go as far to say that you were born to do this." - lun @ cheeks blush "*Mmm*..." ("base", "narrow", "base", "stare") + lun "*Mmm*..." ("base", "narrow", "base", "stare") - lun @ cheeks blush "Well, I'm not so sure about that..." ("base", "closed", "base", "mid") - lun @ cheeks blush "Although I must say...{w=0.4} *Ah*...{w=0.4} I've been enjoying these sessions a fair bit, [name_genie_luna]..." ("open", "closed", "base", "mid") - lun @ cheeks blush "They are starting to become all I can think about..." ("base", "closed", "base", "mid") + lun "Well, I'm not so sure about that..." ("base", "closed", "base", "mid") + lun "Although I must say...{w=0.4} *Ah*...{w=0.4} I've been enjoying these sessions a fair bit, [name_genie_luna]..." ("open", "closed", "base", "mid") + lun "They are starting to become all I can think about..." ("base", "closed", "base", "mid") gen "*Hmm*...{w=0.3} Do you think that's a bad thing?" - lun @ cheeks blush "*Ah*...{w=0.3} of course not!" ("grin", "closed", "base", "mid") - lun @ cheeks blush "It just...*Hngh*{w=0.3} means that it's working..." ("grin", "happyCl", "base", "mid") - lun @ cheeks blush "If only I could spend all day up here..." ("base", "narrow", "base", "up") + lun "*Ah*...{w=0.3} of course not!" ("grin", "closed", "base", "mid") + lun "It just...*Hngh*{w=0.3} means that it's working..." ("grin", "happyCl", "base", "mid") + lun "If only I could spend all day up here..." ("base", "narrow", "base", "up") gen "Do you think a full day of treatment would get rid of them?" - lun @ cheeks blush "*Ah*..." ("soft", "narrow", "base", "up") - lun @ cheeks blush "I don't know..." ("open", "narrow", "base", "up") - lun @ cheeks blush "But..." ("upset", "narrow", "base", "up") - lun @ cheeks blush "I think It'd probably feel--{w=0.2} *Ah*..." ("soft", "narrow", "base", "up") - lun @ cheeks blush "Nice...{heart}{heart}{heart}" ("base", "narrow", "base", "stare") + lun "*Ah*..." ("soft", "narrow", "base", "up") + lun "I don't know..." ("open", "narrow", "base", "up") + lun "But..." ("upset", "narrow", "base", "up") + lun "I think It'd probably feel--{w=0.2} *Ah*..." ("soft", "narrow", "base", "up") + lun "Nice...{heart}{heart}{heart}" ("base", "narrow", "base", "stare") nar "Luna moans softly under her breath." - lun @ cheeks blush "{heart}{heart}{heart}" ("base", "closed", "base", "mid") - lun @ cheeks blush "You, watching me while I do this... For some reason--" ("grin", "narrow", "base", "mid") + lun "{heart}{heart}{heart}" ("base", "closed", "base", "mid") + lun "You, watching me while I do this... For some reason--" ("grin", "narrow", "base", "mid") gen "*Shhh*... Focus [name_luna_genie]..." - lun @ cheeks blush "Yes [name_genie_luna]..." ("base", "narrow", "base", "down") - lun @ cheeks blush "*Ah*...{w=0.3} *Ah*...{w=0.3} *Ah*..." ("base", "closed", "base", "mid") - lun @ cheeks blush "I think..." ("grin", "closed", "base", "stare") - lun @ cheeks blush "*Ah*..." ("grin", "narrow", "base", "up") - lun @ cheeks blush "I think I've almost got them, [name_genie_luna]..." ("crooked_smile", "narrow", "base", "up") + lun "Yes [name_genie_luna]..." ("base", "narrow", "base", "down") + lun "*Ah*...{w=0.3} *Ah*...{w=0.3} *Ah*..." ("base", "closed", "base", "mid") + lun "I think..." ("grin", "closed", "base", "stare") + lun "*Ah*..." ("grin", "narrow", "base", "up") + lun "I think I've almost got them, [name_genie_luna]..." ("crooked_smile", "narrow", "base", "up") gen "(Already? She's faster than I am!)" - lun @ cheeks blush "[name_genie_luna]... Please..." ("crooked_smile", "narrow", "base", "up") + lun "[name_genie_luna]... Please..." ("crooked_smile", "narrow", "base", "up") play background "sounds/slickloopfast.ogg" - lun @ cheeks blush "*Ah*...{w=0.3} Tell me...{w=0.3} Tell me I'm pretty." ("mad", "closed", "base", "stare") + lun "*Ah*...{w=0.3} Tell me...{w=0.3} Tell me I'm pretty." ("mad", "closed", "base", "stare") gen "What?" label .choice: @@ -677,35 +678,35 @@ label ll_pf_masturbate_T3_E3_intro: menu: "-Tell her-": gen "You're very pretty, [name_luna_genie]." - lun @ cheeks blush "*Mmm*..." ("base", "narrow", "base", "up") + lun "*Mmm*..." ("base", "narrow", "base", "up") "-Don't-": random: - lun @ cheeks blush "Hurry...{w=0.3} I'm...{w=0.3} I'm almost there..." ("grin", "happyCl", "base", "up") + lun "Hurry...{w=0.3} I'm...{w=0.3} I'm almost there..." ("grin", "happyCl", "base", "up") block: gen "You're going to need to learn how to do this without my help [name_luna_genie]..." - lun @ cheeks blush "Please, [name_genie_luna]..." ("angry", "happyCl", "base", "mid") + lun "Please, [name_genie_luna]..." ("angry", "happyCl", "base", "mid") block: gen "Tell you..." - lun @ cheeks blush "Tell me I'm pretty, [name_genie_luna]..." ("grin", "narrow", "base", "up") + lun "Tell me I'm pretty, [name_genie_luna]..." ("grin", "narrow", "base", "up") # Menu opens again until you've told her she's pretty jump ll_pf_masturbate_T3_E3_intro.choice play background "sounds/slickloopveryfast.ogg" - lun @ cheeks blush "" ("grin", "closed", "base", "up") + lun "" ("grin", "closed", "base", "up") nar "Luna, revelling in your praise, closes her eyes and begins furiously pumping her fingers in and out." - lun @ cheeks blush "*Ah*...{w=0.2} *Ah*...{w=0.2} *Ah*..." ("grin", "closed", "base", "mid") #Eyes closed - lun @ cheeks blush "{size=+4}*Mmm*...{w=0.4}{/size}{nw}" ("base", "closed", "base", "mid") - lun @ cheeks blush "{size=+4}*Mmm*...{fast} Yes...{heart}{/size}" ("crooked_smile", "closed", "base", "mid") - lun @ cheeks blush "*Ah*...{w=0.3}{nw}" ("crooked_smile", "closed", "base", "mid") - lun @ cheeks blush "*Ah*...{fast} [name_genie_luna], I think I'm..." ("crooked_smile", "narrow", "base", "stare") + lun "*Ah*...{w=0.2} *Ah*...{w=0.2} *Ah*..." ("grin", "closed", "base", "mid") #Eyes closed + lun "{size=+4}*Mmm*...{w=0.4}{/size}{nw}" ("base", "closed", "base", "mid") + lun "{size=+4}*Mmm*...{fast} Yes...{heart}{/size}" ("crooked_smile", "closed", "base", "mid") + lun "*Ah*...{w=0.3}{nw}" ("crooked_smile", "closed", "base", "mid") + lun "*Ah*...{fast} [name_genie_luna], I think I'm..." ("crooked_smile", "narrow", "base", "stare") nar "Luna's fingers move in a flurry, as she continues pumping them into her needy slit." lun @ cheeks blush "*Ah*...{w=0.2} *Ah*...{w=0.2} *Ah*...{heart}" ("crooked_smile", "narrow", "base", "up") gen "Good girl...{w=0.3} Now--" - lun @ cheeks blush "*AAAAH*!!!" ("scream", "happyCl", "base", "up") + lun "*AAAAH*!!!" ("scream", "happyCl", "base", "up") play sound "sounds/slick_01.ogg" #Luna Squirts @@ -715,23 +716,23 @@ label ll_pf_masturbate_T3_E3_intro: pause .8 #Non luna squirt $ luna.set_cum(pussy="squirt_post") - lun @ cheeks blush "" ("grin", "wide", "base", "up") + lun "" ("grin", "wide", "base", "up") gen "By the great--" - lun @ cheeks blush "{size=+4}*Nnngh*--{/size}" ("angry", "narrow", "base", "up") + lun "{size=+4}*Nnngh*--{/size}" ("angry", "narrow", "base", "up") play sound "sounds/slick_01.ogg" stop background fadeout 2 #Luna Squirts with kissiris $ luna.set_cum(pussy="squirt") - lun @ cheeks blush "{size=+4}*Nnngh*--{fast} *AH*!!{heart}{/size}{w=0.3}{nw}" ("scream", "narrow", "base", "ahegao") + lun "{size=+4}*Nnngh*--{fast} *AH*!!{heart}{/size}{w=0.3}{nw}" ("scream", "narrow", "base", "ahegao") #Non luna squirt $ luna.set_cum(pussy="squirt_post") - lun @ cheeks blush "{size=+4}*Nnngh*--{fast} *AH*!!{heart}{/size}{fast}" ("scream", "narrow", "base", "ahegao") + lun "{size=+4}*Nnngh*--{fast} *AH*!!{heart}{/size}{fast}" ("scream", "narrow", "base", "ahegao") - lun @ cheeks blush "*Ah*..." ("base", "narrow", "base", "up") - lun @ cheeks blush "Thank you, [name_genie_luna]..." ("base", "closed", "base", "mid") + lun "*Ah*..." ("base", "narrow", "base", "up") + lun "Thank you, [name_genie_luna]..." ("base", "closed", "base", "mid") hide cg show screen blkfade @@ -753,11 +754,11 @@ label ll_pf_masturbate_T3_E3_intro: call weather_sound gen "Now I didn't take you for a squirter, [name_luna_genie]..." ("grin", xpos="far_left", ypos="head") - lun @ cheeks blush "..." ("soft", "base", "base", "down", xpos="mid", ypos="base", trans=dissolve) + lun "..." ("soft", "base", "base", "down", xpos="mid", ypos="base", trans=dissolve) gen "Is everything okay?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "Look at all these wrackspurts!" ("mad", "base", "base", "down") + lun "Look at all these wrackspurts!" ("mad", "base", "base", "down") gen "..." ("base", xpos="far_left", ypos="head") - lun "I didn't think I'd be able to release this many at once." ("smile", "narrow", "base", "down") + lun "I didn't think I'd be able to release this many at once." ("smile", "narrow", "base", "down",cheeks=False) gen "Sure took me by surprise..." ("grin", xpos="far_left", ypos="head") lun "Am I a master baiter now?" ("crooked_smile", "base", "base", "mid") @@ -790,7 +791,7 @@ label ll_pf_masturbate_T3_E3_intro: gen "(Hold on...)" ("grin", xpos="far_left", ypos="head") lun "*Huh*? Did you have a revelation, [name_genie_hermione]?" ("grin", "base", "raised", "mid") gen "You've just given me a great idea!" ("grin", xpos="far_left", ypos="head") - lun "Oooh! What is it? Is it a new method of dealing with the Wrackspurts?" ("crooked_smile", "base", "base", "mid") + lun "Oooh! What is it? Is it a new method of dealing with the wrackspurts?" ("crooked_smile", "base", "base", "mid") gen "Why yes indeed, [name_luna_genie]!" ("base", xpos="far_left", ypos="head") lun "Marvellous!" ("smile", "happyCl", "base", "mid") gen "Although it might be a hard one, so I hope you're ready to take it on, [name_luna_genie]." ("base", xpos="far_left", ypos="head") @@ -812,7 +813,7 @@ label ll_pf_masturbate_T3_E4_repeat: call ll_pf_masturbate gen "Ready to avert the spurts?" ("base", xpos="far_left", ypos="head") - lun "Avert them, [name_genie_luna]?" ("soft", "base", "base", "mid", trans=dissolve) + lun "Avert them, [name_genie_luna]?" ("soft", "base", "base", "mid", xpos="base", ypos="base", trans=d3) gen "Ready to insert until you spurt and squirt?" ("base", xpos="far_left", ypos="head") lun "Oh!{w=0.4} Yes, I am ready!" ("base", "base", "base", "mid") gen "Great, then show me how it's done, master baiter!" ("base", xpos="far_left", ypos="head") @@ -820,6 +821,9 @@ label ll_pf_masturbate_T3_E4_repeat: #Luna chibi walks to desk call lun_walk("desk", "base") + show screen blkfade + with d3 + $ luna.set_face(mouth="base", eyes="base", eyebrows="base", pupils="mid") stop weather fadeout 4 @@ -884,7 +888,7 @@ label ll_pf_masturbate_T3_E4_repeat: $ luna.strip("clothes") with d3 - lun @ cheeks blush "" ("base", "closed", "base", "mid") + lun "" ("base", "closed", "base", "mid",cheeks="blush") nar "Luna slides the rest of her clothes off and begins rubbing herself." #Hand on pussy @@ -898,41 +902,41 @@ label ll_pf_masturbate_T3_E4_repeat: play sound "sounds/slick_02.ogg" with kissiris - lun @ cheeks blush "*Ah*..." ("base", "narrow", "base", "up") + lun "*Ah*..." ("base", "narrow", "base", "up") #Luna fingering play background "sounds/slickloop.ogg" fadein 2 - lun @ cheeks blush "*Mmm*..." ("base", "closed", "base", "mid") + lun "*Mmm*..." ("base", "closed", "base", "mid") gen "Good..." gen "You sure seem to have found a way to keep yourself focused on the task, [name_luna_genie]..." - lun @ cheeks blush "*Mmm*... Yes, [name_genie_luna]..." ("open", "closed", "base", "mid") + lun "*Mmm*... Yes, [name_genie_luna]..." ("open", "closed", "base", "mid") gen "You should feel very proud of your accomplishments." - lun @ cheeks blush "*Ah*...{w=0.4} Yes...{w=0.4} I feel it inside of me [name_genie_luna]..." ("soft", "closed", "base", "mid") + lun "*Ah*...{w=0.4} Yes...{w=0.4} I feel it inside of me [name_genie_luna]..." ("soft", "closed", "base", "mid") play background "sounds/slickloopfast.ogg" - lun @ cheeks blush "" ("soft", "narrow", "base", "mid") + lun "" ("soft", "narrow", "base", "mid") nar "Luna begins moving her fingers faster inside her as she stares at you intently." gen "I was very impressed with how quickly you got there last time..." gen "You've got to tell me your tricks, did you think of something in particular?" $ luna.set_cum(pussy="wet") - lun @ cheeks blush "*Ah*...{w=0.4} *Ah*...{w=0.4} [name_genie_luna]..." ("base", "narrow", "base", "stare") + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} [name_genie_luna]..." ("base", "narrow", "base", "stare") gen "My apologies, I'll let you get on with it..." nar "You watch in silence as Luna fingers herself... Her heavy breathing, now being the only thing filling your chambers." - lun @ cheeks blush "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*...{w=0.4}" ("grin", "narrow", "base", "up") + lun "*Ah*...{w=0.4} *Ah*...{w=0.4} *Ah*...{w=0.4}" ("grin", "narrow", "base", "up") gen "(Look at those fingers go... Now that's a girl with purpose.)" play background "sounds/slickloopveryfast.ogg" - lun @ cheeks blush "" ("grin", "narrow", "base", "mid") + lun "" ("grin", "narrow", "base", "mid") nar "Looking at you once again, Luna starts moving her fingers even faster..." - lun @ cheeks blush "*Ah*...{w=0.2} *Ah*...{w=0.2} [name_genie_luna]..." ("grin", "narrow", "base", "mid") + lun "*Ah*...{w=0.2} *Ah*...{w=0.2} [name_genie_luna]..." ("grin", "narrow", "base", "mid") gen "Yes, [name_luna_genie]?" - lun @ cheeks blush "*Aaaah*!!!" ("crooked_smile", "narrow", "base", "up") + lun "*Aaaah*!!!" ("crooked_smile", "narrow", "base", "up") play sound "sounds/slick_01.ogg" with kissiris @@ -951,7 +955,7 @@ label ll_pf_masturbate_T3_E4_repeat: #Non luna squirt $ luna.set_cum(pussy="squirt_post") - lun @ cheeks blush "*[name_genie_luna]*!!{heart}" ("scream", "narrow", "base", "up") + lun "[name_genie_luna]!!{heart}" ("scream", "narrow", "base", "up") play sound "sounds/slick_01.ogg" stop background fadeout 2 @@ -961,20 +965,20 @@ label ll_pf_masturbate_T3_E4_repeat: pause .6 #Non luna squirt $ luna.set_cum(pussy="squirt_post") - lun @ cheeks blush "" ("crooked_smile", "narrow", "base", "stare") + lun "" ("crooked_smile", "narrow", "base", "stare") - lun @ cheeks blush "*Ah*...{heart}" ("grin", "narrow", "base", "up") + lun "*Ah*...{heart}" ("grin", "narrow", "base", "up") $ luna.set_pose(None) $ luna.strip("clothes") #Luna normal doll pose - lun @ cheeks blush "*Mmm*..." ("base", "closed", "base", "mid") - lun @ cheeks blush "Did I do good, [name_genie_luna]?" ("soft", "narrow", "base", "up") + lun "*Mmm*..." ("base", "closed", "base", "mid") + lun "Did I do good, [name_genie_luna]?" ("soft", "narrow", "base", "up") gen "Very good, [name_luna_genie]..." - lun @ cheeks blush "*Ah*...{w=0.4} I'm glad..." ("base", "narrow", "base", "up") - lun @ cheeks blush "..." ("base", "narrow", "base", "down") #More focused - lun @ cheeks blush "Oh, no! Look at what has happened to your floor!" ("mad", "narrow", "base", "down") + lun "*Ah*...{w=0.4} I'm glad..." ("base", "narrow", "base", "up") + lun "..." ("base", "narrow", "base", "down") #More focused + lun "Oh, no! Look at what has happened to your floor!" ("mad", "narrow", "base", "down") gen "I'm sure it's fine, it has seen worse I'm--" show CG lun_intro luna bendover naked as cg zorder 17: @@ -982,7 +986,7 @@ label ll_pf_masturbate_T3_E4_repeat: easein_quad 10.0 zoom 1.0 pos (-1040, -600) #Luna naked bent over pose - lun "Now where did I put my spectrespecs..." ("base", "base", "base", "mid") + lun "Now where did I put my spectrespecs..." ("base", "base", "base", "mid",cheeks=False) nar "Luna bends down and begins checking around the floor for her glasses." gen "Very fine indeed..." @@ -1057,7 +1061,7 @@ label ll_pf_masturbate_T3_E4_repeat: lun "Yes?" ("base", "base", "raised", "mid") gen "(No wonder she didn't look phased by taking her clothes off...)" ("base", xpos="far_left", ypos="head") gen "How very progressive..." ("base", xpos="far_left", ypos="head") - lun "That way, there are fewer places for the Nargles to hide." ("grin", "base", "base", "mid") + lun "That way, there are fewer places for the nargles to hide." ("grin", "base", "base", "mid") gen "I see..." ("grin", xpos="far_left", ypos="head") gen "(Just smile and nod...)" ("grin", xpos="far_left", ypos="head") gen "Well then... I'll let you know when our next session will be [name_luna_genie]." ("base", xpos="far_left", ypos="head") @@ -1071,8 +1075,320 @@ label ll_pf_masturbate_T3_E4_repeat: call lun_walk(action="leave") - if states.lun.level < 24: - $ states.lun.level = 24 - call end_of_content + jump ll_pf_masturbate_end + +label ll_pf_masturbate_T4_E1_repeat: + + call ll_pf_masturbate + + gen "I hope you remember everything I've taught you about touching yourself." ("base", xpos="far_left", ypos="head") + lun "Of course I remember!" ("grin", "base", "base", "mid", xpos="base", ypos="base", trans=d3) + gen "Are you sure?" ("base", xpos="far_left", ypos="head") + lun "Most certainly!" ("smile", "closed", "base", "mid") + gen "*Hmm*... I don't know... You are a bit forgetful at times..." ("base", xpos="far_left", ypos="head") + lun "I do remember, I really do!" ("clench", "base", "base", "mid") + gen "Great!" ("base", xpos="far_left", ypos="head") + gen "Then I'd like you to prove it to me!" ("base", xpos="far_left", ypos="head") + lun "Okay!" ("smile", "base", "base", "mid") + + call lun_walk("desk", "base") + pause 0.3 + + show screen blkfade + with d3 + + $ luna.set_face(mouth="base", eyes="base", eyebrows="base", pupils="mid") + stop weather fadeout 4 + + hide screen blkfade + show CG luna as cg zorder 17: + zoom 0.5 + with fade + + #Start of masturbate section + + $ renpy.sound.play("sounds/cloth_sound3.ogg") + $ luna.strip("top", "bra") + with d3 + + gen "Not so fast, [name_luna_genie]... I'll need you to walk me through it." + lun "Walk you through it, [name_genie_luna]?" ("angry", "base", "raised", "mid") + gen "To ensure that you've been paying attention, I require you to describe each of your actions and their purpose." + lun "Hold on... Are you saying this is a test, [name_genie_luna]?" ("open", "base", "raised", "mid") + gen "Precisely." + lun "Oooooh... What's it called?" ("smile", "base", "base", "mid") + gen "What's it...{w=0.4} called?" + lun "The test! Does it have a name? Like the \"O.W.L's\"!" ("grin", "base", "raised", "mid") + gen "There's an owl test?" + lun "*Hah-Hah*! Very funny [name_genie_luna]!" ("smile", "happyCl", "base", "mid") + gen "..." + lun "The acronym for \"Ordinary Wizarding Level\" does spell out owl!" ("smile", "happyCl", "base", "mid") + lun "*Snort*" ("grin", "happyCl", "base", "mid") + gen "*Heh*...{w=0.4} Yeah, sure does..." + lun "Hold on...{w=0.4} Do all tests at Hogwarts have an acronym? Please tell me they do!" ("grin", "base", "raised", "mid") + gen "Oh...{w=0.4} *Err*...{w=0.4} Yeah, they certainly do!" + lun "Really? Wow! So, what's this one called?" ("base", "base", "base", "mid") + gen "*Err*..." + menu: + "\"C.U.M\"": + lun "Oooh!" ("soft", "base", "base", "stare") + lun "What does that stand for?" ("soft", "base", "base", "mid") + gen "Complete Understanding of Masturbation." + lun "Neat!" ("grin", "base", "base", "mid") + "\"F.U.C.K\"": + lun "Fuck?" ("soft", "base", "raised", "mid") + lun "What does that stand for?" ("soft", "base", "base", "mid") + gen "Female Utilizing Common Knowledge." + lun "I see!" ("grin", "base", "base", "mid") + "\"P.U.S.S.Y\"": + lun "Like a cat?!" ("grin", "base", "base", "mid") + gen "Sure." + lun "What does it stand for?" ("base", "base", "base", "mid") + gen "Perfectly Understanding that Stimulation Satisfies You." + lun "Nice!" ("grin", "base", "base", "mid") + "\"G.U.S.H.E.R.S\"": + lun "What does that stand for?" ("soft", "base", "raised", "mid") + gen "General Understanding of Stimulation; Holes, Ejaculations, and Rewarding Squirts!" + lun "Yes, they are little rascals aren't they!" ("grin", "base", "base", "mid") + "\"R.U.B\"": + lun "What does that stand for?" ("soft", "base", "raised", "mid") + gen "Relentless User of Body." + lun "Oh! That makes sense!" ("grin", "base", "base", "mid") + "\"S.M.A.S.H\"": + lun "What does that stand for?" ("soft", "base", "raised", "mid") + random: + gen "Sensual Maestro of Autoerotic Skills and Hedonism." + gen "Skilled Masturbatory Aficionado, Specialized in Handling." + lun "Neat!" ("grin", "base", "base", "mid") + "\"S.Q.U.I.R.T.E.R\"": + lun "What does that stand for?" ("soft", "base", "raised", "mid") + gen "Scholar of Quivers, Undeniably and Indisputably Resulting in Tremendous Euphoric Raptures." + lun "Marvellous!" ("grin", "base", "base", "mid") + + lun "I never realised that the tests at Hogwarts just happened to have acronyms, that's fascinating!" ("grin", "base", "base", "mid") + gen "Yep... I'm sure some writer didn't spend hours coming up with those." + lun "*Huh*?" ("soft", "base", "raised", "mid") + gen "Anyway...{w=0.4} Now that that's established, you may begin the test.{#LINT_IGNORE}" + lun "Oh, alright!" ("base", "base", "base", "mid") + gen "Why don't you start off with the thought process behind the removal of your top." + lun "Oh! Oh! I know that!" ("smile", "base", "base", "stare") + lun "I did it so that I could touch my breast directly!" ("smile", "base", "base", "mid") + lun "..." ("smile", "base", "base", "mid") #smiling + gen "And the reason for that, is..." + lun "Oh, am I supposed to explain everything?" ("clench", "base", "base", "mid") + gen "Yes [name_luna_genie]... It's a test." + gen "If you could, I'd like you to show me what I've taught you, while explaining each step, in detail..." + lun "Right." ("mad", "base", "base", "mid") + lun "..." ("soft", "narrow", "base", "down") + gen "So, the purpose of you touching your breast are..." + lun "Oh! Because it feels really nice!" ("grin", "base", "base", "mid") + lun "I mean-- It's because the wrackspurts in there gets excited when I do!" ("angry", "base", "base", "up") + gen "..." + lun "*Ehm*..." ("angry", "base", "base", "mid") + gen "So, you touch your breasts because you want to excite the spurts?" + lun "That's right!" ("angry", "base", "base", "mid") + gen "Why would you want to do that?" + lun "Oh!" ("smile", "base", "base", "stare") + lun "So that I may reach the point where I expel them from my body, of course!" ("smile", "base", "base", "mid") + gen "So, you squirt them out from your breasts?" + lun "Yes I--{w=0.4} No... Hold on..." ("open", "base", "base", "mid") + lun "No, to expel them I also have to touch this area down here!" ("soft", "base", "base", "down") + + nar "Luna quickly moves her hand to lift her skirt..." + + $ luna.set_pose("hand_on_pussy_and_breast") + $ luna.strip("top", "bra") + nar "While doing so, she also pinches her nipple with the other." + + lun "*Ah*...{heart}" ("smile", "closed", "base", "mid",cheeks="blush") + lun "*Mmm*..." ("grin", "narrow", "base", "mid") + gen "I'm going to need you to be a bit more descriptive than that..." + lun "*Mmm*... Oh, sorry [name_genie_luna]... I'm not the best at multitasking..." ("angry", "narrow", "base", "mid") + gen "Practice makes perfect, [name_luna_genie]... I'm certain that one day you'll be able to have full-on intelligent and thought-out conversations..." + lun "While touching myself?" ("soft", "narrow", "base", "mid") + gen "Oh, yes... That's what I meant to say." + gen "Moving on...{w=0.4} Why don't you simplify things by getting fully undressed?" + lun "Oh, right... Why didn't I think of that..." ("grin", "narrow", "base", "down") + + $ luna.set_pose(None) + $ renpy.sound.play("sounds/cloth_sound3.ogg") + $ luna.strip("clothes") + with d3 + + gen "Of course, undressing may not always be an option." + lun "You mean..." ("soft", "base", "base", "mid") + lun "There might be a situation where I'm unable to use my hands, such as if someone were to cast Petrificus Totalus on me?" ("soft", "base", "base", "mid") + gen "(What on earth is she on about?)" + lun "Hold on... If that was the case, then I wouldn't be able to touch myself either!" ("soft", "base", "base", "stare") + lun "Unless..." ("annoyed", "base", "base", "down") + gen "Unless?" + lun "Is it possible to concentrate sufficiently on a specific area to expel wrackspurts without physical contact?" ("annoyed", "base", "base", "down") + gen "*Err*... Let's continue with the test..." + lun "Okay." ("base", "base", "base", "mid") + lun "Where was I... Oh, now I remember! I'm supposed to rub myself like this." ("grin", "narrow", "base", "down") + + $ luna.set_pose("hand_on_pussy_and_breast") + $ luna.strip("clothes") + nar "Luna quickly moves her hands back to her sensitive areas..." + nar "Your eyes lock onto her pussy, and you watch has she begins rubbing herself across the length of her slit..." + + lun "*Mmm*..." ("base", "narrow", "base", "stare") + gen "Excellent..." + gen "So... Rubbing yourself excites the spurts... And?" + + nar "While awaiting a response, you glance up at Luna's face and notice that her eyes have once again taken on a distant glaze..." + + lun "*Ah*...{w=0.2} *Ah*...{w=0.2} *Ah*..." ("grin", "narrow", "base", "stare") + gen "[name_luna_genie]?" + gen "(Figured...)" + + nar "You lean back in your chair, as the sounds of Luna's heavy breathing fills the room..." + + gen "(I suppose I did teach her to project her thoughts towards her sensitive areas...)" + lun "*Mmm*..." ("base", "closed", "base", "mid") #closed eyes + gen "(In retrospect, I should've foreseen there might be a point where she'd start projecting all her thoughts...)" + gen "(Can't say that I'm not jealous...)" + + nar "Not paying mind nor care towards her surroundings, you notice that Luna has closed her eyes and that a smile has spread across her face." + nar "Upon glancing down once more, your gaze lands on Luna's index finger, which is gently prodding against her slit." + nar "Each prod is quickly followed by a faint, lustful sigh, and you can almost feel the air vibrating with a blend of anticipation and excitement." + nar "But before you can make any comment, Luna lets out a short giggle and then pushes the finger inside." + + $ renpy.sound.play("sounds/slick_02.ogg") + with kissiris + lun "{size=+4}*Ah*...{/size}" ("open_tongue", "closed", "base", "mid") + + #Luna fingering + play background "sounds/slickloop.ogg" fadein 2 + nar "Without hesitation, she starts pumping her fingers in and out rapidly..." + + lun "*Ah*...{w=0.4} Yes...{w=0.4} So good..." ("grin", "closed", "base", "mid") + + nar "Absorbed in her own excitement, she suddenly begins talking to herself..." + nar "You ponder whether you should say something to spare her embarrassment, but then you remember who's in front of you...." + + lun "*Mmm*...{w=0.4} Perhaps...{w=0.4} A bit deeper...{w=0.4} Just to make sure..." ("base", "closed", "base", "mid") + + nar "You watch, unsure if what you're feeling is arousal, bemusement or both, as Luna slows her pace down to push her fingers even deeper." + + lun "*Ngh*!" ("angry", "closed", "base", "mid") + + nar "With a squeal, she pulls them back out slightly...{w=0.4} Now covered in her own juices, she resumes fingering herself as if her life depended on it." + + play background "sounds/slickloopfast.ogg" + + lun "*Ah*...{w=0.2}*Ah*...{w=0.2}*Ah*..." ("grin", "closed", "base", "mid") + lun "That's it... That's how you do it..." ("angry", "closed", "base", "mid") + gen "..." + lun "*Ngh*...{w=0.4} Pretty girl..." ("angry", "closed", "base", "mid") + gen "Pretty girl?" + lun "{size=+4}{heart}{heart}*Aaaaah*!!!!{heart}{heart}{/size}" ("smile", "base", "base", "ahegao") + + $ renpy.sound.play("sounds/slick_01.ogg") + with kissiris + #Luna Squirts + + $ luna.set_cum(pussy="squirt") + pause .6 + #Non luna squirt + $ luna.set_cum(pussy="squirt_post") + + $ renpy.sound.play("sounds/slick_01.ogg") + with kissiris + #Luna Squirts + $ luna.set_cum(pussy="squirt") + pause .6 + #Non luna squirt + $ luna.set_cum(pussy="squirt_post") + + lun "*Nnngh*!" + + $ renpy.sound.play("sounds/slick_01.ogg") + stop background fadeout 2 + with kissiris + #Luna Squirts + $ luna.set_cum(pussy="squirt") + pause .6 + #Non luna squirt + $ luna.set_cum(pussy="squirt_post") + lun "" ("crooked_smile", "narrow", "base", "stare") + + lun "*Ah*...{heart}" ("grin", "narrow", "base", "up",cheeks=False) + + # End of masturbate section + + hide cg + show screen blkfade + with d5 + + $ luna.set_pose(None) + $ luna.strip("clothes") + #Luna normal doll pose + + hide screen blkfade + with d5 + + call weather_sound + + nar "After some time, Luna returns to her senses, and starts looking around the office." + + lun "What...{w=0.4} What just happened?" ("angry", "base", "base", "R", xpos="mid", ypos="base", trans=dissolve) + gen "Someone got a little bit carried away during their assignment." ("base", xpos="far_left", ypos="head") + lun "Someone...{w=0.4} Oh, no!" ("angry", "base", "base", "stare") + gen "So, since you've reached the end of the test, I'll give you--" ("base", xpos="far_left", ypos="head") + menu: + "\"An A\"": + lun "An \"A\"? What does that mean?" ("angry", "base", "base", "mid") + gen "Or a \"D\"!" ("base", xpos="far_left", ypos="head") + lun "A \"D\"?!" ("angry", "base", "raised", "mid") + gen "A \"D\" in the \"A\"!" ("grin", xpos="far_left", ypos="head") + "\"A B\"": + lun "A \"B\"? What does that mean?" ("angry", "base", "base", "mid") + gen "A beating--{w=0.2} I mean...{w=0.4} Brofist!" ("grin", xpos="far_left", ypos="head") + lun "A... Brofist?" ("soft", "base", "base", "mid") + gen "Good job, [name_luna_genie]!" ("base", xpos="far_left", ypos="head") + gen "*Holds up fist*" ("base", xpos="far_left", ypos="head") + "\"A C\"": + lun "A \"C\"? What does that mean?" ("angry", "base", "base", "mid") + gen "Air-conditioning Unit." ("base", xpos="far_left", ypos="head") + lun "*Huh*?" ("disgust", "base", "base", "mid") + gen "It gets pretty hot in the summer without one." ("base", xpos="far_left", ypos="head") + "\"A D\"": + lun "A \"D\"? What does that mean?" ("angry", "base", "base", "mid") + gen "After death." ("base", xpos="far_left", ypos="head") + lun "After... Death, [name_genie_luna]?" ("disgust", "base", "base", "mid") + gen "Yep." ("base", xpos="far_left", ypos="head") + lun "..." ("angry", "narrow", "base", "mid") + "\"An F\"": + lun "An \"F\"? What does that mean?" ("angry", "base", "base", "mid") + gen "\"F\" is for friends." ("base", xpos="far_left", ypos="head") + lun "F--{w=0.2} Friends?" ("soft", "base", "base", "mid") + gen "\"U\" is for you and me." ("base", xpos="far_left", ypos="head") + gen "Did they never teach you that?" ("base", xpos="far_left", ypos="head") + + lun "I'm confused..." ("disgust", "narrow", "base", "mid") + lun "Does this mean I've failed the test?" ("disgust", "narrow", "base", "R") + gen "Your grading is pretty clear in that regard, is it not?" ("base", xpos="far_left", ypos="head") + lun "*Ehm*... I suppose..." ("annoyed", "narrow", "base", "down") + if game.daytime: + gen "Well then, I think you better head back to class." ("base", xpos="far_left", ypos="head") + else: + gen "Well then, I think you better head to bed." ("base", xpos="far_left", ypos="head") + lun "Oh, right!" ("angry", "base", "base", "mid") + + hide luna_main + with d3 + + $ luna.wear("all") + $ luna.set_cum(None) + + #Luna turns to door + call lun_chibi(flip=True) + pause .5 + + lun "Bye then, [name_genie_luna]." ("base", "base", "base", "mid", trans=fade, flip=True) + gen "Until next time..." ("base", xpos="far_left", ypos="head") + + call lun_walk(action="leave") jump ll_pf_masturbate_end diff --git a/game/scripts/characters/luna/events/favors/suck_it.rpy b/game/scripts/characters/luna/events/favors/suck_it.rpy new file mode 100644 index 00000000..729253c4 --- /dev/null +++ b/game/scripts/characters/luna/events/favors/suck_it.rpy @@ -0,0 +1,1657 @@ + + +### Luna Suck It ### + +label ll_pf_blowjob: + + if not _events_completed_any: + gen "{size=-4}(*Hmm*... I wonder if I should ask Luna to suck me off...){/size}" ("base", xpos="far_left", ypos="head") + menu: + "\"(Yes, let's do it!)\"": + pass + + "\"(Not right now.)\"": + $ _event.cancel() + jump luna_favor_menu + + # Start Event + call hide_characters + hide screen bld1 + show screen blkfade + with d5 + pause 1 + + $ lun_outfit_last.save() #Save Luna clothing + $ luna.equip(lun_outfit_default) #Equip Luna Default clothing + + hide screen blkfade + with d5 + + return + +label ll_pf_blowjob_end: + + # Setup + stop music fadeout 2.0 + call hide_characters + + call gen_chibi("sit_behind_desk") + + # Reset Luna clothing. + $ luna.equip(lun_outfit_last) + + if states.lun.tier == 4: + if states.lun.level < 12: + $ states.lun.level += 1 + + jump end_luna_event + +label ll_pf_blowjob_T4_E1_intro: + + $ states.lun.ev.ll_pf_blowjob_T4_E1_intro_complete = True + + call ll_pf_blowjob + + gen "I think it's about time we try a new technique to deal with those wankspurs." ("base", xpos="far_left", ypos="head") + lun "This is the idea that you had, after I've told you about Professor Trelawney reading me my future?" ("open", "base", "base", "mid", xpos="base", ypos="base", trans=d3) + gen "That's--" ("base", xpos="far_left", ypos="head") + lun "\"I will soon find something new within me, that will propel me forward on the path towards my destiny\"!" ("grin", "closed", "base", "mid") + lun "That's what she said!" ("grin", "base", "base", "mid") + lun "Oh my goodness, I can hardly wait!" ("smile", "wide", "base", "mid") + lun "These sessions have been so much fun." ("smile", "happyCl", "base", "mid") + gen "Calm down, [name_luna_genie]..." ("base", xpos="far_left", ypos="head") + gen "This research is very serious business." ("base", xpos="far_left", ypos="head") + gen "So for this to succeed, I'll need you to focus and perform at your very best." ("base", xpos="far_left", ypos="head") + lun "Can do, [name_genie_luna]!" ("smile", "base", "base", "mid") + gen "Now... If you've calmed--" ("base", xpos="far_left", ypos="head") + lun "So, I am to put something new inside of me?" ("smile", "wide", "base", "mid") + gen "...{w} Well... New for you at least, but I'd say in terms of age, it's probably the oldest thing in here." ("base", xpos="far_left", ypos="head") + lun "Wow!" ("open", "wide", "base", "mid") + nar "Luna's eyes begins darting around your office." + gen "*Err*...{w=0.4} What are you doing?" ("base", xpos="far_left", ypos="head") + lun "Oh, I'm just looking around to see if I can spot what it might be." ("grin", "base", "base", "L") + lun "You said it was very old, so it must be some kind of ancient, magical artefact, right?" ("grin", "base", "raised", "R") + gen "That's not--{w=0.4} This isn't a setup for a game of hide and seek." ("angry", xpos="far_left", ypos="head") + gen "If you could just shut your mouth for a moment, I'll tell you!" ("base", xpos="far_left", ypos="head") + lun "..." ("normal", "base", "base", "mid") + gen "*Sigh*..." ("base", xpos="far_left", ypos="head") + gen "(I'm beginning to feel as if these tales I'm spinning are only self-serving at this point...)" ("base", xpos="far_left", ypos="head") + gen "*Ahem*... So... My theory..." ("base", xpos="far_left", ypos="head") + gen "It involves sucking those nasty things out." ("base", xpos="far_left", ypos="head") + lun "..." ("normal", "wide", "base", "stare") #Wide eyed + gen "I suppose it's a bit out there, I was afraid you might not be up for it." ("base", xpos="far_left", ypos="head") + lun "..." ("angry", "wide", "base", "mid") #He did tell her to shut her mouth + gen "..." ("base", xpos="far_left", ypos="head") + gen "You--{w} You can talk now." ("base", xpos="far_left", ypos="head") + lun "Sucking them out?!" ("mad", "wide", "base", "mid") + lun "That's brilliant!" ("smile", "wide", "base", "mid") + gen "...{w} It is?" ("angry", xpos="far_left", ypos="head") + lun "Yes!" ("smile", "wide", "base", "mid") + lun "What better way is there to get them all in one place than applying suction?" ("grin", "wide", "base", "mid") + gen "That's what I thought!" ("grin", xpos="far_left", ypos="head") + lun "But, [name_genie_luna]... How on earth are you supposed to suck them out of me?!" ("soft", "wide", "base", "mid") + gen "..." ("base", xpos="far_left", ypos="head") + lun "Oh, don't tell me!" ("smile", "base", "base", "stare") + lun "You're going to put a wand inside of me and \"accio\" them out!" ("smile", "wide", "base", "mid") + gen "(What the fuck.)" ("base", xpos="far_left", ypos="head") + gen "While I appreciate your input, I think an easier approach is you, sucking them out of me..." ("base", xpos="far_left", ypos="head") + lun "..." ("soft", "wide", "base", "stare") + gen "Out of my cock." ("base", xpos="far_left", ypos="head") + + if not states.lun.ev.ll_pf_talk_T4_E1_repeat_complete: + lun "..." ("soft", "wide", "base", "stare") + gen "*Sigh*...{w=0.4} My Penis... [name_luna_genie]." ("base", xpos="far_left", ypos="head") + + lun "Using \"Accio\"?" ("soft", "wide", "base", "mid") + gen "Using your mouth..." ("base", xpos="far_left", ypos="head") + lun "Oh!" ("angry", "wide", "base", "stare") + gen "I mean, if it's not too much to ask... I wouldn't want to--" ("base", xpos="far_left", ypos="head") + lun "I'll do it!" ("smile", "base", "base", "mid") + gen "Great!" ("base", xpos="far_left", ypos="head") + gen "Then let's begin, shall we?" ("base", xpos="far_left", ypos="head") + lun "Yay!" ("smile", "base", "base", "mid") + + #Luna quickly walks up towards the desk, fades to black + + call lun_walk("desk", "base", speed=1.75) + show screen blkfade + with d5 + + if luna.is_any_worn("clothes"): + $ _wearing_clothes = True + $ luna.strip("clothes") + nar "Luna hurriedly makes her way around your desk, strips down and then crawls underneath..." + else: + nar "Luna hurriedly makes her way around your desk and crawls underneath..." + gen "*Err*... It's probably not the best idea to go under my--" + + if game.daytime: + show lun_blowjob_personal_pose1 as cg + else: + show lun_blowjob_personal_pose1 as cg at color_temperature(1.0) + + hide screen blkfade + with d5 + + gen "Desk..." + + show lun_blowjob_personal_pose1 eyebrows_shocked eyes_wide_left mouth_grin as cg with d3 + lun "My goodness...{w=0.4} I've never seen so much..." + + show lun_blowjob_personal_pose1 eyes_wide_right as cg with d3 + lun "There's more magic down here than under my Wiggentree!" + gen "Wait...{w} Magic?" + show lun_blowjob_personal_pose1 eyebrows_base eyes_base_stare mouth_base as cg with d3 + lun "Yes!" + lun "Why I never would've imagined the wrackspurts drawing out this much magical essence..." + show lun_blowjob_personal_pose1 eyebrows_raised mouth_grin as cg with d3 + lun "Can you not feel it, [name_genie_luna]?" + show lun_blowjob_personal_pose1 eyebrows_shocked eyes_halflid_down as cg with d3 + lun "It's so heavy in the air... It's almost infused into the wood..." + show lun_blowjob_personal_pose1 eyes_halflid_up_hearts as cg with d3 + lun "You can almost taste it..." + + show lun_blowjob_personal_pose1 eyes_closed mouth_base as cg with d3 + nar "Luna takes a deep breath of air under your soiled desk..." + + show lun_blowjob_personal_pose1 mouth_soft as cg with d3 + lun "Wow..." + gen "Are you sure you're okay down there? I haven't cleaned it since...{w=0.5} well...{w=0.5} Ever..." + show lun_blowjob_personal_pose1 mouth_base as cg with d3 + lun "I'm...{w=0.3} Great..." + show lun_blowjob_personal_pose1 eyebrows_angry as cg with d3 + nar "Luna takes another deep breath..." + gen "(She's got to be faking this... No one could be this oblivious...)" + gen "(Still, better not look a gift horse in the mouth...)" + + show lun_blowjob_personal_pose1 eyes_halflid_stare as cg with d3 + nar "While the naive blonde sits under your desk, you decide it's finally time for her to get to work." + + menu: + "-Pull your cock out-": + + show lun_blowjob_personal_pose1 no_trousers eyes_halflid_down mouth_soft as cg with d3 + + nar "You swiftly pull out your hardening cock, and Luna grabs it without hesitation." + + show lun_blowjob_personal_pose1 eyebrows_base eyes_halflid_down mouth_neutral as cg with d3 + lun "{size=-5}Wow...{/size}" + gen "Now, as I said... This technique requires you to suck those nasty little critters out of the affected area..." + gen "And as you know... For me, that's right here." + + show lun_blowjob_personal_pose1 mouth_base as cg with d3 + lun "*Mmm*..." + gen "Just try and make me feel as good as possible, and I'm sure those nasty little buggers will come..." + + show lun_blowjob_personal_pose1 eyebrows_raised mouth_open as cg with d3 + lun "Out?" + gen "Yeah, out, that's it..." + gen "Begin when you're ready, [name_luna_genie]." + + show lun_blowjob_personal_pose1 eyebrows_angry mouth_soft as cg with d3 + lun "Okay..." + + nar "Luna stares at your cock excitedly as she readies herself to take the head into her mouth." + show lun_blowjob_personal_pose1 eyebrows_base mouth_open as cg with d3 + lun "Suck until they come..." + + #Luna puts dick in mouth + show lun_blowjob_personal_pose2 mouth_kiss as cg with d3 + gen "*Ngh*!" + + show lun_blowjob_personal_pose2 eyes_halflid_stare as cg with d3 + lun "*Hmm*?" + gen "I'm good, you just startled me--{w=0.4} I mean, them!" + + show lun_blowjob_personal_pose2 eyebrows_angry eyes_halflid_down as cg with d3 + gen "Now, I'll need you to--" + + show lun_blowjob_personal_pose3 as cg with d3 + + "-Tell her to take it out-": + + gen "I'm a little tired..." + gen "So, why don't you assist me by pulling out the \"affected area\"..." + + show lun_blowjob_personal_pose1 eyebrows_base eyes_halflid_down as cg with d3 + lun "Of course, [name_genie_luna]." + + show lun_blowjob_personal_pose1 no_trousers mouth_soft as cg with d3 + nar "Luna takes a deep breath and then withdraws your hardening cock." + + show lun_blowjob_personal_pose1 eyes_wide_down mouth_grin as cg with d3 + lun "(It looks so much bigger, when I'm this close...)" + gen "You may proceed with the treatment, [name_luna_genie]..." + + play sound "sounds/sniff.ogg" + show lun_blowjob_personal_pose1 eyebrows_worried eyes_closed as cg with d3 + lun "*Sniff* *Sniff*" + + gen "What are you--" + + show lun_blowjob_personal_pose2 as cg with d5 + lun "*Lick* *Lick*" + gen "[name_luna_genie]?" + + show lun_blowjob_personal_pose2 mouth_kiss as cg with d3 + lun "*Kissing noises*" + + gen "[name_luna_genie]!" + + show lun_blowjob_personal_pose1 eyebrows_shocked eyes_wide_right mouth_soft as cg with d3 + lun "Sorry [name_genie_luna], I'm listening!" + + gen "As I said... You may proceed with the treatment..." + + show lun_blowjob_personal_pose1 eyebrows_shocked eyes_wide_stare as cg with d3 + lun "Oh... Right... Is there any particular way that I should suck on it, [name_genie_luna]?" + gen "*Ahem*... Perhaps sucking isn't the right phrase to describe it..." + gen "The goal is to lure them out, so just try and make the area feel good, first and foremost." + + show lun_blowjob_personal_pose1 eyebrows_base mouth_base as cg with d3 + lun "Okay then..." + show lun_blowjob_personal_pose1 eyebrows_base eyes_halflid_down mouth_grin as cg with d3 + nar "Luna's eyes darts to your cock excitedly as she readies herself to take the head into her mouth." + + show lun_blowjob_personal_pose1 eyebrows_base eyes_wide_down mouth_open as cg with d3 + lun "I'll make sure to lure them out before you even know it!" + gen "That's--" + + show lun_blowjob_personal_pose2 mouth_kiss as cg with d2 + + show lun_blowjob_personal_pose3 as cg with d3 + + "-Shove it in there!-": + + gen "Open wide!" + + show lun_blowjob_personal_pose3 no_trousers genie_arm_petting eyebrows_angry eyes_halflid_up as cg with d3 + nar "You quickly pull out your cock, and then pull Luna's head down your shaft." + + show lun_blowjob_personal_pose3 eyebrows_shocked eyes_wide_up as cg with d3 + lun "*Mff*!!!" + gen "Sorry, I just couldn't wait any longer." + + show lun_blowjob_personal_pose3 eyebrows_base eyes_base_down as cg with d3 + lun "*Mhm*..." + + show lun_blowjob_personal_pose3 -genie_arm_petting as cg with d3 + gen "Glad you understand...{w=0.4} Now, why don't you start by--" + + + show lun_blowjob_personal_pose4 as cg with d3 + + play sound "sounds/gag_01.ogg" + show lun_blowjob_personal_pose5 eyebrows_angry eyes_closed as cg with d3 + with vpunch + + nar "Luna pushes her head all the way down your shaft." + gen "By the gods, girl!" + show lun_blowjob_personal_pose5 eyebrows_raised eyes_base_up as cg with d3 + lun "*Gmph*?" + + #moves head back up + show lun_blowjob_personal_pose4 penis_spit as cg with d3 + + show lun_blowjob_personal_pose3 as cg with d3 + + show lun_blowjob_personal_pose2 as cg with d3 + + lun "*Ish shomhing whon*?" + gen "N-no, of course not...{w=0.3} You're doing great..." + + show lun_blowjob_personal_pose2 eyebrows_shocked as cg with d3 + lun "*Hi ahm*?" + + gen "Yes..." + show lun_blowjob_personal_pose2 eyebrows_base eyes_closed as cg with d3 + lun "*Schan khoo!*" + + show lun_blowjob_personal_pose2 mouth_kiss as cg with d2 + + show lun_blowjob_personal_pose3 as cg with d3 + + show lun_blowjob_personal_pose4 as cg with d3 + nar "After responding to your praise, Luna moves her tongue along the underside of your cock once again, and a sudden rush of pleasure runs through your body." + gen "*Argh*..." + + show lun_blowjob_personal_pose4 eyes_base_up as cg with d3 + lun "*Hmm*?" + gen "Would you please be careful, [name_luna_genie]!" + + #Takes cock out + show lun_blowjob_personal_pose3 as cg with d3 + + show lun_blowjob_personal_pose2 mouth_kiss as cg with d2 + + show lun_blowjob_personal_pose1 eyes_halflid_up mouth_open_spit as cg with d3 + lun "*Pwah*..." + + show lun_blowjob_personal_pose1 eyebrows_worried mouth_annoyed as cg with d3 + lun "Was my performance not satisfactory, [name_genie_luna]?" + gen "No, you were doing surprisingly well, but unless you know how to control your gag--" + + show lun_blowjob_personal_pose1 eyebrows_shocked eyes_wide_stare mouth_open as cg with d3 + lun "I knew it! I was hurting you!" + + show lun_blowjob_personal_pose1 eyebrows_angry eyes_base_down mouth_soft as cg with d3 + lun "Should I try inserting my wand and \"Accio\" them out instead?" + gen "What?! That's sounding--{w=0.2} I mean, that sounds awful!" + + show lun_blowjob_personal_pose1 eyebrows_base eyes_base_stare as cg with d3 + lun "But, wasn't I doing it wrong?" + gen "Of course not!" + + show lun_blowjob_personal_pose1 mouth_annoyed as cg with d3 + lun "Then how come you told me to be careful?" + gen "I just figured..." + + show lun_blowjob_personal_pose1 eyebrows_raised as cg with d3 + lun "..." + gen "You know what, just go for it...{w=0.4} I'm sure nothing bad will happen..." + gen "It was probably those nasty wrinklespores that made me stop you in the first place anyway." + + show lun_blowjob_personal_pose1 eyebrows_angry eyes_halflid_down as cg with d3 + lun "Those tricksy little--" + + show lun_blowjob_personal_pose1 eyes_base_down mouth_open as cg with d3 + lun "Don't worry, [name_genie_luna], I'll get them out in no time!" + + play sound "sounds/spit.ogg" + show lun_blowjob_personal_pose1 mouth_spitting as cg with d3 + lun "*Ptui*" + + show lun_blowjob_personal_pose1 handjob_moderate mouth_base as cg with d3 + nar "Without even hesitating, Luna spits on your cock and begins jerking you off." + nar "Her fingers move across your shaft with ease, and you can feel yourself getting close to finishing already." + + show lun_blowjob_personal_pose1 eyes_base_stare mouth_soft as cg with d3 + lun "How's this, [name_genie_luna]? Is this how you usually do it?" + gen "*Ah*...{w=0.4} Yes...{w=0.4} Very good, [name_luna_genie]." + + show lun_blowjob_personal_pose1 handjob_fast mouth_grin as cg with d3 + lun "Thank you, [name_genie_luna]!" + gen "(*Ngh*...{w=0.4} How's she so good at this already?)" + + show lun_blowjob_personal_pose2 as cg with d3 + pause 0.2 + + play background "sounds/slickloop.ogg" fadein 2 + show lun_blowjob_personal_loop as cg with d3 + + gen "*Ghh*!!" + gen "G--{w=0.2} Good work, [name_luna_genie]..." + gen "I--{w=0.2} I think I can feel them coming...{w=0.4} Get ready!" + + gen "That's...{w=0.3} It...{w=0.3} Take all of my cum, you cumslut!" + + #Luna pulls out to speak, and takes a facial + show lun_blowjob_personal_pose1 no_trousers penis_spit cum_precum eyebrows_shocked eyes_wide_stare mouth_open as cg with d3 + + stop background fadeout 2 + lun "What did you call--" + gen "*Argh*!" + + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose1 cum_frame0 eyes_wide_down as cg with d2 + show lun_blowjob_personal_pose1 cum_frame1 eyes_wide_stare as cg with d2 + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose1 cum_frame2 as cg with d2 + show lun_blowjob_personal_pose1 cum_frame3 as cg with d2 + show lun_blowjob_personal_pose1 cum_frame4 as cg with d2 + + show lun_blowjob_personal_pose1 eyebrows_angry eyes_wide_down as cg with d2 + lun "Whoa!{w=0.4}{nw}" + + show lun_blowjob_personal_pose1 mouth_grin as cg + lun "Whoa!{fast} You've covered me in wrackspurts, [name_genie_luna]!" + gen "*Ah*...{w=0.4} I...{w=0.4} Sorry about--" + show lun_blowjob_personal_pose1 eyes_closed as cg with d3 + lun "Oh, I'm so pleased I managed to get so many out at once!" + + show lun_blowjob_personal_pose1 eyes_wide_stare as cg with d3 + nar "Luna looks up at you happily as your cum slowly starts sliding down her face." + + gen "*Ahem*... Perhaps it'd be best if you got out from under the desk now." + + show lun_blowjob_personal_pose1 eyes_halflid_stare mouth_base as cg with d3 + lun "Of course, [name_genie_luna]." + + #Blackfade + #Hide CG + + show screen blkfade with d3 + + $ luna.set_cum(face="heavy") + call lun_chibi("stand","desk","base", flip=False) + + nar "Luna crawls out and happily starts skipping to the front of your desk, then spinning around, she flicks some of the remains of your deed off her hair and onto the stone floor." + + #Fade to Office + hide cg + hide screen blkfade + with d5 + + play sound "sounds/giggle2.ogg" + pause .8 + + lun "I can't believe how fun this was!" ("smile", "happyCl", "base", "mid", xpos="mid", ypos="base", trans=d3) + gen "Glad you enjoyed it." ("grin", xpos="far_left", ypos="head") + lun "Just let me know when you require my assistance again." ("grin", "narrow", "base", "mid") + gen "I most certainly will..." ("base", xpos="far_left", ypos="head") + pause .8 + hide luna_main + with d3 + + call lun_chibi(flip=True) + pause .5 + + gen "[name_luna_genie]." ("base", xpos="far_left", ypos="head") + gen "Aren't you forgetting something?" ("base", xpos="far_left", ypos="head") + + call lun_chibi(flip=False) + + lun "*Ehm*...{w=0.4} Probably...{w=0.4} I'm not the best when it comes to remembering things." ("angry", "base", "raised", "mid") + gen "Don't you think you should clean yourself off a little, before heading to your dorm?" ("base", xpos="far_left", ypos="head") + lun "Oh, don't worry [name_genie_luna], I'm not going to my dorm, I'm going to the library." ("base", "wink", "base", "mid") + gen "That doesn't--" ("base", xpos="far_left", ypos="head") + lun "Oh, wait! I {i}did{/i} forget something!" ("angry", "base", "base", "stare") + gen "...{w=0.4} Right?" ("base", xpos="far_left", ypos="head") + lun "You called me a cumslut." ("grin", "base", "base", "mid") + gen "*Err*...{w=0.4} I did? You sure I didn't say...{w=0.4} *Err*...{w=0.4} thumb cut?!" ("angry", xpos="far_left", ypos="head") + lun "No, I'm certain you said cumslut! You said it, just before you released a bucketload of wrackspurts all over my face!" ("grin", "base", "base", "mid") + gen "Oh..." ("angry", xpos="far_left", ypos="head") + lun "So, is that what I am?! What does it mean?!" ("smile", "base", "base", "mid") + gen "*Err*...{w=0.4} I guess you--{w=0.2} Why, it just means that you enjoy making someone cum!" ("base", xpos="far_left", ypos="head") + lun "Cum..." ("base", "narrow", "base", "down") + lun "Is that another name for the magical essence that is released?" ("grin", "base", "raised", "mid") + gen "Sure is...{w=0.4} I figured why not have a singular word for both the substance, and the action." ("base", xpos="far_left", ypos="head") + lun "I like it!" ("smile", "base", "base", "mid") + gen "And since you appeared to be enjoying it, I figured that cumslut would be an appropriate title for you." ("base", xpos="far_left", ypos="head") + lun "Oooh...{w=0.4} I see!" ("grin", "base", "base", "stare") + lun "You know me so well, [name_genie_luna]! I truly am a cumslut!" ("grin", "happyCl", "raised", "mid") + gen "Indeed you are!" ("grin", xpos="far_left", ypos="head") + lun "Well, I better let everyone know my new title!" ("base", "base", "base", "mid") + gen "Oh, *Err*...{w=0.4} I don't think that's such a good idea."("base", xpos="far_left", ypos="head") + lun "*Aww*... Why not?" ("annoyed", "wink", "base", "mid") + gen "Because...{w=0.4} I'm your patient now! Yes, that's it!" ("grin", xpos="far_left", ypos="head") + gen "Patient confidentiality and all that." ("grin", xpos="far_left", ypos="head") + lun "I see! I think I've heard about that!" ("grin", "base", "base", "stare") + lun "Well then, at least you can be pleased to know that I'm a cumslut now!" ("base", "base", "base", "mid") + gen "Very pleased, indeed!" ("grin", xpos="far_left", ypos="head") + lun "Well, I better get going...{w=0.4} Too-da-loo!" ("grin", "base", "base", "mid") + + call lun_walk(action="leave") + + gen "*Heh-heh*...{w=0.4} Very pleased..." ("grin", xpos="far_left", ypos="head") + if _wearing_clothes: + gen "(Wait... Wasn't she wearing something when she arrived?)" ("angry", xpos="far_left", ypos="head") + gen "(And, she didn't even clean herself!)" ("angry", xpos="far_left", ypos="head") + else: + gen "(Wait, she didn't clean herself!)" ("angry", xpos="far_left", ypos="head") + + $ luna.set_cum(None) + + $ _wearing_clothes = False + + $ states.lun.ev.lun_cumslut_nickname_unlocked = True + $ states.lun.status.blowjob = True + $ states.lun.status.cumshot = True + + jump ll_pf_blowjob_end + +label ll_pf_blowjob_T4_E2_intro: + + $ states.lun.ev.ll_pf_blowjob_T4_E2_intro_complete = True + + call ll_pf_blowjob + + gen "I've got another theory that I'd like us to try today, [name_luna_genie]." ("base", xpos="far_left", ypos="head") + lun "Oh... Are we already finished with testing the sucking technique?" ("annoyed", "narrow", "base", "downL", xpos="base", ypos="base", trans=d3) + gen "Heavens no!" ("base", xpos="far_left", ypos="head") + gen "I'll need you to do it at least two more times as to not break the format." ("base", xpos="far_left", ypos="head") + lun "The format?" ("soft", "narrow", "raised", "mid") + gen "Since we've already made plenty of progress in terms of extracting. It is now time to explore the more important matter of disposing." ("base", xpos="far_left", ypos="head") + lun "Ooooh...{w=0.4} Good idea, [name_genie_luna]!" ("grin", "base", "base", "stare") + lun @ cheeks blush "Although...{w=0.4} Well, are you certain I am the most suitable person to help with this?" ("soft", "narrow", "base", "mid") + gen "Most certainly, [name_luna_genie]." ("base", xpos="far_left", ypos="head") + lun @ cheeks blush "I see..." ("base", "narrow", "base", "downL") + lun "Well, in that case, why don't we try using \"scourgify\" on them?" ("grin", "base", "base", "mid") + gen "Scurvy-what?" ("base", xpos="far_left", ypos="head") + lun "The scouring charm!" ("base", "narrow", "base", "mid") + lun "Professor Snape used it to wash the mouth of one of my classmates, when they let out a swear during class." ("open", "base", "base", "mid") + lun "So, I figured if you use the charm on the wrackspurts as soon as they come out, it should clean them up in no time!" ("smile", "base", "base", "mid") + gen "Well, I do think--" ("base", xpos="far_left", ypos="head") + lun "And if that doesn't work, we could try the drought charm!" ("grin", "base", "base", "mid") + lun "They'd get all dried out, and the only thing that'd remain is a flaky crust on my face!" ("grin", "closed", "base", "mid") + gen "...{w} Or you could just swallow them." ("base", xpos="far_left", ypos="head") + lun "Swallow--" ("soft", "wide", "base", "stare") + lun "You believe that wrackspurts are unable to survive in someone's stomach, [name_genie_luna]?" ("soft", "wide", "base", "mid") + gen "Sure...{w=0.4} Let's go with that." ("base", xpos="far_left", ypos="head") + lun "Wow, your brilliance astounds me yet again, [name_genie_luna]." ("smile", "wide", "base", "mid") + gen "So, are you up for it? Some women don't like to--" ("base", xpos="far_left", ypos="head") + lun "Why of course, [name_genie_luna]!" ("smile", "happyCl", "base", "mid") + lun "No trouble at all!" ("base", "base", "base", "mid") + lun "May I crawl under your desk again?" ("grin", "base", "base", "mid") + gen "You don't have to, I could just turn the chair around." ("base", xpos="far_left", ypos="head") + lun "Oh no, I want to..." ("grin", "base", "base", "downL") + lun "I've always been rather fond of small spaces..." ("base", "base", "base", "mid") + lun "When I was a little girl, I used to hide under the roots of a huge {i}Wiggentree{/i} near our home..." ("base", "closed", "base", "mid") + lun "I've never experienced a greater sense of security than when I sought shelter beneath the comforting embrace of that tree's roots." ("base", "narrow", "base", "downL") + gen "..." ("base", xpos="far_left", ypos="head") + gen "Then feel free to crawl under the desk if you must..." ("base", xpos="far_left", ypos="head") + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") + + #Luna quickly walks up towards the desk, fades to black + call lun_walk("desk", "base", speed=1.75) + show screen blkfade + with d5 + + if luna.is_any_worn("clothes"): + $ _wearing_clothes = True + $ luna.strip("clothes") + nar "Luna quickly makes her way around your desk, strips, and then crawls underneath." + else: + nar "Luna quickly makes her way around your desk, and crawls underneath." + + if game.daytime: + show lun_blowjob_personal_pose1 as cg + else: + show lun_blowjob_personal_pose1 as cg at color_temperature(1.0) + + hide screen blkfade + with d5 + + show lun_blowjob_personal_pose1 eyebrows_worried eyes_closed as cg with d3 + lun "*Ah*...{w=0.4} There's that familiar scent..." + gen "..." + + show lun_blowjob_personal_pose1 eyebrows_base eyes_base_stare mouth_grin as cg with d3 + lun "I think I could get used to doing this..." + gen "I don't doubt it." + + show lun_blowjob_personal_pose1 eyes_halflid_stare mouth_grin as cg with d3 + lun "It's like brushing your teeth, you know." + gen "What?" + gen "You better not get your teeth anywhere near it." + + play sound "sounds/giggle.ogg" + pause 1 + + #Luna smiles + show lun_blowjob_personal_pose1 eyebrows_angry eyes_base_stare mouth_base as cg with d3 + lun "Not like that, silly..." + + show lun_blowjob_personal_pose1 eyes_halflid_down as cg with d3 + lun "What I meant, is that I wouldn't mind this becoming more of a habit, like brushing your teeth." + gen "Right..." + + show lun_blowjob_personal_pose1 mouth_open as cg with d3 + lun "Although I must say..." + + #Luna pulls genies trousers down so his cock pops out + + show lun_blowjob_personal_pose1 no_trousers eyebrows_shocked eyes_halflid_down_hearts mouth_open_spit as cg with d3 + lun "I've found this activity to be far more enjoyable than brushing your teeth..." + gen "If you say--" + + #Luna pushes her head down genie's shaft + show lun_blowjob_personal_pose2 mouth_kiss as cg with d2 + show lun_blowjob_personal_pose3 as cg with d3 + show lun_blowjob_personal_pose4 as cg with d3 + + play sound "sounds/gag_01.ogg" + show lun_blowjob_personal_pose5 eyebrows_angry eyes_closed as cg with d3 + with vpunch + + gen "*Ngh*!" + gen "Eager today, are we?" + + show lun_blowjob_personal_pose5 eyes_halflid_up as cg with d3 + lun "*Mhm*..." + + #moves head back up + show lun_blowjob_personal_pose4 penis_spit as cg with d3 + + show lun_blowjob_personal_pose3 as cg with d3 + + show lun_blowjob_personal_pose2 as cg with d3 + + lun "*Pwah*" + gen "*Ah*....{w=0.4} Excellent work, [name_luna_genie]..." + show lun_blowjob_personal_pose2 eyes_closed as cg with d3 + lun "*Glae U Ike Eet*" + + show lun_blowjob_personal_pose2 eyes_halflid_down_hearts as cg with d3 + show lun_blowjob_personal_pose2 mouth_kiss as cg with d2 + play background "sounds/slickloop.ogg" fadein 2 + show lun_blowjob_personal_loop as cg with d3 + nar "Without hesitating, Luna starts bobbing her head happily down your shaft, the thought of swallowing your cum being the only thing occupying her mind." + nar "Looking down at the girl, you can't help but appreciate her commitment." + gen "Now, I'm going to need you to--{w=0.4} Relax your throat...{w=0.4} We wouldn't want any of them to escape..." + gen "You think you could do that?" + lun "*Mhm*..." + nar "You feel Luna's throat muscles relax slightly as she prepares herself to take your load down her throat." + gen "*Ah*... Yes, that's it, [name_luna_genie]... Just like that." + nar "Luna continues bobbing her head up and down your shaft happily, and you can feel your cock reaching all the way down towards the back of her throat..." + gen "(Bloody hell... How is this girl... so good at this?)" + lun "(*Hmm*...)" + lun "(Looks like he's really enjoying it when I push my head down...)" + + #Luna moves down and keeps her head there + stop background + play sound "sounds/gag_03.ogg" + show lun_blowjob_personal_pose5 penis_spit eyebrows_angry eyes_closed as cg with d3 + with vpunch + gen "What are you--" + + show lun_blowjob_personal_pose5 eyes_halflid_up_hearts as cg with d3 + nar "With her head firmly down your shaft, Luna begins moving her tongue, the lack of oxygen barely even phasing her." + gen "Girl... Don't forget you need to--" + + #Luna moves again + play background "sounds/slickloop.ogg" fadein 2 + show lun_blowjob_personal_loop_ahegao as cg with d3 + nar "Luna starts bobbing her head again, although this time, you can sense the tip of her tongue playfully licking the underside of your shaft." + nar "Taken aback by her sheer enthusiasm, you can't help but let out a groan of pleasure." + + gen "*Aaah*..." + + nar "Feeling yourself getting closer to the edge, you start to tense up your pelvis muscles." + nar "Luna, eagerly anticipating your load, keeps sucking your cock fervently." + + gen "By the great desert--{w=0.3} Get ready, girl!" + + stop background + show lun_blowjob_personal_pose5 penis_spit eyebrows_base eyes_halflid_down_hearts as cg with d3 + with vpunch + lun "{heart}*Mmmf*{heart}" + + show lun_blowjob_personal_pose5 penis_spit eyebrows_angry eyes_halflid_up_hearts as cg with d3 + nar "You suddenly feel Luna's throat tense around your cock, and with a rush of pleasure coursing through your body, wave after wave of semen starts shooting down her throat." + gen "*Nnngh*...{w=0.5} AAHH!!!!" + + #Bobbing stops and Genie cums down her throat + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose5 penis_spit eyebrows_base eyes_closed as cg with d3 + play sound "sounds/gulp.ogg" + pause 1 + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose5 throatpie_frame0 as cg with d3 + pause 1 + play sound "sounds/gag_05.ogg" + show lun_blowjob_personal_pose5 throatpie_frame1 eyebrows_angry as cg with d3 + pause 1 + + #Luna pulls out + show lun_blowjob_personal_pose4 throatpie_frame0 as cg with d3 + show lun_blowjob_personal_pose3 as cg with d3 + show lun_blowjob_personal_pose2 mouth_kiss as cg with d3 + show lun_blowjob_personal_pose1 no_trousers eyebrows_worried eyes_halflid_up mouth_open_tongue as cg with d3 + + lun "*Ah*...{w=0.4} I...{w=0.4} *Pant*...{w=0.5}{nw}" + show lun_blowjob_personal_pose1 eyes_halflid_stare mouth_open_spit as cg + lun "*Ah*... I... *Pant*...{fast} I couldn't--{w=0.2} I didn't manage to swallow them all, [name_genie_luna]..." + gen "*Ah*...{w=0.4} Don't--{w=0.2} don't worry, [name_luna_genie]..." + gen "Your performance... Was highly... Satisfactory..." + + show lun_blowjob_personal_pose1 eyes_halflid_down mouth_neutral as cg with d3 + lun "I...{w=0.4} Alright then..." + + show screen blkfade with d3 + + show lun_blowjob_personal_pose5 eyebrows_angry eyes_halflid_down_hearts -throatpie_frame0 as cg with d3 + lun "..." + gen "..." + gen "[name_luna_genie]?" + gen "You can come out from under the desk now..." + lun "..." + gen "[name_luna_genie]?" + + play sound "sounds/gltch.ogg" + with kissiris + pause 0.5 + hide screen blkfade with d3 + + gen "[name_luna_genie]!" + + #moves head back up + show lun_blowjob_personal_pose4 as cg with d3 + + show lun_blowjob_personal_pose3 as cg with d3 + + show lun_blowjob_personal_pose2 mouth_kiss as cg with d3 + lun "*Slrp-pop*!{w=0.4}{nw}" + show lun_blowjob_personal_pose2 eyes_halflid_up_hearts as cg + lun "*Slrp-pop*!{fast}" + show lun_blowjob_personal_pose1 eyes_halflid_down mouth_base as cg with d3 + lun "There we are...{w=0.4}{nw}" + show lun_blowjob_personal_pose1 eyes_halflid_down mouth_grin as cg + lun "There we are...{fast} Much better..." + + show screen blkfade with d3 + + call lun_chibi("stand","desk","base", flip=False) + + nar "With a contented smile, now spreading across her face, Luna crawls out and walks to the front of your desk." + + #Fade to Office + hide cg + hide screen blkfade + with d5 + + lun "Those nasty wrackspurts were giving you a lot of trouble, weren't they [name_genie_luna]?" ("open", "narrow", "worried", "mid", xpos="mid", ypos="base", trans=d3) + lun "Swallowing them all sure proved itself quite a bit more difficult than I had anticipated..." ("soft", "narrow", "base", "mid") + gen "Well, I certainly appreciate the extra effort you put into it." ("grin", xpos="far_left", ypos="head") + lun "So... Do you believe I managed to dispose of them all, [name_genie_luna]?" ("soft", "narrow", "base", "downR") + gen "What?" ("base", xpos="far_left", ypos="head") + lun "Since I went back for seconds to clean them all up... Does that mean they're gone for good?" ("open", "base", "base", "mid") + gen "I'm sure there's more to come..." ("base", xpos="far_left", ypos="head") + lun "Oh... Well, that's good." ("base", "closed", "base", "mid") + lun @ cheeks blush "I mean--" ("angry", "base", "base", "mid") + gen "Now, if you don't mind..." ("base", xpos="far_left", ypos="head") + gen "This encounter with those...{w=0.4} Things... Has left me rather exhausted..." ("base", xpos="far_left", ypos="head") + lun "Oh... Okay..." ("soft", "base", "base", "downL") + + if _wearing_clothes: + hide luna_main + with d3 + $ luna.wear("all") + with d3 + pause .5 + + if game.daytime: + lun "I best be off to divination class..." ("base", "base", "base", "mid") + else: + lun "I better head off to bed then." ("base", "base", "base", "mid") + + lun "Oh, before I go... There's something I wanted to ask you... If that's alright?" ("base", "base", "raised", "mid") + gen "Sure thing." ("base", xpos="far_left", ypos="head") + lun "I was thinking about that prediction Professor Trelawney performed on me." ("open", "base", "base", "R") + gen "Right?" ("base", xpos="far_left", ypos="head") + lun "It's just... How could something be a true prediction, if hearing it is required for it to become true?" ("open", "base", "base", "mid") + gen "What?" ("base", xpos="far_left", ypos="head") + lun "I mean... I shared the details of the prediction with you, didn't I? Then you subsequently derived an idea from its contents." ("open", "base", "base", "mid") + lun "Doesn't that make the prediction more of a self-fulfilling prophecy, and not an actual prophecy?" ("open", "base", "raised", "mid") + gen "..." ("base", xpos="far_left", ypos="head") + gen "(The way this girl's mind figures things out, is genuinely unpredictable.)" ("base", xpos="far_left", ypos="head") + gen "So, what you're saying is that fortune telling is just psychological manipulation, where the subject is lead down a path where they themselves allow it to become a reality?" ("base", xpos="far_left", ypos="head") + lun "*Huh*?" ("angry", "base", "base", "mid") + gen "Or that predictions are based on past knowledge, and even if you had not told me, it is something that I would've naturally come up with either way?" ("base", xpos="far_left", ypos="head") + lun "*Ehm*..." ("disgust", "narrow", "base", "mid") + gen "You've not been telling her about our research, have you?" ("base", xpos="far_left", ypos="head") + lun "Oh--{w=0.4} Of course not!" ("angry", "base", "base", "mid") + lun "The only way she'd know is if she was somehow able to read my mind!" ("angry", "base", "base", "mid") + gen "I see... So, highly improbable." ("base", xpos="far_left", ypos="head") + gen "Either way, while I'm always up for figuring out how this universe works, I believe there are more important things to prioritise." ("base", xpos="far_left", ypos="head") + lun "This universe?" ("soft", "narrow", "base", "stare") + gen "These priorities include this dick getting sucked on a regular basis." ("base", xpos="far_left", ypos="head") + lun "Oh, why of course, [name_genie_luna]!" ("grin", "base", "base", "mid") + lun "Just call for me any time you need me, and I'll be under your desk, sucking, before you know it!" ("smile", "base", "base", "mid") + gen "So, you'll happily be my call girl?" ("base", xpos="far_left", ypos="head") + lun "Of course, [name_genie_luna]!" ("base", "base", "base", "mid") + gen "Well, you said it, not me." ("base", xpos="far_left", ypos="head") + lun "..." ("base", "base", "base", "mid") + gen "Well, go on then... How am I supposed to call you, unless you leave?" ("base", xpos="far_left", ypos="head") + lun "Oh, right!" ("angry", "base", "base", "mid") + if game.daytime: + lun "Have a nice day!" ("smile", "base", "base", "mid") + else: + lun "Have a nice evening!" ("base", "base", "base", "mid") + + lun "And thanks for cumming in my mouth!" ("smile", "base", "base", "mid") + gen "Oh...{w=0.4} *Err*...{w=0.4} You're welcome?" ("base", xpos="far_left", ypos="head") + + call lun_walk(action="leave") + + gen "...{w} (I feel like I've just unlocked a new fetish somehow...)" ("base", xpos="far_left", ypos="head") + + $ _wearing_clothes = False + $ states.lun.status.gokkun = True + + jump ll_pf_blowjob_end + +label ll_pf_blowjob_T4_E3_intro: + + call ll_pf_blowjob + + gen "[name_luna_genie], care to help me with--" ("base", xpos="far_left", ypos="head") + lun "Of course, [name_genie_luna]! Today is Sunday, after all!" ("smile", "narrow", "base", "mid", xpos="base", ypos="base", trans=d3) + + call lun_walk("desk", "base", speed=1.75) + + gen "I didn't even tell you what--" ("base", xpos="far_left", ypos="head") + gen "Wait...{w=0.4} It's Sunday?" ("base", xpos="far_left", ypos="head") + gen "(I thought weekends didn't exist in this universe...)" ("base", xpos="far_left", ypos="head") + lun "Yes! It's Mister Sun's happy day!" ("grin", "narrow", "base", "mid", xpos="mid", ypos="base", trans=d3) + menu: + "-Enough with the nonsense-": + gen "And here I thought my calendar said {i}Suckday{/i} on it." ("base", xpos="far_left", ypos="head") + lun "*Huh*?" ("angry", "base", "base", "mid") + gen "That's why I called you here, to suck those spurts out for me." ("base", xpos="far_left", ypos="head") + + #giggles + play sound "sounds/giggle.ogg" + pause 1 + + lun "Oh... You're so silly sometimes, [name_genie_luna]." ("grin", "happyCl", "base", "mid") + gen "I'm a hundred percent serious." ("base", xpos="far_left", ypos="head") + lun "Oh! Sorry, I don't always know when someone is joking..." ("angry", "narrow", "base", "mid") + gen "So, since it's \"Suckday\" today...{w=0.4} You think you could help me?" ("base", xpos="far_left", ypos="head") + lun "Of course!" ("angry", "base", "base", "mid") + "-Humour her-": + if game.daytime: + if game.weather == "clear": #Sunny + gen "Right..." ("base", xpos="far_left", ypos="head") + lun "Can't you see the radiant joy on Mister Sun's face?" ("grin", "base", "base", "L") + gen "Looks like the same burning ball of fire to me." ("base", xpos="far_left", ypos="head") + lun "[name_genie_luna], don't look directly at him!" ("mad", "wide", "base", "mid") + gen "Whops." ("base", xpos="far_left", ypos="head") + gen "(Mortals and their weak retinas...)" ("base", xpos="far_left", ypos="head") + gen "(Hold on... Did she actually give me some useful advice--)" ("angry", xpos="far_left", ypos="head") + lun "The sun is rather bashful and doesn't like it when you stare directly at him." ("angry", "base", "base", "mid") + gen "(Never mind...)" ("base", xpos="far_left", ypos="head") + else: #cloudy/rain/snow + gen "Are you sure about that?" ("base", xpos="far_left", ypos="head") + lun "Of course! Can't you see the radiant joy on Mister Sun's face?" ("smile", "base", "base", "L") + gen "*Err*... It's not really visible right now..." ("base", xpos="far_left", ypos="head") + lun "Oh..." ("soft", "narrow", "base", "L") + lun "Maybe he's just being shy..." ("open", "base", "base", "L") + gen "The sun... Is being, shy?" ("base", xpos="far_left", ypos="head") + lun "Obviously... Why else would Daddy tell not to look directly at him?" ("soft", "base", "base", "mid") + gen "...{w=0.4} I suppose that's a reasonable conclusion to make." ("base", xpos="far_left", ypos="head") + lun "That said... Even if he's being shy, that doesn't mean we shouldn't acknowledge him on his special day." ("base", "base", "base", "mid") + gen "(Hold on... Is she one of those sun worshippers?)" ("base", xpos="far_left", ypos="head") + gen "(Don't tell me she's been trying to groom me for some peculiar sacrificial role...)" ("base", xpos="far_left", ypos="head") + lun "Don't you think so too, [name_genie_luna]?" ("grin", "base", "base", "mid") + gen "(Is that why she's been trying so hard to suck me dry?)" ("base", xpos="far_left", ypos="head") + lun "[name_genie_luna]?" ("soft", "base", "base", "mid") + gen "Please, don't suck me dry!" ("base", xpos="far_left", ypos="head") + lun "*Huh*?" ("angry", "base", "base", "mid") + gen "*Err*... Never mind..." ("base", xpos="far_left", ypos="head") + else: + gen "Right..." ("base", xpos="far_left", ypos="head") + gen "Why is it his happy day, again?" ("base", xpos="far_left", ypos="head") + lun "Because he gets to remind us about our limited time on this earth." ("grin", "base", "base", "mid") + gen "I see... Sounds like a very happy occasion indeed..." ("base", xpos="far_left", ypos="head") + gen "So, what is it this time, an impending alien abduction or something?" ("base", xpos="far_left", ypos="head") + + #giggles + play sound "sounds/giggle.ogg" + pause 1 + + lun "Good one, [name_genie_luna]!" ("smile", "narrow", "base", "mid") + gen "(So, she doesn't believe in aliens... The irony...)" ("base", xpos="far_left", ypos="head") + lun "..." ("grin", "base", "base", "mid") #smiles + gen "..." ("base", xpos="far_left", ypos="head") + + + gen "So... What's so special about Sundays, exactly?" ("base", xpos="far_left", ypos="head") + lun "I'm glad you asked!" ("grin", "base", "base", "mid") + lun "Sundays are the day of the week when we acknowledge the importance of the sun." ("grin", "narrow", "base", "mid") + gen "Right..." ("base", xpos="far_left", ypos="head") + lun "The sun's movement reminds us all to spend our time on this earth to the fullest, after all." ("grin", "base", "base", "mid") + gen "*Hmm*... Well, I can't say that I can relate to that very much." ("base", xpos="far_left", ypos="head") + lun "It also marks the end of the weekend and makes you look forward to getting back to work or school the next day." ("base", "base", "base", "mid") + gen "Ah, yes. Now that certainly is relatable..." ("base", xpos="far_left", ypos="head") + lun "The sun itself should also be appreciated, as it has given us life itself." ("smile", "base", "base", "mid") + lun "I mean, I wouldn't be standing here if it wasn't for the sun." ("grin", "narrow", "base", "mid") + gen "Then let's not waste the day any further!" ("base", xpos="far_left", ypos="head") + gen "If I'm to live life to the fullest, then I'll require your help again, [name_luna_genie]." ("base", xpos="far_left", ypos="head") + lun "Again, [name_genie_luna]?" ("soft", "base", "base", "mid") + gen "The spurts have been quite lively today... Must be because it's Sunday and all that." ("base", xpos="far_left", ypos="head") + lun "Oh, I see!" ("smile", "base", "base", "mid") + gen "So, do you think you and your mouth could help me again?" ("base", xpos="far_left", ypos="head") + lun "Certainly [name_genie_luna], I'd be happy to!" ("grin", "base", "base", "mid") + gen "Praise the sun!" ("grin", xpos="far_left", ypos="head") + + lun "My mouth is here for you, whenever you need it, [name_genie_luna]." ("smile", "base", "base", "mid") + gen "That's--" ("grin", xpos="far_left", ypos="head") + lun "Any time!" ("smile", "wide", "base", "mid") + gen "Greatly appreciated--" ("grin", xpos="far_left", ypos="head") + lun "Even if I'm asleep!" ("smile", "wide", "base", "mid") + gen "..." ("angry", xpos="far_left", ypos="head") + lun "So, just wake me up whenever you need it!" ("grin", "wink", "base", "mid") + lun "I even made sure to brush my tongue for you!" ("smile", "base", "base", "mid") + gen "Well, that's--" ("base", xpos="far_left", ypos="head") + lun "Look!{w=0.4}{nw}" ("scream", "base", "base", "mid") + lun "Look!{fast} Aaaaaah..." ("open_wide_tongue", "base", "base", "mid") + gen "Right...{w=0.4} Well, I don't think--" ("base", xpos="far_left", ypos="head") + lun "If you don't believe it, you could always brush it yourself!" ("grin", "base", "base", "mid") + lun "Would you like that, [name_genie_luna]?" ("smile", "base", "base", "mid") + gen "That's--{w=0.2} You didn't watch a certain video since your last visit, did you?" ("base", xpos="far_left", ypos="head") + lun "A what?" ("soft", "base", "base", "mid") + gen "Never mind..." ("base", xpos="far_left", ypos="head") + gen "So... Ready to suck some dick?" ("base", xpos="far_left", ypos="head") + lun "Of course, [name_genie_luna]! I love sucking dick!" ("smile", "base", "base", "mid") + gen "...{w=0.4} You do?" ("base", xpos="far_left", ypos="head") + lun "Oh, it's an absolute blast!" ("grin", "base", "base", "mid") + gen "..." ("base", xpos="far_left", ypos="head") + lun "I mean...{w=0.4} Focusing on ridding you of wrackspurts is my top priority, not having fun, of course!" ("angry", "base", "base", "mid") + gen "*He-heh*" ("grin", xpos="far_left", ypos="head") + gen "Well, I certainly don't see anything wrong with you having a bit of fun, as long as you get the job done..." ("base", xpos="far_left", ypos="head") + lun "Great!" ("grin", "base", "base", "mid") + + show screen blkfade + with d5 + + if luna.is_any_worn("clothes"): + $ _wearing_clothes = True + $ luna.strip("clothes") + + gen "Under the desk again, [name_luna_genie]?" + lun "I like it down here..." + gen "Very well..." + + if game.daytime: + show lun_blowjob_personal_pose1 no_trousers eyebrows_angry eyes_halflid_down_hearts mouth_base as cg + else: + show lun_blowjob_personal_pose1 no_trousers eyebrows_angry eyes_halflid_down_hearts mouth_base as cg at color_temperature(1.0) + + hide screen blkfade + with d5 + + lun "*Mmm*...{w=0.4} Hello there Mister penis..." + gen "(Somehow I'm feeling like a third wheel, even though it's only the two of us...)" + + show lun_blowjob_personal_pose1 mouth_open_spit as cg with d3 + pause 0.4 + gen "Steady girl...{w=0.4} There's no need to rush..." + + show lun_blowjob_personal_pose1 eyes_halflid_stare_hearts mouth_soft as cg with d3 + lun "But..." + gen "Fine...{w=0.4} Go on then..." + + show lun_blowjob_personal_pose1 eyes_halflid_down_hearts mouth_grin as cg with d3 + lun "Yay!" + + show screen blkfade + with d5 + + play background "sounds/slickloop.ogg" fadein 2 + show lun_blowjob_personal_loop_ahegao as cg with d3 + + nar "Over the next hour, Luna remains kneeling beneath your desk, relentlessly assaulting your cock as if her life depended on it." + + hide screen blkfade + with d5 + + gen "I--{w=0.2} I think this is it!" + lun "*Mmm*..." + gen "Get ready to--" + + play sound "sounds/gag_01.ogg" + stop background fadeout 2 + show lun_blowjob_personal_pose5 penis_spit eyebrows_base eyes_closed as cg with d3 + nar "Before you can finish your sentence, Luna thrusts her head forward, forcing your cock down her throat." + + show lun_blowjob_personal_pose5 genie_arm_idle as cg with d3 + nar "You grab the edge of your desk to steady yourself as your balls begin to contract, releasing one of the largest loads of your life." + gen "By the--" + + #Bobbing stops and Genie cums down her throat + + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose5 eyes_halflid_down_hearts as cg with d3 + play sound "sounds/gulp.ogg" + pause 1 + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose5 eyes_halflid_stare_hearts as cg with d3 + play sound "sounds/gulp.ogg" + pause 1 + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose5 eyebrows_base eyes_halflid_up_hearts as cg with d3 + play sound "sounds/gulp.ogg" + pause 1 + + show lun_blowjob_personal_pose4 as cg with d3 + show lun_blowjob_personal_pose3 as cg with d3 + + show lun_blowjob_personal_pose2 mouth_kiss as cg with d3 + lun "*Slrp-pop*!{w=0.4}{nw}" + show lun_blowjob_personal_pose2 eyes_halflid_up_hearts as cg + lun "*Slrp-pop*!{fast}" + show lun_blowjob_personal_pose1 no_trousers eyes_halflid_stare_hearts mouth_open_cum as cg with d3 + lun "Aaaah...{w=0.4}{nw}" + + play sound "sounds/gulp.ogg" + show lun_blowjob_personal_pose1 eyes_closed mouth_neutral as cg + lun "Aaaah...{fast} *Gulp*...{w=0.4}{nw}" + + show lun_blowjob_personal_pose1 eyes_wide_stare_hearts mouth_base as cg + lun "Aaaah... *Gulp*...{fast} All gone..." + + show lun_blowjob_personal_pose1 eyes_halflid_stare_hearts mouth_grin as cg with d3 + lun "Thank you so much, [name_genie_luna]..." + + show lun_blowjob_personal_pose1 -genie_arm_idle as cg with d3 + gen "*Huh*? For what?" + + show lun_blowjob_personal_pose1 mouth_base as cg with d3 + lun "You were the only person who took me seriously about the wrackspurts problem..." + + show lun_blowjob_personal_pose1 mouth_soft as cg with d3 + lun "And you've been so nice, and patient, and have taught me so many things..." + + show lun_blowjob_personal_pose1 eyes_halflid_down_hearts as cg with d3 + lun "And this cum..." + + show lun_blowjob_personal_pose1 mouth_grin as cg with d3 + lun "It's so good! It's as if it's made of pure magic!" + + show lun_blowjob_personal_pose1 handjob_moderate as cg with d3 + lun "I can't get enough of it!" + + show lun_blowjob_personal_pose1 eyebrows_worried eyes_closed as cg with d3 + lun "Thank you, thank you, thank you!" + + show lun_blowjob_personal_pose1 handjob_fast eyebrows_base eyes_base_stare_hearts as cg with d3 + lun "You're the best genie ever!" #heart eyes + + #Luna kiss dick + show lun_blowjob_personal_pose2 eyebrows_angry eyes_closed mouth_kiss as cg with d3 + lun "*Kissing noises*" + nar "With that, Luna starts kissing and licking the tip of your cock, shamelessly slobbering over every inch of it..." + + gen "*Ngh*... I'm glad you're enjoying yourself." + gen "And indeed, I {i}am{/i} the best genie ever..." + + play sound "sounds/scratch.ogg" + + gen "Wait...{w=0.5} Did you just say {b}GENIE{/b}?!" + + show lun_blowjob_personal_pose2 eyes_halflid_up_hearts mouth_kiss as cg with d2 + lun "*Slrp*?" + + show lun_blowjob_personal_pose1 eyebrows_raised eyes_halflid_stare mouth_base as cg with d3 + lun "I mean you are a genie, aren't you?" + gen "Well, yes..." + gen "But how did you know? Don't tell me the cloaking thingy had an expiration date..." + + show lun_blowjob_personal_pose1 eyebrows_shocked eyes_base_stare mouth_grin as cg with d3 + lun "Oh, don't worry [name_genie_luna]... I can only see your true form when I'm wearing my spectrespecs!" + gen "Those glasses? So, you're saying you've known this whole time?" + + show lun_blowjob_personal_pose1 eyebrows_angry eyes_halflid_down mouth_base as cg with d3 + lun "Well, I wasn't a hundred percent sure you were a genie until I tasted this..." + + show lun_blowjob_personal_pose1 eyebrows_base as cg with d3 + lun "I doubt any other creature could produce something this tasty..." + + show lun_blowjob_personal_pose1 mouth_grin as cg with d3 + lun "Not even a unicorn..." + gen "So...{w=0.4} You don't mind that I'm a genie?" + + show lun_blowjob_personal_pose1 eyes_halflid_stare mouth_soft as cg with d3 + lun "Nope! Not unless it bothers you..." + gen "As long as you keep sucking like that, you can think I'm the Prince of Persia..." + gen "Just don't expect any wishes." + + show lun_blowjob_personal_pose1 mouth_annoyed as cg with d3 + lun "Oh...{w=0.4} Why not?" + gen "Well... First off, you have to rub--" + + show lun_blowjob_personal_pose1 eyebrows_shocked eyes_wide_stare mouth_grin as cg with d3 + lun "I can do that!" + + show lun_blowjob_personal_pose1 handjob_moderate eyebrows_angry eyes_halflid_down as cg with d3 + + gen "That's not--{w=0.2} Well, I suppose if it's cum that you want..." + nar "You quickly realise that Luna isn't paying you much attention, as her gaze has once again locked onto your cock." + gen "Steady on, girl...{w=0.4} Don't you think you've had enough for one day?" + + show lun_blowjob_personal_pose1 mouth_open_spit as cg with d3 + lun "{size=-4}Come on out already...{/size}" + gen "[name_luna_genie]!" + + show lun_blowjob_personal_pose1 -handjob_moderate eyes_halflid_stare mouth_soft as cg with d3 + lun "*Huh*?" + gen "That shall do for today." + + show lun_blowjob_personal_pose1 eyebrows_worried mouth_annoyed as cg with d3 + lun "*Aww*...{w=0.4} Already?{w=0.4} Surely there must be some wrackspurts left in you..." + gen "Perhaps it's time we moved onto another method..." + + show lun_blowjob_personal_pose1 eyebrows_shocked eyes_wide_stare mouth_neutral as cg with d3 + lun "You've come up with another method already?" + gen "I believe so..." + gen "Am I making the right assumption that the spurs haven't stopped bothering you whilst you've been helping me, [name_luna_genie]?" + + show lun_blowjob_personal_pose1 eyes_halflid_right cheeks_blush mouth_soft as cg with d3 + lun "Oh...{w=0.4} I mean...{w=0.4} I suppose not...{w} But I'll manage, as long as it helps with your research!" + gen "*Hmm*...{w=0.4} I appreciate the sentiment, but that isn't good enough, I'm afraid..." + + show lun_blowjob_personal_pose1 -cheeks_blush eyes_halflid_stare mouth_soft as cg with d3 + lun "[name_genie_luna]?" + gen "A world where the comfort of one is only achievable thanks to the suffering of another is not an acceptable solution." + + show lun_blowjob_personal_pose1 eyes_halflid_down as cg with d3 + lun "I see..." + gen "The only real solution is one where the participants are able to physically stimulate each other at the same time." + + show lun_blowjob_personal_pose1 eyes_wide_stare mouth_open as cg with d3 + lun "At the same time!?" + gen "That's right, [name_luna_genie]...{w=0.4} If we can achieve physical stimulation and release between both participants simultaneously, then--" + + show lun_blowjob_personal_pose1 handjob_moderate eyebrows_worried eyes_halflid_stare mouth_soft as cg with d3 + lun "Can we try it now? Pleaaaase!" + gen "*Ugh*...{w=0.4} I appreciate the enthusiasm [name_luna_genie], but I think I need a bit of a nap first..." + + show lun_blowjob_personal_pose1 -handjob_moderate eyes_base_stare mouth_grin as cg with d3 + lun "Oh... Okay then, Mister Genie!" + gen "Just \"Genie\" is fine." + gen "Although, try to avoid calling me that in front of anyone else...{w=0.4} It will be our little secret." + + show lun_blowjob_personal_pose1 eyebrows_base eyes_halflid_stare as cg with d3 + lun "Okie dokie, [name_genie_luna], Enjoy your nap!" + + show screen blkfade + with d5 + + if _wearing_clothes: + hide luna_main + $ luna.wear("all") + + hide cg + hide screen blkfade + with d5 + + #Luna leaves + call lun_walk(action="leave") + + $ _wearing_clothes = False + $ states.lun.ev.gen_genie_nickname_unlocked = True + + call ll_pf_blowjob_end + +label ll_pf_blowjob_T4_E4_repeat: + + #Genie asks for another blowjob before they move on to the next step + + call ll_pf_blowjob + + gen "Before we proceed to test out my new theory, what do you say about that spacious head of yours taking a trip downstairs?" ("base", xpos="far_left", ypos="head") + lun "Downstairs?" ("soft", "base", "raised", "mid", xpos="base", ypos="base", trans=d3) + gen "Downstairs, and down my shaft!" ("grin", xpos="far_left", ypos="head") + lun "Your shaft? Are you talking about your wizard tower?" ("upset", "base", "raised", "mid") + gen "Tower, mast, shaft, whatever you want to call it." ("grin", xpos="far_left", ypos="head") + lun "But, I just got here, are you sure you don't need me for anything?" ("angry", "base", "base", "mid") + gen "What do you--{w=0.2} I'm asking you to suck my dick again, [name_luna_genie]!" ("base", xpos="far_left", ypos="head") + lun "Oh! Of course, [name_genie_luna]! Why didn't you say so?" ("grin", "base", "base", "stare") + gen "..." ("base", xpos="far_left", ypos="head") + lun "Either way... There's no need to ask!" ("base", "base", "base", "mid") + lun "As I said before..." ("grin", "base", "base", "mid") + lun "My mouth is here for you, whenever you need it!" ("smile", "base", "base", "mid") + gen "Oh right... You did say that." ("base", xpos="far_left", ypos="head") + gen "I've gotten so used to requiring more convincing than that, so I forgot who I was talking to." ("base", xpos="far_left", ypos="head") + lun "I'm {i}the{/i} cumslut aren't I? I'm always pleased to be of assistance!" ("smile", "closed", "base", "mid") # Genie told Luna it just means "a person who enjoys helping people cum". + gen "You certainly are {i}a{/i} cumslut... Now, assume the pleasing position!" ("base", xpos="far_left", ypos="head") + lun "Yes, [name_genie_luna]!" ("smile", "base", "base", "L") + + #Luna quickly walks up towards the desk, fades to black + call lun_walk("desk", "base", speed=1.75) + show screen blkfade + with d5 + + if luna.is_any_worn("clothes"): + $ _wearing_clothes = True + $ luna.strip("clothes") + + if game.daytime: + show lun_blowjob_personal_pose1 eyes_closed mouth_soft as cg + else: + show lun_blowjob_personal_pose1 eyes_closed mouth_soft as cg at color_temperature(1.0) + + hide screen blkfade + with d5 + + lun "*Sniff* *Sniff*" + gen "Enjoying yourself down there?" + + show lun_blowjob_personal_pose1 eyebrows_angry eyes_halflid_stare mouth_base as cg with d3 + lun "Oh, yes... Very much..." + + show lun_blowjob_personal_pose1 eyes_halflid_right as cg with d3 + lun "I think this might even have become my new safe space." + gen "Really? What makes you say that?" + + show lun_blowjob_personal_pose1 eyes_halflid_stare mouth_open as cg with d3 + lun "Well, I used to have another safe space that I'd go to whenever I needed to think." + + show lun_blowjob_personal_pose1 eyes_base_stare mouth_base as cg with d3 + lun "It was this magical broom closet on the seventh floor... You know, the one opposite the tapestry of Barnabas the Barmy." #Room of requirement + gen "A magical broom closet? What makes something a \"magical\" broom closet?" + + show lun_blowjob_personal_pose1 eyebrows_worried eyes_base_stare mouth_soft as cg with d3 + lun "Because... Last time I went there, the closet was gone!" + + show lun_blowjob_personal_pose1 eyebrows_angry mouth_open as cg with d3 + lun "And in its place, was nothing but a brick wall!" + + show lun_blowjob_personal_pose1 mouth_soft as cg with d3 + lun "Have you ever experienced such an anomaly before, [name_genie_luna]?" + + gen "Only when I've hinted towards trying the other hole." + + show lun_blowjob_personal_pose1 eyes_halflid_stare as cg with d3 + lun "A magical hole?" + gen "Some would say it is..." + + show lun_blowjob_personal_pose1 mouth_base as cg with d3 + lun "Fascinating..." + + show lun_blowjob_personal_pose1 eyebrows_raised as cg with d3 + lun "Any idea how this magical hole functions?" + gen "I try not to think about it." + + show lun_blowjob_personal_pose1 eyebrows_angry eyes_closed mouth_open as cg with d3 + lun "My thought about the magic closet not materializing is that it will only appear when there's a desire for it to exist." + + show lun_blowjob_personal_pose1 eyes_halflid_stare mouth_soft as cg with d3 + gen "..." + + show lun_blowjob_personal_pose1 eyebrows_raised as cg with d3 + lun "*Ehm*... Or am I hooting up the wrong bush with that assumption, [name_genie_luna]?" + gen "I think it'd be best if you focused less on {i}bushes{/i} and {i}closets{/i} and more towards the task at hand." + + show lun_blowjob_personal_pose1 mouth_open as cg with d3 + lun "Task at hand, [name_genie_luna]?" + + nar "You briefly move your gaze down towards your throbbing member." + + show lun_blowjob_personal_pose1 eyebrows_base eyes_halflid_down as cg with d3 + lun "Oh! Of course, [name_genie_luna]!" + lun "I'll get to it right away!" + + #Luna pulls genie's trousers down + show lun_blowjob_personal_pose1 no_trousers eyebrows_angry mouth_base as cg with d3 + pause 0.5 + lun "*Mmm*..." + + show lun_blowjob_personal_pose1 eyes_halflid_down mouth_open as cg with d3 + lun "You know.... I was worried that I would never get suck this delectable thing again." + gen "Delectable?" + + #Luna kisses cock + show lun_blowjob_personal_pose1 mouth_open_spit as cg with d3 + show lun_blowjob_personal_pose2 eyes_closed mouth_kiss as cg with d3 + lun "*Kissing noises*" + + gen "You sure have caught a liking to doing this..." + + show lun_blowjob_personal_pose2 mouth_lick as cg with d3 + lun "*Lick*" + gen "*Ngh*!" + + show lun_blowjob_personal_pose2 eyes_halflid_stare as cg with d3 + lun "*Hmmff*?" + + show lun_blowjob_personal_pose2 eyebrows_worried as cg with d3 + lun "*U Oay*?" + + gen "I'm fine! You go right ahead." + + show lun_blowjob_personal_pose2 eyebrows_angry as cg with d3 + lun "*Esh pffeshor*!" + + show lun_blowjob_personal_pose2 eyes_halflid_down as cg with d3 + + #Luna pushes her head down genie's shaft + show lun_blowjob_personal_pose2 mouth_kiss as cg with d2 + show lun_blowjob_personal_pose3 eyes_halflid_stare as cg with d3 + show lun_blowjob_personal_pose4 as cg with d3 + show lun_blowjob_personal_pose5 eyebrows_angry eyes_halflid_up as cg with d3 + + lun "*Mmmmmm*...." + gen "*Ngh*!" + gen "Whoa! Do that again!" + + show lun_blowjob_personal_pose5 eyes_base_stare as cg with d3 + lun "*Mff*?" + gen "Whatever you just did, do it again!" + + show lun_blowjob_personal_pose5 eyebrows_base eyes_halflid_stare as cg with d3 + lun "*Mmmmmm*?" + gen "*Ah*, yes! That felt good!" + gen "Now, up and down the wizard tower you go!" + + show lun_blowjob_personal_pose5 eyes_halflid_down as cg with d3 + nar "Luna, looking slightly more puzzled than her usual self, shrugs and then starts moving her head up and down your cock." + + play background "sounds/slickloop.ogg" fadein 2 + show lun_blowjob_personal_loop as cg with d3 + gen "*Ah*...{w=0.4} Yes...{w=0.4} Now that's how you do it!" + + nar "Revelling in your praise, you watch as Luna happily bobs her head up and down your cock, only slowing down intermittently to run her tongue underneath your shaft." + + gen "*Ah*...{w=0.4} I think you might've touched the ground floor that time." + gen "You sure are a cumslut..." + + nar "As the last word escapes your lips, you could swear that Luna's throat tensed up briefly, but before the thought could take hold, her onslaught on your cock continues." + + gen "(She's--{w=0.2} too good! If she keeps going like this, my reputation will be in shambles!)" + gen "*Ngh*... Slow down a bit, won't you?" + + play background "sounds/slickloopfast.ogg" fadein 2 + show lun_blowjob_personal_loop_ahegao as cg with d3 + nar "Luna, hearing your pleas, looks at you worryingly for a moment, then increases her pace." + gen "What are you--" + gen "Slow down, girl!" + lun "*Mmmmmm*..." + gen "*Ngh*--" + + #Cum section + menu: + "-Say something weird to make her pull out-": + menu: + "\"Look! There's an elephant in the room!\"": + #Luna Pulls out + stop background + show lun_blowjob_personal_pose2 mouth_kiss as cg with d1 + show lun_blowjob_personal_pose1 no_trousers penis_spit cum_precum eyebrows_shocked eyes_wide_left mouth_open_spit as cg with d3 + lun "*Slrp-pop*! Where?!" + + gen "*AAAAH*!" + + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose1 cum_frame0 eyes_wide_down as cg with d2 + show lun_blowjob_personal_pose1 cum_frame1 eyes_wide_stare as cg with d2 + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose1 cum_frame2 as cg with d2 + show lun_blowjob_personal_pose1 cum_frame3 as cg with d2 + show lun_blowjob_personal_pose1 cum_frame4 as cg with d2 + + show lun_blowjob_personal_pose1 eyebrows_angry eyes_wide_down mouth_open_spit as cg with d2 + lun "[name_genie_luna]!" + + gen "*Ah*... That was--" + + show lun_blowjob_personal_pose1 eyes_halflid_stare as cg with d3 + lun "Quickly, [name_genie_luna]! Move your leg!" + gen "*Huh*?" + + show screen blkfade + with d5 + + nar "Luna pushes your leg to the side, and then darts to the front of your desk." + $ luna.set_cum(face="heavy") + + hide cg + hide screen blkfade + with d5 + + call lun_chibi(flip=True) + lun "I can't believe there's a--{w=0.2}{nw}" + call lun_chibi(flip=False) + lun "I can't believe there's a--{fast} Wait...{w=0.4} Where did the elephant go?" ("angry", "base", "base", "L", xpos="mid", ypos="base", trans=d3) + gen "Err..." ("base", xpos="far_left", ypos="head") + lun "There's no elephant in the room, is there?" ("annoyed", "narrow", "base", "mid") + gen "Other than your unfathomable naivety?" ("base", xpos="far_left", ypos="head") + lun "...?" ("annoyed", "base", "base", "mid") + gen "No, there's no actual elephant..." ("base", xpos="far_left", ypos="head") + lun "I see..." ("annoyed", "narrow", "base", "down") #dissapointed + gen "I mean, there was one! It just leapt out the window!" ("grin", xpos="far_left", ypos="head") + lun "Really?" ("angry", "wide", "base", "mid") + gen "Of course!" ("grin", xpos="far_left", ypos="head") + lun "How extraordinary!" ("grin", "base", "base", "mid") + gen "(If it was only this easy to make Hermione excited.)" ("base", xpos="far_left", ypos="head") + lun "Hold on... How would an elephant even fit--" ("upset", "base", "base", "L") + gen "Weren't you meant to swallow the spurs by the way?" ("base", xpos="far_left", ypos="head") + lun "Wha--{w=0.2} Oh no!" ("angry", "wide", "base", "stare") + gen "(*Phew*... Bullet dodged.)" ("base", xpos="far_left", ypos="head") + + lun "" ("open_tongue", "base", "annoyed", "down") #Tongue out + nar "You watch as Luna desperately tries to extend her tongue towards your cum." + + gen "What are you doing?" ("base", xpos="far_left", ypos="head") + lun "*Ngh*!" ("open_tongue", "narrow", "annoyed", "down") + gen "..." ("base", xpos="far_left", ypos="head") + gen "[name_luna_genie]... I believe it's a bit late for that..." ("base", xpos="far_left", ypos="head") + lun "... Really?" ("angry", "narrow", "base", "mid") #Sad + gen "Really..." ("base", xpos="far_left", ypos="head") + lun "Oh..." ("open", "narrow", "worried", "down") #Sad + lun "This means that the wrackspurts will return even faster, doesn't it?" ("angry", "narrow", "base", "down") + gen "Most certainly..." ("base", xpos="far_left", ypos="head") + lun "I see..." ("soft", "narrow", "worried", "down") + gen "What's with the long face?" ("base", xpos="far_left", ypos="head") + + "\"Cum covered bimbo says what?\"": + #Luna Pulls out + stop background + show lun_blowjob_personal_pose2 mouth_kiss as cg with d1 + show lun_blowjob_personal_pose1 no_trousers penis_spit cum_precum eyebrows_angry eyes_halflid_stare mouth_open_spit as cg with d3 + lun "*Slrp-pop*! What?!" + + gen "*AAAAH*!" + + #Genie cums + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose1 cum_frame0 eyes_wide_down as cg with d2 + show lun_blowjob_personal_pose1 cum_frame1 eyes_wide_stare as cg with d2 + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose1 cum_frame2 as cg with d2 + show lun_blowjob_personal_pose1 cum_frame3 as cg with d2 + show lun_blowjob_personal_pose1 cum_frame4 as cg with d2 + + show lun_blowjob_personal_pose1 eyebrows_angry eyes_wide_down as cg with d2 + lun "[name_genie_luna]!" + + show lun_blowjob_personal_pose1 eyes_halflid_stare as cg with d3 + lun "You tricked me!" + + show lun_blowjob_personal_pose1 eyes_base_stare mouth_soft as cg with d3 + lun "Or... Did the wrackspurts make you say that?" + gen "What--{w=0.2} Oh yes! Those rascals got to me again!" + + show lun_blowjob_personal_pose1 eyes_base_right as cg with d3 + lun "*Hmph*" + gen "What's up?" + + show lun_blowjob_personal_pose1 eyes_halflid_down as cg with d3 + lun "It's just... *Hmph*... Nevermind..." + + show screen blkfade + with d5 + + nar "Luna gets out from underneath your desk, and trudges over to stand in front of it." + $ luna.set_cum(face="heavy") + + hide cg + hide screen blkfade + with d5 + + gen "Are you alright, [name_luna_genie]?" ("base", xpos="far_left", ypos="head") + lun "I failed to swallow the wrackspurts... So, now they'll surely end up returning even sooner." ("angry", "narrow", "base", "down", xpos="mid", ypos="base", trans=d3) + "\"I'm cured! You can stop now!\"": + #Luna Pulls out + stop background + show lun_blowjob_personal_pose2 mouth_kiss as cg with d1 + show lun_blowjob_personal_pose1 no_trousers penis_spit cum_precum eyebrows_worried eyes_wide_up mouth_open_spit as cg with d3 + lun "*Slrp-pop*! What?!" + gen "Nevermind!" + + gen "*AAAAH*!" + + #Genie cums + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose1 cum_frame0 eyes_wide_down as cg with d2 + show lun_blowjob_personal_pose1 cum_frame1 eyes_wide_stare as cg with d2 + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose1 cum_frame2 as cg with d2 + show lun_blowjob_personal_pose1 cum_frame3 as cg with d2 + show lun_blowjob_personal_pose1 cum_frame4 as cg with d2 + + show lun_blowjob_personal_pose1 eyebrows_angry eyes_wide_down as cg with d2 + lun "[name_genie_luna]!" + + show lun_blowjob_personal_pose1 eyebrows_angry eyes_wide_stare as cg with d3 + lun "You came on me again!" + gen "Sure did." + + show lun_blowjob_personal_pose1 eyes_halflid_down mouth_soft as cg with d3 + lun "But, I was meant to swallow it--{w=0.2} I mean, the wrackspurts!" + gen "Yes... An unfortunate outcome indeed..." + + show lun_blowjob_personal_pose1 eyes_halflid_stare as cg with d2 + lun "Then why would you say something like that, just as you were about to--" + + show lun_blowjob_personal_pose1 eyebrows_shocked eyes_wide_up mouth_open as cg with d3 + lun "Hold on a moment..." + + show screen blkfade + with d5 + + nar "Luna quickly gets out from underneath your desk, and rushes over to the front of it." + $ luna.set_cum(face="heavy") + + hide cg + hide screen blkfade + with d5 + + call lun_chibi(flip=False) + + lun "[name_genie_luna]... Please don't tell me that your desk is made out of whisperwood!" ("angry", "wide", "base", "L", xpos="mid", ypos="base", trans=d3) + gen "Out of what?" ("base", xpos="far_left", ypos="head") + lun "Whisperwood!" ("angry", "wide", "base", "mid") + lun "Spending an excessive amount of time near a whisperwood tree may lead you to involuntarily utter the most inappropriate remarks at the most inopportune times imaginable!" ("mad", "narrow", "base", "mid") + gen "Sounds like you're describing the characteristics of a genie..." ("base", xpos="far_left", ypos="head") + lun "Really?" ("soft", "base", "base", "mid") + gen "Yes... Although, that wasn't why I said it." ("base", xpos="far_left", ypos="head") + lun "Then why did you..." ("soft", "base", "base", "mid") + gen "Just as the buggers were on the verge of bursting forth, they abruptly darted in the opposite direction!" ("base", xpos="far_left", ypos="head") + lun "So...{w=0.4} You're not cured?" ("angry", "base", "raised", "mid") + gen "On the contrary... They're getting smarter." ("base", xpos="far_left", ypos="head") + lun "..." ("upset", "narrow", "base", "down") #Sad + gen "Are you alright [name_luna_genie]? I didn't hit you in the eye, did I?" ("base", xpos="far_left", ypos="head") + lun "I'm fine, [name_genie_luna]...{w=0.4} I just thought I might've had them that time." ("angry", "narrow", "base", "down") + gen "I'm sure you'll get them next time." ("base", xpos="far_left", ypos="head") + gen "In any case..." ("base", xpos="far_left", ypos="head") + + gen "Didn't you say that you find pleasure in assisting me?" ("base", xpos="far_left", ypos="head") + lun "Oh, right! I do! I'm {i}the{/i} cumslut!" ("angry", "base", "base", "stare") #Happy + lun "See you next time, then!" ("grin", "base", "base", "mid") + gen "*Heh-Heh*... See you next--" ("base", xpos="far_left", ypos="head") + gen "Hold on!" ("base", xpos="far_left", ypos="head") + lun "Yes?" ("soft", "base", "raised", "mid") + gen "Make sure you clean yourself before you leave..." ("base", xpos="far_left", ypos="head") + lun "Oh, but I'm fine [name_genie_luna], I assure you!" ("grin", "base", "base", "mid") + gen "I'm sure you are...{w=0.4} I would just prefer it if that pretty face of yours weren't covered up." ("base", xpos="far_left", ypos="head") + lun @ cheeks blush "Oh..." ("angry", "narrow", "base", "down") #blushing + + hide luna_main + with d3 + $ luna.set_cum(None) + + nar "Luna quickly begins scooping your cum off her face, then flicking it onto the floor." + + lun @ cheeks blush "There we go!" ("soft", "narrow", "base", "down") + lun @ cheeks blush "Did-- Did I manage to get them all?" ("open", "narrow", "base", "downR") + gen "*Hmm*... Yes, I believe you did...{w=0.4} Nice work!" ("base", xpos="far_left", ypos="head") + + $ luna.set_cum(pussy="wet") + lun @ cheeks blush "*Mmm*... Thank you, [name_genie_luna]!" ("base", "closed", "base", "down") + + if _wearing_clothes: + hide luna_main + with d3 + $ luna.wear("all") + with d3 + pause .5 + + if game.daytime: + lun @ cheeks blush "*Ah*...{w=0.4} *Ehm*...{w=0.4} Have a nice day!" ("angry", "narrow", "base", "R") + gen "Have a--" ("base", xpos="far_left", ypos="head") + else: + lun "*Ah*...{w=0.4} *Ehm*...{w=0.4} Good night then!" ("angry", "narrow", "base", "R") + gen "Good--" ("base", xpos="far_left", ypos="head") + + #Luna leaves + call lun_walk(action="leave", speed=1.75) + gen "..." ("base", xpos="far_left", ypos="head") + + $ luna.set_cum(None) + + "-Tell her to get ready, and cum down her throat-": + gen "Take it, you--{w=0.2} cum hungry--{w=0.2} Slut!" + + nar "Luna, readying herself for your load, pushes her head down to the hilt, and you feel her throat contract around your cock." + + gen "*AARGH*!! You whore!!!" + + #Bobbing stops, and Genie cums down her throat + stop background + + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose5 penis_spit eyes_halflid_down_hearts as cg with d3 + play sound "sounds/gulp.ogg" + pause 1 + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose5 eyes_halflid_stare_hearts as cg with d3 + play sound "sounds/gulp.ogg" + pause 1 + play sound "sounds/slick_01.ogg" + show lun_blowjob_personal_pose5 eyebrows_base eyes_halflid_up_hearts as cg with d3 + play sound "sounds/gulp.ogg" + pause 1 + + show lun_blowjob_personal_pose4 as cg with d3 + show lun_blowjob_personal_pose3 as cg with d3 + + show lun_blowjob_personal_pose2 mouth_kiss as cg with d3 + lun "*Slrp-pop*!{w=0.4}{nw}" + show lun_blowjob_personal_pose2 eyes_closed as cg + lun "*Slrp-pop*!{fast}" + show lun_blowjob_personal_pose1 no_trousers eyebrows_angry mouth_open_cum as cg with d3 + lun "*Ah*...{w=0.4} Ah*...{w=0.4} Ah*..." + play sound "sounds/gulp.ogg" + show lun_blowjob_personal_pose1 mouth_neutral as cg with d3 + + show screen blkfade + with d5 + + nar "As Luna crawls out from under your desk, you slump back into your chair, exhausted by the sheer intensity of the session." + + hide cg + hide screen blkfade + with d5 + + #Fade to office, Luna in front of desk + call lun_chibi(flip=False) + + lun @ cheeks blush "So... Did I do good?" ("soft", "narrow", "base", "downR", xpos="mid", ypos="base", trans=d3) + gen "..." ("base", xpos="far_left", ypos="head") + lun "[name_genie_luna]?" ("open", "base", "base", "mid") + + $ renpy.sound.play("sounds/snore1.ogg") + gen "*Snore*..." ("base", xpos="far_left", ypos="head") + + lun "You called me a whore, what did you--" ("open", "base", "base", "mid") + + $ renpy.sound.play("sounds/snore1.ogg") + gen "*Snore*!" ("angry", xpos="far_left", ypos="head") + + lun "I'll...{w=0.4} I'll let you sleep...{w=0.4} Sweet dreams, [name_genie_luna]." ("base", "base", "base", "mid") + + if _wearing_clothes: + hide luna_main + with d3 + $ luna.wear("all") + with d3 + pause .5 + + #Luna leaves + call lun_walk(action="leave") + + gen "..." ("base", xpos="far_left", ypos="head") + gen "(When all else fails, pretend to sleep.)" ("grin", xpos="far_left", ypos="head") + + $ _wearing_clothes = False + + if states.lun.level < 24: + $ states.lun.level = 24 + call end_of_content + + jump ll_pf_blowjob_end + +#Tier 5 BJ notes: +#Genie jokes and says that perhaps he should call her the "head master now." Luna doesn't get it. diff --git a/game/scripts/characters/luna/events/favors/talk_to_me.rpy b/game/scripts/characters/luna/events/favors/talk_to_me.rpy index 10c3180d..2f7cdcd0 100644 --- a/game/scripts/characters/luna/events/favors/talk_to_me.rpy +++ b/game/scripts/characters/luna/events/favors/talk_to_me.rpy @@ -37,6 +37,10 @@ label ll_pf_talk_end: if states.lun.level < 9: $ states.lun.level += 1 + elif states.lun.tier == 4: + if states.lun.level < 12: + $ states.lun.level += 1 + jump end_luna_event ### Tier 1 ### @@ -48,7 +52,7 @@ label ll_pf_talk_T1_E1_intro: $ states.gen.masturbating = False gen "So... About the infestation..." ("base", xpos="far_left", ypos="head") - lun "*Sniff* *Sniff*" ("soft", "narrow", "base", "L") + lun "*Sniff* *Sniff*" ("soft", "narrow", "base", "L", xpos="base", ypos="base", trans=d3) gen "[name_luna_genie]?" ("base", xpos="far_left", ypos="head") lun "*Sniff* *Sniff*" ("soft", "base", "raised", "down") gen "Are you alright?" ("base", xpos="far_left", ypos="head") @@ -182,7 +186,7 @@ label ll_pf_talk_T1_E2_intro: call ll_pf_talk gen "Let's continue with your training." ("base", xpos="far_left", ypos="head") - lun "My training, [name_genie_luna]?" ("soft", "base", "raised", "mid") + lun "My training, [name_genie_luna]?" ("soft", "base", "raised", "mid", xpos="base", ypos="base", trans=d3) gen "*Err*... To become the best and first ever spurt hunter!" ("angry", xpos="far_left", ypos="head") lun "Oh!" ("grin", "base", "base", "mid") lun "Okay!" ("grin", "happyCl", "base", "mid") @@ -350,7 +354,7 @@ label ll_pf_talk_T1_E3_intro: call ll_pf_talk gen "Right then... Let's have another crack at this shall we." ("base", xpos="far_left", ypos="head") - lun "We're going to try and expel the wrackspurts again, [name_genie_luna]?" ("soft", "base", "base", "mid") + lun "We're going to try and expel the wrackspurts again, [name_genie_luna]?" ("soft", "base", "base", "mid", xpos="base", ypos="base", trans=d3) gen "That's right, [name_luna_genie]." ("base", xpos="far_left", ypos="head") lun "Can I see how you do it this time?" ("grin", "base", "raised", "mid") gen "*Err*... I'm not sure that's such a good idea..." ("base", xpos="far_left", ypos="head") @@ -433,7 +437,7 @@ label ll_pf_talk_T1_E3_intro: lun "You've done it!" ("smile", "narrow", "base", "mid") gen "I was just scratching--" ("angry", xpos="far_left", ypos="head") gen "Sorry, what did you say?" ("angry", xpos="far_left", ypos="head") - lun "You expelled the Wrackspurts!" ("grin", "happyCl", "base", "mid") + lun "You expelled the wrackspurts!" ("grin", "happyCl", "base", "mid") gen "I did?" ("base", xpos="far_left", ypos="head") lun "And through your penis no less!" ("grin", "base", "base", "downL") lun "You're a genius!" ("grin", "base", "base", "mid") @@ -539,7 +543,7 @@ label ll_pf_talk_T1_E4_repeat: call ll_pf_talk gen "How are you feeling, [name_luna_genie]?" ("base", xpos="far_left", ypos="head") - lun "I...{w=0.4} I'm okay..." ("open", "narrow", "base", "down") + lun "I...{w=0.4} I'm okay..." ("open", "narrow", "base", "down", xpos="base", ypos="base", trans=d3) lun "But I'm still worried about this burning sensation between my legs, [name_genie_luna]." ("upset", "narrow", "base", "mid") gen "I'm sure we'll find a way for you to deal with them once I've had a thorough inspection of your body...." ("base", xpos="far_left", ypos="head") @@ -590,7 +594,7 @@ label ll_pf_talk_T1_E4_repeat: nar "You keep stroking your shaft as Luna watches your every move." nar "Stroking it faster and faster, you feel yourself getting closer and closer to the edge by the second." - lun @ cheeks blush "It's pulsating! How many Wrackspurts do you have in there?" ("disgust", "base", "base", "downL") + lun @ cheeks blush "It's pulsating! How many wrackspurts do you have in there?" ("disgust", "base", "base", "downL") gen "It's...{w=0.4} Filled to the brim!" ("angry", xpos="far_left", ypos="head") lun @ cheeks blush "Do you need me to get Madam Pomfrey?" ("mad", "base", "base", "mid") gen "*Ah*...{w=0.4} Who?" ("angry", xpos="far_left", ypos="head") @@ -658,7 +662,7 @@ label ll_pf_talk_T2_E1_repeat: call ll_pf_talk gen "Tell me some more about these spurts..." ("base", xpos="far_left", ypos="head") - lun "Again, [name_genie_luna]?" ("open", "base", "raised", "mid") + lun "Again, [name_genie_luna]?" ("open", "base", "raised", "mid", xpos="base", ypos="base", trans=d3) gen "Yes... I still don't think I'm quite done with my personal research..." ("base", xpos="far_left", ypos="head") lun "Oh... Okay then..." ("soft", "base", "base", "mid") gen "One moment please." ("base", xpos="far_left", ypos="head") @@ -763,7 +767,7 @@ label ll_pf_talk_T3_E1_repeat: call ll_pf_talk gen "Able to help me deal with those spurts again?" ("base", xpos="far_left", ypos="head") - lun "Of course, what would you need me to do?" ("grin", "base", "raised", "mid") + lun "Of course, what would you need me to do?" ("grin", "base", "raised", "mid", xpos="base", ypos="base", trans=d3) gen "Just stand there for a bit." ("base", xpos="far_left", ypos="head") lun "Oh... Okay, [name_genie_luna]." ("base", "happyCl", "base", "mid") @@ -922,3 +926,857 @@ label ll_pf_talk_T3_E1_repeat: call lun_walk(action="leave") jump ll_pf_talk_end + +label ll_pf_talk_T4_E1_repeat: + + $ states.lun.status.cumshot = True + $ states.lun.ev.ll_pf_talk_T4_E1_repeat_complete = True + + call ll_pf_talk + + gen "Fancy checking out my ding-dong?" ("base", xpos="far_left", ypos="head") + lun "Your ding-dong, [name_genie_luna]?" ("soft", "base", "raised", "mid", xpos="base", ypos="base", trans=d3) + lun "Is that another word for clock?" ("open", "base", "raised", "mid") + gen "Remove the \"L\", and you've got it." ("base", xpos="far_left", ypos="head") + lun "Cock?" ("open", "base", "raised", "mid") + gen "Ding-ding-ding!" ("base", xpos="far_left", ypos="head") + lun "I'm confused..." ("soft", "narrow", "worried", "mid") + gen "Yes, I probably shouldn't have made a dinging sound..." ("base", xpos="far_left", ypos="head") + lun "" ("soft", "narrow", "base", "down") #confused stare + call ctc + + if states.lun.ev.ll_pf_blowjob_T4_E1_intro_complete: + lun "Hold on... You're talking about your \"penis\"!" ("angry", "base", "base", "stare") + lun "All these different terms for it are so confusing!" ("grin", "happyCl", "base", "mid") + gen "Yes, remembering them all can be a bit difficult at times..." ("base", xpos="far_left", ypos="head") + lun "Are there really that many? How many are there?" ("soft", "narrow", "base", "stare") + gen "Hundreds... Perhaps thousands..." ("base", xpos="far_left", ypos="head") + else: + lun "So, you've got a rooster you'd like me to see?" ("open", "base", "base", "mid") + gen "No, there's no rooster... It's just another word for \"penis\"." ("base", xpos="far_left", ypos="head") + lun "Oh, that makes more sense!" ("grin", "base", "base", "stare") + lun "Why, I never imagined that there could be so many words for a single organ." ("base", "base", "base", "mid") + gen "Oh, there are hundred of words for it... Thousands, perhaps." ("base", xpos="far_left", ypos="head") + + lun "What?! Really?! Wow!" ("smile", "base", "base", "stare") + lun "Teach me, teach me, teach me!" ("smile", "wide", "base", "mid") + gen "Such enthusiasm! However, it's not exactly the reason I asked you to--" ("base", xpos="far_left", ypos="head") + lun "..." ("upset", "base", "worried", "mid") #Expectant smile + gen "Alright...{w=0.4} I suppose I could teach you another one." ("base", xpos="far_left", ypos="head") + lun "Yay!" ("grin", "base", "base", "mid") + gen "How about..." ("base", xpos="far_left", ypos="head") + menu: + "\"Chode!\"": + $ name_geniepenis_luna = "Chode" + lun "Chode?" ("soft", "base", "base", "mid") + gen "Yep, although that one is usually used to describe a particular shape." ("base", xpos="far_left", ypos="head") + lun "They come in different shapes?" ("angry", "base", "base", "mid") + gen "Of course!" ("base", xpos="far_left", ypos="head") + lun "Wow!" ("grin", "base", "base", "mid") + lun "I wanna see a triangle-shaped one!" ("smile", "narrow", "base", "mid") + gen "..." ("base", xpos="far_left", ypos="head") + "\"Donkey Kong!\"": + $ name_geniepenis_luna = "Donkey Kong" + lun "Donkey... Kong?" ("soft", "base", "raised", "mid") + gen "That's right." ("base", xpos="far_left", ypos="head") + gen "Or was it Wonky Dong..." ("base", xpos="far_left", ypos="head") + "\"Knob!\"": + $ name_geniepenis_luna = "Knob" + lun "Knob?" ("soft", "base", "raised", "mid") + gen "Yep." ("base", xpos="far_left", ypos="head") + lun "Like a door?" ("open", "base", "raised", "mid") + gen "You can adore a knob if you're into that." ("base", xpos="far_left", ypos="head") + lun "*Huh*?" ("open", "base", "base", "mid") + "\"Member!\"": + $ name_geniepenis_luna = "A member" + lun "A member?" ("soft", "base", "raised", "mid") + gen "Yep." ("base", xpos="far_left", ypos="head") + lun "A member of what?" ("open", "base", "raised", "mid") + gen "No, it's just called a \"member\"." ("base", xpos="far_left", ypos="head") + lun "\"A member\"... I see..." ("base", "base", "base", "mid") + "\"One-eyed trouser snake!\"": + $ name_geniepenis_luna = "One-eyed trouser snake" + lun "A snake?!" ("angry", "wide", "base", "stare") + gen "Not an actual snake..." ("base", xpos="far_left", ypos="head") + lun "Oh... So, like a cock?" ("soft", "base", "raised", "mid") + gen "How is a cock similar to a snake?" ("base", xpos="far_left", ypos="head") + lun "But I thought..." ("disgust", "narrow", "base", "mid") + "\"Pecker!\"": + $ name_geniepenis_luna = "Pecker" + lun "Pecker?" ("soft", "base", "raised", "mid") + gen "Yep." ("base", xpos="far_left", ypos="head") + lun "So, like...{w=0.4} A woodpecker?" ("open", "base", "base", "up") + gen "That's right... Except this pecker pecks for pussy." ("base", xpos="far_left", ypos="head") + lun "Pussy?!" ("angry", "base", "base", "mid") + gen "That's right." ("base", xpos="far_left", ypos="head") + lun "Sounds like I've got a lot more to learn about peckers than I thought..." ("soft", "closed", "base", "mid") + "\"Schlong!\"": + $ name_geniepenis_luna = "Schlong" + lun "Schlong?" ("soft", "base", "raised", "mid") + gen "That's right." ("base", xpos="far_left", ypos="head") + lun "Such a peculiar name...{w=0.4} Did you come up with it yourself, [name_genie_luna]?" ("open", "base", "base", "mid") + gen "Of course!" ("base", xpos="far_left", ypos="head") + gen "Anything above 5.5 inches, is a \"schlong\"... Anything below 5.1 is a \"schlort\"." ("base", xpos="far_left", ypos="head") + lun "And between those two?" ("soft", "base", "raised", "mid") + gen "\"schlaverage\"." ("base", xpos="far_left", ypos="head") + "\"Skin flute!\"": + $ name_geniepenis_luna = "Skin flute" + lun "Skin... Flute?" ("soft", "base", "raised", "mid") + if states.lun.ev.ll_pf_blowjob_T4_E1_intro_complete: + gen "Because you can blow on it." ("base", xpos="far_left", ypos="head") + lun "Blow? Don't you mean suck, [name_genie_luna]?" ("open", "base", "base", "mid") + gen "Yeah, I guess..." ("base", xpos="far_left", ypos="head") + gen "Although a \"suckjob\" sounds a lot less appealing." ("base", xpos="far_left", ypos="head") + lun "Suck... Job?" ("soft", "base", "base", "mid") + else: + gen "Yes, since you can blow--" ("base", xpos="far_left", ypos="head") + gen "(Hold on... She doesn't have the context to make any sense of this...)" ("base", xpos="far_left", ypos="head") + lun "Yes?" ("soft", "base", "base", "mid") + gen "Because...{w=0.4} It has the shape of a flute!" ("base", xpos="far_left", ypos="head") + lun "It has?" ("open", "base", "base", "mid") + gen "Think about it! It's long, and it's got a shapely tip, and--" ("base", xpos="far_left", ypos="head") + gen "Hold on... Is that actually the true reason?" ("base", xpos="far_left", ypos="head") + lun "*Huh*?" ("open", "base", "raised", "mid") + "\"Wang!\"": + $ name_geniepenis_luna = "Wang" + lun "Wang?" ("soft", "base", "raised", "mid") + gen "Yep." ("base", xpos="far_left", ypos="head") + gen "Like the surname of that Asian girl." ("base", xpos="far_left", ypos="head") + lun "The surname... Don't you mean \"Chang\", [name_genie_luna]? Cho Chang?" ("open", "base", "base", "mid") + gen "Are there any other Asian girls in this school?" ("base", xpos="far_left", ypos="head") + gen "Wait, did you say \"Chang\"? I could've sworn it was Wang..." ("base", xpos="far_left", ypos="head") + lun "I... Well, perhaps I've been saying it wrong?" ("soft", "base", "base", "down") + gen "Chang doesn't even fit the theme, so surely it must be..." ("base", xpos="far_left", ypos="head") + lun "The theme, [name_genie_luna]? What theme?" ("soft", "base", "base", "mid") + gen "There's \"Nymphadora\"...{w=0.4} and \"Lovegood\"..." ("base", xpos="far_left", ypos="head") + if states.sus.unlocked: + gen "And there's even Bones too!" ("base", xpos="far_left", ypos="head") + gen "And Hermione--{w=0.2} Hold on..." ("base", xpos="far_left", ypos="head") + gen "There never was a theme!" ("base", xpos="far_left", ypos="head") + gen "Such a wasted opportunity!" ("base", xpos="far_left", ypos="head") + lun "..." ("soft", "base", "base", "mid") + "\"Weiner!\"": + $ name_geniepenis_luna = "Weiner" + lun "Weiner?" ("soft", "base", "raised", "mid") + lun "Like a sausage weiner?" ("open", "base", "raised", "mid") + gen "Yep." ("base", xpos="far_left", ypos="head") + gen "Because it resembles a weiner, you see?" ("base", xpos="far_left", ypos="head") + lun "I see!" ("grin", "base", "base", "mid") + lun "So, like a banana!" ("smile", "base", "base", "mid") + gen "*Hmm*... I don't know if I'd compare it to a banana." ("base", xpos="far_left", ypos="head") + lun "Oh...{w=0.4} How come?" ("upset", "base", "base", "mid") + gen "Well, first of...{w=0.4} A banana is something that you can peel, and you can't peel a--" ("base", xpos="far_left", ypos="head") + gen "..." ("base", xpos="far_left", ypos="head") + lun "Yes?" ("soft", "base", "raised", "mid") + "\"Third leg!\"": + $ name_geniepenis_luna = "Third leg" + lun "A leg?!" ("angry", "base", "base", "mid") + gen "A \"third leg\", specifically." ("base", xpos="far_left", ypos="head") + lun "Wait... Does that mean you can walk on it?!" ("angry", "base", "base", "stare") + gen "Depends on the situation..." ("base", xpos="far_left", ypos="head") + gen "Sometimes, you'll find yourself in a situation where you have no leg to stand on." ("base", xpos="far_left", ypos="head") + lun "Really? When would that be?" ("soft", "base", "raised", "mid") + gen "..." ("base", xpos="far_left", ypos="head") + gen "Let's say you've just told a hilarious pun, but your audience doesn't get it." ("base", xpos="far_left", ypos="head") + lun "I see..." ("open", "base", "base", "up") + + gen "Anyway... Teaching you various words for penis wasn't the purpose of me summoning you today--" ("base", xpos="far_left", ypos="head") + lun "Oh, right!" ("base", "base", "base", "mid") + + if luna.is_any_worn("clothes"): + $ _wearing_clothes = True + + if luna.is_any_worn("robe", "accessory"): + $ renpy.sound.play("sounds/cloth_sound3.ogg") + $ luna.strip("robe", "accessory") + with d3 + pause .5 + + gen "*Ehm*..." + + if luna.is_worn("top"): + $ renpy.sound.play("sounds/cloth_sound3.ogg") + $ luna.strip("top") + with d3 + pause .5 + + if luna.is_worn("bottom"): + + $ renpy.sound.play("sounds/cloth_sound3.ogg") + $ luna.strip("bottom") + with d3 + pause .5 + + gen "[name_luna_genie]?" ("base", xpos="far_left", ypos="head") + + call lun_walk("desk", "base") + + gen "What are you doing?" ("base", xpos="far_left", ypos="head") + lun @ cheeks blush "Oh, I just thought...{w=0.4} My apologies." ("angry", "narrow", "base", "downR") + gen "No need to apologise, [name_luna_genie]! I just wasn't prepared for the eagerness." ("base", xpos="far_left", ypos="head") + lun @ cheeks blush "Always ready to serve! *Ehm*... I mean, always ready to assist with your research!" ("grin", "base", "base", "downL") + gen "Commendable." ("base", xpos="far_left", ypos="head") + + if luna.is_any_worn("clothes"): + gen "In that case, why don't you undress fully, and take a seat right over here..." ("base", xpos="far_left", ypos="head") + $ renpy.sound.play("sounds/cloth_sound3.ogg") + $ luna.strip("clothes") + with d3 + pause .5 + else: + gen "In that case, why don't you take a seat right over here..." ("base", xpos="far_left", ypos="head") + + lun "In your lap, yes?" ("smile", "base", "base", "mid") + gen "On the desk, if you please..." ("base", xpos="far_left", ypos="head") + lun "Oh! Okay then!" ("smile", "base", "base", "downL") + + show screen blkfade + with d5 + + if game.daytime: + show lun_talk mouth_soft as cg zorder 16 + else: + show lun_talk mouth_soft as cg zorder 16 at color_temperature(1.0) + + hide screen blkfade + with d5 + + lun "You are going to bait the wrackspurts again, [name_genie_luna]?" + gen "That's right." + + show lun_talk eyes_closed mouth_base as cg with d3 + + lun "Then my purpose for today is to display my naked body as a way to assist with the completion of this task, correct?" + gen "*Err*..." + gen "(Why is she suddenly speaking like that?)" + + show lun_talk eyebrows_raised eyes_base_stare mouth_timid as cg with d3 + + lun "You taught me previously that observing my naked body is of great assistance when you're baiting wrackspurts." + gen "Right?" + + show lun_talk eyebrows_surprised eyes_wide_stare mouth_smile as cg with d3 + + lun "Yep!" + gen "Well...{w=0.4} Good job on listening...{w=0.4} I guess?" + + show lun_talk eyebrows_base eyes_base_down mouth_base as cg with d3 + + lun "*Mmm*...{w=0.4} Thank you [name_genie_luna]." + + show lun_talk eyebrows_worried eyes_closed as cg with d3 + + lun "I'm delighted that you've recognized my sincere efforts in paying close attention and retaining all the knowledge we've acquired thus far!" + + show lun_talk eyebrows_worried eyes_narrow_down mouth_timid as cg with d3 + + gen "(Is she trying to fish for compliments?)" + gen "*Ahem*... Excellent work [name_luna_genie]... Speaking of attention." + + show lun_talk eyebrows_base as cg with d3 + + nar "You clutch at your robes, as you feel your cock pushing against it..." + + show lun_talk eyebrows_worried eyes_base_stare mouth_smile as cg with d3 + + lun "Oh, go right ahead, [name_genie_luna]!" + + nar "You pull out your cock and start stroking it." + + gen "There we go... Finally free from that wretched prison." + + show lun_talk eyes_base_down mouth_soft as cg with d3 + + lun "I hope you haven't had to endure them for too long, [name_genie_luna]." + + show lun_talk eyes_narrow_down mouth_pout as cg with d3 + + lun "I can't imagine what it would feel like to have a penis stuck in such a tight space." + gen "I'm sure we can satiate that curiosity, one way or another...{w=0.4} Or three if you're really kinky." + + show lun_talk eyebrows_base eyes_base_stare mouth_soft as cg with d3 + + lun "Three, [name_genie_luna]? But I've only ever seen you wear the one set of trousers." + gen "...{w=0.4} Let's focus on the task." + + show lun_talk eyes_base_stare mouth_smile as cg with d3 + + lun "Sure thing! What do you need me to do?" + gen "Simply laying there and looking as beautiful as you always do should be more than sufficient." + + show lun_talk eyes_base_right mouth_base as cg with d3 + + lun "Oh... Okay..." + gen "*Ahem*... Although, you'd be of great help if you pushed your breasts together a little bit." + lun "..." + gen "[name_luna_genie]?" + + show lun_talk eyebrows_surprised eyes_base_stare mouth_soft as cg with d3 + + lun "*Huh*?" + gen "Could you push your breasts together?" + + show lun_talk eyebrows_base eyes_narrow_down as cg with d3 + + lun "My breasts?" + gen "Yes...{w=0.4} Push those beautiful breasts together for me, will you?" + + show lun_talk eyes_base_down as cg with d3 + pause 0.4 + #Breasts pushed together pose + show lun_talk arms_grab_chest eyes_base_stare mouth_timid as cg with d5 + + nar "*Fap* *Fap* *Fap*..." + + show lun_talk blush_heavy eyes_base_right as cg with d5 + + lun "..." #Blushing + gen "[name_luna_genie]?" + + show lun_talk eyebrows_worried eyes_base_stare mouth_soft as cg with d3 + + lun "Y--{w=0.2} Yes [name_genie_luna], is everything okay?" + gen "I was just about to ask you the same question." + + show lun_talk eyebrows_surprised eyes_wide_stare as cg with d3 + + lun "Me? I'm--{w=0.2} I feel fine... Why?" + gen "You're blushing." + + show lun_talk eyebrows_base eyes_base_down mouth_open as cg with d3 + + lun "I am?" + gen "Very much so." + + show lun_talk eyebrows_surprised eyes_wide_stare mouth_open_wide as cg with d3 + + lun "Please don't tell me it's a {b}case of the vapours{/b}!" + gen "The vapours? Yes, it must be! Fortunately, I have the ideal treatment for--" + gen "(Hold on... Didn't that bogus get disproven hundreds of years ago?)" + + show lun_talk eyebrows_worried eyes_base_right mouth_open as cg with d3 + + lun "So, it is the vapours! Tell, me [name_genie_luna], how much steam is coming out of my ears!?" + gen "...{w=0.4} There's no steam coming out of your ears, [name_luna_genie]." + + show lun_talk eyes_closed as cg with d3 + + lun "Oh...{w=0.4} Thank Merlin..." + + show lun_talk eyebrows_surprised eyes_base_down mouth_soft as cg with d3 + + lun "But if not the vapours, what else could have caused this?" + + gen "Let me think..." + gen "Did something particular cross your mind before your cheeks turned all rosy?" + + show lun_talk eyes_narrow_right as cg with d3 + + lun "*Hmm*..." + + show lun_talk eyes_base_right as cg with d3 + + lun "I was just thinking about what you had just said." + gen "Which was?" + + show lun_talk eyes_narrow_down as cg with d3 + + lun "You were saying I was looking beautiful..." + gen "Thinking about that made you blush?" + + show lun_talk mouth_soft as cg with d3 + + lun "I believe so..." + + show lun_talk mouth_timid as cg with d3 + + lun "When you complimented me on my looks previously, I figured that it was merely a tactic to help me master baiting." + + show lun_talk mouth_base as cg with d3 + + lun "But this time, I'm not the one doing it, so it made me realise that you must have been sincere." + gen "..." + + #stops squeezing breasts + show lun_talk -arms_grab_chest eyes_base_up mouth_pout as cg with d5 + lun "*Sigh*...{w=0.4} I suppose I've become accustomed to guys only saying things like that sarcastically, mocking my choice of attire." + + gen "Yes, unfortunately, this school is teeming with exceptionally shallow individuals." + + show lun_talk eyebrows_raised eyes_base_stare mouth_soft as cg with d3 + + lun "[name_genie_luna]?" + + gen "Could you lift your legs a bit, so that I may get a better view of your butt?" + + show lun_talk eyebrows_base mouth_open as cg with d3 + + lun "Oh, of course [name_genie_luna]..." + + show lun_talk legs_side mouth_base as cg with d5 + pause 0.4 + + gen "Now, where was I...{w=0.4} Oh yes..." + gen "Allow me to pose you a question, [name_luna_genie]." + gen "Do you like the clothing that you wear?" + + show lun_talk eyebrows_surprised eyes_wide_stare mouth_soft as cg with d3 + + lun "Very much so!" + gen "Then if it brings you joy, why worry about what others think?" + + show lun_talk eyebrows_base eyes_base_left as cg with d3 + + lun "I...{w=0.4} I suppose..." + gen "In fact, I feel bad for them." + + show lun_talk eyebrows_surprised eyes_base_stare mouth_open as cg with d3 + + lun "You do?!" + gen "Of course I do." + gen "If you lack the capability to look past someone's clothing, then you'll never get the chance to learn and experience what's underneath." + + show lun_talk eyebrows_base eyes_base_down mouth_soft as cg with d3 + + lun "I...{w=0.4} I've never thought of it that way..." + + nar "You stop masturbating, and move your eyes away from Luna's ass to look into her eyes..." + + gen "Try not to take what they say to heart, [name_luna_genie]." + gen "As long as you continue to be yourself, I have no doubt that the friendships you make will feel more authentic and genuine." + + show lun_talk eyebrows_base eyes_narrow_down mouth_base as cg with d3 + + lun "Yes... Perhaps you're right..." + + play sound "sounds/slick_02.ogg" + show lun_talk arm_left_masturbate_variant_legs_side as cg with d5 + play background "sounds/slickloop.ogg" fadein 2 + + nar "You watch Luna, as she unconsciously moves her hand to between her legs and starts fingering herself..." + + gen "Take me, for example – I consistently approach people with both an open heart and an open mind." + gen "If I had their mindset, I might've ended up walking right past all the unique and beautiful individuals such as yourself." + + show lun_talk mouth_soft as cg with d3 + + lun "..." + + nar "Luna doesn't respond, and you push on, while she's still processing what you just said..." + + gen "Not only that...{w=0.4} I firmly believe that we should celebrate each other's uniqueness." + + show lun_talk eyebrows_raised as cg with d3 + + lun "*Mmm*...{w=0.4} Truly?" + gen "Of course!" + gen "How about you share something you believe is unique about yourself, and I'll explain why I think it makes you truly exceptional!" + + show lun_talk eyebrows_worried mouth_timid as cg with d3 + + lun "Oh...{w=0.4} *Ehm*...{w=0.4} Something unique..." + + show lun_talk eyes_narrow_down mouth_base as cg with d3 + + lun "*Mmm*... You've put me on the spot..." + gen "What about your clothing?" + + show lun_talk mouth_smile as cg with d3 + + lun "Oh...{w=0.4} Well, I suppose my fondness for wearing my own creations is quite a unique trait." + gen "To me, this clearly indicates that you're a creative, free-spirited, and adventurous individual." + + show lun_talk eyes_base_down as cg with d3 + + lun "..." + gen "What else?" + + show lun_talk eyes_narrow_down mouth_base as cg with d3 + + lun "*Ah*...{w=0.4} I...{w=0.4} Well, I've never really thought about it before..." + gen "Then, let me share a couple of things I've learned about you from the time we've spent researching together..." + + show lun_talk eyebrows_worried mouth_smile as cg with d3 + + lun "[name_genie_luna], you don't have to--" + gen "You show great enthusiasm about everything you do...{w=0.4} And that energy and passion make any task more enjoyable..." + + show lun_talk eyes_narrow_right mouth_soft as cg with d3 + + lun "[name_genie_luna]..." + gen "Your ability to adapt and pick up new skills quickly is remarkable..." + + show lun_talk eyes_narrow_stare as cg with d3 + + lun "..." + gen "And you always go above and beyond to ensure that we reach the desired result..." + gen "All excellent qualities, don't you think?" + + show lun_talk eyes_narrow_up mouth_base as cg with d3 + + lun "..." + gen "[name_luna_genie]?" + + nar "As you address Luna once more, you can't help but notice that her attention has been somewhat diverted towards her nether regions..." + + gen "(*Hmm*... Looks like she's getting off from being validated...)" + gen "[name_luna_genie]..." + + show lun_talk eyebrows_raised eyes_narrow_stare mouth_base as cg with d3 + + lun "*Hmm*?" + gen "Tell me a little bit about the creations you're particularly proud off..." + + show lun_talk eyebrows_base eyes_narrow_left as cg with d3 + + lun "*Ah*... *Ehm*... Well, there's my cork necklace..." + gen "A cork necklace?" + gen "(That's one of the dumbest things I've ever heard...)" + + show lun_talk eyes_narrow_stare mouth_smile as cg with d3 + + lun "One day, I had this epiphany...{w=0.4} *Ah*...{w=0.4} Why hasn't anyone created a necklace that's not only stylish but also practical?" + gen "Hold on..." + gen "That's brilliant!" + + show lun_talk eyes_base_stare as cg with d3 + + lun "You--{w=0.2} *Ah*...{w=0.4} You really think so?" + gen "Most assuredly! I've found myself presented with plenty of holes in the need of being plugged!" + gen "But I never thought about carrying a cork for that specific purpose before." + + show lun_talk mouth_base as cg with d3 + + lun "Oh... Well, if you ever need one..." + gen "Yes, I'm sure we could find a use for it in our research." + + show lun_talk eyebrows_raised mouth_soft as cg with d3 + + lun "In--{w=0.2} *Ah*...{w=0.4} Our research?" + gen "Certainly!" + gen "Speaking of necklace... Since you've been so helpful, I think I better reward you with a \"pearl necklace\"." + + show lun_talk eyebrows_worried eyes_narrow_stare mouth_base as cg with d3 + + nar "Luna's eyes glaze over once again, and she begins panting slightly." + + lun "*Ah*...{w=0.4} That...{w=0.4} That's very kind of you, [name_genie_luna]..." + + show lun_talk eyes_closed as cg with d3 + + lun "But--{w=0.4} *Ah*...{w=0.4} I'm not doing this for the sake of being rewarded." + gen "I'm aware of that, although that doesn't mean I can't show you my appreciation." + gen "Not everyone would agree to undress inside the headmaster's office..." + + show lun_talk mouth_smile as cg with d3 + + lun "*Ah*...{w=0.4} Because it's--{w=0.2} *Mmm*...{w=0.4} Chilly, [name_genie_luna]?" + gen "Sure!" + + show lun_talk eyes_narrow_down as cg with d3 + nar "Luna smiles and glances down at your cock, but as she does, her expression quickly shifts into one of shock..." + + lun "*Don't worry, I'm--" + + stop background fadeout 2 + show lun_talk eyes_base_down arm_left_rest mouth_open as cg with d3 + pause 0.2 + show lun_talk legs_down eyebrows_surprised eyes_wide_down mouth_open_wide as cg with d5 + + lun "[name_genie_luna]! You stopped stroking your [name_geniepenis_luna]!" + gen "My what? Oh...{w=0.4} So I have..." + + show lun_talk eyebrows_worried eyes_base_down mouth_open as cg with d3 + + lun "Please, [name_genie_luna], resume the baiting before it's too late!" + gen "Right." + + nar "Grabbing your cock once more, you resume your stroking, fixing your gaze back towards Luna's naked body..." + + gen "There we are... No need to panic." + + show lun_talk eyes_closed mouth_soft as cg with d3 + + lun "*Phew*..." + + show lun_talk eyes_base_stare mouth_pout as cg with d3 + + lun "I'm sorry [name_genie_luna]... I didn't realise that I had been distracting you..." + gen "No harm done, [name_luna_genie]... In fact, it appears your distraction may have excited the spratters even more." + + show lun_talk eyebrows_base mouth_soft as cg with d3 + + lun "It did? But how--" + gen "I'm not only talking about the ones afflicting myself... If you hadn't realised, you were touching yourself just a moment ago." + + show lun_talk eyebrows_surprised eyes_wide_stare mouth_open as cg with d3 + + lun "I was?!" + + show lun_talk eyes_wide_down as cg with d3 + + lun "I...{w=0.4} How did I not realise..." + + show lun_talk eyebrows_worried eyes_base_down mouth_soft as cg with d3 + + lun "We... We were only talking about..." + + show lun_talk eyes_narrow_down as cg with d3 + + nar "Luna's eyes glaze over slightly, as a dreamy and distant expression spreads across her face..." + + lun "{size=-4}But why would that result in me touching myself...{/size}" + + nar "Luna suddenly goes quiet, as if pondering on what to say next..." + + show lun_talk mouth_soft as cg with d3 + + lun "The only thing I can remember thinking..." + lun "Was how glad I am to have someone who genuinely listens and understands me..." + + show lun_talk eyebrows_base as cg with d3 + + lun "How before I sought your assistance, I had become so accustomed to people trying to distance themselves from me..." + lun "Before I stepped foot inside your office, not a single soul would even dare to..." + + show lun_talk eyes_closed as cg with d3 + + lun "{size=-4}Touch me...{/size}" + + nar "As the final words leaves her lips, Luna's legs quiver slightly..." + + show lun_talk eyebrows_worried eyes_base_stare mouth_open as cg with d3 + + lun "[name_genie_luna]... something's happening to me!" + gen "No need to worry, [name_luna_genie]... Just tell me what's going on." + + show lun_talk eyes_wide_down mouth_open as cg with d3 + + lun "My body...{w=0.4} It feels hot!" + + show lun_talk eyes_base_down as cg with d3 + + lun "And for some reason..." + + show lun_talk eyes_narrow_down mouth_open_wide as cg with d3 + + lun "The only thing I can think about is you, stroking your penis!" + gen "That's hardly difficult to imagine, since it's precisely what I'm doing." + + show lun_talk eyes_narrow_stare mouth_soft as cg with d3 + + lun "I know... But it's so clear in my mind...{w=0.2} And...{w=0.2} And..." + + show lun_talk eyes_wide_stare mouth_open as cg with d3 + + lun "Please, [name_genie_luna]...{w=0.4} Can I--{w=0.2} I need to touch myself--" + gen "Not yet, [name_luna_genie]! I'm not there yet!" + + show lun_talk eyes_base_stare as cg with d3 + + lun "But, [name_genie_luna]!" + gen "Spread you legs, and allow me to catch up to you." + + show lun_talk eyes_narrow_down mouth_soft as cg with d3 + + lun "But, how is that going to--" + gen "Do it, [name_luna_genie]!" + + show lun_talk legs_side eyes_wide_down mouth_soft as cg with d3 + pause 0.2 + show lun_talk legs_up arm_left_hold_leg_variant_legs_up arm_right_hold_leg_variant_legs_up eyes_wide_stare as cg with d3 + with hpunch + + lun "!!!" + gen "Good." + gen "Now, close your eyes and just wait for a little bit to see if the feeling subsides." + + #luna closes eyes + show lun_talk eyes_closed mouth_open as cg with d3 + + nar "You keep stroking your cock, while watching the girl squirm uncomfortably." + + gen "Is it working?" + + show lun_talk eyebrows_base as cg with d3 + + lun "I--{w=0.2} I don't think so [name_genie_luna]...{w=0.4} The image of your penis is still at the forefront of my mind." + gen "Even just thinking about it is making you feel this hot and bothered?" + + show lun_talk mouth_open_wide as cg with d3 + + lun "I--{w=0.2} Yes, I think so!" + gen "Good... Then we've learned something today." + + show lun_talk eyebrows_base as cg with d3 + + lun "[name_genie_luna], please!" + + menu: + "-Deny her for a bit longer-": + gen "I'm not there yet, [name_luna_genie]." + + show lun_talk eyebrows_worried mouth_timid as cg with d3 + lun "But--" + + show lun_talk mouth_open as cg with d3 + + lun "Tell me what to do! How can I help?!" + gen "*Hmm*..." + + show lun_talk eyebrows_surprised eyes_wide_stare mouth_open as cg with d3 + lun "Wait, I know!" + + play sound "sounds/slick_02.ogg" + show lun_talk arm_left_spread_variant_legs_up mouth_smile as cg with d3 + gen "By the great--" + + show lun_talk eyes_base_down as cg with d3 + + lun "Is it working [name_genie_luna]? Can I do it now, can I, can I?" + gen "Oh, yes!" + + "-Allow her to join you-": + gen "Alright then, [name_luna_genie]... I'm almost there." + gen "You may open your eyes and join me." + + show lun_talk eyebrows_base eyes_base_stare mouth_smile as cg with d3 + lun "Thank you!" #open eyes + + play sound "sounds/slick_02.ogg" + play background "sounds/slickloopveryfast.ogg" fadein 2 + show lun_talk legs_side arm_left_masturbate_variant_legs_side arm_right_hold_leg_variant_legs_side eyes_narrow_up mouth_ahegao as cg with d3 + nar "Luna immediately plunges her fingers inside her wet pussy." + nar "As she does, an expression of ecstasy spreads across her face as her oncoming orgasm rushes through her body." + + show lun_talk eyebrows_base as cg with d3 + lun "[name_genie_luna]!" + + play sound "sounds/slick_02.ogg" + with kissiris + show lun_talk wet_legs_side mouth_open as cg with d3 + lun "{heart}{heart}*Ah*!!!{heart}{heart}" + + gen "That's it, girl! Take this!" + play sound "sounds/slick_01.ogg" + show lun_talk cum_chin as cg with d3 + show lun_talk cum_chest as cg with d3 + gen "*Argh*!!" + + show lun_talk mouth_base as cg with d3 + lun "{heart}[name_genie_luna]...{heart}" + lun "They won't stop--" + gen "Hold it, girl!" + + show lun_talk eyebrows_worried mouth_timid as cg with d3 + + lun "But--" + gen "Come!" + + with kissiris + stop background fadeout 2 + play sound "sounds/slick_02.ogg" + show lun_talk arm_right_rest arm_left_rest cum_stomach mouth_open eyes_closed eyebrows_worried as cg with d3 + pause 0.5 + show lun_talk cum_hand cum_desk as cg with d3 + "Luna and Genie" "{size=+4}Aaaaah!!!{/size}" + + lun "*Ah*...{w=0.4} Wow...{w=0.4} That was..." + show lun_talk legs_down eyes_base_stare mouth_base as cg with d3 + lun "Amazing..." + gen "*Ah*...{w=0.4} Great job, [name_luna_genie]." + + show lun_talk eyebrows_base as cg with d3 + lun "*Mmm*... Thank you, [name_genie_luna]." + + show lun_talk eyes_base_down arms_grab_chest as cg with d3 + lun "*Hmm*... I'm all sticky now..." + + gen "*Ngh*!!" + + show lun_talk eyebrows_surprised eyes_base_stare mouth_soft as cg with d3 + lun "[name_genie_luna], are you alright?" + gen "Yes... I'm--{w=0.2} *Ah*...{w=0.4} Great..." + gen "But you should probably stop pushing your breasts together... Or we may have to go again..." + + show lun_talk eyes_base_down mouth_pout as cg with d3 + lun "*Hmm*...{w=0.4}{nw}" + show lun_talk arm_left_rest mouth_base as cg + lun "*Hmm*...{fast} Alright then...{w=0.4} If you say so..." + + show lun_talk -arms_grab_chest arm_right_rest arm_left_rest mouth_base as cg with d3 + + show screen blkfade + with d5 + + hide luna_main + + lun "" ("smile", "base", "base", "mid") + $ luna.set_cum(face="light") + $ luna.set_cum(pussy="squirt_post") + + nar "Luna swiftly attempts a backwards roll to get off your desk..." + nar "As she does, she accidentally slides off the edge, which causes her to tumble and land on the tiled floor with a soft slapping sound." + nar "As you peer over the edge, you're met with a shocked and bewildered looking Luna." + nar "She looks up at you, and you can't help but chuckle a little at how silly she looks, down on the floor and still covered in cum." + nar "Giggling back at you, Luna wipes the cum off her body, and then gets up onto her feet." + + call lun_chibi("stand", "desk", "base") + + hide cg + hide screen blkfade + with d5 + + lun "*Giggles*..." ("smile", "narrow", "base", "mid") + gen "*Ahem*... I believe you've still got something on your face..." ("base", xpos="far_left", ypos="head") + lun "I do?" ("soft", "base", "base", "down") + + if not states.lun.ev.ll_pf_blowjob_T4_E1_intro_complete: + gen "Yes, and you should probably clean it up before you leave..." ("base", xpos="far_left", ypos="head") + lun "Oh...{w=0.4} Okay then!" ("base", "base", "base", "mid") + play sound "sounds/cloth_sound3.ogg" + $ luna.set_cum(face=None) + with d3 + else: + lun "Oh! I've still got some of your cum on my chin!" ("grin", "base", "base", "down") + lun "Very impressive, [name_genie_luna]! If you're releasing them at such a velocity... Surely that means we must be doing something right!" ("smile", "narrow", "base", "mid") + gen "Surely." ("base", xpos="far_left", ypos="head") + lun "..." ("grin", "base", "base", "mid") + gen "So...{w=0.4} Are you going to wipe your chin, or what?" ("base", xpos="far_left", ypos="head") + lun "Oh, right... Duh!" ("grin", "narrow", "raised", "down") + play sound "sounds/cloth_sound3.ogg" + $ luna.set_cum(face=None) + with d3 + + if states.lun.ev.ll_pf_blowjob_T4_E2_intro_complete: + lun "Sorry, [name_genie_luna]... I know I should've tried to swallow them..." ("open", "base", "base", "down") + gen "Don't worry about that..." ("base", xpos="far_left", ypos="head") + + lun "Are you feeling better, [name_genie_luna]?" ("soft", "base", "base", "mid") + gen "*Huh*? Oh yes, very much so!" ("base", xpos="far_left", ypos="head") + lun "Great! I am as well!" ("grin", "narrow", "base", "mid") + lun "Of course... It's not really the same as when you're the one touching me..." ("base", "narrow", "base", "down") + gen "..." ("grin", xpos="far_left", ypos="head") + + if _wearing_clothes: + $ luna.set_cum(None) + $ renpy.sound.play("sounds/cloth_sound3.ogg") + $ luna.wear("all") + with d3 + pause .5 + + lun "Well then, I better be off!" ("base", "base", "base", "mid") + gen "Right." ("base", xpos="far_left", ypos="head") + lun "Please, don't hesitate to inform me whenever you need my help again." ("grin", "base", "base", "mid") + gen "Already thinking about next time, [name_luna_genie]? We just finished!" ("base", xpos="far_left", ypos="head") + lun @ cheeks blush "Oh...{w=0.4} *Ehm*...{w=0.4} Bye then!" ("grin", "base", "base", "R") + + #Luna leaves + call lun_walk(action="leave") + + gen "(And here I thought genies had strong libidos...)" ("base", xpos="far_left", ypos="head") + + $ _wearing_clothes = False #reset + $ luna.set_cum(None) + + jump ll_pf_talk_end diff --git a/game/scripts/characters/luna/events/intro.rpy b/game/scripts/characters/luna/events/intro.rpy index 2bd5f951..0838dec1 100644 --- a/game/scripts/characters/luna/events/intro.rpy +++ b/game/scripts/characters/luna/events/intro.rpy @@ -71,24 +71,21 @@ label luna_intro_E1: $ luna.set_face(mouth="soft", eyes="closed", eyebrows="low", pupils="mid") show CG luna as cg zorder 17: - align (0.5, 0.5) - pos (-520, -300) + xycenter (-520, -300) with fade gen "Who is--" show CG luna as cg zorder 17: - align (0.5, 0.5) - pos (-520, -300) + subpixel True easein_quad 5.0 pos (-520, 150) gen "... A girl?" lun "*Mmh*" show CG luna as cg zorder 17: + subpixel True zoom 1.0 - align (0.5, 0.5) - pos (-520, 150) - easein_quad 3.0 align (0.0, 0.0) pos (0, 0) zoom 0.5 + easein_quad 3.0 anchor (.0, .0) pos (0, 0) zoom 0.5 # use align (0, 0) in next renpy version gen "What are you doing in my office?" gen "Did Snape send you here? Surely--" @@ -127,7 +124,7 @@ label luna_intro_E1: "-Oral examination-": $ d_flag_01 = True gen "So... What's your name?" ("base", xpos="far_left", ypos="head") - lun "...{w=0.8}Wrackspurts..." ("open", "closed", "low", "mid") + lun "...{w=0.8} Wrackspurts..." ("open", "closed", "low", "mid") gen "Charming..." ("base", xpos="far_left", ypos="head") gen "(I suppose that is a plausible name in this world...)" ("base", xpos="far_left", ypos="head") $ name_luna_genie = "Miss Backspurts?" @@ -137,7 +134,7 @@ label luna_intro_E1: $ mouse_slap() lun "No!" ("angry", "happyCl", "low", "mid") gen "..." ("angry", xpos="far_left", ypos="head") - lun "The Nargles..." ("open", "happyCl", "low", "mid") + lun "The nargles..." ("open", "happyCl", "low", "mid") gen "The what now?" ("base", xpos="far_left", ypos="head") lun "*Inaudible mumbling*..." ("upset", "closed", "low", "mid") gen "*Hmm*..." ("base", xpos="far_left", ypos="head") @@ -493,7 +490,7 @@ label luna_intro_E2: #Luna knocks on door stop music fadeout 1.0 play sound "sounds/knocking.ogg" - "*knock-knock-knock*" + "*Knock-knock-knock*" gen "Who is it?" ("base", xpos="far_left", ypos="head") lun "Luna." @@ -551,7 +548,7 @@ label luna_intro_E2: lun "*Hmm*..." ("soft", "narrow", "raised", "downL") if states.gen.masturbating: - nar "*fap-fap-fap*!" + nar "*Fap-fap-fap*!" gen "(Look at the tits on this girl, such a lovely profile!)" ("angry", xpos="far_left", ypos="head") gen "(And that lush blonde hair! I'd love to wrap it around my dick!)" ("grin", xpos="far_left", ypos="head") else: @@ -570,7 +567,7 @@ label luna_intro_E2: if states.gen.masturbating: gen "(Whatever. As long as I can beat my meat in peace.)" ("grin", xpos="far_left", ypos="head") - nar "*fap-fap-fap*" + nar "*Fap-fap-fap*" call lun_walk("desk", "base") pause 0.25 @@ -602,7 +599,7 @@ label luna_intro_E2: lun "There's such a strange aura in here..." gen "(Yes! It's the aura of me going crazy for you, you fucking slut!)" - nar "{size=+3}*{b}fap{/b}-fap-{b}fap{/b}*{/size}" + nar "{size=+3}*{b}Fap{/b}-fap-{b}fap{/b}*{/size}" else: lun "There's such a strange aura in here..." lun "It's like a big hollow tree..." @@ -647,7 +644,7 @@ label luna_intro_E2: gen "There's more where that came from." ("grin", xpos="far_left", ypos="head") lun "So you can see {i}them{/i} too, Professor?" ("angry", "wide", "base", "mid") gen "See what?" ("base", xpos="far_left", ypos="head") - lun "*sigh* Just as expected." ("upset", "narrow", "base", "down") + lun "*Sigh* Just as expected." ("upset", "narrow", "base", "down") lun "You could see them if you had one of these." ("grin", "base", "base", "mid") else: gen "I can't see anything." ("base", xpos="far_left", ypos="head") @@ -694,7 +691,7 @@ label luna_intro_E2: gen "What are you seeing in this room exactly?" ("base", xpos="far_left", ypos="head") lun "Wrackspurts, sir, and lots of them too!" ("soft", "narrow", "base", "mid") gen "Brackspurts?" ("base", xpos="far_left", ypos="head") - lun "Wrackspurt sir..." ("open", "base", "base", "L") + lun "Wrackspurts, sir..." ("open", "base", "base", "L") gen "I see...{w=0.2} *Err*, I mean I don't." ("base", xpos="far_left", ypos="head") gen "(Is she making all this shit up, or am I supposed to know about these things?)" ("base", xpos="far_left", ypos="head") gen "Well, I can't say I've ever come across these whackspurs you speak of." ("base", xpos="far_left", ypos="head") @@ -706,8 +703,7 @@ label luna_intro_E2: gen "Now I must say that's quite bold for a student to just waltz into their headmasters office and shill their--" ("base", xpos="far_left", ypos="head") lun "Oh... No sir!" ("mad", "narrow", "base", "downL") lun "I'm just worried that we might have an infestation on our hands and--" ("angry", "closed", "base", "mid") - lun "..." ("angry", "narrow", "base", "down") - #Luna eyes down + lun "..." ("angry", "narrow", "base", "down") #Luna looks down pause .5 nar "Luna gives you an uncomfortable look and then turns her gaze to the floor." gen "An infestation?" ("base", xpos="far_left", ypos="head") diff --git a/game/scripts/characters/luna/events/spectrespecs/fx.rpy b/game/scripts/characters/luna/events/spectrespecs/fx.rpy index dad51c8f..18e87832 100644 --- a/game/scripts/characters/luna/events/spectrespecs/fx.rpy +++ b/game/scripts/characters/luna/events/spectrespecs/fx.rpy @@ -60,7 +60,7 @@ screen spectrevision(): tag spectrevision for i in range(wrackspurts_count): - add "object" at OBJwrackspurt + add OBJwrackspurt add "spectrevision" diff --git a/game/scripts/characters/luna/events/spectrespecs/spectrespecs.rpy b/game/scripts/characters/luna/events/spectrespecs/spectrespecs.rpy index 997a3820..14d901bd 100644 --- a/game/scripts/characters/luna/events/spectrespecs/spectrespecs.rpy +++ b/game/scripts/characters/luna/events/spectrespecs/spectrespecs.rpy @@ -206,7 +206,7 @@ label spectrespecs_E4: gen "(What the--)" ("angry", xpos="far_left", ypos="head") gen "What are you doing, Miss Lovegood?" ("base", xpos="far_left", ypos="head") - lun @ cheeks blush "It's the Wrackspurts, sir..." ("clench", "narrow", "base", "down") + lun @ cheeks blush "It's the wrackspurts, sir..." ("clench", "narrow", "base", "down") gen "What?" ("base", xpos="far_left", ypos="head") lun @ cheeks blush "They've been bothering me for months..." ("mad", "narrow", "base", "down") diff --git a/game/scripts/characters/luna/favors.rpy b/game/scripts/characters/luna/favors.rpy index 9c61d9d9..eae43ef5 100644 --- a/game/scripts/characters/luna/favors.rpy +++ b/game/scripts/characters/luna/favors.rpy @@ -1,24 +1,36 @@ - +default lun_eventqueue_talk_to_me = EventQueue("lun_eventqueue_talk_to_me") default lun_ev_talk_to_me_t1_e1 = Event(id="lun_ev_talk_to_me_t1_e1", label="ll_pf_talk_T1_E1_intro", req="states.lun.tier == 1", queue="lun_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) default lun_ev_talk_to_me_t1_e2 = Event(id="lun_ev_talk_to_me_t1_e2", label="ll_pf_talk_T1_E2_intro", req="states.lun.tier == 1", queue="lun_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) default lun_ev_talk_to_me_t1_e3 = Event(id="lun_ev_talk_to_me_t1_e3", label="ll_pf_talk_T1_E3_intro", req="states.lun.tier == 1", queue="lun_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False, repeat=False) default lun_ev_talk_to_me_t1_e4 = Event(id="lun_ev_talk_to_me_t1_e4", label="ll_pf_talk_T1_E4_repeat", req="states.lun.tier == 1", queue="lun_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False) default lun_ev_talk_to_me_t2_e1 = Event(id="lun_ev_talk_to_me_t2_e1", label="ll_pf_talk_T2_E1_repeat", req="states.lun.tier == 2", queue="lun_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False) -default lun_ev_talk_to_me_t3_e1 = Event(id="lun_ev_talk_to_me_t3_e1", label="ll_pf_talk_T3_E1_repeat", req="states.lun.tier >= 3", queue="lun_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False) +default lun_ev_talk_to_me_t3_e1 = Event(id="lun_ev_talk_to_me_t3_e1", label="ll_pf_talk_T3_E1_repeat", req="states.lun.tier == 3", queue="lun_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False) +default lun_ev_talk_to_me_t4_e1 = Event(id="lun_ev_talk_to_me_t4_e1", label="ll_pf_talk_T4_E1_repeat", req="states.lun.tier >= 4", queue="lun_eventqueue_talk_to_me", autoenqueue=True, autodequeue=False) +default lun_eventqueue_inspect_her_body = EventQueue("lun_eventqueue_inspect_her_body") default lun_ev_inspect_her_body_t2_e1 = Event(id="lun_ev_inspect_her_body_t2_e1", label="ll_pf_inspect_T2_E1_intro", req="states.lun.tier == 2", queue="lun_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False) default lun_ev_inspect_her_body_t2_e2 = Event(id="lun_ev_inspect_her_body_t2_e2", label="ll_pf_inspect_T2_E2_intro", req="states.lun.tier == 2", queue="lun_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False) default lun_ev_inspect_her_body_t2_e3 = Event(id="lun_ev_inspect_her_body_t2_e3", label="ll_pf_inspect_T2_E3_intro", req="states.lun.tier == 2", queue="lun_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False, repeat=False) default lun_ev_inspect_her_body_t2_e4 = Event(id="lun_ev_inspect_her_body_t2_e4", label="ll_pf_inspect_T2_E4_repeat", req="states.lun.tier == 2", queue="lun_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False) -default lun_ev_inspect_her_body_t3_e1 = Event(id="lun_ev_inspect_her_body_t3_e1", label="ll_pf_inspect_T3_E1_repeat", req="states.lun.tier >= 3", queue="lun_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False) +default lun_ev_inspect_her_body_t3_e1 = Event(id="lun_ev_inspect_her_body_t3_e1", label="ll_pf_inspect_T3_E1_repeat", req="states.lun.tier == 3", queue="lun_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False) +default lun_ev_inspect_her_body_t4_e1 = Event(id="lun_ev_inspect_her_body_t4_e1", label="ll_pf_inspect_T4_E1_repeat", req="states.lun.tier >= 4", queue="lun_eventqueue_inspect_her_body", autoenqueue=True, autodequeue=False) -default lun_ev_play_with_yourself_t3_e1 = Event(id="lun_ev_play_with_yourself_t3_e1", label="ll_pf_masturbate_T3_E1_intro", req="states.lun.tier >= 3", queue="lun_eventqueue_play_with_yourself", autoenqueue=True, autodequeue=False, repeat=False) -default lun_ev_play_with_yourself_t3_e2 = Event(id="lun_ev_play_with_yourself_t3_e2", label="ll_pf_masturbate_T3_E2_intro", req="states.lun.tier >= 3", queue="lun_eventqueue_play_with_yourself", autoenqueue=True, autodequeue=False, repeat=False) -default lun_ev_play_with_yourself_t3_e3 = Event(id="lun_ev_play_with_yourself_t3_e3", label="ll_pf_masturbate_T3_E3_intro", req="states.lun.tier >= 3", queue="lun_eventqueue_play_with_yourself", autoenqueue=True, autodequeue=False, repeat=False) -default lun_ev_play_with_yourself_t3_e4 = Event(id="lun_ev_play_with_yourself_t3_e4", label="ll_pf_masturbate_T3_E4_repeat", req="states.lun.tier >= 3", queue="lun_eventqueue_play_with_yourself", autoenqueue=True, autodequeue=False) +default lun_eventqueue_play_with_yourself = EventQueue("lun_eventqueue_play_with_yourself") +default lun_ev_play_with_yourself_t3_e1 = Event(id="lun_ev_play_with_yourself_t3_e1", label="ll_pf_masturbate_T3_E1_intro", req="states.lun.tier == 3", queue="lun_eventqueue_play_with_yourself", autoenqueue=True, autodequeue=False, repeat=False) +default lun_ev_play_with_yourself_t3_e2 = Event(id="lun_ev_play_with_yourself_t3_e2", label="ll_pf_masturbate_T3_E2_intro", req="states.lun.tier == 3", queue="lun_eventqueue_play_with_yourself", autoenqueue=True, autodequeue=False, repeat=False) +default lun_ev_play_with_yourself_t3_e3 = Event(id="lun_ev_play_with_yourself_t3_e3", label="ll_pf_masturbate_T3_E3_intro", req="states.lun.tier == 3", queue="lun_eventqueue_play_with_yourself", autoenqueue=True, autodequeue=False, repeat=False) +default lun_ev_play_with_yourself_t3_e4 = Event(id="lun_ev_play_with_yourself_t3_e4", label="ll_pf_masturbate_T3_E4_repeat", req="states.lun.tier == 3", queue="lun_eventqueue_play_with_yourself", autoenqueue=True, autodequeue=False) +default lun_ev_play_with_yourself_t4_e1 = Event(id="lun_ev_play_with_yourself_t4_e1", label="ll_pf_masturbate_T4_E1_repeat", req="states.lun.tier >= 4", queue="lun_eventqueue_play_with_yourself", autoenqueue=True, autodequeue=False) + +default lun_eventqueue_blowjob = EventQueue("lun_eventqueue_blowjob") +default lun_ev_blowjob_t4_e1 = Event(id="lun_ev_blowjob_t4_e1", label="ll_pf_blowjob_T4_E1_intro", req="states.lun.tier >= 4", queue="lun_eventqueue_blowjob", autoenqueue=True, autodequeue=False, repeat=False) +default lun_ev_blowjob_t4_e2 = Event(id="lun_ev_blowjob_t4_e2", label="ll_pf_blowjob_T4_E2_intro", req="states.lun.tier >= 4", queue="lun_eventqueue_blowjob", autoenqueue=True, autodequeue=False, repeat=False) +default lun_ev_blowjob_t4_e3 = Event(id="lun_ev_blowjob_t4_e3", label="ll_pf_blowjob_T4_E3_intro", req="states.lun.tier >= 4", queue="lun_eventqueue_blowjob", autoenqueue=True, autodequeue=False, repeat=False) +default lun_ev_blowjob_t4_e4 = Event(id="lun_ev_blowjob_t4_e4", label="ll_pf_blowjob_T4_E4_repeat", req="states.lun.tier >= 4", queue="lun_eventqueue_blowjob", autoenqueue=True, autodequeue=False) define luna_favors = [ ("lun_eventqueue_talk_to_me", "Talk to me!"), ("lun_eventqueue_inspect_her_body", "Let me inspect you!"), ("lun_eventqueue_play_with_yourself", "Play with yourself!"), -] \ No newline at end of file + ("lun_eventqueue_blowjob", "Suck it!"), +] diff --git a/game/scripts/characters/luna/gifts.rpy b/game/scripts/characters/luna/gifts.rpy index bc316cee..eb5fff2a 100644 --- a/game/scripts/characters/luna/gifts.rpy +++ b/game/scripts/characters/luna/gifts.rpy @@ -8,100 +8,189 @@ label give_lun_gift(gift_item): $ states.lun.gifted = True if gift_item == lollipop_ITEM: - lun "A lollipop?" + lun "A lollipop?" ("open", "base", "base", "down") call give_gift("You give the lollipop to Luna...", gift_item) - lun "My father always believed that you should always have something sugary around in case any baby unicorns come to visit." - lun "Thank you, [name_genie_luna]." + lun "My father says that you should always have something sugary around in case a baby unicorn comes to visit." ("grin", "base", "base", "mid") + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") elif gift_item == chocolate_ITEM: - lun "Chocolate?" + lun "Chocolate?" ("grin", "base", "base", "down") call give_gift("You give the chocolate to Luna...", gift_item) - lun "*Aaah*, I heard these helps with dementia... Or was it Dementors?" + lun "I heard that eating chocolate helps with dementia...{w=0.4} Or was it dementors?" ("soft", "narrow", "base", "mid") elif gift_item == plush_owl_ITEM: - lun "A plush owl?" - call give_gift("You give the owl plushie to Luna...", gift_item) - lun "I love owls... Always had a few around me growing up, delivering the newspaper my father publishes." + lun "A plush owl?" ("open", "base", "base", "down") + call give_gift("You give the stuffed owl to Luna...", gift_item) + lun "I love owls... Growing up, there were always a few of them around, delivering my father's newspaper." ("grin", "base", "base", "mid") elif gift_item == butterbeer_ITEM: - lun "Butterbeer?" + lun "Butterbeer?" ("open", "base", "base", "mid") + lun "I could use the cork for another necklace!" ("grin", "base", "base", "mid") call give_gift("You give the bottle to Luna...", gift_item) - lun "How did you know? I didn't wear my cork necklace today." - lun "Thank you, [name_genie_luna]." + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") elif gift_item == science_mag_ITEM: - lun "Magical creatures weekly?" - call give_gift("You give an assortment of educational magazines to Luna...", gift_item) - lun "Thestrals and their link with death..." - lun "Interesting..." + lun "Magical creatures weekly?" ("open", "narrow", "base", "down") + lun "My daddy says that this publication refuses to recognize the existence of the Crumple-horned Snorkack..." ("annoyed", "narrow", "annoyed", "mid") + lun "Sorry [name_genie_luna], but I'll have to refuse." ("open", "closed", "base", "mid") elif gift_item == girls_mag_ITEM: - call give_gift("You give the girls magazine to Luna...",gift_item) - #Add text + lun "Girlz weekly?" ("soft", "base", "raised", "down") + lun "This must be one of those magazines my daddy warned me about!" ("angry", "base", "base", "down") + lun "[name_genie_luna]!" ("angry", "base", "base", "mid") + lun "They're corporate shills who prioritize selling their own products over advocating for the use of essential oils!" ("angry", "base", "base", "mid") + lun "That's what my daddy told me, anyway." ("grin", "closed", "base", "mid") elif gift_item == adult_mag_ITEM: - call give_gift("You give the adult magazine to Luna...",gift_item) - #Add text + lun "This isn't \"The Quibbler\"..." ("open", "base", "worried", "down") + lun "[name_genie_luna], you shouldn't be helping my daddy's competition!" ("angry", "base", "worried", "mid") + lun "Please, issue a refund!" ("open", "base", "worried", "mid") elif gift_item == porn_mag_ITEM: - call give_gift("You give the porn magazine to Luna...",gift_item) - #Add text + lun "This isn't \"The Quibbler\"..." ("annoyed", "base", "base", "down") + lun "[name_genie_luna], you shouldn't be helping my daddy's competition!" ("angry", "base", "annoyed", "mid") + lun "Please, issue a refund!" ("angry", "base", "base", "mid") elif gift_item == krum_poster_ITEM: - call give_gift("You give the poster to Luna...",gift_item) - #Add text + lun "Viktor Krum..." ("soft", "base", "raised", "down") + lun "Who is that, again?" ("open", "base", "raised", "mid") + lun "I'm uncertain if it's such a good idea to put this up on my wall, just in case the other girls ask me about it." ("upset", "base", "base", "down") + lun "I appreciate the thought though, [name_genie_luna]." ("base", "base", "base", "mid") elif gift_item == sexy_lingerie_ITEM: + lun "I've seen a couple of the other girls wearing these!" ("soft", "base", "base", "down") call give_gift("You give the lingerie to Luna...",gift_item) - #Add text + lun "Thank you, [name_genie_luna]!" ("base", "base", "base", "mid") elif gift_item == sexy_stockings_ITEM : + lun "Very unique! I like it!" ("grin", "base", "base", "down") call give_gift("You give the stockings to Luna...",gift_item) - #Add text + lun "Thank you, [name_genie_luna]!" ("base", "base", "base", "mid") elif gift_item == pink_condoms_ITEM: + lun "Condoms?!" ("mad", "wide", "base", "mid") + lun "... I never knew they sold those rubbery creatures." ("angry", "base", "base", "stare") + lun "Yes, we shall study them thoroughly!" ("base", "base", "base", "mid") call give_gift("You give the condoms to Luna...",gift_item) - #Add text + lun "Thank you [name_genie_luna]." ("grin", "base", "base", "mid") elif gift_item == vibrator_ITEM: + lun "A back-massager!" ("grin", "base", "base", "down") call give_gift("You give the vibrator to Luna...",gift_item) - #Add text + lun "Thank you, [name_genie_luna]!" ("grin", "base", "base", "mid") elif gift_item == anal_lube_ITEM: + lun "Lube?" ("soft", "base", "raised", "down") + lun "Will this help me get rid of the wrackspurts?" ("open", "base", "raised", "mid") call give_gift("You give the anal lube to Luna...",gift_item) - #Add text + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") elif gift_item == ballgag_and_cuffs_ITEM: + lun "What is this?" ("soft", "base", "raised", "down") + lun "Does this go in your mouth?" ("open", "base", "raised", "down") + lun "But, [name_genie_luna]... How am I supposed to talk if I wear this?" ("annoyed", "narrow", "base", "mid") call give_gift("You give the handcuffs to Luna...",gift_item) - #Add text + lun "Thank you, I suppose..." ("soft", "base", "base", "downR") elif gift_item == anal_plugs_ITEM: - call give_gift("You give the anal plugs to Luna...",gift_item) - #Add text + if states.lun.tier <= 1: + lun "Anal... plugs?" ("soft", "narrow", "raised", "down") + lun "I don't understand..." ("annoyed", "base", "base", "mid") + elif states.lun.tier == 2: + lun "Anal plugs..." ("soft", "base", "base", "down") + lun "Are these supposed to help with the wrackspurts?" ("open", "base", "annoyed", "mid") + call give_gift("You give the anal plugs to Luna...",gift_item) + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") + elif states.lun.tier == 3: + lun "Anal plugs..." ("open", "base", "base", "down") + lun "Yes, I should probably use one of these to assist with redirecting the wrackspurts to a single area..." ("grin", "base", "base", "down") + call give_gift("You give the anal plugs to Luna...",gift_item) + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") + else: + lun "*Mmm*... Anal plugs... I bet these will feel good..." ("grin", "narrow", "base", "down") + lun "I mean, I bet these will help me deal with the wrackspurts!" ("angry", "base", "base", "mid") + call give_gift("You give the anal plugs to Luna...",gift_item) + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") elif gift_item == testral_strapon_ITEM: - call give_gift("You give the strap-on to Luna...",gift_item) - #Add text + if states.lun.tier <= 1: + lun "A unicorn horn!" ("smile", "wide", "base", "down") + call give_gift("You give the strap-on to Luna...",gift_item) + lun "I love it!" ("grin", "wide", "base", "mid") + elif states.lun.tier == 2: + lun "This is some sort of phallus, isn't it?" ("soft", "base", "base", "down") + lun "Very peculiar..." ("soft", "base", "base", "down") + lun "I shall study it for our research." ("open", "closed", "base", "mid") + call give_gift("You give the strap-on to Luna...",gift_item) + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") + elif states.lun.tier == 3: + lun "A penis!" ("grin", "base", "base", "down") + lun "But, what are the straps for?" ("open", "base", "base", "down") + lun "*Hmm*... I'll have to study it..." ("soft", "base", "base", "down") + call give_gift("You give the strap-on to Luna...",gift_item) + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") + elif states.lun.tier == 4: + lun "So, if I wore this... I'll have my own penis?" ("open", "base", "base", "down") + lun "But, [name_genie_luna], I don't think I'll be able to funnel the wrackspurts through this..." ("angry", "base", "base", "mid") + lun "There's no hole!" ("angry", "narrow", "base", "mid") + else: + lun "*Hmm*... You're supposed to put your legs through these holes, right?" ("open", "base", "base", "down") + lun "But [name_genie_luna], this would cover up my lady parts!" ("angry", "base", "base", "mid") + lun "Wait...{w=0.4} You're testing me! Did I pass?" ("angry", "narrow", "base", "mid") elif gift_item == broom_2000_ITEM: - call give_gift("You give the broom to Luna...",gift_item) - #Add text + if states.lun.tier <= 1: + lun "A broom?" ("open", "base", "raised", "down") + lun "Hold on, there's an attachment on this seat..." ("angry", "base", "low", "down") + lun "Oh, it's an art piece!" ("grin", "base", "base", "down") + call give_gift("You give the broom to Luna...",gift_item) + lun "Thank you, [name_genie_luna]!" ("base", "base", "base", "mid") + elif states.lun.tier == 2: + lun "A broom, with an attached penis?" ("open", "base", "raised", "down") + lun "Oh! You want me to study it, even when I'm flying?" ("grin", "base", "base", "mid") + lun "Wait... That can't be it..." ("angry", "base", "base", "mid") + call give_gift("You give the broom to Luna...",gift_item) + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") + elif states.lun.tier == 3: + lun "A broom with a penis attached to it?" ("soft", "base", "base", "down") + lun "I never knew brooms could grow penises..." ("soft", "base", "raised", "mid") + lun "You learn something new every day..." ("grin", "base", "base", "mid") + call give_gift("You give the broom to Luna...",gift_item) + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") + elif states.lun.tier == 4: + lun "A broom with a penis on it... Or is that two penises?" ("soft", "base", "raised", "down") + lun "How very strange..." ("open", "narrow", "base", "down") + lun "I shall study it." ("base", "base", "base", "mid") + call give_gift("You give the broom to Luna...",gift_item) + lun "Thank you, [name_genie_luna]." ("grin", "base", "base", "mid") + else: + lun "A penis broom?" ("soft", "base", "raised", "down") + lun "Or is it a broom penis, perhaps?" ("open", "narrow", "base", "down") + lun "Very interesting..." ("base", "base", "base", "mid") + call give_gift("You give the broom to Luna...",gift_item) + lun "Thank you, [name_genie_luna]." ("grin", "base", "base", "mid") elif gift_item == sexdoll_ITEM: + lun "A doll?" ("open", "base", "base", "down") + lun "It says Joanne on it." ("soft", "narrow", "raised", "down") + lun "Well, hello there Joanne." ("grin", "base", "base", "down") call give_gift("You give the doll to Luna...",gift_item) - #Add text + lun "I'm sure we're going to be great friends..." ("smile", "base", "base", "down") elif gift_item == anal_beads_ITEM: + lun "Such a lovely necklace!" ("grin", "narrow", "base", "down") call give_gift("You give the anal beads to Luna...",gift_item) - #Add text + lun "Thank you, [name_genie_luna]." ("grin", "base", "base", "mid") elif gift_item == wine_ITEM: + lun "Wine... How lovely!" ("grin", "base", "base", "down") call give_gift("You give the wine to Luna...", gift_item) - #Add text + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") elif gift_item == firewhisky_ITEM: + lun "Firewhisky... How lovely!" ("grin", "base", "base", "down") call give_gift("You give the firewhisky to Luna...", gift_item) - #Add text + lun "Thank you, [name_genie_luna]." ("base", "base", "base", "mid") lun "" (xpos="base",ypos="base") hide luna_main diff --git a/game/scripts/characters/luna/summon.rpy b/game/scripts/characters/luna/summon.rpy index 5229db0a..65384442 100644 --- a/game/scripts/characters/luna/summon.rpy +++ b/game/scripts/characters/luna/summon.rpy @@ -22,8 +22,6 @@ label summon_luna: label luna_requests: - # Reset - call reset_menu_position lun "" (xpos="base",ypos="base") menu: @@ -55,14 +53,11 @@ label summon_luna: nar "You haven't unlocked this feature yet." jump luna_requests - "-Give Item-" (icon="interface/icons/small/gift.webp"): - $ TBA_message() + "-Give Item-" (icon="interface/icons/small/gift.webp") if states.lun.favors_unlocked: + hide luna_main with d1 + call gift_menu jump luna_requests - # hide luna_main with d1 - # call gift_menu - # jump luna_requests - # Dismiss "-Dismiss her-": stop music fadeout 3.0 @@ -100,6 +95,7 @@ label update_lun_tier: # T5 NOT AVAILABLE return + # unreachable # Requirement: Tier 4 - Blow me T4 E3 $ lun_level_up = 4 return @@ -130,7 +126,7 @@ label luna_level_up(tier=None): # Luna Favor Menu label luna_favor_menu: menu: - "-Level Up-" (icon="interface/icons/small/levelup.webp") if lun_level_up != None: + "-Level Up-" (icon="interface/icons/small/levelup.webp") if lun_level_up is not None: call luna_level_up(tier=lun_level_up) jump luna_favor_menu @@ -153,7 +149,7 @@ label luna_favor_menu: label .requests: call not_available - + # $ result = show_events_menu(hermione_requests) # if result in ("disabled", "noncompliant"): @@ -189,6 +185,8 @@ label luna_talk: $ name_genie_luna = "Master" "-Daddy-" if states.lun.tier >= 2: $ name_genie_luna = "Daddy" + "-Genie-" if states.lun.ev.gen_genie_nickname_unlocked: + $ name_genie_luna = "Genie" "-Custom Input-" if states.lun.tier >= 3: $ name_genie_luna = renpy.input("(Please enter the name.)", name_genie_luna, ALLOWED_CHARACTERS, length=14).strip() or "Professor" "-Never mind-": @@ -212,7 +210,7 @@ label luna_talk: $ name_luna_genie = "Bimbo" "-Minx-" if states.lun.tier >= 3: $ name_luna_genie = "Minx" - "-Cumslut-" if states.lun.tier >= 5: + "-Cumslut-" if states.lun.ev.lun_cumslut_nickname_unlocked: $ name_luna_genie = "Cumslut" "-Custom Input-" if states.lun.tier >= 3: $ name_luna_genie = renpy.input("(Please enter the name.)", name_luna_genie, ALLOWED_CHARACTERS, length=14).strip() or "Miss Lovegood" @@ -270,7 +268,14 @@ label genie_luna_change: gen "I'm your daddy now..." ("base", xpos="far_left", ypos="head") lun "*Huh*?" ("angry", "base", "base", "mid") gen "Call me daddy you naughty girl!" ("angry", xpos="far_left", ypos="head") - lun "Oh...{w=0.3} Yes, I'm sorry [name_genie_luna]!" ("angry", "happyCl", "base", "mid") + lun "Oh...{w=0.4} Yes, I'm sorry [name_genie_luna]!" ("angry", "happyCl", "base", "mid") + elif name_genie_luna == "Genie": + lun "[name_genie_luna]..." ("open", "narrow", "base", "mid") + lun "Wouldn't it be a bit weird if I called you that?" ("annoyed", "base", "base", "mid") + gen "Why would it?" ("base", xpos="far_left", ypos="head") + lun "Wouldn't me calling you \"genie\" be the same as you calling me \"human\"?" ("soft", "narrow", "base", "mid") + gen "Genie's my name..." ("base", xpos="far_left", ypos="head") + lun "Oh...{w=0.4} How convenient!" ("soft", "base", "base", "stare") else: #custom/fallback lun "Okay, I'll call you [name_genie_luna] from now on..." ("base", "base", "base", "mid") jump luna_talk diff --git a/game/scripts/characters/luna/vars.rpy b/game/scripts/characters/luna/vars.rpy index ab350cf1..236054e9 100644 --- a/game/scripts/characters/luna/vars.rpy +++ b/game/scripts/characters/luna/vars.rpy @@ -24,8 +24,9 @@ default states.lun.status.show_panties = False default states.lun.status.show_pussy = False default states.lun.status.stripping = False default states.lun.status.masturbating = False -#default states.lun.status.blowjob = False -#default states.lun.status.gokkun = False +default states.lun.status.blowjob = False +default states.lun.status.cumshot = False +default states.lun.status.gokkun = False #default states.lun.status.sex = False #default states.lun.status.creampie = False #default states.lun.status.anal = False @@ -43,6 +44,11 @@ default states.lun.ev.quibbler.stocked = False default states.lun.ev.talk_to_me.t1_e3_complete = False default states.lun.ev.inspect_her_body.t2_e3_complete = False default states.lun.ev.play_with_yourself.t3_e3_complete = False +default states.lun.ev.gen_genie_nickname_unlocked = False +default states.lun.ev.lun_cumslut_nickname_unlocked = False +default states.lun.ev.ll_pf_blowjob_T4_E1_intro_complete = False +default states.lun.ev.ll_pf_blowjob_T4_E2_intro_complete = False +default states.lun.ev.ll_pf_talk_T4_E1_repeat_complete = False # Flags default lun_level_up = None @@ -50,3 +56,4 @@ default lun_level_up = None # Names default name_genie_luna = "Professor" default name_luna_genie = "Miss Lovegood" +default name_geniepenis_luna = "Penis" diff --git a/game/scripts/characters/luna/wardrobe.rpy b/game/scripts/characters/luna/wardrobe.rpy index f548cd93..8b8172dd 100644 --- a/game/scripts/characters/luna/wardrobe.rpy +++ b/game/scripts/characters/luna/wardrobe.rpy @@ -18,7 +18,7 @@ default lun_hair_base = DollCloth("luna", ("head", "hair"), "hair", "base", ["#e ####################### default lun_hair_wand = DollCloth("luna", ("head", "hair"), "hair", "wand", ["#ede0c3ff", "#bfa46bff", "#309087ff"], unlocked=True) -default lun_glasses_hearts = DollCloth("luna", ("head", "glasses"), "glasses", "sunglasses_2", ["#f078ffff", "#009effff"], unlocked=True) +default lun_glasses_hearts = DollCloth("luna", ("head", "glasses"), "glasses", "sunglasses_2", ["#6799C999", "#F395A9FF"], unlocked=True) default lun_glasses_spectrespecs = DollCloth("luna", ("head", "glasses"), "glasses", "spectrespecs", ["#e36682ff", "#3d6e8cff"], unlocked=True) default lun_accessory_pin_radish = DollCloth("luna", ("misc", "accessory"), "accessory", "pin_radish", ["#b61710ff", "#e8bebcff"], zorder=213, unlocked=True) default lun_accessory_hair_bug = DollCloth("luna", ("misc", "accessory"), "accessory", "hair_bug", ["#ffffffff"], unlocked = True, zorder=252) @@ -110,7 +110,7 @@ default lun_outfit_flight_attendant = DollOutfit([lun_hair_base, lun_top_flight_ ################### default lun_top_muggle_top = DollCloth("luna", ("upper body", "shirts"), "top", "muggle_top", ["#7f6d8cff", "#e783baff"]) -default lun_robe_muggle_jacket = DollCloth("luna", ("upper body", "robes"), "robe", "muggle_jacket", ["#f7bec4ff", "#863c4aff"], level=4) +default lun_robe_muggle_jacket = DollCloth("luna", ("upper body", "robes"), "robe", "muggle_jacket", ["#f7bec4ff", "#863c4aff"]) default lun_bottom_muggle_skirt = DollCloth("luna", ("lower body", "skirts"), "bottom", "muggle_skirt", ["#2b2b2bff", "#3d8ec2ff", "#53a996ff", "#f3f3f3ff", "#e29496ff", "#f5d284ff"]) default lun_stockings_muggle_knee_socks = DollCloth("luna", ("legwear", "stockings"), "stockings", "muggle_knee_socks", ["#025792ff", "#00767fff", "#000f2bff"]) @@ -173,6 +173,57 @@ default lun_top_nightie2 = DollCloth("luna", ("upper body", "shirts"), "top", "n default lun_outfit_nightie2 = DollOutfit([lun_hair_base, lun_top_nightie2], price=350, name="Nightie", desc="The perfect garment if you're tired of wearing a pyjamas.") +##################### +## Tank top Outfit ## +##################### + +default lun_top_short_tanktop = DollCloth("luna", ("upper body", "shirts"), "top", "short_tanktop", ["#86CB7CFF", "#3B6E34FF"]) +default lun_bottom_shorts = DollCloth("luna", ("lower body", "shorts"), "bottom", "shorts",["#86CB7Cff", "#3B6E34ff", "#FFFFFFFF"]) + +default lun_outfit_tanktop = DollOutfit([lun_hair_base, lun_panties_base1, lun_top_short_tanktop, lun_bottom_shorts], price=200, name="Short shorts Outfit", desc="If you're not short on cash, then these short shorts and tank top are a great summer gift.") + +################## +## Bimbo Outfit ## +################## + +default lun_top_torn = DollCloth("luna", ("upper body", "shirts"), "top", "top_torn", ["#FFFFFFFF", "#C3C9E5FF"], level=10) +default lun_skirt_plaid = DollCloth("luna", ("lower body", "skirts"), "bottom", "skirt_plaid", ["#B35155ff", "#523E5Eff", "#767986ff", "#C3C9E5ff"], level=6) +default lun_stockings_bimbo_leggings = DollCloth("luna", ("legwear", "stockings"), "stockings", "leggings_bimbo", ["#FFFFFFff", "#C2C8E499", "#B35155ff", "#523E5Eff"]) + +default lun_outfit_bimbo = DollOutfit([lun_hair_base, lun_top_torn, lun_skirt_plaid, lun_stockings_bimbo_leggings], price=350, name="Bimbo Outfit", desc="An outfit for someone that's either aware, or unaware that they're a bimbo.") + +#################### +## Cumslut Outfit ## +#################### + +default lun_neckwear_choker_1 = DollCloth("luna", ("head", "neckwear"), "neckwear", "choker_1", ["#39373FFF"]) +default lun_top_cumslut = DollCloth("luna", ("upper body", "shirts"), "top", "top_cumslut", ["#39373FFF", "#473A63FF"], level=10) +default lun_panties_cumslut = DollCloth("luna", ("lower undergarment", "panties"), "panties", "panties_cumslut", ["#39373FFF", "#473A63FF"], level=10) + +default lun_outfit_cumslut = DollOutfit([lun_hair_base, lun_neckwear_choker_1, lun_top_cumslut, lun_panties_cumslut], price=350, name="Cumslut Outfit", desc="Shit's fire yo.") + +################## +## Latex Outfit ## +################## + +default lun_top_latex = DollCloth("luna", ("upper body", "shirts"), "top", "top_latex", ["#35373CFF", "#35373CFF"], level=10) +default lun_bottom_trousers_latex = DollCloth("luna", ("lower body", "trousers"), "bottom", "trousers_latex", ["#35373CFF", "#35373CFF"]) +default lun_bottom_shorts_latex = DollCloth("luna", ("lower body", "shorts"), "bottom", "shorts_latex",["#35373CFF", "#35373CFF"]) + +default lun_outfit_latex = DollOutfit([lun_hair_base, lun_top_latex, lun_bottom_trousers_latex], addons=[lun_bottom_shorts_latex], price=300, name="Latex Outfit", desc="Rubber up and show off your bouncy personality with this latex outfit!") + +#################### +## Flasher Outfit ## +#################### + +default lun_neckwear_collar = DollCloth("luna", ("head", "neckwear"), "neckwear", "collar", ["#565656", "#eaeaea"]) +default lun_neckwear_collar_1 = DollCloth("luna", ("head", "neckwear"), "neckwear", "collar_1", ["#F12E2EFF"]) +default lun_accessory_leash = DollCloth("luna", ("misc", "accessory"), "accessory", "leash", ["#F12E2EFF"], level=7, zorder=214) +default lun_accessory_onepiece_harness = DollCloth("luna", ("misc", "accessory"), "accessory", "onepiece_harness", ["#565656", "#eaeaea"], zorder=215, level=10) +default lun_robe_coat_flasher = DollCloth("luna", ("upper body", "robes"), "robe", "coat_flasher", ["#dba55f", "#fdd299", "#493a31"], level=7, zorder=145, blacklist=["top", "bottom", "gloves"]) + +default lun_outfit_flasher = DollOutfit([lun_hair_base, lun_accessory_leash, lun_accessory_onepiece_harness, lun_robe_coat_flasher], addons=[lun_neckwear_collar, lun_neckwear_collar_1], price=350, name="Flasher Outfit", desc="Show them what you got.") + ########################### ## Police Officer Outfit ## #unlocked in not_so_great_escape mirror story ########################### @@ -229,6 +280,13 @@ default lun_accessory_wand_hand = DollCloth("luna", ("misc", "accessory"), "acce default lun_accessory_wand_breasts = DollCloth("luna", ("misc", "accessory"), "accessory", "wand_breasts", ["#ffffffff"], unlocked = True, zorder=213) default lun_accessory_wand_pussy = DollCloth("luna", ("misc", "accessory"), "accessory", "wand_pussy", ["#ffffffff"], unlocked = True, zorder=183) +############ +## Makeup ## +############ + +# Nails +default lun_makeup_nail_polish = DollCloth("luna", ("head", "makeup"), "makeup", "nail_polish", ["#FFAEB2ff"], unlocked=True) + ################ ## Pubic Hair ## ################ @@ -238,6 +296,20 @@ default lun_pubes_beaver = DollCloth("luna", ("lower undergarment", "pubes"), "p default lun_pubes_stuble = DollCloth("luna", ("lower undergarment", "pubes"), "pubes", "stuble", ["#9b8558ff"], unlocked=True) default lin_pubes_unshaved = DollCloth("luna", ("lower undergarment", "pubes"), "pubes", "unshaved", ["#9b8558ff"], unlocked=True) +############### +## Piercings ## +############### + +default lun_earring_moon = DollCloth("luna", ("head", "earrings"), "earrings", "earring_moon", ["#D2DFEEff", "#FFE973ff", "#BA6755ff"], unlocked=True) +default lun_ear_studs = DollCloth("luna", ("head", "earrings"), "earrings", "ear_studs", ["#F6C54Fff"], unlocked=True) + +default lun_piercing_eyebrow_ring = DollMakeup("luna", ("piercings & tattoos", "piercings"), "piercing", "eyebrow_ring", ["#CDDAE8ff"], unlocked=True, tracking="eyebrows") +default lun_piercing_nose_ring = DollCloth("luna", ("piercings & tattoos", "piercings"), "piercing", "nose_ring", ["#F8DC5Dff"], unlocked=True) +default lun_piercing_mouth_stud = DollMakeup("luna", ("piercings & tattoos", "piercings"), "piercing", "mouth_stud", ["#D2E0F0ff"], unlocked=True, tracking="mouth") +default lun_piercing_nipple_studs = DollCloth("luna", ("piercings & tattoos", "piercings"), "piercing", "nipple_studs", ["#D2DFEEff"], unlocked=True) +default lun_piercing_nipple_rings = DollCloth("luna", ("piercings & tattoos", "piercings"), "piercing", "nipple_rings", ["#D2DFEEff"], unlocked=True) +default lun_piercing_clit_stud = DollCloth("luna", ("piercings & tattoos", "piercings"), "piercing", "clit_stud", ["#B8C6D7ff"], unlocked=True) + ############# ## Tattoos ## ############# diff --git a/game/scripts/characters/luna/wardrobe_reactions.rpy b/game/scripts/characters/luna/wardrobe_reactions.rpy index 00d761a7..0ca23527 100644 --- a/game/scripts/characters/luna/wardrobe_reactions.rpy +++ b/game/scripts/characters/luna/wardrobe_reactions.rpy @@ -28,10 +28,10 @@ define lun_responses = { label lun_reaction_category_fail(category): if category == "upper undergarment": - lun "Is this part of our Wrackspurt research [name_genie_luna]?" ("open", "base", "raised", "mid") + lun "Is this part of our wrackspurt research [name_genie_luna]?" ("open", "base", "raised", "mid") gen "*Err*... I just thought maybe you could... Never mind..." ("base", xpos="far_left", ypos="head") elif category == "lower undergarment": - lun "Is this part of our Wrackspurt research [name_genie_luna]?" ("soft", "base", "base", "mid") + lun "Is this part of our wrackspurt research [name_genie_luna]?" ("soft", "base", "base", "mid") gen "*Err*... I just thought maybe you could... Never mind..." ("base", xpos="far_left", ypos="head") elif category == "piercings & tattoos": @@ -77,7 +77,7 @@ label lun_reaction_touch(what): elif states.lun.tier == 3: random: lun "Is my head another one of those sensitive areas you spoke about?" ("open", "base", "raised", "mid") - lun "I don't think there's anywhere for me to release the Wrackspurts from up there, but thank you anyway..." ("base", "narrow", "base", "mid") + lun "I don't think there's anywhere for me to release the wrackspurts from up there, but thank you anyway..." ("base", "narrow", "base", "mid") lun "Are you sure this technique is working [name_genie_luna]?" ("annoyed", "base", "raised", "mid") elif states.lun.tier == 2: random: @@ -94,7 +94,7 @@ label lun_reaction_touch(what): else: #Tier 1 random: lun "I think I lost a pencil up there, let me know if you find it." ("soft", "base", "base", "up") - lun "I already checked for Nargles this morning but I suppose you can't be too careful..." ("base", "base", "base", "down") + lun "I already checked for nargles this morning but I suppose you can't be too careful..." ("base", "base", "base", "down") block: lun "Thank you [name_genie_luna]." ("grin", "closed", "base", "mid") @@ -118,7 +118,7 @@ label lun_reaction_touch(what): random: lun @ cheeks blush "Come... Come out already..." ("soft", "closed", "base", "mid") block: - lun @ cheeks blush "*Mmm*... How come I don't really see any of the Wrackspurts coming out from here?" ("disgust", "narrow", "base", "mid") + lun @ cheeks blush "*Mmm*... How come I don't really see any of the wrackspurts coming out from here?" ("disgust", "narrow", "base", "mid") gen "*Err*..." ("base", xpos="far_left", ypos="head") lun @ cheeks blush "It feels really good so why aren't any of them coming out?" ("annoyed", "base", "base", "mid") block: @@ -154,13 +154,13 @@ label lun_reaction_touch(what): if states.lun.tier == 5: random: lun @ cheeks blush "*Ah*... S-so good... How did I ever live without this?" ("normal", "closed", "base", "mid") - lun @ cheeks blush "*Mmm*... Nasty... Wrackspurts..." ("base", "closed", "base", "mid") + lun @ cheeks blush "*Mmm*... Nasty... wrackspurts..." ("base", "closed", "base", "mid") lun @ cheeks blush "Please... Help me get rid of them again..." ("crooked_smile", "narrow", "base", "mid") elif states.lun.tier == 4: random: lun @ cheeks blush "Whoa... I didn't think just using your mouth could produce such a strong response." ("open", "wide", "base", "mid") lun @ cheeks blush "*Ah*... It's almost like a ripple of water... Except running through my body..." ("soft", "closed", "base", "mid") - lun @ cheeks blush "*Mmm*... Those nasty Wrackspurts... I can feel them getting agitated already..." ("grin", "narrow", "base", "downR") + lun @ cheeks blush "*Mmm*... Those nasty wrackspurts... I can feel them getting agitated already..." ("grin", "narrow", "base", "downR") elif states.lun.tier == 3: random: lun @ cheeks blush "*Ohhhh*... This is going to be my new happy memory when I have to summon a patronus!" ("base", "narrow", "base", "down") @@ -220,7 +220,7 @@ label lun_reaction_equip_fail(item): lun "*Hmm*..." ("annoyed", "base", "base", "mid") gen "What?" ("base", xpos="far_left", ypos="head") lun "There's a weird aura surrounding this piece of garment." ("open", "closed", "base", "mid") - lun "It seems to be affecting the Wrackspurts, as if they're multiplying!" ("disgust", "base", "base", "mid") + lun "It seems to be affecting the wrackspurts, as if they're multiplying!" ("disgust", "base", "base", "mid") if states.lun.level < 4: lun "I'm sorry [name_genie_luna] but I can't wear that... Not until we find a way of dealing with them." ("open", "closed", "base", "mid") else: @@ -376,10 +376,10 @@ label lun_reaction_equip_outfit(item): elif item == lun_outfit_lace1: #Req 7 (bra, panties) gen "Put on this lace lingerie for me will you?" ("base", xpos="far_left", ypos="head") lun "These are pretty..." ("soft", "base", "base", "down") - lun "But don't you think the Nargles would try to hide in them?" ("angry", "base", "base", "mid") + lun "But don't you think the nargles would try to hide in them?" ("angry", "base", "base", "mid") gen "*Err*... Don't you mean the spurts?" ("base", xpos="far_left", ypos="head") - lun "No [name_genie_luna]...{w=0.4} Nargles loves anything with roses on them..." ("soft", "narrow", "base", "mid") - lun "Although now that you mention it, Nargles and Wrackspurts don't like each other so perhaps it's a good time to test that theory." ("grin", "base", "base", "mid") + lun "No [name_genie_luna]...{w=0.4} nargles loves anything with roses on them..." ("soft", "narrow", "base", "mid") + lun "Although now that you mention it, nargles and wrackspurts don't like each other so perhaps it's a good time to test that theory." ("grin", "base", "base", "mid") ######################## ## Rave Bikini Outfit ## @@ -559,6 +559,96 @@ label lun_reaction_equip_outfit(item): gen "*Err*... Sure!" ("base", xpos="far_left", ypos="head") lun "That's brilliant!" ("smile", "base", "base", "mid") lun "Let me put it on." ("grin", "base", "base", "mid") + + ##################### + ## Tank top Outfit ## + ##################### + elif item == lun_outfit_tanktop: #Req 7 (No Bra) + gen "I've got a summer themed outfit for you to wear." ("base", xpos="far_left", ypos="head") + lun "Oh! Let me see!" ("smile", "base", "base", "mid") + gen "Here you are..." ("base", xpos="far_left", ypos="head") + lun "Neat!" ("grin", "base", "base", "mid") + gen "So, you'll put it on?" ("base", xpos="far_left", ypos="head") + lun "Of course, [name_genie_luna]!" ("base", "base", "base", "mid") + + ################## + ## Bimbo Outfit ## + ################## + elif item == lun_outfit_bimbo: #Req 10 (top) + gen "I've got this cute outfit for you to wear." ("base", xpos="far_left", ypos="head") + lun "Oh... Thank you [name_genie_luna], I love it!" ("smile", "base", "base", "mid") + gen "You haven't even seen it yet." ("base", xpos="far_left", ypos="head") + lun "Oh... Right!" ("smile", "happyCl", "base", "mid") + gen "It's this one right here." ("base", xpos="far_left", ypos="head") + lun "I love it!" ("grin", "narrow", "base", "down") + gen "Do you really?" ("base", xpos="far_left", ypos="head") + lun "Of course! You've made this top yourself, right?" ("grin", "wink", "base", "mid") + gen "*Err*... What makes you think that?" ("base", xpos="far_left", ypos="head") + lun "Well, you've clearly cut some holes in it, I'm sure it doesn't come like that." ("base", "base", "base", "down") + lun "I appreciate the effort very much!" ("smile", "base", "base", "mid") + gen "(If it were anyone else, I would think it was sarcasm...)" ("base", xpos="far_left", ypos="head") + lun "Let me put it on." ("base", "base", "base", "mid") + + #################### + ## Cumslut Outfit ## + #################### + elif item == lun_outfit_cumslut: #Req 10 (Top, panties) + gen "I've got this cool outfit for you to wear." ("base", xpos="far_left", ypos="head") + lun "Cool?" ("soft", "base", "raised", "mid") + gen "That's right... It's this one right here..." ("base", xpos="far_left", ypos="head") + lun "Oh..." ("open", "narrow", "base", "down") + gen "You don't like it?" ("base", xpos="far_left", ypos="head") + lun "No, of course I like it, sir... I was just a bit confused." ("base", "base", "base", "mid") + gen "Why's that?" ("base", xpos="far_left", ypos="head") + lun "You said it was cool, but it looks hot to me." ("soft", "base", "base", "mid") + gen "Isn't that the same thing?" ("base", xpos="far_left", ypos="head") + lun "*Huh*?" ("open", "base", "raised", "mid") + gen "Just put it on, will you?" ("base", xpos="far_left", ypos="head") + lun "Oh-- Okay then!" ("smile", "base", "base", "mid") + + ################## + ## Latex Outfit ## + ################## + elif item == lun_outfit_latex: #Req 10 (Top) + gen "I've got this latex outfit for you to wear." ("base", xpos="far_left", ypos="head") + lun "But, [name_genie_luna]! Won't that trap the wrackpurts?" ("angry", "base", "base", "mid") + gen "I've thought of that already. There are holes in certain areas, you see." ("base", xpos="far_left", ypos="head") + lun "Ooooh... That's brilliant!" ("smile", "base", "base", "mid") + lun "The tightness of the latex will make the wrackspurts move to the open areas!" ("grin", "closed", "base", "mid") + gen "They will?" ("base", xpos="far_left", ypos="head") + gen "I mean, yes! That's the plan!" ("base", xpos="far_left", ypos="head") + lun "I'll put it on right away!" ("base", "base", "base", "mid") + + show screen blkfade + with d5 + pause .8 + + lun "*Hmm*... It doesn't stretch that much, does it?" + lun "*Ngh*!!" + play sound "sounds/creaking02.ogg" + pause 1 + lun "Alright, there's one leg..." + play sound "sounds/creaking02.ogg" + pause 1 + lun "And the other..." + play sound "sounds/creaking01.ogg" + pause 2 + play sound "sounds/slap_04.ogg" + lun "Ouchie!" + + #################### + ## Flasher Outfit ## + #################### + elif item == lun_outfit_flasher: #Req 10 (Top) + gen "I've got this neat outfit for you to wear." ("base", xpos="far_left", ypos="head") + lun "Oh?" ("open", "base", "base", "mid") + gen "This one, right here." ("base", xpos="far_left", ypos="head") + lun "Looks very intricate." ("soft", "narrow", "base", "down") + gen "That's certainly one way to describe it." ("base", xpos="far_left", ypos="head") + gen "But it's not that complicated, just put your legs through here." ("base", xpos="far_left", ypos="head") + lun "Oh! That makes sense..." ("grin", "narrow", "base", "down") + lun "Alright, give me a moment to put it on..." ("base", "base", "base", "mid") + # TODO: Blacklist fallbacks have to be added. return @@ -584,7 +674,7 @@ label lun_reaction_equip_outfit_fail(item): gen "Why not?" ("base", xpos="far_left", ypos="head") lun "If I stood here for too long without a bra, then I don't doubt they'd get to me!" ("angry", "closed", "worried", "mid") gen "Who?" ("base", xpos="far_left", ypos="head") - lun "The Wrackspurts!" ("angry", "wink", "base", "mid") + lun "The wrackspurts!" ("angry", "wink", "base", "mid") gen "Oh..." ("base", xpos="far_left", ypos="head") gen "(Maybe I could convince her once she's more confident about dealing with the spurts...)" ("base", xpos="far_left", ypos="head") @@ -616,7 +706,7 @@ label lun_reaction_equip_outfit_fail(item): gen "And skip the underwear." ("base", xpos="far_left", ypos="head") if states.lun.level < 4: lun "But [name_genie_luna]!" ("angry", "wide", "base", "mid") - lun "What about the Wrackspurts?" ("clench", "wink", "base", "mid") + lun "What about the wrackspurts?" ("clench", "wink", "base", "mid") gen "What do you mean, what about the spurts?" ("base", xpos="far_left", ypos="head") lun "They'll be able to get in there if I'm not wearing any underwear!" ("clench", "base", "base", "mid") gen "Really?" ("base", xpos="far_left", ypos="head") @@ -653,7 +743,7 @@ label lun_reaction_equip_outfit_fail(item): lun "But [name_genie_luna]!" ("mad", "base", "base", "down") lun "These got roses on them!" ("angry", "narrow", "base", "down") gen "So?" ("base", xpos="far_left", ypos="head") - lun "The Nargles would surely try and hide in them if I put this on!" ("clench", "happyCl", "base", "mid") + lun "The nargles would surely try and hide in them if I put this on!" ("clench", "happyCl", "base", "mid") gen "(How many of these made up things does she believe in?)" ("base", xpos="far_left", ypos="head") ######################## @@ -714,12 +804,87 @@ label lun_reaction_equip_outfit_fail(item): lun "Well... It's a bit embarrassing actually..." ("angry", "narrow", "base", "R") lun "My latch got stuck on it..." ("disgust", "base", "base", "downL") gen "Your... latch?" ("base", xpos="far_left", ypos="head") - lun "Yes [name_genie_luna]..." ("angry", "base", "worried", "mid") + lun "Yes, [name_genie_luna]..." ("angry", "base", "worried", "mid") gen "Sounds more like artificial content gating to me..." ("base", xpos="far_left", ypos="head") lun "Sorry?" ("angry", "base", "raised", "mid") - gen "Don't worry... They know what I meant..." ("base", xpos="far_left", ypos="head") + gen "Don't worry... They'll know what I meant..." ("base", xpos="far_left", ypos="head") lun "*Hmm*..." ("normal", "base", "base", "R") + ##################### + ## Tank top Outfit ## + ##################### + elif item == lun_outfit_tanktop: #Req 7 (No Bra) + gen "I've got a summer themed outfit for you to wear." ("base", xpos="far_left", ypos="head") + lun "Oh! Let me see!" ("base", "base", "base", "mid") + gen "Here you are..." ("base", xpos="far_left", ypos="head") + lun "Neat!" ("grin", "base", "base", "mid") + gen "Since it's pretty hot you should probably wear it without your bra on." ("base", xpos="far_left", ypos="head") + lun "Take off my bra?" ("soft", "base", "base", "mid") + lun "Well that might be a problem..." ("upset", "base", "base", "down") + gen "Why's that?" ("base", xpos="far_left", ypos="head") + lun "Well... It's a bit embarrassing actually..." ("angry", "narrow", "base", "R") + lun "My latch got stuck on it..." ("disgust", "base", "base", "downL") + gen "Your... latch?" ("base", xpos="far_left", ypos="head") + lun "Yes, [name_genie_luna]..." ("angry", "base", "worried", "mid") + gen "Sounds more like artificial content gating to me..." ("base", xpos="far_left", ypos="head") + lun "Sorry?" ("angry", "base", "raised", "mid") + gen "Don't worry... They'll know what I meant..." ("base", xpos="far_left", ypos="head") + lun "*Hmm*..." ("normal", "base", "base", "R") + + ################## + ## Bimbo Outfit ## + ################## + elif item == lun_outfit_bimbo: #Req 10 (top) + gen "I've got this cute outfit for you to wear." ("base", xpos="far_left", ypos="head") + lun "Acute?" ("open", "base", "raised", "mid") + gen "*Huh*?" ("base", xpos="far_left", ypos="head") + lun "How is it acute?" ("soft", "base", "raised", "mid") + gen "Not acute... It's a cute-looking outfit." ("base", xpos="far_left", ypos="head") + lun "Oh, right!" ("grin", "happyCl", "base", "mid") + gen "It's this one, right here..." ("base", xpos="far_left", ypos="head") + lun "But, sir! There are holes in it!" ("angry", "narrow", "base", "down") + gen "Yes, that's intent--" ("base", xpos="far_left", ypos="head") + lun "You better go ask for a refund!" ("clench", "base", "base", "mid") + gen "..." ("base", xpos="far_left", ypos="head") + + #################### + ## Cumslut Outfit ## + #################### + elif item == lun_outfit_cumslut: #Req 10 (Top, panties) + gen "I've got this cool outfit for you to wear." ("base", xpos="far_left", ypos="head") + lun "Cool?" ("soft", "base", "raised", "mid") + gen "That's right... It's this one, right here..." ("base", xpos="far_left", ypos="head") + lun "But, [name_genie_luna]... This outfit has flames on it." ("angry", "narrow", "base", "down") + gen "So?" ("base", xpos="far_left", ypos="head") + lun "I thought you said it was cool?" ("soft", "base", "raised", "mid") + gen "What do you--" ("base", xpos="far_left", ypos="head") + lun "Or, do you mean it's cool because it's airy?" ("open", "base", "raised", "mid") + lun "There appears to be some holes in it." ("open", "base", "base", "down") + gen "(This is giving me a headache...)" ("base", xpos="far_left", ypos="head") + + ################## + ## Latex Outfit ## + ################## + elif item == lun_outfit_latex: #Req 10 (Top) + gen "I've got this latex outfit for you to wear." ("base", xpos="far_left", ypos="head") + lun "Latex?" ("soft", "base", "raised", "mid") + gen "That's right... It's this one right here." ("base", xpos="far_left", ypos="head") + lun "But... There are holes in it... What about the wrackspurts?" ("angry", "base", "low", "mid") + gen "*Err*..." ("base", xpos="far_left", ypos="head") + lun "*Phew*... Disaster, successfully avoided." ("base", "closed", "base", "mid") + + #################### + ## Flasher Outfit ## + #################### + elif item == lun_outfit_flasher: #Req 10 (Top) + gen "I've got this neat outfit for you to wear." ("base", xpos="far_left", ypos="head") + lun "An outfit?" ("open", "base", "base", "mid") + gen "That's right... This one right here." ("base", xpos="far_left", ypos="head") + lun "Oh... That's... Very interesting..." ("soft", "narrow", "base", "down") + gen "Go on... Put it on, will you?" ("base", xpos="far_left", ypos="head") + lun "(How do you even wear this thing?)" ("disgust", "narrow", "base", "down") + lun "*Ehm*... Maybe some other time..." ("annoyed", "base", "base", "mid") + ################# ## Party Dress ## ################# @@ -751,7 +916,7 @@ label lun_reaction_equip_outfit_fail(item): ## Police Officer Outfit ## ########################### elif item == lun_outfit_police: #Req 7 (No Bra) - gen "Put on the police cosplay uniform will you?" ("base", xpos="far_left", ypos="head") + gen "Put on the police cosplay uniform, will you?" ("base", xpos="far_left", ypos="head") lun "Police?" ("soft", "base", "raised", "mid") gen "Yes?" ("base", xpos="far_left", ypos="head") lun "I'm not sure what that is..." ("upset", "narrow", "raised", "mid") @@ -829,7 +994,7 @@ label lun_reaction_blacklist(item): lun "It seems no bra can fit in this garment." ("open", "base", "base", "down") if "panties" in item.blacklist and luna.is_worn("panties"): - lun "The Wrackspurts would have a feast as I would not be able to wear panties with this." ("upset", "narrow", "base", "down") + lun "The wrackspurts would have a feast as I would not be able to wear panties with this." ("upset", "narrow", "base", "down") gen "Trust me, I know what I'm doing." ("base", xpos="far_left", ypos="head") lun "If you say so [name_genie_luna]." ("base", "base", "base", "mid") diff --git a/game/scripts/characters/snape/common.rpy b/game/scripts/characters/snape/common.rpy index 6c5a9d80..f1033751 100644 --- a/game/scripts/characters/snape/common.rpy +++ b/game/scripts/characters/snape/common.rpy @@ -11,9 +11,9 @@ init python: layer = "screens" #showing = renpy.showing(name=tag, layer=layer) - if xpos != None or ypos != None: - xpos = states.sna.image.xpos if xpos == None else sprite_pos.get("x").get(xpos, xpos) - ypos = states.sna.image.ypos if ypos == None else sprite_pos.get("y").get(ypos, ypos) + if xpos is not None or ypos is not None: + xpos = states.sna.image.xpos if xpos is None else sprite_pos.get("x").get(xpos, xpos) + ypos = states.sna.image.ypos if ypos is None else sprite_pos.get("y").get(ypos, ypos) states.sna.image.xpos = xpos states.sna.image.ypos = ypos redraw = True @@ -38,7 +38,7 @@ init python: states.sna.image.animation = animation redraw = True - if flip != None: + if flip is not None: states.sna.image.xzoom = -1 if flip else 1 redraw = True diff --git a/game/scripts/characters/snape/events/intro.rpy b/game/scripts/characters/snape/events/intro.rpy index 4329070a..d2d183e6 100644 --- a/game/scripts/characters/snape/events/intro.rpy +++ b/game/scripts/characters/snape/events/intro.rpy @@ -611,8 +611,8 @@ label snape_intro_E4: sna "......................." ("snape_01") sna "Yeah, right..." ("snape_01") "\"I don't have a brother, Severus.\"": - sna "........................" ("snape_01") - sna "You may not have one, but the real Albus Dumbledore does." ("snape_01") + sna "........................" ("snape_01") + sna "You may not have one, but the real Albus Dumbledore does." ("snape_01") "-Use magic to get the right answer-": nar "You use your phenomenal cosmic powers to peek into the very fabric of the universe and get the correct answer." gen "My little brother Aberforth? Why would I miss him?" ("base", xpos="far_left", ypos="head") @@ -640,8 +640,8 @@ label snape_intro_E4: "\"A week or so...\"": sna "*Hmm*.... A week, huh..." ("snape_01") "\"Could be months...\"": - sna "That long?" ("snape_01") - sna "Now isn't that just \"perfect\"?" ("snape_01") + sna "That long?" ("snape_01") + sna "Now isn't that just \"perfect\"?" ("snape_01") "\"I have no clue...\"": sna "....................." ("snape_01") sna "Splendid..." ("snape_31") diff --git a/game/scripts/characters/snape/hangouts.rpy b/game/scripts/characters/snape/hangouts.rpy index 32b3b5c1..04db5364 100644 --- a/game/scripts/characters/snape/hangouts.rpy +++ b/game/scripts/characters/snape/hangouts.rpy @@ -1,8 +1,9 @@ - +default sna_eventqueue_hangouts_drinking = EventQueue("sna_eventqueue_hangouts_drinking") default sna_ev_hangouts_wine_e1 = Event(id="sna_ev_hangouts_wine_e1", label="ss_he_wine_intro", autoenqueue=True, autodequeue=False, repeat=False, queue="sna_eventqueue_hangouts_drinking") default sna_ev_hangouts_wine_e2 = Event(id="sna_ev_hangouts_wine_e2", label="ss_he_wine_repeat", autoenqueue=True, autodequeue=False, queue="sna_eventqueue_hangouts_drinking") default sna_ev_hangouts_wine_e3 = Event(id="sna_ev_hangouts_wine_e3", label="ss_he_wine_intro_E2", autoenqueue=True, autodequeue=False, repeat=False, queue="sna_eventqueue_hangouts_drinking") +default sna_eventqueue_hangouts_stories = EventQueue("sna_eventqueue_hangouts_stories") default sna_ev_hangouts_stories_e1 = Event(id="sna_ev_hangouts_stories_e1", label="ss_he_story_E1", autoenqueue=True, autodequeue=False, repeat=False, queue="sna_eventqueue_hangouts_stories") default sna_ev_hangouts_stories_e2 = Event(id="sna_ev_hangouts_stories_e2", label="ss_he_story_intro_E2", autoenqueue=True, autodequeue=False, repeat=False, queue="sna_eventqueue_hangouts_stories") default sna_ev_hangouts_stories_e3 = Event(id="sna_ev_hangouts_stories_e3", label="ss_he_story_intro_E3", autoenqueue=True, autodequeue=False, repeat=False, queue="sna_eventqueue_hangouts_stories") @@ -17,4 +18,4 @@ default sna_ev_hangouts_stories_e11 = Event(id="sna_ev_hangouts_stories_e11", la default sna_ev_hangouts_stories_e12 = Event(id="sna_ev_hangouts_stories_e12", label="ss_he_story_intro_E12", autoenqueue=True, autodequeue=False, repeat=False, queue="sna_eventqueue_hangouts_stories") default sna_ev_hangouts_stories_e13 = Event(id="sna_ev_hangouts_stories_e13", label="ss_he_story_intro_E13", autoenqueue=True, autodequeue=False, repeat=False, queue="sna_eventqueue_hangouts_stories") default sna_ev_hangouts_stories_e14 = Event(id="sna_ev_hangouts_stories_e14", label="ss_he_story_E14", autoenqueue=True, autodequeue=False, repeat=False, queue="sna_eventqueue_hangouts_stories") -default sna_ev_hangouts_stories_e15 = Event(id="sna_ev_hangouts_stories_e15", label="ss_he_story_intro_E15", autoenqueue=True, autodequeue=False, repeat=False, queue="sna_eventqueue_hangouts_stories") \ No newline at end of file +default sna_ev_hangouts_stories_e15 = Event(id="sna_ev_hangouts_stories_e15", label="ss_he_story_intro_E15", autoenqueue=True, autodequeue=False, repeat=False, queue="sna_eventqueue_hangouts_stories") diff --git a/game/scripts/characters/susan/common.rpy b/game/scripts/characters/susan/common.rpy index 0cec9062..2782cc8a 100644 --- a/game/scripts/characters/susan/common.rpy +++ b/game/scripts/characters/susan/common.rpy @@ -71,7 +71,7 @@ init python: susan.animation = animation redraw = True - if flip != None: + if flip is not None: susan.xzoom = -1 if flip else 1 redraw = True diff --git a/game/scripts/characters/susan/summon.rpy b/game/scripts/characters/susan/summon.rpy index b902a645..da182a4a 100644 --- a/game/scripts/characters/susan/summon.rpy +++ b/game/scripts/characters/susan/summon.rpy @@ -194,7 +194,7 @@ label susan_talk: gen "Being called a slut always boosts a girl's confidence!" ("base", xpos="far_left", ypos="head") sus @ cheeks blush "R-- Really?" ("soft", "happy", "sad", "mid") gen "Yes. Now... shall we try it?" ("base", xpos="far_left", ypos="head") - sus @ cheeks blush "... alright, [name_genie_susan]..." ("base", "happy", "sad", "mid") + sus @ cheeks blush "... Alright, [name_genie_susan]..." ("base", "happy", "sad", "mid") jump susan_talk "-Custom Input-": $ temp_name = renpy.input("(Please enter the name.)", name_susan_genie, ALLOWED_CHARACTERS, length=14) diff --git a/game/scripts/characters/susan/wardrobe_reactions.rpy b/game/scripts/characters/susan/wardrobe_reactions.rpy index f43130b6..0ad7efa2 100644 --- a/game/scripts/characters/susan/wardrobe_reactions.rpy +++ b/game/scripts/characters/susan/wardrobe_reactions.rpy @@ -215,7 +215,7 @@ label sus_reaction_equip_outfit_fail(item): gen "Put your latex underwear on for me." ("base", xpos="far_left", ypos="head") sus @ cheeks blush "The-- The what?!?" ("angry", "wide", "shocked", "mid") gen "These!" ("grin", xpos="far_left", ypos="head") - sus @ cheeks blush "Oh, heavens!" ("clench", "wide", "base", "down") + sus @ cheeks blush "Oh, by Merlin's beard!" ("clench", "wide", "base", "down") sus @ cheeks blush "I can't wear these!" ("open", "happyCl", "worried", "mid") gen "Of course you can! I made sure to have them made specifically for your size of--" ("base", xpos="far_left", ypos="head") gen "I mean, your size!" ("angry", xpos="far_left", ypos="head") diff --git a/game/scripts/characters/tonks/chibi.rpy b/game/scripts/characters/tonks/chibi.rpy index a3db59f2..e86c9a66 100644 --- a/game/scripts/characters/tonks/chibi.rpy +++ b/game/scripts/characters/tonks/chibi.rpy @@ -65,7 +65,7 @@ label ton_sit(xpos=nxpos, ypos=nypos, flip=None, chair=True): # TODO: replace th xpos = nxpos ypos = nypos - if flip != None: + if flip is not None: tonks.xzoom = -1 if flip else 1 show screen tonks_sit_ani(nxpos, nypos, chair) @@ -147,7 +147,7 @@ init python: # Sets up a chibi scene with Tonks and Genie in it label ton_chibi_scene(action="reset", xpos="mid", ypos="base", trans=None): - if trans != None: + if trans is not None: call hide_characters if trans: # Not sure if this part is needed, depends on context? @@ -157,10 +157,7 @@ label ton_chibi_scene(action="reset", xpos="mid", ypos="base", trans=None): call ton_chibi("hide") call gen_chibi("hide") - $ menu_y = 0.75 - if action == "reset": - $ menu_y = 0.5 call ton_chibi("stand", xpos, ypos) call gen_chibi("sit_behind_desk") diff --git a/game/scripts/characters/tonks/clothing_upgrades_NOT_IN_USE.txt b/game/scripts/characters/tonks/clothing_upgrades_NOT_IN_USE.txt index 1416c505..98ca7d93 100644 --- a/game/scripts/characters/tonks/clothing_upgrades_NOT_IN_USE.txt +++ b/game/scripts/characters/tonks/clothing_upgrades_NOT_IN_USE.txt @@ -103,25 +103,25 @@ label upgrades_menu(xx=150, yy=90): with d3 label .after_init: - $ _choice = ui.interact() + $ renpy.dynamic(__choice = ui.interact()) - if _choice[0] == "category": - $ current_category = _choice[1] + if __choice[0] == "category": + $ current_category = __choice[1] $ category_items = 0 $ menu_items = upgrades_sortfilter([], current_sorting) $ menu_items_length = len(menu_items) $ current_item = 0 - elif _choice[0] == "subcat": - if _choice[1] != current_subcategory: - $ current_subcategory = _choice[1] - elif _choice[0] == "buy": - if game.gold >= _choice[1] and ton_friendship >= _choice[3]*25: + elif __choice[0] == "subcat": + if __choice[1] != current_subcategory: + $ current_subcategory = __choice[1] + elif __choice[0] == "buy": + if game.gold >= __choice[1] and ton_friendship >= __choice[3]*25: python: renpy.play('sounds/money.ogg') - game.gold -= _choice[1] - _list = _choice[2] - _iter = _choice[3] + game.gold -= __choice[1] + _list = __choice[2] + _iter = __choice[3] item_bought = True @@ -129,7 +129,7 @@ label upgrades_menu(xx=150, yy=90): if not _list[i].unlocked: _list[i].unlock() ton_clothing_upgrades += 1 - elif ton_friendship < _choice[4]: + elif ton_friendship < __choice[4]: $ renpy.play('sounds/fail.ogg') "> Tonks doesn't like you enough." else: diff --git a/game/scripts/characters/tonks/common.rpy b/game/scripts/characters/tonks/common.rpy index 92e6c766..f28c2f16 100644 --- a/game/scripts/characters/tonks/common.rpy +++ b/game/scripts/characters/tonks/common.rpy @@ -91,7 +91,7 @@ init python: tonks.animation = animation redraw = True - if flip != None: + if flip is not None: tonks.xzoom = -1 if flip else 1 redraw = True diff --git a/game/scripts/characters/tonks/events/requests/hands-on_lessons.rpy b/game/scripts/characters/tonks/events/requests/hands-on_lessons.rpy index 4f950950..c3fd6ccb 100644 --- a/game/scripts/characters/tonks/events/requests/hands-on_lessons.rpy +++ b/game/scripts/characters/tonks/events/requests/hands-on_lessons.rpy @@ -48,7 +48,7 @@ label nt_pr_grope_start: if not _events_completed_any: # Tell her to be even lewder for the next level of favors. gen "I'd like you to go out and have some handsy fun with your students." ("base", xpos="far_left", ypos="head") - ton "Just like that? " ("open", "base", "raised", "mid") + ton "Just like that?" ("open", "base", "raised", "mid") gen "Just like that, but I want you to be more handsy this time." ("grin", xpos="far_left", ypos="head") ton "I can certainly do that..." ("horny", "base", "base", "mid") ton "See you after class...{heart}" ("base", "happyCl", "base", "mid") diff --git a/game/scripts/characters/tonks/hangouts.rpy b/game/scripts/characters/tonks/hangouts.rpy index 2c732a93..213a6ff9 100644 --- a/game/scripts/characters/tonks/hangouts.rpy +++ b/game/scripts/characters/tonks/hangouts.rpy @@ -1,4 +1,4 @@ - +default ton_eventqueue_hangouts_drinking = EventQueue("ton_eventqueue_hangouts_drinking") default ton_ev_hangouts_wine_intro = Event(id="ton_ev_hangouts_wine_intro", label="nt_he_wine_intro", autoenqueue=True, autodequeue=False, repeat=False, queue="ton_eventqueue_hangouts_drinking") default ton_ev_hangouts_firewhisky_intro = Event(id="ton_ev_hangouts_firewhisky_intro", label="nt_he_firewhisky_intro", autoenqueue=True, autodequeue=False, repeat=False, queue="ton_eventqueue_hangouts_drinking") default ton_ev_hangouts_firewhisky_e1 = Event(id="ton_ev_hangouts_firewhisky_e1", label="nt_he_firewhisky_E1", autoenqueue=True, autodequeue=False, repeat=False, queue="ton_eventqueue_hangouts_drinking") @@ -6,6 +6,7 @@ default ton_ev_hangouts_firewhisky_e2 = Event(id="ton_ev_hangouts_firewhisky_e2" default ton_ev_hangouts_firewhisky_e3 = Event(id="ton_ev_hangouts_firewhisky_e3", label="nt_he_firewhisky_E3", autoenqueue=True, autodequeue=False, repeat=False, queue="ton_eventqueue_hangouts_drinking") default ton_ev_hangouts_firewhisky_e4 = Event(id="ton_ev_hangouts_firewhisky_e4", label="nt_he_firewhisky_E4", autoenqueue=True, autodequeue=False, repeat=False, queue="ton_eventqueue_hangouts_drinking") +default ton_eventqueue_hangouts_story = EventQueue("ton_eventqueue_hangouts_story") default ton_ev_hangouts_story_e1 = Event(id="ton_ev_hangouts_story_e1", label="nt_he_story_intro_E1", autoenqueue=True, autodequeue=False, repeat=False, queue="ton_eventqueue_hangouts_story") default ton_ev_hangouts_story_e2 = Event(id="ton_ev_hangouts_story_e2", label="nt_he_story_intro_E2", autoenqueue=True, autodequeue=False, repeat=False, queue="ton_eventqueue_hangouts_story") default ton_ev_hangouts_story_e3 = Event(id="ton_ev_hangouts_story_e3", label="nt_he_story_intro_E3", autoenqueue=True, autodequeue=False, repeat=False, queue="ton_eventqueue_hangouts_story") diff --git a/game/scripts/characters/tonks/requests.rpy b/game/scripts/characters/tonks/requests.rpy index 21db5bec..c248814d 100644 --- a/game/scripts/characters/tonks/requests.rpy +++ b/game/scripts/characters/tonks/requests.rpy @@ -1,9 +1,9 @@ - default ton_ev_detention_t1_e1 = Event(id="ton_ev_detention_t1_e1", label="nt_pr_teach_T1_E1", req="game.daytime==False") default ton_ev_detention_t1_e2 = Event(id="ton_ev_detention_t1_e2", label="nt_pr_teach_T1_E2", req="game.daytime==False") default ton_ev_detention_t1_e3 = Event(id="ton_ev_detention_t1_e3", label="nt_pr_teach_T1_E3", req="game.daytime==False") default ton_ev_detention_t1_e4 = Event(id="ton_ev_detention_t1_e4", label="nt_pr_teach_T1_E4", req="game.daytime==False") +default ton_eventqueue_detention = EventQueue("ton_eventqueue_detention") default ton_ev_detention_t1_e1_hub = Event(id="ton_ev_detention_t1_e1_hub", label="nt_pr_teach_start", req="states.ton.tier==1", autoenqueue=True, autodequeue=False, queue="ton_eventqueue_detention", subevents=["ton_ev_detention_t1_e1"]) default ton_ev_detention_t1_e2_hub = Event(id="ton_ev_detention_t1_e2_hub", label="nt_pr_teach_start", req="states.ton.tier==1", autoenqueue=True, autodequeue=False, queue="ton_eventqueue_detention", subevents=["ton_ev_detention_t1_e2"]) default ton_ev_detention_t1_e3_hub = Event(id="ton_ev_detention_t1_e3_hub", label="nt_pr_teach_start", req="states.ton.tier==1", autoenqueue=True, autodequeue=False, queue="ton_eventqueue_detention", subevents=["ton_ev_detention_t1_e3"]) @@ -24,6 +24,7 @@ default ton_ev_grope_t2_e2 = Event(id="ton_ev_grope_t2_e2", label="nt_pr_grope_T default ton_ev_grope_t2_e3 = Event(id="ton_ev_grope_t2_e3", label="nt_pr_grope_T2_E3", req="game.daytime==False") default ton_ev_grope_t2_e4 = Event(id="ton_ev_grope_t2_e4", label="nt_pr_grope_T2_E4", req="game.daytime==False") +default ton_eventqueue_grope = EventQueue("ton_eventqueue_grope") default ton_ev_grope_t2_e1_hub = Event(id="ton_ev_grope_t2_e1_hub", label="nt_pr_grope_start", req="states.ton.tier>=2", autoenqueue=True, autodequeue=False, queue="ton_eventqueue_grope", subevents=["ton_ev_grope_t2_e1"]) default ton_ev_grope_t2_e2_hub = Event(id="ton_ev_grope_t2_e2_hub", label="nt_pr_grope_start", req="states.ton.tier>=2", autoenqueue=True, autodequeue=False, queue="ton_eventqueue_grope", subevents=["ton_ev_grope_t2_e2"]) default ton_ev_grope_t2_e3_hub = Event(id="ton_ev_grope_t2_e3_hub", label="nt_pr_grope_start", req="states.ton.tier>=2", autoenqueue=True, autodequeue=False, queue="ton_eventqueue_grope", subevents=["ton_ev_grope_t2_e3"]) @@ -34,6 +35,7 @@ default ton_ev_oral_t2_e2 = Event(id="ton_ev_oral_t2_e2", label="nt_pr_kiss_T2_E default ton_ev_oral_t2_e3 = Event(id="ton_ev_oral_t2_e3", label="nt_pr_kiss_T2_E3", req="game.daytime==False") default ton_ev_oral_t2_e4 = Event(id="ton_ev_oral_t2_e4", label="nt_pr_kiss_T2_E4", req="game.daytime==False") +default ton_eventqueue_oral = EventQueue("ton_eventqueue_oral") default ton_ev_oral_t2_e1_hub = Event(id="ton_ev_oral_t2_e1_hub", label="nt_pr_kiss_start", req="states.ton.tier>=2", repeat=False, autoenqueue=True, autodequeue=False, queue="ton_eventqueue_oral", subevents=["ton_ev_oral_t2_e1"]) default ton_ev_oral_t2_e2_hub = Event(id="ton_ev_oral_t2_e2_hub", label="nt_pr_kiss_start", req="states.ton.tier>=2", autoenqueue=True, autodequeue=False, queue="ton_eventqueue_oral", subevents=["ton_ev_oral_t2_e2"]) default ton_ev_oral_t2_e3_hub = Event(id="ton_ev_oral_t2_e3_hub", label="nt_pr_kiss_start", req="states.ton.tier>=2", autoenqueue=True, autodequeue=False, queue="ton_eventqueue_oral", subevents=["ton_ev_oral_t2_e3"]) @@ -45,4 +47,4 @@ define tonks_requests = [ ("ton_eventqueue_oral", "Oral practice!"), ] -# Idea for "blowjob pr" name: "Stress Mitigation." \ No newline at end of file +# Idea for "blowjob pr" name: "Stress Mitigation." diff --git a/game/scripts/characters/tonks/summon.rpy b/game/scripts/characters/tonks/summon.rpy index 1f5eb33f..965745e1 100644 --- a/game/scripts/characters/tonks/summon.rpy +++ b/game/scripts/characters/tonks/summon.rpy @@ -18,8 +18,6 @@ label summon_tonks: label tonks_requests: - # Reset - call reset_menu_position ton "" (xpos="base",ypos="base") menu: @@ -111,7 +109,7 @@ label tonks_favor_menu: # call update_tonks_favors menu: - "-Level Up-" (icon="interface/icons/small/levelup.webp") if ton_level_up != None: + "-Level Up-" (icon="interface/icons/small/levelup.webp") if ton_level_up is not None: call tonks_level_up(tier=ton_level_up) jump tonks_requests diff --git a/game/scripts/characters/tonks/wardrobe.rpy b/game/scripts/characters/tonks/wardrobe.rpy index 89ca03a2..d437489a 100644 --- a/game/scripts/characters/tonks/wardrobe.rpy +++ b/game/scripts/characters/tonks/wardrobe.rpy @@ -206,7 +206,7 @@ default ton_outfit_mechanic = DollOutfit([ton_hair_mechanic, ton_top_vest_mechan default ton_robe_office = DollCloth("tonks", ("upper body", "robes"), "robe", "office",["#353843ff", "#fff24aff"]) default ton_top_office = DollCloth("tonks", ("upper body", "shirts"), "top", "office", ["#e7e7e7ff", "#d1cebbff"]) default ton_bottoms_office = DollCloth("tonks", ("lower body", "trousers"), "bottom", "office",["#353843ff"]) -default ton_accessory_office = DollCloth("tonks", ("misc", "accessory"), "accessory", "office_pin", ["#e7e7e7ff", "#fff24aff", "#d8422cff"], zorder=225) +default ton_accessory_office = DollCloth("tonks", ("misc", "accessory"), "accessory", "office_pin", ["#e7e7e7ff", "#fff24aff", "#d8422cff"], zorder=235) default ton_outfit_office = DollOutfit([ton_hair_base, ton_robe_office, ton_top_office, ton_bottoms_office, ton_accessory_office], price=450, name="SECS Outfit", desc="A smart suit for a clever girl.") diff --git a/game/scripts/chibis/classes.rpy b/game/scripts/chibis/classes.rpy index fda56e1d..de3ea8d4 100644 --- a/game/scripts/chibis/classes.rpy +++ b/game/scripts/chibis/classes.rpy @@ -14,7 +14,7 @@ screen chibi(chibi_object): screen chibi_emote(emote, chibi_object): zorder chibi_object.zorder sensitive False - add "emo_{}".format(emote): + add f"emo_{emote}": at emote_effect anchor (0.5, 1.0) pos chibi_object.pos @@ -45,12 +45,12 @@ init -1 python: def get_chibi_object(name): """Get a chibi object by its character's name.""" - name = "{}_chibi".format(name) + name = f"{name}_chibi" c = getattr(renpy.store, name, None) if c and isinstance(c, Chibi): return c else: - raise Exception("Chibi object not found. {}".format(name)) + raise Exception(f"Chibi object not found. {name}") def complete_chibi_moves(**elapsed): """Resume old chibi action after (multiple) reduced move calls.""" @@ -81,13 +81,13 @@ init -1 python: Actions are defined in the `actions` dict as a tuple: (special, transform, move_action|loop_time). * `special` (bool) specifies whether layer images should come from a folder with the same name as the action. - This can be useful to prevent repetitive code in update callbacks. + This can be useful to prevent repetitive code in update callbacks. * `transform` (string) is the name of the transform that is used for this action. - It will be combined with a base transform. + It will be combined with a base transform. * `move_action` (string) if set, it's the action that will be used when the chibi starts moving after the current action. - It should not be set for move actions. + It should not be set for move actions. * `loop_time` (float) if set, it's the time in seconds for one animation loop of this action. Used to calculate movement time. - It should only be set for move actions. Set to zero to disable time adjustments. + It should only be set for move actions. Set to zero to disable time adjustments. Layers: A chibi is made up of one or more named layers. These are cleared on update and should be set by a callback function. @@ -95,7 +95,7 @@ init -1 python: * A layer can be set to either a filename or any kind of displayable. * When setting an image filename, this class will look for it in `image_path` (or `image_path/action` if the action is special). * Adding `~` as a prefix to a filename will ignore the special action folder. - This can be useful for images that are compatible with multiple actions. + This can be useful for images that are compatible with multiple actions. * Layers are updated whenever the action changes by calling `update_callback`, which is expected to set the layers again. """ @@ -120,7 +120,7 @@ init -1 python: if image_path: self.image_path = image_path else: - self.image_path = "characters/{}/chibis".format(tag) + self.image_path = f"characters/{tag}/chibis" if actions: # Override class variable for this instance @@ -138,11 +138,11 @@ init -1 python: self.transform = None # Define a screen for the chibi - self.screen_tag = "{}_chibi".format(tag) + self.screen_tag = f"{tag}_chibi" renpy.define_screen(self.screen_tag, Chibi._screen, tag=self.screen_tag, zorder="chibi_object.zorder") # Define a screen for the chibi emote - self.emote_tag = "{}_chibi_emote".format(tag) + self.emote_tag = f"{tag}_chibi_emote" renpy.define_screen(self.emote_tag, Chibi._emote_screen, tag=self.emote_tag, zorder="chibi_object.zorder") @staticmethod @@ -282,7 +282,7 @@ init -1 python: # Combine with base transform return combine_transforms(self.base_transform(), trans(*args)) elif config.developer: - raise Exception("Expected a transform: {}".format(name)) + raise Exception(f"Expected an ATL transform: {name}") # No transform was given or found return self.base_transform() @@ -358,7 +358,7 @@ init -1 python: room = room or renpy.store.states.room chibi_room = ChibiRoom.rooms.get(room, None) if not chibi_room: - raise Exception("Chibi room is not defined for {}".format(room)) + raise Exception(f"Chibi room is not defined for {room}") return chibi_room @staticmethod diff --git a/game/scripts/doll/body.rpy b/game/scripts/doll/body.rpy index 0a47b670..07c509c4 100644 --- a/game/scripts/doll/body.rpy +++ b/game/scripts/doll/body.rpy @@ -12,17 +12,17 @@ init python: def __init__(self, obj): self.char = obj - self.hue = HueMatrix(0) + self.matrix = IdentityMatrix() self.zorder = 0 self._hash = None - def set_hue(self, hue): - self.hue = HueMatrix(hue) + def set_matrix(self, matrix): + self.matrix = matrix self.is_stale() def generate_hash(self): bodyparts_hash = str([x[0]._hash for x in self.char.states.values() if istype(x[0], DollBodypart) and x[2]]) - salt = str( [self.char.name, self.char.pose, str(self.hue.__hash__()), bodyparts_hash]) + salt = str( [self.char.name, self.char.pose, str(self.matrix.__hash__()), bodyparts_hash]) return hash(salt) @functools.cache @@ -38,7 +38,7 @@ init python: @functools.cache def build_image(self, hash, matrix=None): if matrix is None: - matrix = self.hue + matrix = self.matrix processors = { "default": lambda file: Transform(Image(file), matrixcolor=matrix), @@ -59,7 +59,7 @@ init python: if not renpy.is_skipping() and self.is_stale(): hash = self._hash - sprites = self.build_image(hash, self.hue) + sprites = self.build_image(hash, self.matrix) sprites.sort(key=itemgetter(2)) sprites = [x[1] for x in sprites] diff --git a/game/scripts/doll/bodypart.rpy b/game/scripts/doll/bodypart.rpy index f9d6b151..fccf8b98 100644 --- a/game/scripts/doll/bodypart.rpy +++ b/game/scripts/doll/bodypart.rpy @@ -9,7 +9,7 @@ init 1 python: } def __init__(self, name, categories, type, id, zorder=None, unlocked=False, level=0, blacklist=[], parent=None, modpath=None): - super().__init__(name, categories, type, id, None, zorder, unlocked, level, blacklist, parent, modpath) + super().__init__(name, categories, type, id, None, zorder, unlocked, level, blacklist, modpath, parent) def __repr__(self): return f"DollBodypart(name={self.name}, categories={self.categories}, type={self.type}, id={self.id}, color={self.color}, zorder={self.zorder}, unlocked={self.unlocked}, level={self.level}, blacklist={self.blacklist}, parent={self.parent}, modpath={self.modpath or None})" @@ -37,7 +37,7 @@ init 1 python: ltype, *tails = fn.rsplit("_") # if not ltype in types: - # print("Invalid layer type for file: {}".format(f)) + # print(f"Invalid layer type for file: {f}") # continue zorder = types.get(ltype) or self.zorder @@ -50,12 +50,12 @@ init 1 python: lmodifier, *tails = tails if not lmodifier in modifiers: - print("Invalid modifier for file: {}".format(f)) + print(f"Invalid modifier for file: {f}") continue zorder_mod = modifiers.get(lmodifier) zorder = (zorder + int(zorder_mod)) if lmodifier != "zorder" else int(tails[-1]) - layers.setdefault("_".join([ltype, lmodifier]), [f, zorder]) + layers.setdefault("_".join([ltype, lmodifier, str(zorder)]), [f, zorder]) else: layers.setdefault(ltype, [f, zorder]) diff --git a/game/scripts/doll/chibi.rpy b/game/scripts/doll/chibi.rpy index d5e2bddf..ff387a03 100644 --- a/game/scripts/doll/chibi.rpy +++ b/game/scripts/doll/chibi.rpy @@ -211,11 +211,9 @@ init 5 python: self.set_pose(pose or self.walk) - # Note: Warper names and their count can change over time, - # so it's easier to just evaluate the input. # List of available warpers: # https://www.renpy.org/doc/html/atl.html?#warpers - warper = eval(f"_warper.{warper}") + warper = getattr(_warper, warper, _warper.linear) distances = [] times = [] diff --git a/game/scripts/doll/clothes.rpy b/game/scripts/doll/clothes.rpy index 58453dd6..1d4fbc08 100644 --- a/game/scripts/doll/clothes.rpy +++ b/game/scripts/doll/clothes.rpy @@ -69,7 +69,7 @@ init python: salt = str( [self.name, self.char.pose, self.type, self.id, str(self.color), str(self.char.body._hash)] ) return hash(salt) - @functools.cache + @functools.cache # <- TODO: Reevaluate if this function should allow multiple caches (aside from different subpaths) def get_layers(self, hash, subpath=""): path = posixpath.join(self.modpath, "characters", self.name, "poses", self.char.pose, subpath, "clothes", self.type, self.id) @@ -108,7 +108,7 @@ init python: ltype, *tails = fn.rsplit("_") if not ltype.isdigit() and not ltype in types: - print("Invalid layer type for file: {}".format(f)) + print(f"Invalid layer type for file: {f}") continue zorder = z if (z := types.get(ltype)) is not None else self.zorder @@ -121,16 +121,16 @@ init python: lmodifier, *tails = tails if not lmodifier in modifiers: - print("Invalid modifier for file: {}".format(f)) + print(f"Invalid modifier for file: {f}") continue zorder_mod = modifiers.get(lmodifier) zorder = (zorder + int(zorder_mod)) if lmodifier != "zorder" else int(tails[-1]) - layers.setdefault("_".join([ltype, lmodifier]), [f, zorder]) + layers.setdefault("_".join([ltype, lmodifier, str(zorder)]), [f, zorder]) else: layers.setdefault(ltype, [f, zorder]) - return layers + return dict(sorted(layers.items(), key=lambda x: (extract_number(x[0]), x[0]))) @functools.cache def build_image(self, hash, subpath="", matrix=None, maxsize=(1010, 1200)): @@ -138,7 +138,7 @@ init python: # as a bridge to enable colourable clothing for chibis, double-check the changes before submitting them. if matrix is None: - matrix = self.char.body.hue + matrix = self.char.body.matrix processors = { "skin": lambda file, _: Transform(file, maxsize=maxsize, matrixcolor=matrix), @@ -152,7 +152,7 @@ init python: sprites = [] for identifier, (file, zorder) in layers.items(): - if ((n := identifier.rsplit("_", 1)[0]).isdigit()): + if ((n := identifier.split("_", 1)[0]).isdigit()): processor = processors["colored"] else: processor = processors.get(identifier, processors["default"]) @@ -319,7 +319,7 @@ init python: # Method 4 average = (0.3333, 0.3333, 0.3333) - + return Transform(img, maxsize=maxsize, matrixcolor=SepiaMatrix(c, desat=average)*OpacityMatrix(c.alpha)) except TypeError: diff --git a/game/scripts/doll/clothes_dynamic.rpy b/game/scripts/doll/clothes_dynamic.rpy index 2226ea53..f97d7d73 100644 --- a/game/scripts/doll/clothes_dynamic.rpy +++ b/game/scripts/doll/clothes_dynamic.rpy @@ -131,12 +131,12 @@ init python: lmodifier, *tails = tails if not lmodifier in modifiers: - print("Invalid modifier for file: {}".format(f)) + print(f"Invalid modifier for file: {f}") continue zorder_mod = modifiers.get(lmodifier) zorder = (zorder + int(zorder_mod)) if lmodifier != "zorder" else int(tails[-1]) - layers.setdefault("_".join([ltype, lmodifier]), [f, zorder]) + layers.setdefault("_".join([ltype, lmodifier, str(zorder)]), [f, zorder]) else: layers.setdefault(ltype, [f, zorder]) diff --git a/game/scripts/doll/cum.rpy b/game/scripts/doll/cum.rpy index 50b9ea5b..5e1c1561 100644 --- a/game/scripts/doll/cum.rpy +++ b/game/scripts/doll/cum.rpy @@ -106,7 +106,7 @@ init python: zorder_mod = modifiers.get(lmodifier) zorder = (zorder + int(zorder_mod)) if lmodifier != "zorder" else int(tails[-1]) - layers.setdefault(" ".join([part, name, ltype, lmodifier]), [f, zorder]) + layers.setdefault(" ".join([part, name, ltype, lmodifier, str(zorder)]), [f, zorder]) else: layers.setdefault(" ".join([part, name, ltype]), [f, zorder]) @@ -115,7 +115,7 @@ init python: @functools.cache def build_image(self, hash, subpath="", matrix=None): if matrix is None: - matrix = self.char.body.hue + matrix = self.char.body.matrix processors = { "skin": lambda file: Transform(file, matrixcolor=matrix), diff --git a/game/scripts/doll/face.rpy b/game/scripts/doll/face.rpy index c319acb3..2befdd73 100644 --- a/game/scripts/doll/face.rpy +++ b/game/scripts/doll/face.rpy @@ -1,4 +1,6 @@ init python: + import os + class DollFace(DollMethods): layer_types = { "eyemask": -1, @@ -52,7 +54,7 @@ init python: ltype, *tails = fn.rsplit("_") if not ltype in types: - print("Invalid layer type for file: {}".format(f)) + print(f"Invalid layer type for file: {f}") continue zorder = types.get(ltype) or face_layers.get(part) @@ -61,12 +63,12 @@ init python: lmodifier, *tails = tails if not lmodifier in modifiers: - print("Invalid modifier for file: {}".format(f)) + print(f"Invalid modifier for file: {f}") continue zorder_mod = modifiers.get(lmodifier) zorder = (zorder + int(zorder_mod)) if lmodifier != "zorder" else int(tails[-1]) - layers.setdefault(" ".join([part, name, ltype, lmodifier]), [f, zorder]) + layers.setdefault(" ".join([part, name, ltype, lmodifier, str(zorder)]), [f, zorder]) else: layers.setdefault(" ".join([part, name, ltype]), [f, zorder]) @@ -78,7 +80,7 @@ init python: eyemask = next((layers.pop(k, None) for k in layers if "eyemask" in k), [None])[0] if matrix is None: - matrix = self.char.body.hue + matrix = self.char.body.matrix processors = { "skin": lambda file: Transform(file, matrixcolor=matrix), diff --git a/game/scripts/doll/init.rpy b/game/scripts/doll/init.rpy index 28040f02..1fee5851 100644 --- a/game/scripts/doll/init.rpy +++ b/game/scripts/doll/init.rpy @@ -5,13 +5,13 @@ init python: for c in states.dolls: char = get_character_object(c) - body_default = get_character_body(c, type="default") + body_default = get_character_body(c, typ="default") char.equip(body_default) - outfit_default = get_character_outfit(c, type="default") + outfit_default = get_character_outfit(c, typ="default") char.equip(outfit_default) - outfit_last = outfit = get_character_outfit(c, type="last") + outfit_last = outfit = get_character_outfit(c, typ="last") outfit_last.save() char.set_face(mouth="base", eyes="base", eyebrows="base", pupils="mid", cheeks="none", tears="none") diff --git a/game/scripts/doll/main.rpy b/game/scripts/doll/main.rpy index 0d3885ca..b200f6ad 100644 --- a/game/scripts/doll/main.rpy +++ b/game/scripts/doll/main.rpy @@ -480,7 +480,10 @@ init python: def set_body_hue(self, arg): """Takes integer between 0 - 359, rotates the character body colour by given amount.""" - self.body.set_hue(arg) + self.set_body_matrix(HueMatrix(arg)) + + def set_body_matrix(self, arg): + self.body.set_matrix(arg) for i in self.states.values(): if i[0]: @@ -535,7 +538,7 @@ init python: # Grab data if fromfile: try: - imported = ImagePayload().extract(path) + imported = image_payload.extract(path) except Exception as e: renpy.notify("Import failed: Corrupted file.") print(e) diff --git a/game/scripts/doll/makeup.rpy b/game/scripts/doll/makeup.rpy index b93fd86e..041e8199 100644 --- a/game/scripts/doll/makeup.rpy +++ b/game/scripts/doll/makeup.rpy @@ -49,12 +49,12 @@ init python: lmodifier, *tails = tails if not lmodifier in modifiers: - print("Invalid modifier for file: {}".format(f)) + print(f"Invalid modifier for file: {f}") continue zorder_mod = modifiers.get(lmodifier) zorder = (zorder + int(zorder_mod)) if lmodifier != "zorder" else int(tails[-1]) - layers.setdefault("_".join([ltype, lmodifier]), [f, zorder]) + layers.setdefault("_".join([ltype, lmodifier, str(zorder)]), [f, zorder]) else: layers.setdefault(ltype, [f, zorder]) diff --git a/game/scripts/doll/outfits.rpy b/game/scripts/doll/outfits.rpy index 5b3a1bb4..d6e6313c 100644 --- a/game/scripts/doll/outfits.rpy +++ b/game/scripts/doll/outfits.rpy @@ -218,11 +218,11 @@ init python: d, "interface/wardrobe/export_frame.webp", Text(states.active_girl, align=(0.5, 0.995)), - Text("Ver. {}".format(config.version), size=10, align=(0.99, 0.99)) + Text(f"Ver. {config.version}", size=10, align=(0.99, 0.99)) ) displayable_to_file(d, path, size=(310, 470) ) - ImagePayload().inject("_temp.png", filename, str(exported)) + image_payload.inject("_temp.png", filename, str(exported)) os.remove(path) else: set_clipboard(exported) @@ -286,4 +286,3 @@ init python: if self.has_type(arg): return True return False - diff --git a/game/scripts/events/DayNight.rpy b/game/scripts/events/DayNight.rpy index 9fe565bb..1126d453 100644 --- a/game/scripts/events/DayNight.rpy +++ b/game/scripts/events/DayNight.rpy @@ -1,4 +1,3 @@ - label day_start: show screen blkfade hide snape_main @@ -87,7 +86,8 @@ label day_start: # Randomisers random_gold = renpy.random.randint(8, 40) - random_map_loc = renpy.random.randint(1, 5) + map_randomobj.seed() + door_randomobj.seed() # Send salary every 7th day if game.day % 7 == 0: @@ -101,13 +101,7 @@ label day_start: eventqueue.tick() # Update map locations - call set_her_map_location() - call set_lun_map_location() - call set_cho_map_location() - call set_ast_map_location() - call set_sus_map_location() - #TODO: Add Tonks map location - #TODO: Add Snape map location + call set_all_map_locations # Reset appearances and sprites call update_luna @@ -151,6 +145,7 @@ label day_start: # Start Quests jump quests + # unreachable $ renpy.choice_for_skipping() call screen room_menu @@ -201,16 +196,11 @@ label night_start: # Randomisers random_gold = renpy.random.randint(8, 40) - random_map_loc = renpy.random.randint(1, 5) + map_randomobj.seed() + door_randomobj.seed() # Update map locations - call set_her_map_location() - call set_lun_map_location() - call set_cho_map_location() - call set_ast_map_location() - call set_sus_map_location() - #TODO: Add Tonks map location - #TODO: Add Snape map location + call set_all_map_locations # Reset appearances and sprites call update_luna @@ -250,6 +240,7 @@ label night_start: # Start Quests jump quests + # unreachable $ renpy.choice_for_skipping() call screen room_menu diff --git a/game/scripts/events/Start.rpy b/game/scripts/events/Start.rpy index 0ae5991b..987c758e 100644 --- a/game/scripts/events/Start.rpy +++ b/game/scripts/events/Start.rpy @@ -3,7 +3,7 @@ label start_wt: show screen blkfade with d3 - show image "images/rooms/_bg_/castle.webp" + show expression "images/rooms/_bg_/castle.webp" hide screen blkfade with d3 show screen close_button(action=MainMenu()) @@ -40,7 +40,7 @@ label start_wt: $ states.ton.level = 5 jump skip_to_hermione - hide image "images/rooms/_bg_/castle.webp" + hide expression "images/rooms/_bg_/castle.webp" hide screen close_button $ enable_game_menu() @@ -182,7 +182,7 @@ label genie_intro_E4: label skip_to_hermione: $ renpy.block_rollback() - hide image "images/rooms/_bg_/castle.webp" + hide expression "images/rooms/_bg_/castle.webp" hide screen close_button $ enable_game_menu() diff --git a/game/scripts/events/ending.rpy b/game/scripts/events/ending.rpy index 3783d2bb..7b6a4f1d 100644 --- a/game/scripts/events/ending.rpy +++ b/game/scripts/events/ending.rpy @@ -348,7 +348,7 @@ label ball_ending_E1: play music "music/Plaint.ogg" fadein 1 fadeout 1 #SAD CREDITS MUSIC. if_changed centered """{size=+7}{color=#cbcbcb}Congratulations on completing the game!{/color}{/size}\n\n - {size=+5}{color=#cbcbcb}This is ending \"00\" out of \"02\".{/color}{/size}{#LINT_IGNORE}""" + {size=+5}{color=#cbcbcb}This is ending \"00\" out of \"02\".{/color}{/size}{#LINT_IGNORE}""" centered "{size=+7}{color=#cbcbcb}Thank you for playing!{/color}{/size}\n\n{#LINT_IGNORE}" diff --git a/game/scripts/events/ending_after.rpy b/game/scripts/events/ending_after.rpy index de3784bc..6bad670f 100644 --- a/game/scripts/events/ending_after.rpy +++ b/game/scripts/events/ending_after.rpy @@ -344,9 +344,7 @@ screen big_bang(bang=False): add "images/misc/bang.webp": at transform: zoom 0.0 - anchor (0.5, 0.5) - pos (540, 300) - on show: - easeout 15.0 zoom 3 + xycenter (540, 300) + easein_cubic 15 zoom 4 else: - add "glow_effect" zoom 0.2 anchor (0.5, 0.5) align (0.5, 0.5) + add "glow_effect" zoom 0.2 align (0.5, 0.5) diff --git a/game/scripts/events/labels.rpy b/game/scripts/events/labels.rpy index 41bc04c1..9db557a6 100644 --- a/game/scripts/events/labels.rpy +++ b/game/scripts/events/labels.rpy @@ -142,18 +142,24 @@ label teleport(position=None,effect=True,poof_label=None): with d1 hide screen blkfade - show screen heal_animation + show heal_ani onlayer screens zorder teleport_zorder: + anchor (0.5, 1.0) + pos teleport_pos + zoom 0.5 with d3 #stop music fadeout 1 - hide screen heal_animation - if poof_label != None: - $ renpy.call(poof_label) - show screen teleport_animation + hide heal_animation onlayer screens + if poof_label is not None: + call expression poof_label + show teleport_ani onlayer screens zorder teleport_zorder: + anchor (0.5, 0.7) + pos teleport_pos + zoom 0.5 with d5 - hide screen teleport_animation + hide teleport_animation onlayer screens with d5 if effect == True: @@ -161,17 +167,9 @@ label teleport(position=None,effect=True,poof_label=None): return -screen teleport_animation(): - add "teleport_ani" anchor (0.5, 0.7) xpos teleport_xpos ypos teleport_ypos zoom 0.5 - zorder teleport_zorder - -screen heal_animation(): - add "heal_ani" anchor (0.5, 1.0) xpos teleport_xpos ypos teleport_ypos zoom 0.5 - zorder teleport_zorder - # Dummy labels. To prevent crashes. # TODO: Remove later. default hermione_action = None label set_her_action(action=None, update=None): $ hermione_action = action - return + return \ No newline at end of file diff --git a/game/scripts/events/queue.rpy b/game/scripts/events/queue.rpy index 2af20593..cffe1ce3 100644 --- a/game/scripts/events/queue.rpy +++ b/game/scripts/events/queue.rpy @@ -74,7 +74,7 @@ init -1 python: if ev.completed: if ev.repeat: repeatable.append(ev) - + continue return ev @@ -120,8 +120,9 @@ init -1 python: _queue = None _parent = None - def __init__(self, id, wait=0, priority=5, daytime=None, req=None, label=None, func=None, queue="eventqueue", autoenqueue=False, autodequeue=True, - repeat=True, fail_suffixes=("_fail", "too_much", "too_much_public"), ignore_labels=[], subevents=[], disabled=False): + def __init__(self, id, + wait=0, priority=5, daytime=None, req=None, label=None, func=None, queue="eventqueue", autoenqueue=False, autodequeue=True, + repeat=True, fail_suffixes=("_fail", "too_much", "too_much_public"), ignore_labels=(), subevents=(), disabled=False): self.id = id self.wait = wait self.priority = priority @@ -134,8 +135,8 @@ init -1 python: self.autodequeue = autodequeue self.repeat = repeat self.fail_suffixes = tuple(fail_suffixes) - self.ignore_labels = ignore_labels - self.subevents = subevents + self.ignore_labels = list(ignore_labels) + self.subevents = list(subevents) self.disabled = disabled for ev in subevents: @@ -180,9 +181,6 @@ init -1 python: def queue(self, name): self._queue = name - if name is not None and not hasattr(store, name): - setattr(store, name, EventQueue(name)) - def enqueue(self, queue=None): if queue: queue = getattr(store, queue).queue @@ -220,6 +218,11 @@ init -1 python: self.queued = False + def reset(self): + self.started = False + self.completed = False + self.completed_failed = False + def requirements_met(self): if self.req: try: diff --git a/game/scripts/events/variables.rpy b/game/scripts/events/variables.rpy index 92d552a1..768b2c60 100644 --- a/game/scripts/events/variables.rpy +++ b/game/scripts/events/variables.rpy @@ -3,7 +3,6 @@ default states.active_girl = None default states.last_girl = None default states.room = "main_room" -default states.menu_pos = (0.5, 0.5) default states.map.unlocked = False default states.map.seventh_floor.unlocked = False diff --git a/game/scripts/gui/_gui_.rpy b/game/scripts/gui/_gui_.rpy index 5408841e..11ea40a9 100644 --- a/game/scripts/gui/_gui_.rpy +++ b/game/scripts/gui/_gui_.rpy @@ -26,7 +26,9 @@ init python in gui: The returned form is "{theme}_{name}", so styles can fall back on parent styles. """ theme = "dark" if is_dark() else "light" - return "{}_{}".format(theme, name) if name else theme + if name: + return f"{theme}_{name}" + return theme def format(template): """ diff --git a/game/scripts/gui/_images_.rpy b/game/scripts/gui/_images_.rpy index 525d3b65..39ddc9e9 100644 --- a/game/scripts/gui/_images_.rpy +++ b/game/scripts/gui/_images_.rpy @@ -91,53 +91,53 @@ image game_title: #TODO Add sparkle to game logo # #sparkle - contains: - subpixel True - xpos 50 - ypos 200 - xanchor 0.5 - yanchor 0.5 - zoom 0.0 - "gui/main_menu/sparkle.webp" - linear 0.8 zoom 1.0 - linear 0.5 zoom 0.0 - pause 5 - repeat + # contains: + # subpixel True + # xpos 50 + # ypos 200 + # xanchor 0.5 + # yanchor 0.5 + # zoom 0.0 + # "gui/main_menu/sparkle.webp" + # linear 0.8 zoom 1.0 + # linear 0.5 zoom 0.0 + # pause 5 + # repeat - # #shine silver (synchronized) - contains: - subpixel True - xpos 115 - ypos 222 - xanchor 0.5 - yanchor 0.5 - zoom 0.0 - "images/title/sparkle.webp" - pause 1.3 - linear 0.5 zoom 1.0 - linear 0.5 zoom 0.0 + # # #shine silver (synchronized) + # contains: + # subpixel True + # xpos 115 + # ypos 222 + # xanchor 0.5 + # yanchor 0.5 + # zoom 0.0 + # "images/title/sparkle.webp" + # pause 1.3 + # linear 0.5 zoom 1.0 + # linear 0.5 zoom 0.0 - xpos 135 - ypos 192 - linear 0.5 zoom 1.0 - linear 0.5 zoom 0.0 + # xpos 135 + # ypos 192 + # linear 0.5 zoom 1.0 + # linear 0.5 zoom 0.0 - xpos 186 - ypos 217 - linear 0.5 zoom 1.0 - linear 0.5 zoom 0.0 + # xpos 186 + # ypos 217 + # linear 0.5 zoom 1.0 + # linear 0.5 zoom 0.0 - xpos 220 - ypos 223 - linear 0.5 zoom 1.0 - linear 0.5 zoom 0.0 + # xpos 220 + # ypos 223 + # linear 0.5 zoom 1.0 + # linear 0.5 zoom 0.0 - xpos 275 - ypos 220 - linear 0.5 zoom 1.0 - linear 0.5 zoom 0.0 - pause 12.6 - repeat + # xpos 275 + # ypos 220 + # linear 0.5 zoom 1.0 + # linear 0.5 zoom 0.0 + # pause 12.6 + # repeat image candle_fire: "gui/main_menu/candle/fire_01.webp" diff --git a/game/scripts/gui/_styles_.rpy b/game/scripts/gui/_styles_.rpy index 3366f3aa..ae89c717 100644 --- a/game/scripts/gui/_styles_.rpy +++ b/game/scripts/gui/_styles_.rpy @@ -210,6 +210,8 @@ style dark_say_label: style light_say_label: color settings.get('text_color_day') +style say_label_alt is say_dialogue_alt + # Say dialogue style say_dialogue is default: @@ -221,6 +223,10 @@ style dark_say_dialogue: style light_say_dialogue: color settings.get('text_color_day') +style say_dialogue_alt: + color "#ffffff" + outlines [(1, "#000000", 1, 0)] + style say_thought is say_dialogue style dark_say_thought is dark_say_dialogue style light_say_thought is light_say_dialogue @@ -255,6 +261,10 @@ style light_say_window is light_window: take say_window background "interface/frames/gold/frame.webp" +style say_window_alt: + take say_window + background "fade_gradient" + # Namebox style namebox is gui_frame: @@ -272,6 +282,9 @@ style light_namebox is light_gui_frame: take namebox # background Transform(Frame("gui/light_namebox.png", 8, 8)) +style namebox_alt: + take namebox + # Text style dark_text: diff --git a/game/scripts/gui/history.rpy b/game/scripts/gui/history.rpy index 4421da72..3574a9cc 100644 --- a/game/scripts/gui/history.rpy +++ b/game/scripts/gui/history.rpy @@ -36,7 +36,7 @@ screen history(): if "icon" in entry.show_args: $ icon = entry.show_args["icon"] - add Fixed(gui.format("interface/achievements/{}/iconbox.webp"), Transform("interface/icons/head/{}.webp".format(icon), xzoom=-1, size=(40, 40), align=(0.5, 0.5)), fit_first=True) + add Fixed(gui.format("interface/achievements/{}/iconbox.webp"), Transform(f"interface/icons/head/{icon}.webp", xzoom=-1, size=(40, 40), align=(0.5, 0.5)), fit_first=True) if entry.who: text entry.who: diff --git a/game/scripts/gui/main_menu.rpy b/game/scripts/gui/main_menu.rpy index ec01c15a..c0526ef3 100644 --- a/game/scripts/gui/main_menu.rpy +++ b/game/scripts/gui/main_menu.rpy @@ -176,9 +176,9 @@ screen game_menu(title, scroll=None, yinitial=0.0): padding (15, 15, 15, 15) transclude - use navigation(title) + use navigation(title): - label title anchor (0.5, 0.5) align (0.9, 0.15) + label title xalign .5 if main_menu and not title == "Updater": key "game_menu" action ShowMenu("main_menu") @@ -229,7 +229,7 @@ screen navigation(title=None): default show_quick_start = False default show_dev_start = False - default is_sensitive = not bool(title == "Updater") + default is_sensitive = title != "Updater" key "keydown_K_LSHIFT" action SetLocalVariable("show_quick_start", True) key "keyup_K_LSHIFT" action SetLocalVariable("show_quick_start", False) diff --git a/game/scripts/gui/preferences.rpy b/game/scripts/gui/preferences.rpy index 0524024c..06ba5630 100644 --- a/game/scripts/gui/preferences.rpy +++ b/game/scripts/gui/preferences.rpy @@ -138,7 +138,7 @@ screen preferences_visuals(): label "Framerate" - textbutton ("{} fps".format(int(renpy.get_refresh_rate()))) action [Preference("gl framerate", None), Notify(fps_msg)] + textbutton (f"{int(renpy.get_refresh_rate())} fps") action [Preference("gl framerate", None), Notify(fps_msg)] if renpy.get_refresh_rate() > 60: textbutton "60 fps" action [Preference("gl framerate", 60), Notify(fps_msg)] textbutton "30 fps" action [Preference("gl framerate", 30), Notify(fps_msg)] @@ -174,11 +174,11 @@ screen preferences_visuals(): vbox: style_prefix gui.theme("slider") - label _("Image cache ([persistent.custom_settings[image_cache_size]]MB)") + label _("Image cache ([persistent.custom_settings['image_cache_size']]MB)") hbox: bar value DictValue(persistent.custom_settings, "image_cache_size", range=1792, max_is_zero=False, style="slider", offset=256, step=128, force_step=True, action=Notify("Restart the game to apply image cache size changes.")) tooltip "Improves performance at a cost of higher memory usage." - + text get_gpu_info() yalign 1.0 size 10 screen preferences_sound(): @@ -325,9 +325,9 @@ auto saves, quick saves, and manual saves.{/size}\n Are you sure?""" define gui.SAVE_INCOMPATIBLE_WARNING = """{color=#7a0000}Warning!{/color} -{size=-4}The save file you are attempting to load is not compatible -with the current game version. While you can try loading it, -doing so may result in unexpected crashes and bugs. +{size=-4}The save file you are attempting to load is not compatible +with the current game version. While you can try loading it, +doing so may result in unexpected crashes and bugs. Proceed anyway?""" diff --git a/game/scripts/gui/save_files.rpy b/game/scripts/gui/save_files.rpy index 5be285e3..a50545bb 100644 --- a/game/scripts/gui/save_files.rpy +++ b/game/scripts/gui/save_files.rpy @@ -92,9 +92,9 @@ screen file_slots(title): $ minutes, seconds = divmod(int(playtime), 60) $ hours, minutes = divmod(minutes, 60) - text FileTime(slot, format=_(slot_time_format)) - text "Day: {}".format(day) - text "Playtime: {}H {}M {}S".format(hours, minutes, seconds) + text FileTime(slot, format=slot_time_format) + text f"Day: {day}" + text f"Playtime: {hours}H {minutes}M {seconds}S" else: text "INCOMPATIBLE VERSION" color "#f00" @@ -104,7 +104,7 @@ screen file_slots(title): key "save_delete" action FileDelete(slot) else: - text "Empty Slot {}.".format(FileSlotName(slot, gui.file_slot_cols * gui.file_slot_rows)) style "slot_button_text" + text f"Empty Slot {FileSlotName(slot, gui.file_slot_cols * gui.file_slot_rows)}." style "slot_button_text" ## Buttons to access other pages. hbox: @@ -131,7 +131,7 @@ screen file_slots(title): xminimum 40 action FilePage(page) if page < 10: - keysym "K_{}".format(page) + keysym f"K_{page}" textbutton _(">") action FilePageNext() diff --git a/game/scripts/gui/say.rpy b/game/scripts/gui/say.rpy index 64425a70..d58bea62 100644 --- a/game/scripts/gui/say.rpy +++ b/game/scripts/gui/say.rpy @@ -38,32 +38,50 @@ screen say(who, what, side_image=None, icon=None): if text_inner_thought(what) and not renpy.showing("cg"): add "fade_gradient" + elif renpy.showing("cg"): + add "interface/bld.webp": + if _windows_hidden: + ypos 1000 if side_image: - add side_image yalign 1.0 yanchor 1.0 zoom 0.5 + add side_image yalign 1.0 zoom 0.5 else: add SideImage() window id "window": - style gui.theme("say_window") + if renpy.showing("cg"): + style "say_window_alt" + + if who: + window: + id "namebox" + style "namebox_alt" + text who: + style "say_label_alt" + + text what: + id "what" + style "say_dialogue_alt" + else: + style gui.theme("say_window") + + if who: + window: + id "namebox" + style gui.theme("namebox") + text who: + style gui.theme("say_label") + + text what: + id "what" + style gui.theme("say_dialogue") if _windows_hidden: - ypos 1000 + ypos 1000 if _game_menu_screen: use quick_menu - if who: - window: - id "namebox" - style gui.theme("namebox") - text who: - style gui.theme("say_label") - - text what: - id "what" - style gui.theme("say_dialogue") - if renpy.android: button: style "empty" @@ -90,7 +108,10 @@ screen say(who, what, side_image=None, icon=None): screen quick_menu(): hbox: - style_prefix "quick" + if renpy.showing("cg"): + style_prefix "quick_alt" + else: + style_prefix "quick" xalign 1.0 yoffset -30 @@ -114,6 +135,16 @@ style quick_button_text is default: selected_hover_color "#cc0" insensitive_color "#4448" +style quick_alt_button is quick_button + +style quick_alt_button_text: + take quick_button_text + idle_color "#8888" + hover_color "#fff" + idle_outlines [(1, "#0008", 1, 1)] + hover_outlines [(1, "#000", 1, 1)] + + # Choice screen # # This screen is used to display the in-game choices presented by the menu @@ -122,14 +153,16 @@ style quick_button_text is default: # # https://www.renpy.org/doc/html/screen_special.html#choice -screen choice(items): +define blacklist_screens = {"say", "letter", "bld1"} +define choice_width = int(config.screen_width/2) + +screen choice(items, menu_yalign=.6): tag menu modal True zorder 30 style_prefix gui.theme("menu") - default blacklist_screens = {"say", "letter", "bld1"} # Combine sets default blacklist_tags = set(get_character_tag(x) for x in states.dolls) # Dont add the fade if character or saybox is present (They have their own triggers for fading) @@ -138,13 +171,13 @@ screen choice(items): window at fade_show_hide(0.15): style "empty" - align states.menu_pos + xalign .5 + yalign menu_yalign vbox: spacing 0 - $ choice_width = int(config.screen_width/2) - $ max_progress = max([len(e.kwargs.get("progress", [])) for e in items]) + default max_progress = max(len(e.kwargs.get("progress", [])) for e in items) for i, entry in enumerate(items, 1): $ style_part = entry.kwargs.get("style", None) @@ -160,7 +193,7 @@ screen choice(items): style "empty" if style_part: - style_prefix gui.theme("{}_menu".format(style_part)) + style_prefix gui.theme(f"{style_part}_menu") fit_first "height" @@ -180,8 +213,9 @@ screen choice(items): hbox: spacing 2 xpos choice_width - 5 - align (1.0, 0.5) - for i in range(0, max_progress): + xanchor 1. + yalign .5 + for i in range(max_progress): if i < len(progress): add progress[i] else: diff --git a/game/scripts/interface/achievements.rpy b/game/scripts/interface/achievements.rpy index b90b29c7..3e6f966c 100644 --- a/game/scripts/interface/achievements.rpy +++ b/game/scripts/interface/achievements.rpy @@ -1,127 +1,133 @@ -define achievements_dict = { - "unlockher": ["Characters", "Granger Danger", "Awarded for unlocking Hermione Granger.", False, "interface/icons/head/hermione.webp", False], - "unlockcho": ["Characters", "Chang Dynasty", "Awarded for unlocking Cho Chang.", False, "interface/icons/head/cho.webp", False], - "unlocklun": ["Characters", "Looney Tunes", "Awarded for unlocking Luna Lovegood.", False, "interface/icons/head/luna.webp", False], - "unlockast": ["Characters", "Green Peas", "Awarded for unlocking Astoria Greengrass.", False, "interface/icons/head/astoria.webp", False], - "unlockton": ["Characters", "Nymphadoreador", "Awarded for unlocking Nymphadora Tonks.", False, "interface/icons/head/tonks.webp", False], - "overwhored": ["Characters", "Overwhored", "Awarded for fully corrupting Hermione.", False, "interface/icons/head/hermione.webp", False], - "unlocksus": ["Characters", "Boner", "Awarded for unlocking Susan Bones.", False, "interface/icons/head/susan.webp", False], - "unlocksna": ["Characters", "Strictly colleagues", "Awarded for unlocking Severus Snape.", False, "interface/icons/head/snape.webp", False], - "mirror": ["Mirror", "Mirror, mirror on the wall..", "Awarded for unlocking the Room of Requirement.", False, "images/rooms/room_of_requirement/mirror_hover.webp", False], - "gold": ["General", "Gold Digger", "Awarded for having 10,000 gold in total.", False, "interface/icons/gold.webp", False], - "drunkard": ["General", "Drunken Master", "Awarded for collecting 25 bottles of wine.", False, "interface/icons/wine.webp", True], - "workaholic": ["General", "Workaholic", "Awarded for completing five full reports.", False, "interface/icons/generic_scroll.webp", False], - "fireplace": ["General", "Feel the Heat", "Awarded for lighting the fireplace 5 times or more.", False, "images/rooms/main_room/fireplace/fireplace_idle.webp", True], - "peta": ["General", "I think I forgot something...", "Awarded for not feeding the bird for 50 days.... \nYou monster.\n{size=-4}Disclaimer: No real nor fictional animals were harmed in the process.{/size}", False, "images/rooms/main_room/phoenix/phoenix_01.webp", True], - "petpal": ["General", "Regular stroking", "Awarded for petting the bird 25 times.", False, "images/rooms/main_room/phoenix/phoenix_01.webp", False], - "postman": ["Cardgame", "Poster Boy", "Awarded for buying all posters from the token shop.", False, "interface/icons/agrabah_poster.webp", False], - "hats": ["Cardgame", "Mad Hatter", "Awarded for buying all hat decorations from the token shop.", False, "interface/icons/icon_gambler_hat.webp", False], - "daddy": ["Characters", "Who's your daddy?", "Awarded for letting Hermione call you a {size=-5}(sugar){/size} daddy.", False, "interface/icons/head/hermione.webp", True], - "pantiesfap": ["Characters", "I sneezed on them...", "Awarded for rubbing one out on Hermione's panties.", False, "characters/genie/chibis/jerk_off/02.webp", False], - "pantiesfapcho": ["Characters", "Exercise is important", "Awarded for rubbing one out on Cho's panties.", False, "characters/genie/chibis/jerk_off/02.webp", False], - "bros": ["Characters", "Bros before hoes", "Awarded for becoming best pals with Snape.", False, "interface/icons/head/snape.webp", False], - "knock": ["Characters", "*Knock* *knock*", "Awarded for telling Hermione to go away during her introductory events.", False, "images/rooms/main_room/door/door_idle.webp", True], - "decorator": ["Cardgame", "Decorator", "Awarded for decorating the office for the first time.", False, "interface/icons/stag_trophy.webp", False], - "flashback": ["Cardgame", "Flashback", "Awarded for retelling what actually happened...", False, "interface/icons/cards.webp", True], - "start": ["General", "Welcome to Hogwarts!", "Awarded for finishing the intro.", False, "interface/icon.webp", False], - "export": ["General", "Sharing is caring", "Awarded for exporting an outfit through the wardrobe menu.", False, "interface/wardrobe/icons/load.webp", False], - "Credits": ["General", "New game, who this?", "Awarded for checking out the Credits Menu.", False, "interface/icons/silver_scroll.webp", False], - "Cardwin": ["Cardgame", "Time to duel", "Awarded for winning your first Card game duel.", False, "interface/icons/cards.webp", False], - "puzzle": ["General", "Down the hatch!", "Awarded for wasting a bottle of unbelievably rare phoenix tears by drinking it.", False, "interface/icons/item_potion.webp", True], - "ending": ["General", "Bittersweet Farewell", "Awarded for reaching the original ending.", False, "interface/icons/silver.webp", True], +init python: + from collections import namedtuple + AchievementKind = namedtuple("AchievementKind", ("category", "name", "description", "icon", "secret")) + AchievementKind.title = AchievementKind.name + +define achievements_db = { + # id : (categoryname, title, description, icon, secret) + "unlockher": AchievementKind("Characters", "Granger Danger", "Awarded for unlocking Hermione Granger.", "interface/icons/head/hermione.webp", False), + "unlockcho": AchievementKind("Characters", "Chang Dynasty", "Awarded for unlocking Cho Chang.", "interface/icons/head/cho.webp", False), + "unlocklun": AchievementKind("Characters", "Looney Tunes", "Awarded for unlocking Luna Lovegood.", "interface/icons/head/luna.webp", False), + "unlockast": AchievementKind("Characters", "Green Peas", "Awarded for unlocking Astoria Greengrass.", "interface/icons/head/astoria.webp", False), + "unlockton": AchievementKind("Characters", "Nymphadoreador", "Awarded for unlocking Nymphadora Tonks.", "interface/icons/head/tonks.webp", False), + "overwhored": AchievementKind("Characters", "Overwhored", "Awarded for fully corrupting Hermione.", "interface/icons/head/hermione.webp", False), + "unlocksus": AchievementKind("Characters", "Boner", "Awarded for unlocking Susan Bones.", "interface/icons/head/susan.webp", False), + "unlocksna": AchievementKind("Characters", "Strictly colleagues", "Awarded for unlocking Severus Snape.", "interface/icons/head/snape.webp", False), + "mirror": AchievementKind("Mirror", "Mirror, mirror on the wall..", "Awarded for unlocking the Room of Requirement.", "images/rooms/room_of_requirement/mirror_hover.webp", False), + "gold": AchievementKind("General", "Gold Digger", "Awarded for having 10,000 gold in total.", "interface/icons/gold.webp", False), + "drunkard": AchievementKind("General", "Drunken Master", "Awarded for collecting 25 bottles of wine.", "interface/icons/wine.webp", True), + "workaholic": AchievementKind("General", "Workaholic", "Awarded for completing five full reports.", "interface/icons/generic_scroll.webp", False), + "fireplace": AchievementKind("General", "Feel the Heat", "Awarded for lighting the fireplace 5 times or more.", "images/rooms/main_room/fireplace/fireplace_idle.webp", True), + "peta": AchievementKind("General", "I think I forgot something...", "Awarded for not feeding the bird for 50 days.... \nYou monster.\n{size=-4}Disclaimer: No real nor fictional animals were harmed in the process.{/size}", "images/rooms/main_room/phoenix/phoenix_01.webp", True), + "petpal": AchievementKind("General", "Regular stroking", "Awarded for petting the bird 25 times.", "images/rooms/main_room/phoenix/phoenix_01.webp", False), + "postman": AchievementKind("Cardgame", "Poster Boy", "Awarded for buying all posters from the token shop.", "interface/icons/agrabah_poster.webp", False), + "hats": AchievementKind("Cardgame", "Mad Hatter", "Awarded for buying all hat decorations from the token shop.", "interface/icons/icon_gambler_hat.webp", False), + "daddy": AchievementKind("Characters", "Who's your daddy?", "Awarded for letting Hermione call you a {size=-5}(sugar){/size} daddy.", "interface/icons/head/hermione.webp", True), + "pantiesfap": AchievementKind("Characters", "I sneezed on them...", "Awarded for rubbing one out on Hermione's panties.", "characters/genie/chibis/jerk_off/02.webp", False), + "pantiesfapcho": AchievementKind("Characters", "Exercise is important", "Awarded for rubbing one out on Cho's panties.", "characters/genie/chibis/jerk_off/02.webp", False), + "bros": AchievementKind("Characters", "Bros before hoes", "Awarded for becoming best pals with Snape.", "interface/icons/head/snape.webp", False), + "knock": AchievementKind("Characters", "*Knock* *knock*", "Awarded for telling Hermione to go away during her introductory events.", "images/rooms/main_room/door/door_idle.webp", True), + "decorator": AchievementKind("Cardgame", "Decorator", "Awarded for decorating the office for the first time.", "interface/icons/stag_trophy.webp", False), + "flashback": AchievementKind("Cardgame", "Flashback", "Awarded for retelling what actually happened...", "interface/icons/cards.webp", True), + "start": AchievementKind("General", "Welcome to Hogwarts!", "Awarded for finishing the intro.", "interface/icon.webp", False), + "export": AchievementKind("General", "Sharing is caring", "Awarded for exporting an outfit through the wardrobe menu.", "interface/wardrobe/icons/load.webp", False), + "Credits": AchievementKind("General", "New game, who this?", "Awarded for checking out the Credits Menu.", "interface/icons/silver_scroll.webp", False), + "Cardwin": AchievementKind("Cardgame", "Time to duel", "Awarded for winning your first Card game duel.", "interface/icons/cards.webp", False), + "puzzle": AchievementKind("General", "Down the hatch!", "Awarded for wasting a bottle of unbelievably rare phoenix tears by drinking it.", "interface/icons/item_potion.webp", True), + "ending": AchievementKind("General", "Bittersweet Farewell", "Awarded for reaching the original ending.", "interface/icons/silver.webp", True), #1.37 HG achievements - "busted": ["Characters", "BUSTED!", "Awarded for getting busted by Hermione when busting a nut.", False, "interface/icons/head/hermione.webp", False], - "herstrip": ["Characters", "Dance lessons", "Awarded for having Hermione dance naked in front of you... and Snape.", False, "interface/icons/head/hermione.webp", False], - "herkiss": ["Characters", "First Kiss", "Awarded for having Hermione make out with you-- r... cock...", False, "interface/icons/head/hermione.webp", False], - "hertits": ["Characters", "Boobs Lover", "Awarded for sticking it between Hermione's fun bags.", False, "interface/icons/head/hermione.webp", False], - "headlib": ["Characters", "Head Librarian", "Awarded for releasing your seed in Hermione's mouth.", False, "interface/icons/head/hermione.webp", False], - "nerdgasm": ["Characters", "Nerdgasm", "Awarded for doing the deed with Hermione.", False, "interface/icons/head/hermione.webp", False] + "busted": AchievementKind("Characters", "BUSTED!", "Awarded for getting busted by Hermione when busting a nut.", "interface/icons/head/hermione.webp", False), + "herstrip": AchievementKind("Characters", "Dance lessons", "Awarded for having Hermione dance naked in front of you... and Snape.", "interface/icons/head/hermione.webp", False), + "herkiss": AchievementKind("Characters", "First Kiss", "Awarded for having Hermione make out with you-- r... cock...", "interface/icons/head/hermione.webp", False), + "hertits": AchievementKind("Characters", "Boobs Lover", "Awarded for sticking it between Hermione's fun bags.", "interface/icons/head/hermione.webp", False), + "headlib": AchievementKind("Characters", "Head Librarian", "Awarded for releasing your seed in Hermione's mouth.", "interface/icons/head/hermione.webp", False), + "nerdgasm": AchievementKind("Characters", "Nerdgasm", "Awarded for doing the deed with Hermione.", "interface/icons/head/hermione.webp", False) } +init python hide: + for name in achievements_db: + achievement.register(name) + + # keep the achievements from earlier versions + if isinstance(persistent.achievements, dict): + # id : [categoryname, title, description, unlocked, icon, secret] + for k, v in persistent.achievements.items(): + if v[3]: + achievement.grant(k) + del persistent.achievements + init python: - if persistent.achievements == None: - persistent.achievements = achievements_dict.copy() - class Achievements(object): + """ + Useless class, can't be rolled out because of pickle and save compatibility. + """ - def __init__(self): - self.achievements = persistent.achievements - self.attempt_repair() - - if config.developer: - self.validate() - - def validate(self): + @staticmethod + def validate(): """Check if icons are loadable at init""" - for i in self.achievements.values(): - if not renpy.loadable(i[4]): - raise IOError("\"{}\"".format(i[4])) + for i in achievements_db.values(): + if not renpy.loadable(i.icon): + raise IOError(repr(i.icon)) - def attempt_repair(self): - """Achievements are kept in a persistent state which is shared across versions, - because of that, they occassionally might need to be checked - if the set values are equal to the pre-defined values. + status = staticmethod(achievement.has) - Attempted repair will try to fix the mismatched values without resetting the completion status.""" - - # Save unlock states - unlock_states = {k: v[3] for k, v in self.achievements.items()} - # Keys that should not exist in the persistent state anymore - orphans = self.achievements.keys() - achievements_dict.keys() - - # Making some K-pop - for k in orphans: - self.achievements.pop(k, None) - - self.achievements.update(achievements_dict) - - # Reapply unlock states - for k, v in self.achievements.items(): - v[3] = unlock_states.get(k, False) - - def status(self, id): - return self.achievements.get(id)[3] - - def unlock(self, id, silent=False): + @staticmethod + def unlock(id, silent=False): if _in_replay: return - if persistent.achievements[id][3] == False: - self.achievements[id][3] = True - persistent.achievements[id][3] = True + if not achievement.has(id): + achievement.grant(id) if not silent: renpy.play('sounds/achievement.ogg') - renpy.show_screen("achievement_window", msg=persistent.achievements[id][1], title="Achievement unlocked!", icon=persistent.achievements[id][4]) + __popup_stack.append(id) - def lock(self, id): - self.achievements[id][3] = False - persistent.achievements[id][3] = False + lock = staticmethod(achievement.clear) + + def achievement_sortfilter(lst, sortby="A-z", filtering=None): + """ + Takes a list/iterable of achievement ids, returns a list of achievement ids + """ - def achievement_sortfilter(item, sortby="A-z", filtering=None): if filtering == "Locked": - item = [x for x in item if x[1][3] is False] + lst = (x for x in lst if not achievement.has(x)) elif filtering == "Unlocked": - item = [x for x in item if x[1][3] is True] + lst = filter(achievement.has, lst) elif filtering == "Secret": - item = [x for x in item if x[1][5] is True] + lst = (x for x in lst if achievements_db[x].secret is True) # Always sort alphabetically first. - item = sorted(item, key=lambda x: natsort_key(x[1][1])) + lst = sorted(lst, key=lambda x: natsort_key(achievements_db[x].title)) if sortby == "z-A": - item = sorted(item, key=lambda x: natsort_key(x[1][1]), reverse=True) - elif current_sorting == "Unlocked": - item = sorted(item, key=lambda x: x[1][3] is False) - elif current_sorting == "Locked": - item = sorted(item, key=lambda x: x[1][3] is True) + lst.sort(key=lambda x: natsort_key(achievements_db[x].title), reverse=True) + elif sortby == "Unlocked": + lst.sort(key=lambda x: not achievement.has(x)) + elif sortby == "Locked": + lst.sort(key=achievement.has) - return item + return lst default achievements = Achievements() ### +init python: + # intentionaly not a define nor a default + __popup_stack = [] + + config.after_default_callbacks.append(__popup_stack.clear) + config.always_shown_screens.append("achievement_main") + +screen achievement_main(): + layer "interface" + + vbox: + for id index id in __popup_stack[:3]: + use achievement_window(msg=achievements_db[id].title, title="Achievement unlocked!", icon=achievements_db[id].icon) + timer 6 action Function(__popup_stack.remove, id) + label popup(msg="", title="", icon=None, xpos=0, ypos=60, sound=True, soundfile='sounds/achievement.ogg'): if sound: play sound soundfile @@ -162,94 +168,75 @@ screen achievement_window(msg="", title="", icon=None, xpos=0, ypos=60): ypos 12 spacing 10 xalign 0.5 - text title size 18 xalign 0.5 xanchor 0.5 - text msg size 14 xalign 0.5 xanchor 0.5 + text title size 18 xalign 0.5 + text msg size 14 xalign 0.5 timer 6.0 action Hide("achievement_window") -transform rotate_circular(): +transform rotate_circular(t=7): on show, appear, start: + subpixel True rotate 0 - linear 7.0 rotate 360 + linear t rotate 360 repeat #################################### ############# Menu ################# #################################### +define achievement_categories_sorted = ("All", "General", "Characters", "Cardgame", "Mirror") +define items_shown = 36 + +init python: + class __SetCategory(Action): + def __init__(self, category): + self.category = category + + def __call__(self): + global current_category + global number_unlocked + + current_category = self.category + if current_category == "All": + category_items = achievements_db + else: + category_items = filter((lambda x: current_category==achievements_db[x].category), achievements_db) + __regen(category_items) + number_unlocked = len(tuple(filter(achievement.has, menu_items))) + + def __regen(category_items=achievements_db): + global menu_items + global menu_items_length + global current_page + global current_item + + menu_items = achievement_sortfilter(category_items, current_sorting, current_filter) + menu_items_length = len(menu_items) + current_page = 0 + current_item = next(iter(menu_items), None) + renpy.restart_interaction() + label achievement: $ gui.in_context("achievement_menu") jump main_room_menu label achievement_menu(xx=150, yy=90): - python: - achievement_categories_sorted = ["All", "General", "Characters", "Cardgame", "Mirror"] + $ renpy.dynamic( + current_page = 0, + current_category = achievement_categories_sorted[0], + current_filter = None, + current_sorting = "Unlocked", + menu_items = achievement_sortfilter(achievements_db, "Unlocked", None), + number_unlocked = len(tuple(filter(achievement.has, achievements_db))) + ) + $ renpy.dynamic( + menu_items_length = len(menu_items), + current_item = next(iter(menu_items), None), + ) - items_shown = 36 - current_page = 0 - current_category = achievement_categories_sorted[0] - current_filter = None - current_sorting = "Unlocked" + call screen achievements(xx, yy) - category_items = list(persistent.achievements.items()) - menu_items = achievement_sortfilter(category_items, current_sorting, current_filter) - menu_items_length = len(menu_items) - current_item = next(iter(menu_items), None) - - renpy.show_screen("achievements", xx, yy) - - label .after_init: - - python: - _choice = ui.interact() - - if _choice[0] == "select": - current_item = _choice[1] - elif _choice[0] == "category": - current_category = _choice[1] - if current_category == "All": - category_items = list(persistent.achievements.items()) - else: - category_items = [x for x in list(persistent.achievements.items()) if current_category in x[1][0]] - menu_items = achievement_sortfilter(category_items, current_sorting, current_filter) - menu_items_length = len(menu_items) - current_page = 0 - current_item = next(iter(menu_items), None) - elif _choice == "inc": - current_page += 1 - elif _choice == "dec": - current_page += -1 - elif _choice == "filter": - if current_filter == None: - current_filter = "Locked" - elif current_filter == "Locked": - current_filter = "Unlocked" - elif current_filter == "Unlocked": - current_filter = "Secret" - else: - current_filter = None - menu_items = achievement_sortfilter(category_items, current_sorting, current_filter) - menu_items_length = len(menu_items) - current_page = 0 - current_item = next(iter(menu_items), None) - elif _choice == "sort": - if current_sorting == "A-z": - current_sorting = "z-A" - elif current_sorting == "z-A": - current_sorting = "Unlocked" - elif current_sorting == "Unlocked": - current_sorting = "Locked" - else: - current_sorting = "A-z" - menu_items = achievement_sortfilter(category_items, current_sorting, current_filter) - menu_items_length = len(menu_items) - current_page = 0 - current_item = next(iter(menu_items), None) - else: - renpy.hide_screen("achievements") - renpy.return_statement() - - jump .after_init + return screen achievements(xx, yy): tag achievements @@ -264,16 +251,16 @@ screen achievements(xx, yy): use close_button fixed: + pos (xx, yy) if settings.get("animations"): at gui_animation - use achievement_menu(xx, yy) - use achievement_menuitem(xx, yy) + use achievement_menu() + use achievement_menuitem() -screen achievement_menu(xx, yy): +screen achievement_menu(): window: style "empty" style_prefix gui.theme('achievements') - pos (xx, yy) xysize (207, 454) use invisible_button() @@ -287,22 +274,22 @@ screen achievement_menu(xx, yy): vbox: textbutton category: selected (current_category == category) - action Return(["category", category]) + action __SetCategory(category) add gui.format("interface/achievements/{}/spacer_left.webp") vbox: style_prefix gui.theme('achievements_filters') pos (6, 384) - if current_filter == None: - textbutton "Show: All" action Return("filter") + if current_filter is None: + textbutton "Show: All" action [CycleVariable("current_filter", (None, "Locked", "Unlocked", "Secret")), __regen] else: - textbutton "Show: [current_filter]" action Return("filter") - textbutton "Sort by: [current_sorting]" action Return("sort") + textbutton "Show: [current_filter]" action [CycleVariable("current_filter", (None, "Locked", "Unlocked", "Secret")), __regen] + textbutton "Sort by: [current_sorting]" action [CycleVariable("current_sorting", ("A-z", "z-A", "Unlocked", "Locked")), __regen] -screen achievement_menuitem(xx, yy): +screen achievement_menuitem(): window: style "empty" - pos (xx+217, yy-53) + pos (217, -53) xysize (560, 507) use invisible_button() @@ -312,7 +299,7 @@ screen achievement_menuitem(xx, yy): text "Achievements" size 22 xalign 0.5 ypos 65 - text "Unlocked: "+str(len([x for x in menu_items if x[1][3] is True]))+"/[menu_items_length]" size 12 pos (24, 70) + text "Unlocked: [number_unlocked]/[menu_items_length]" size 12 pos (24, 70) # Page counter if menu_items_length > items_shown: @@ -330,71 +317,80 @@ screen achievement_menuitem(xx, yy): idle gui.format("interface/frames/{}/arrow_up.webp") if not current_page <= 0: hover image_hover(gui.format("interface/frames/{}/arrow_up.webp")) - action Return("dec") + action SetVariable("current_page", current_page-1) + # TODO: in 8.2, replace with IncrementVariable("current_page", -1) imagebutton: idle Transform(gui.format("interface/frames/{}/arrow_up.webp"), yzoom = -1.0) if current_page < math.ceil((menu_items_length-1)/items_shown)-1: hover Transform(image_hover(gui.format("interface/frames/{}/arrow_up.webp")), yzoom = -1.0) - action Return("inc") + action SetVariable("current_page", current_page+1) + # TODO: in 8.2, replace with IncrementVariable("current_page") # Add items - for i in range(current_page*items_shown, (current_page*items_shown)+items_shown): - if i < menu_items_length: - $ row = (i // 9) % 4 - $ col = i % 9 + grid 9 4: + style "empty" + pos (24, 113) + spacing 10 + + for it_item in menu_items[current_page*items_shown:(current_page+1)*items_shown]: + $ it_item_data = achievements_db[it_item] + $ it_item_unlocked = achievement.has(it_item) frame: style "empty" xsize 48 ysize 48 - pos (24+58*(col), 113+58*(row)) add gui.format("interface/achievements/{}/iconbox.webp") - if current_item and current_item[0] == menu_items[i][0]: + if current_item and current_item == it_item: add "interface/achievements/glow.webp" align (0.5, 0.5) zoom 0.105 alpha 0.7 at rotate_circular - if menu_items[i][1][4]: - if menu_items[i][1][3]: - $ image_zoom = crop_image_zoom(menu_items[i][1][4], 42, 42) - elif not menu_items[i][1][5]: - $ image_zoom = crop_image_zoom(menu_items[i][1][4], 42, 42, True) - else: - $ image_zoom = crop_image_zoom("interface/achievements/secret.webp", 35, 35, True) + if it_item_unlocked or not it_item_data.secret: + $ image_zoom = crop_image_zoom(it_item_data.icon, 42, 42, not it_item_unlocked) + else: + $ image_zoom = crop_image_zoom("interface/achievements/secret.webp", 35, 35, True) - if menu_items[i][1][0] == "Characters" and not (menu_items[i][1][5] is True and not menu_items[i][1][3] is True): - add image_zoom align (0.5, 1.0) yoffset -3 + add image_zoom: + xalign .5 + if it_item_data.category == "Characters" and (it_item_unlocked or not it_item_data.secret): + yalign 1. + yoffset -3 else: - add image_zoom align (0.5, 0.5) + yalign .5 button: style gui.theme("overlay_button") background "interface/achievements/glass_iconbox.webp" xsize 48 ysize 48 - action Return(["select", menu_items[i]]) - if menu_items[i][1][5] and not menu_items[i][1][3]: + action SetVariable("current_item", it_item) + if it_item_data.secret and not it_item_unlocked: tooltip "???" else: - tooltip str(menu_items[i][1][1]) + tooltip it_item_data.name if current_item: + $ current_item_data = achievements_db[current_item] + $ current_item_unlocked = achievement.has(current_item) frame: style "empty" xsize 96 ysize 96 pos (24, 375) add gui.format("interface/achievements/{}/icon_selected.webp") - if current_item[1][4]: - if current_item[1][3]: - $ image_zoom = crop_image_zoom(current_item[1][4], 84, 84) + + if current_item_unlocked or not current_item_data.secret: + $ image_zoom = crop_image_zoom(current_item_data.icon, 84, 84, not current_item_unlocked) + else: + $ image_zoom = crop_image_zoom("interface/achievements/secret.webp", 70, 70, True) + + add image_zoom: + xalign .5 + if current_item_data.category == "Characters" and (current_item_unlocked or not current_item_data.secret): + yalign 1. + yoffset -7 else: - if current_item[1][5]: - $ image_zoom = crop_image_zoom("interface/achievements/secret.webp", 70, 70, True) - else: - $ image_zoom = crop_image_zoom(current_item[1][4], 84, 84, True) - if current_item[1][0] == "Characters" and not (current_item[1][5] is True and not current_item[1][3] is True): - add image_zoom align (0.5, 1.0) yoffset -7 - else: - add image_zoom align (0.5, 0.5) + yalign .5 + add "interface/achievements/glass_selected.webp" pos (6, 6) add gui.format("interface/achievements/{}/highlight.webp") pos (112, 375) @@ -402,21 +398,18 @@ screen achievement_menuitem(xx, yy): hbox: spacing 5 xalign 0.5 - text current_item[1][1] ypos 380 size 16 xoffset 45 - if current_item[1][3]: + text current_item_data.name ypos 380 size 16 xoffset 45 + if current_item_unlocked: add "interface/unlocked_True.webp" xoffset 45 ypos 377 else: add "interface/unlocked_False.webp" xoffset 45 ypos 377 hbox: pos (132, 407) xsize 410 - if current_item[1][3]: - text current_item[1][2] size 12 + if current_item_unlocked or not current_item_data.secret: + text current_item_data.description size 12 else: - if current_item[1][5]: - text "???" size 12 - else: - text current_item[1][2] size 12 + text "???" size 12 # Category styles style achievements_categories_button is empty: diff --git a/game/scripts/interface/book.rpy b/game/scripts/interface/book.rpy index 908d4cc4..12f69908 100644 --- a/game/scripts/interface/book.rpy +++ b/game/scripts/interface/book.rpy @@ -1,12 +1,12 @@ init python: class book_readable_class(object): - def __init__(self, title, contents=[], **kwargs): + def __init__(self, title, contents=(), **kwargs): self.title = title self.page = 0 self.overflow=None self.title = title - self.contents = contents + self.contents = list(contents) self.__dict__.update(**kwargs) self.pages = len(self.contents)-1 @@ -79,24 +79,24 @@ label book_handle(book=None): show screen book_animator("book_page_next", 0.5) label .after_init: - $ _choice = ui.interact() + $ renpy.dynamic(__choice = ui.interact()) - if _choice == "next": + if __choice == "next": $ book.next() play sound "sounds/pageflip.ogg" show screen book_animator("book_page_next", 0.5) with d1 - elif _choice == "prev": + elif __choice == "prev": $ book.prev() play sound "sounds/pageflip.ogg" show screen book_animator("book_page_prev", 0.5) with d1 - elif _choice == "back": + elif __choice == "back": $ book.open() play sound "sounds/pageflipback.ogg" show screen book_animator("book_page_start", 0.5) with d1 - elif _choice == "Close": + elif __choice == "Close": $ book.close() play sound "sounds/bookclose.ogg" return @@ -125,19 +125,18 @@ screen book_menu(page, pages, title, page_title, page_text, page_overflow): xpos 600 ypos 130 xsize 250 ysize 300 - if page_title[1] != None: + if page_title[1] is not None: text page_title[1] ypos -20 size 16 xalign 0.5 - if page_text[1] != None: + if page_text[1] is not None: text page_text[1] size 12 ypos 40 text "{b}"+str(page+2)+"{/b}" xalign 0.5 ypos 350 size 11 imagebutton: pos (878, 100) ysize 400 - xalign 1.0 # Next if page < pages: - idle im.Alpha("interface/book/hover.webp", 0) + idle Transform("interface/book/hover.webp", alpha=0) hover "interface/book/hover.webp" action Return("next") # Fast Back to start @@ -151,7 +150,7 @@ screen book_menu(page, pages, title, page_title, page_text, page_overflow): imagebutton: pos (242, 100) ysize 400 - idle im.Alpha(Transform("interface/book/hover.webp", xzoom=-1.0), 0) + idle Transform("interface/book/hover.webp", xzoom=-1.0, alpha=0) hover Transform("interface/book/hover.webp", xzoom=-1.0) action Return("prev") diff --git a/game/scripts/interface/brewing.rpy b/game/scripts/interface/brewing.rpy index 645e01d2..d164c172 100644 --- a/game/scripts/interface/brewing.rpy +++ b/game/scripts/interface/brewing.rpy @@ -9,7 +9,7 @@ init python: item = sorted(item, key=lambda x: natsort_key(x.name)) if sortby == "z-A": - item = sorted(item, key=lambda x: natsort_key(x.name), reverse=True) + item.sort(key=lambda x: natsort_key(x.name), reverse=True) return item @@ -25,38 +25,35 @@ label brewing_menu(xx=150, yy=90): current_sorting = "A-z" menu_items = brewing_sortfilter(inventory.get_instances_of_type("potion"), current_sorting, current_filter) - menu_items_length = len(menu_items) current_item = next(iter(menu_items), None) show screen brewing(xx, yy) label .after_init: - $ _choice = ui.interact() + $ renpy.dynamic(__choice = ui.interact()) - if _choice[0] == "select": - $ current_item = _choice[1] - elif _choice == "filter": + if __choice[0] == "select": + $ current_item = __choice[1] + elif __choice == "filter": if current_filter == "Unlocked": $ current_filter = None - elif current_filter == None: + elif current_filter is None: $ current_filter = "Unlocked" $ menu_items = brewing_sortfilter(inventory.get_instances_of_type("potion"), current_sorting, current_filter) - $ menu_items_length = len(menu_items) $ current_item = next(iter(menu_items), None) - elif _choice == "sort": + elif __choice == "sort": if current_sorting == "A-z": $ current_sorting = "z-A" else: $ current_sorting = "A-z" $ menu_items = brewing_sortfilter(inventory.get_instances_of_type("potion"), current_sorting, current_filter) - $ menu_items_length = len(menu_items) #$ current_item = next(iter(menu_items), None) - elif _choice[0] == "make": - if _choice[1].has_ingredients(): + elif __choice[0] == "make": + if __choice[1].has_ingredients(): play sound "sounds/bubble.ogg" - $ _choice[1].make() + $ __choice[1].make() else: gen "It appears I'm missing some key ingredients..." ("base", xpos="far_left", ypos="head") else: @@ -79,16 +76,16 @@ screen brewing(xx, yy): use close_button fixed: + pos (xx, yy) if settings.get("animations"): at gui_animation - use brewing_menu(xx, yy) - use brewing_menuitem(xx, yy) + use brewing_menu + use brewing_menuitem -screen brewing_menu(xx, yy): +screen brewing_menu(): window: style "empty" style_prefix gui.theme('achievements') - pos (xx, yy) xysize (207, 454) use invisible_button() @@ -132,24 +129,24 @@ screen brewing_menu(xx, yy): add image_zoom align (0.5, 0.5) if i.owned > 0: - text str(i.owned) size 10 align (0.02, 0.1) color "#ffffff" outlines [ (1, "#000", 0, 0) ] + text "[i.owned]" size 10 align (0.02, 0.1) color "#ffffff" outlines [ (1, "#000", 0, 0) ] vbox: style_prefix gui.theme('achievements_filters') pos (6, 384) - if current_filter == None: + if current_filter is None: textbutton "Show: All" action Return("filter") else: textbutton "Show: [current_filter]" action Return("filter") textbutton "Sort by: [current_sorting]" action Return("sort") -screen brewing_menuitem(xx, yy): +screen brewing_menuitem(): default turned_on = False default drop_ingredients = False window: style "empty" - pos (xx+217, yy-53) + pos (217, -53) xysize (560, 507) use invisible_button() @@ -173,7 +170,7 @@ screen brewing_menuitem(xx, yy): text "Usable on:" size 12 hbox: for c in current_item.usable_on: - add "interface/icons/head/{}.webp".format(c) size (24, 24) + add f"interface/icons/head/{c}.webp" size (24, 24) hbox: spacing 10 @@ -185,12 +182,7 @@ screen brewing_menuitem(xx, yy): xysize (48, 48) add gui.format("interface/achievements/{}/iconbox.webp") - if ingredient.owned > 0: - $ image_zoom = crop_image_zoom(ingredient.get_image(), 42, 42) - else: - $ image_zoom = crop_image_zoom(ingredient.get_image(), 42, 42, True) - - add image_zoom align (0.5, 0.5) + add crop_image_zoom(ingredient.get_image(), 42, 42, ingredient.owned <= 0) align (0.5, 0.5) button: style gui.theme("overlay_button") @@ -203,9 +195,9 @@ screen brewing_menuitem(xx, yy): if ingredient.infinite: text "{unicode}∞{/unicode}" size 20 align (0.1, 0.1) offset(-1, -9) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] else: - text str(ingredient.owned) size 10 align (0.1, 0.1) color "#ffffff" outlines [ (1, "#000", 0, 0) ] + text "[ingredient.owned]" size 10 align (0.1, 0.1) color "#ffffff" outlines [ (1, "#000", 0, 0) ] else: - text str(ingredient.owned) size 10 align (0.1, 0.1) color "#ff0000" outlines [ (1, "#000", 0, 0) ] + text "[ingredient.owned]" size 10 align (0.1, 0.1) color "#ff0000" outlines [ (1, "#000", 0, 0) ] frame: style "empty" @@ -214,12 +206,7 @@ screen brewing_menuitem(xx, yy): add gui.format("interface/achievements/{}/iconbox.webp") size (64, 64) - if current_item.owned > 0: - $ image_zoom = crop_image_zoom(current_item.get_image(), 52, 52) - else: - $ image_zoom = crop_image_zoom(current_item.get_image(), 52, 52, True) - - add image_zoom align (0.5, 0.5) + add crop_image_zoom(current_item.get_image(), 52, 52, current_item.owned <= 0) align (0.5, 0.5) button: style gui.theme("overlay_button") @@ -229,7 +216,7 @@ screen brewing_menuitem(xx, yy): tooltip current_item.name if current_item.owned > 0: - text str(current_item.owned) size 14 align (0.1, 0.1) color "#ffffff" outlines [ (1, "#000", 0, 0) ] + text "[current_item.owned]" size 14 align (0.1, 0.1) color "#ffffff" outlines [ (1, "#000", 0, 0) ] imagebutton: if current_item.has_ingredients(): diff --git a/game/scripts/interface/cheats.rpy b/game/scripts/interface/cheats.rpy index 71612bf8..94c45677 100644 --- a/game/scripts/interface/cheats.rpy +++ b/game/scripts/interface/cheats.rpy @@ -1,9 +1,11 @@ - default cheat_wardrobe_alpha = False default skip_duel = False default experimental_cheats = False +default __curr_breast_type = 0 +default __curr_ass_type = 0 + label cheats: if not renpy.seen_label("cheats"): @@ -11,9 +13,7 @@ label cheats: menu: "-Inventory-": - label .general: - - menu: + menu .general: "-Add 500 Gold-" (icon="interface/icons/small/gold.webp"): $ game.gold += 500 jump cheats.general @@ -86,12 +86,9 @@ label cheats: jump cheats.general "-Characters-": - label .characters: - - menu: + menu .characters: "-Tonks-" (icon="interface/icons/small/tonks.webp") if states.ton.unlocked: - label .tonks: - menu: + menu .tonks: "-Reset mood- ([states.ton.mood])" if states.ton.mood != 0: $ states.ton.mood = 0 nar "Tonks is no longer mad at you." @@ -106,8 +103,7 @@ label cheats: jump cheats.tonks "-Hermione-" (icon="interface/icons/small/hermione.webp") if states.her.unlocked: - label .hermione: - menu: + menu .hermione: "-Reset mood- ([states.her.mood])" if states.her.mood != 0: $ states.her.mood = 0 nar "Hermione is no longer mad at you." @@ -128,8 +124,7 @@ label cheats: jump cheats.hermione "-Cho-" (icon="interface/icons/small/cho.webp") if states.cho.unlocked: - label .cho: - menu: + menu .cho: "-Reset mood- ([states.cho.mood])" if states.cho.mood != 0: $ states.cho.mood = 0 nar "Cho is no longer mad at you." @@ -150,8 +145,7 @@ label cheats: jump cheats.cho "-Luna-" (icon="interface/icons/small/luna.webp") if states.lun.unlocked: - label .luna: - menu: + menu .luna: "-Reset mood- ([states.cho.mood])" if states.lun.mood != 0: $ states.lun.mood = 0 nar "Luna is no longer mad at you." @@ -172,8 +166,7 @@ label cheats: jump cheats.luna "-Astoria-" (icon="interface/icons/small/astoria.webp") if states.ast.unlocked: - label .astoria: - menu: + menu .astoria: "-Reset mood-" if states.ast.mood != 0: $ states.ast.mood = 0 nar "Astoria is no longer mad at you." @@ -194,8 +187,7 @@ label cheats: jump cheats.astoria "-Susan-" (icon="interface/icons/small/huff.webp") if states.sus.unlocked: - label .susan: - menu: + menu .susan: "-Reset mood- ([states.cho.mood])" if states.sus.mood != 0: $ states.sus.mood = 0 nar "Susan is no longer mad at you." @@ -219,9 +211,7 @@ label cheats: jump cheats "-House Points-": - label .points: - - menu: + menu .points: "-Add 200 Slytherin Points-" (icon="interface/icons/small/slyt.webp"): $ slytherin = clamp(slytherin+200, 1, 999999) call update_ui_points @@ -266,9 +256,7 @@ label cheats: jump cheats.points "-Progression-": - label .progression: - - menu: + menu .progression: "-Unlock all Mirror Stories-": python: for i in mirror.items: @@ -303,8 +291,7 @@ label cheats: menu: "-Genie Outfits-": - label .genie: - menu: + menu .genie: "-Use Default Outfit-": show genie robes hide genie @@ -359,48 +346,43 @@ label cheats: nar "All wardrobes have been unlocked." "-Permanent body alteration-": - label .alteration: - # Note: itertools.cycle breaks Ren'py so we have to rely on a good 'ol if statement # *Sigh* I wish we had match statement in python 2 :( # # Years later: Python 3 switch cases are finally here, but are not usable in renpy. :( - default _curr_breast_type = 0 - default _curr_ass_type = 0 - - menu: - "Hermione Breasts ([_curr_breast_type])" (icon="interface/icons/small/hermione.webp"): + menu .alteration: + "Hermione Breasts ([__curr_breast_type])" (icon="interface/icons/small/hermione.webp"): python: - if _curr_breast_type == 0: + if __curr_breast_type == 0: hermione.equip(her_chest_breasts1) - _curr_breast_type = 1 - elif _curr_breast_type == 1: + __curr_breast_type = 1 + elif __curr_breast_type == 1: hermione.equip(her_chest_breasts2) - _curr_breast_type = 2 - elif _curr_breast_type == 2: + __curr_breast_type = 2 + elif __curr_breast_type == 2: hermione.equip(her_chest_breasts3) - _curr_breast_type = 3 - elif _curr_breast_type == 3: + __curr_breast_type = 3 + elif __curr_breast_type == 3: hermione.unequip("chest") - _curr_breast_type = 0 + __curr_breast_type = 0 jump cheats.alteration - "Hermione Ass ([_curr_ass_type])" (icon="interface/icons/small/hermione.webp"): + "Hermione Ass ([__curr_ass_type])" (icon="interface/icons/small/hermione.webp"): python: - if _curr_ass_type == 0: + if __curr_ass_type == 0: hermione.equip(her_hips_ass1) - _curr_ass_type = 1 - elif _curr_ass_type == 1: + __curr_ass_type = 1 + elif __curr_ass_type == 1: hermione.equip(her_hips_ass2) - _curr_ass_type = 2 - elif _curr_ass_type == 2: + __curr_ass_type = 2 + elif __curr_ass_type == 2: hermione.equip(her_hips_ass3) - _curr_ass_type = 3 - elif _curr_ass_type == 3: + __curr_ass_type = 3 + elif __curr_ass_type == 3: hermione.unequip("hips") - _curr_ass_type = 0 + __curr_ass_type = 0 jump cheats.alteration diff --git a/game/scripts/interface/color_picker.rpy b/game/scripts/interface/color_picker.rpy index c75bbfb9..8d60eda7 100644 --- a/game/scripts/interface/color_picker.rpy +++ b/game/scripts/interface/color_picker.rpy @@ -12,14 +12,14 @@ screen color_picker(color, alpha, title, pos_xy, color_default): default hue = 0 default sat = 0 default val = 0 - default _alpha = 0 # Avoid name conflict with 'alpha' screen variable in other active screens + default alpha_ = 0 # Avoid name conflict with 'alpha' screen variable in other active screens default edit_mode = False default preview_old = Solid(rgba) $ preview_new = Solid(rgba) $ gradient_map = SVGradientButton( color_picker_clicked, Fixed( - Color( tuple( x * 255 for x in colorsys.hsv_to_rgb(1 - hue, 1, 1) ) ), + Color(hsv=(1-hue, 1, 1)), Frame("interface/color_picker/saturation_value_gradient.webp") ), xysize=(255, 255), @@ -213,7 +213,7 @@ screen color_picker(color, alpha, title, pos_xy, color_default): Transform(alpha_gradient_image, matrixcolor=ColorizeMatrix(rgba, rgba))) bar: xysize (255, 30) - value ScreenVariableValue("_alpha", range=1.0, action=Function(color_picker_update_rgba)) + value ScreenVariableValue("alpha_", range=1.0, action=Function(color_picker_update_rgba)) base_bar icon_frame thumb Image(gui.format("interface/color_picker/{}/cursor_v.webp"), xalign=0.5) thumb_offset 0 @@ -234,11 +234,9 @@ define hue_gradient_image = HueSlider() init -1 python: - def color_picker(color=[0,0,0,0], alpha=True, title="Pick a colour", pos_xy=(240, 130), color_default=None): - # TODO: Remove external dependencies and utilise built-in Color class instead. - + def color_picker(color=(0,0,0,0), alpha=True, title="Pick a colour", pos_xy=(240, 130), color_default=None): global picking_color - picking_color = color # Color object (list) to be updated live + picking_color = list(color) # Color object (list) to be updated live start_color = list(color) # Keep a copy renpy.show_screen("color_picker", tuple(color), alpha, title, pos_xy, color_default) @@ -305,19 +303,19 @@ init -1 python: def color_picker_update_hsva(): scope = renpy.get_screen("color_picker").scope (r, g, b, a) = scope["rgba"] - (h, s, v) = colorsys.rgb_to_hsv(r / 255.0, g / 255.0, b / 255.0) + (h, s, v) = Color((r, g, b)).hsv scope["hue"] = 1 - h scope["sat"] = s scope["val"] = v - scope["_alpha"] = a / 255.0 + scope["alpha_"] = a / 255.0 def color_picker_update_rgba(): scope = renpy.get_screen("color_picker").scope - (r, g, b) = colorsys.hsv_to_rgb(1 - scope["hue"], scope["sat"], scope["val"]) + (r, g, b) = Color(hsv=(1 - scope["hue"], scope["sat"], scope["val"])).rgb r = int(r * 255) g = int(g * 255) b = int(b * 255) - a = int(scope["_alpha"] * 255) + a = int(scope["alpha_"] * 255) scope["rgba"] = (r, g, b, a) update_picking_color(scope["rgba"]) renpy.restart_interaction() @@ -428,9 +426,7 @@ init -1 python: class SVGradientButton(ImageButton): def __init__(self, on_click, idle_image, *args, **kwargs): - kwargs['sensitive'] = True - kwargs['action'] = NullAction() - super(SVGradientButton, self).__init__(idle_image, *args, **kwargs) + super(SVGradientButton, self).__init__(idle_image, *args, sensitive=True, action=NullAction(), **kwargs) self.width = 0 self.height = 0 self.on_click = on_click diff --git a/game/scripts/interface/credits.rpy b/game/scripts/interface/credits.rpy index 71f8e3a4..44abb8f3 100644 --- a/game/scripts/interface/credits.rpy +++ b/game/scripts/interface/credits.rpy @@ -12,7 +12,7 @@ define credits_text = "\n".join([ credits_title("Writing"), credits_group("Johnny", "MadMerlin", "Livvypoo", "Mo"), credits_title("Programming"), - credits_group("Asease1", "LoafyLemon", "TropeCode"), + credits_group("Asease1", "LoafyLemon", "TropeCode", "Gouvernathor"), credits_title("Music"), credits_group( "Kevin MacLeod\n{size=-5}{color=#808080}{k=0.7}\"Anguish\"\n\"Awkward Meeting\"\n\"Deadly Roulette\"\n\"Brittle Rille\"\n\"Firebrand\"\n\"Chipper Doodle v2\"\n\"Dark Fog\"\n\"Despair\"\n\"Game Over Theme\"\n\"Boss Theme\"\n\"Hitman\"\n\"Music for Manatees\"\n\"Plaint\"\n\"Fuzzball Parade\"\n\"Teddy Bear Waltz\"\n\"Scheming Weasel (Slower version)\"\n\"Open Those Bright Eyes\"\n\"Wallpaper\"\n\"Hidden Agenda\"\n\"Aquarium\"\n\"Court of the Queen\"\n\"Machinations\"\n\"Brandenburg Concerto No. 4 in G, Movement I (Allegro), BWV 1049\"\n\"March of the spoons\"\n\"The other side of the door\"{/k}{/color}{/size}\n", @@ -61,7 +61,7 @@ label credits: if not _menu: play music "music/Only 115 (Electro Loop)_125 BPM.ogg" fadein 1 fadeout 1 if_changed - $ renpy.scene("screens") + scene onlayer screens show screen credits(credits_text) with dissolve @@ -111,10 +111,7 @@ transform credits_chibi_fade(start, duration): transform credits_scroll(duration): subpixel True - - xalign 0.5 yanchor 0.0 - ypos (config.screen_height / 2 - 125) pause 1 parallel: linear (duration - 1) yanchor 1.0 @@ -133,14 +130,15 @@ screen credits(credits=credits_text, duration=credits_duration, chibis=credits_c zoom 0.5 if left: pos (20, config.screen_height - 20) - align (0.0, 1.0) + anchor (0.0, 1.0) else: pos (config.screen_width - 20, config.screen_height - 20) - align (1.0, 1.0) + anchor (1.0, 1.0) text credits: at credits_scroll(duration) xsize credits_width text_align 0.5 + xalign 0.5 color "#fff" outlines [(2, "#000", 0, 0)] diff --git a/game/scripts/interface/door.rpy b/game/scripts/interface/door.rpy index 6f06bdae..9a2d7f41 100644 --- a/game/scripts/interface/door.rpy +++ b/game/scripts/interface/door.rpy @@ -3,6 +3,71 @@ #################################### default summon_show_busy = True +default door_randomobj = renpy.random.Random() + +init python: + def __choice(seq): + seed = door_randomobj.getstate() + rv = door_randomobj.choice(seq) + door_randomobj.setstate(seed) + return rv + +define map_transcript_loc = dict( + library = "Library", + room_g = "Gryffindor Dormitory", + room_s = "Slytherin Dormitory", + room_r = "Ravenclaw Dormitory", + room_h = "Hufflepuff Dormitory", + great_hall = "Great Hall", + courtyard = "Courtyard", + forest = "Forest", + greenhouse = "Greenhouse", + defense = "D.A.D.A Classroom", + training_grounds = "Training Grounds", + Lake = "Lake", + randomstudent = functools.partial(__choice, ( + "Classroom", + "Bathroom", + "Hagrid's Hut", + "Weasley's Store", + "Mafkin's Store", + "Broom Cupboard", + "Attic")), + randomsnape = functools.partial(__choice, ( + "Classroom", + "Boathouse", + "Bathroom", + "Snape's Office", + "Hall", + "Slytherin Dormitory", + "Library", + "Attic", + "Forest", + "Lake", + "Dungeons", + "Quidditch Cave", + "Staircase", + "Behind your door", + "Room of Doom")), + randomtonks = functools.partial(__choice, ( + "Classroom", + "Bathroom", + "Hall", + "Gryffindor Dormitory", + "Slytherin Dormitory", + "Hufflepuff Dormitory", + "Ravenclaw Dormitory", + "Training Grounds", + "Tonks's Room", + "Quidditch Pitch", + "Infirmary", + "Sex Dungeon", + "Hospital Wing", + "Forest", + "Lake", + "Greenhouse", + "Mafkin's Store")), +) label summon: $ gui.in_context("summon_menu") @@ -10,47 +75,38 @@ label summon: label summon_menu(xx=723, yy=90): - call update_stats + $ renpy.dynamic( + # Door dictionary + summon_dict = { + # the order will be the one in the menu + "Snape": {"ico": "snape", "flag": states.sna.unlocked, "busy": states.sna.busy, "loc": "randomsnape"}, + "Tonks": {"ico": "tonks", "flag": states.ton.unlocked, "busy": states.ton.busy, "loc": "randomtonks"}, + "Hermione": {"ico": "hermione", "flag": states.her.unlocked, "busy": states.her.busy, "loc": states.her.map_location }, + "Cho": {"ico": "cho", "flag": states.cho.unlocked, "busy": states.cho.busy, "loc": states.cho.map_location}, + "Luna": {"ico": "luna", "flag": states.lun.unlocked, "busy": states.lun.busy, "loc": states.lun.map_location}, + "Astoria": {"ico": "astoria", "flag": states.ast.unlocked, "busy": states.ast.busy, "loc": states.ast.map_location }, + "Susan": {"ico": "susan", "flag": states.sus.unlocked, "busy": states.sus.busy, "loc": states.sus.map_location} + #"Ginny", "Daphne", "Padma", "Patil", "Myrtle", "Mafkin" + }, + ) - $ map_transcript_loc = {"library": "Library", "room_g": "Gryffindor Dormitory", "room_s": "Slytherin Dormitory", "room_r": "Ravenclaw Dormitory", "room_h": "Hufflepuff Dormitory", "great_hall": "Great Hall", "courtyard": "Courtyard", "forest": "Forest", "greenhouse": "Greenhouse", "defense": "D.A.D.A Classroom", "training_grounds": "Training Grounds", "Lake": "Lake", "randomstudent": renpy.random.choice(["Classroom", "Bathroom", "Hagrid's Hut", "Weasley's Store", "Mafkin's Store", "Broom Cupboard", "Attic"]), "randomsnape": renpy.random.choice(["Classroom", "Boathouse", "Bathroom", "Snape's Office", "Hall", "Slytherin Dormitory", "Library", "Attic", "Forest", "Lake", "Dungeons", "Quidditch Cave", "Staircase", "Behind your door", "Room of Doom"]), "randomtonks": renpy.random.choice(["Classroom", "Bathroom", "Hall", "Gryffindor Dormitory", "Slytherin Dormitory", "Hufflepuff Dormitory", "Ravenclaw Dormitory", "Training Grounds", "Tonks' Room", "Quidditch Pitch", "Infirmary", "Sex Dungeon", "Hospital Wing", "Forest", "Lake", "Greenhouse", "Mafkin's Store"])} + call screen summon(xx, yy) - # Door dictionary - $ summon_dict = { - "Snape": {"ico": "snape", "flag": states.sna.unlocked, "busy": states.sna.busy, "loc": "randomsnape"}, - "Tonks": {"ico": "tonks", "flag": states.ton.unlocked, "busy": states.ton.busy, "loc": "randomtonks"}, - "Hermione": {"ico": "hermione", "flag": states.her.unlocked, "busy": states.her.busy, "loc": states.her.map_location }, - "Cho": {"ico": "cho", "flag": states.cho.unlocked, "busy": states.cho.busy, "loc": states.cho.map_location}, - "Luna": {"ico": "luna", "flag": states.lun.unlocked, "busy": states.lun.busy, "loc": states.lun.map_location}, - "Astoria": {"ico": "astoria", "flag": states.ast.unlocked, "busy": states.ast.busy, "loc": states.ast.map_location }, - "Susan": {"ico": "susan", "flag": states.sus.unlocked, "busy": states.sus.busy, "loc": states.sus.map_location} - } + return - $ summon_categories_sorted = ["Snape", "Tonks", "Hermione", "Cho", "Luna", "Astoria", "Susan"] #"Ginny", "Daphne", "Padma", "Patil", "Myrtle", "Mafkin" - $ summon_categories_sorted_length = len(summon_categories_sorted) +label .summon(char): + $ enable_game_menu() + $ renpy.jump_out_of_context("summon_"+char.lower()) - $ current_sorting = summon_show_busy + return - label .after_init: - - show screen summon(xx, yy) - - $ _choice = ui.interact() - - if _choice[0] == "summon": - hide screen summon - if not _choice[2]: - $ enable_game_menu() - $ renpy.jump_out_of_context("summon_"+_choice[1].lower()) - else: - if game.daytime or _choice[1] in ["Tonks", "Snape"]: - nar "[_choice[1]] is currently busy. Try again later." - else: - nar "[_choice[1]] is currently asleep. Try again tomorrow." +label .summon_busy(char): + if game.daytime or char in ["Tonks", "Snape"]: + nar "[char] is currently busy. Try again later." else: - hide screen summon - return + nar "[char] is currently asleep. Try again tomorrow." - jump .after_init + return screen summon(xx, yy): tag summon @@ -64,18 +120,18 @@ screen summon(xx, yy): use close_button(key=["summon", "game_menu"]) fixed: + pos (xx, yy) if settings.get("animations"): at gui_animation - use summon_menu(xx, yy) + use summon_menu -screen summon_menu(xx, yy): +screen summon_menu(): tag summon_menu modal True zorder 15 window: style "empty" - pos (xx, yy) xysize (207, 454) use invisible_button() @@ -99,11 +155,11 @@ screen summon_menu(xx, yy): vbox: pos (6, 6) - $ tmp_x = 0 - for char in summon_categories_sorted: - if summon_dict[char]["flag"]: - if summon_show_busy or not summon_dict[char]["busy"]: - $ tmp_x += 1 + $ allbusy = True + for char, char_dict in summon_dict.items(): + if char_dict["flag"]: + if summon_show_busy or not char_dict["busy"]: + $ allbusy = False frame: style "empty" xsize 195 @@ -116,27 +172,25 @@ screen summon_menu(xx, yy): text_xalign 0.6 text_yalign 0.5 text_xanchor 0.5 text_size 20 - if not summon_dict[char]["busy"]: - action Return(["summon", char, False]) + if not char_dict["busy"]: + action Call("summon_menu.summon", char, from_current=True) else: text_color "#8C8C70" - action Return(["summon", char, True]) + action Call("summon_menu.summon_busy", char, from_current=True) add gui.format("interface/achievements/{}/spacer_left.webp") - $ image_zoom = crop_image_zoom("interface/icons/head/"+summon_dict[char]["ico"]+".webp", 42, 42, summon_dict[char]["busy"]) - button: style gui.theme("overlay_button") background gui.format("interface/achievements/{}/iconbox.webp") foreground "interface/achievements/glass_iconbox.webp" xysize (48, 48) - add image_zoom align (0.5, 0.5) + add crop_image_zoom("interface/icons/head/"+char_dict["ico"]+".webp", 42, 42, char_dict["busy"]) align (0.5, 0.5) - text map_transcript_loc[summon_dict[char]["loc"]] size 10 xalign 0.625 yalign 0.9 xanchor 0.5 + $ loc = map_transcript_loc[char_dict["loc"]] + text (loc() if callable(loc) else loc) size 10 xcenter 0.6 yalign 0.9 if not states.sna.unlocked: text "You don't know anyone" size 12 at truecenter - else: - if tmp_x <= 0: - text "All characters are busy" size 12 at truecenter + elif allbusy: + text "All characters are busy" size 12 at truecenter \ No newline at end of file diff --git a/game/scripts/interface/gifts.rpy b/game/scripts/interface/gifts.rpy index 7dd08adf..65b30373 100644 --- a/game/scripts/interface/gifts.rpy +++ b/game/scripts/interface/gifts.rpy @@ -11,11 +11,12 @@ label give_gift(text, gift): hide screen gift with d3 $ gift.owned -= 1 + return screen gift(gift): zorder 30 if isinstance(gift, Item): - add gift.get_image() align (0.5, 0.4) zoom get_zoom(gift.get_image(), (320, 320)) + add gift.get_image() align (0.5, 0.4) xysize (320, 320) fit "contain" else: - add gift align (0.5, 0.4) zoom get_zoom(gift, (320, 320)) + add gift align (0.5, 0.4) xysize (320, 320) fit "contain" diff --git a/game/scripts/interface/house_points.rpy b/game/scripts/interface/house_points.rpy index 4c6ab676..2b31d114 100644 --- a/game/scripts/interface/house_points.rpy +++ b/game/scripts/interface/house_points.rpy @@ -2,7 +2,7 @@ label points_changes: # Gets called every day/night. - python: + python hide: progress_factor = max(1, int(math.log(game.day) * 5)) # Bonuses based on Tonks and Snape friendship stat @@ -19,15 +19,17 @@ label points_changes: # Gets called every day/night. difference_factor_r = min(leader, round((progress_factor + bonus_r) * max(gryffindor, hufflepuff, slytherin)/float(ravenclaw))) difference_factor_s = min(leader, round((progress_factor + bonus_s) * max(hufflepuff, ravenclaw, gryffindor)/float(slytherin))) - points_g = renpy.random.randint(difference_factor_g//2, difference_factor_g) - points_h = renpy.random.randint(difference_factor_h//2, difference_factor_h) - points_r = renpy.random.randint(difference_factor_r//2, difference_factor_r) - points_s = renpy.random.randint(difference_factor_s//2, difference_factor_s) + renpy.dynamic( + points_g = renpy.random.randint(difference_factor_g//2, difference_factor_g), + points_h = renpy.random.randint(difference_factor_h//2, difference_factor_h), + points_r = renpy.random.randint(difference_factor_r//2, difference_factor_r), + points_s = renpy.random.randint(difference_factor_s//2, difference_factor_s), + ) - gryffindor += points_g - hufflepuff += points_h - ravenclaw += points_r - slytherin += points_s + store.gryffindor += points_g + store.hufflepuff += points_h + store.ravenclaw += points_r + store.slytherin += points_s hide screen points_changes show screen points_changes(points_s, points_g, points_r, points_h) @@ -42,7 +44,7 @@ screen points_changes(points_s, points_g, points_r, points_h): align (0.5, 0.1) at transform: on start: - alpha 0.0 + alpha 0.0 on show: yoffset 0 alpha 1.0 @@ -54,5 +56,3 @@ screen points_changes(points_s, points_g, points_r, points_h): text "+[points_h]" outlines [(1, "#000000BF", 1, 0)] size 24 color "#FBC60A" timer 3.0 action Hide("points_changes") - - diff --git a/game/scripts/interface/inventory.rpy b/game/scripts/interface/inventory.rpy index 6ba4a385..44c23305 100644 --- a/game/scripts/interface/inventory.rpy +++ b/game/scripts/interface/inventory.rpy @@ -1,17 +1,17 @@ init python: def inventory_sortfilter(item, sortby="A-z", filtering=None): if filtering == "Owned": - item = [x for x in item if x.owned > 0] + item = (x for x in item if x.owned > 0) # Always sort alphabetically first. item = sorted(item, key=lambda x: natsort_key(x.name)) if sortby == "z-A": - item = sorted(item, key=lambda x: natsort_key(x.name), reverse=True) + item.sort(key=lambda x: natsort_key(x.name), reverse=True) elif current_sorting == "Available": - item = sorted(item, key=lambda x: x.owned is True, reverse=True) + item.sort(key=lambda x: x.owned is True, reverse=True) elif current_sorting == "Unavailable": - item = sorted(item, key=lambda x: x.owned is False) + item.sort(key=lambda x: x.owned is False) return item @@ -62,13 +62,13 @@ label inventory_menu(xx=150, yy=90): label .after_init: - $ _choice = ui.interact() + $ renpy.dynamic(__choice = ui.interact()) - if _choice[0] == "select": - $ current_item = _choice[1] - elif _choice[0] == "category": + if __choice[0] == "select": + $ current_item = __choice[1] + elif __choice[0] == "category": python: - current_category = _choice[1] + current_category = __choice[1] category_items = inventory_dict[current_category] menu_items = inventory_sortfilter(category_items, current_sorting, current_filter) menu_items_length = len(menu_items) @@ -79,11 +79,11 @@ label inventory_menu(xx=150, yy=90): current_page = 0 current_item = next(iter(menu_items), None) - elif _choice == "inc": + elif __choice == "inc": $ current_page += 1 - elif _choice == "dec": + elif __choice == "dec": $ current_page += -1 - elif _choice == "sort": + elif __choice == "sort": python: if current_sorting == "A-z": current_sorting = "z-A" @@ -104,9 +104,9 @@ label inventory_menu(xx=150, yy=90): if not current_item or not menu_items_length: current_item = next(iter(menu_items), None) - elif _choice == "filter": + elif __choice == "filter": python: - if current_filter == None: + if current_filter is None: current_filter = "Owned" else: current_filter = None @@ -121,11 +121,11 @@ label inventory_menu(xx=150, yy=90): if not current_item or not menu_items_length: current_item = next(iter(menu_items), None) - elif _choice == "use": + elif __choice == "use": python: enable_game_menu() current_item.use() - elif _choice == "give": + elif __choice == "give": if current_item.type == "gift": if get_character_gifted(states.active_girl): @@ -268,15 +268,15 @@ screen inventory_menu(xx, yy): # Gold & Tokens null height 16 - text "{color=#daa520}Gold{/color} {outlinecolor=#ffffff00}[game.gold]{/outlinecolor}" size 12 outlines [ (2, "#000", 0, 0) ] xalign 0.1 xanchor 0 + text "{color=#daa520}Gold{/color} {outlinecolor=#ffffff00}[game.gold]{/outlinecolor}" size 12 outlines [ (2, "#000", 0, 0) ] xpos 0.1 xanchor 0 add gui.format("interface/achievements/{}/spacer_left.webp") - text "{color=#2055da}Tokens{/color} {outlinecolor=#ffffff00}[tokens]{/outlinecolor}" size 12 outlines [ (2, "#000", 0, 0) ] xalign 0.1 xanchor 0 + text "{color=#2055da}Tokens{/color} {outlinecolor=#ffffff00}[tokens]{/outlinecolor}" size 12 outlines [ (2, "#000", 0, 0) ] xpos 0.1 xanchor 0 add gui.format("interface/achievements/{}/spacer_left.webp") vbox: style_prefix gui.theme('achievements_filters') pos (6, 384) - if current_filter == None: + if current_filter is None: textbutton "Show: All" action Return("filter") else: textbutton "Show: [current_filter]" action Return("filter") @@ -326,51 +326,47 @@ screen inventory_menuitem(xx, yy): action Return("inc") # Add items - for i in range(current_page*items_shown, (current_page*items_shown)+items_shown): - if i < menu_items_length: - $ row = (i // 9) % 4 - $ col = i % 9 + grid 9 4: + style "empty" + pos (24, 113) + spacing 10 + + for it_item in menu_items[current_page*items_shown:(current_page+1)*items_shown]: frame: style "empty" xsize 48 ysize 48 - pos (24+58*(col), 113+58*(row)) add gui.format("interface/achievements/{}/iconbox.webp") - if not current_item == None and current_item.id == menu_items[i].id: + if current_item is not None and current_item.id == it_item.id: add "interface/achievements/glow.webp" align (0.5, 0.5) zoom 0.105 alpha 0.7 at rotate_circular - if menu_items[i].owned > 0: - $ image_zoom = crop_image_zoom(menu_items[i].get_image(), 42, 42) - else: - $ image_zoom = crop_image_zoom(menu_items[i].get_image(), 42, 42, True) - - add image_zoom align (0.5, 0.5) + add crop_image_zoom(it_item.get_image(), 42, 42, it_item.owned <= 0) align (0.5, 0.5) button: style gui.theme("overlay_button") background "interface/achievements/glass_iconbox.webp" xsize 46 ysize 46 - action Return(["select", menu_items[i]]) - tooltip menu_items[i].name + action Return(["select", it_item]) + tooltip it_item.name - if menu_items[i].limit > 1 and menu_items[i].owned > 0: - if menu_items[i].infinite: + if it_item.limit > 1 and it_item.owned > 0: + if it_item.infinite: text "{unicode}∞{/unicode}" size 20 align (0.1, 0.1) offset(-1, -9) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] else: - text str(menu_items[i].owned) size 10 align (0.1, 0.1) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] + text str(it_item.owned) size 10 align (0.1, 0.1) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] elif current_category == "Decorations": - if menu_items[i].in_use: - add "interface/topbar/icon_check.webp" anchor (1.0, 1.0) align (1.0, 1.0) offset (-3, -3) zoom 0.5 + if it_item.in_use: + add "interface/topbar/icon_check.webp" align (1.0, 1.0) offset (-3, -3) zoom 0.5 elif current_category in ("Books", "Quest Items"): - if menu_items[i].used: - add "interface/topbar/icon_check.webp" anchor (1.0, 1.0) align (1.0, 1.0) offset (-3, -3) zoom 0.5 + if it_item.used: + add "interface/topbar/icon_check.webp" align (1.0, 1.0) offset (-3, -3) zoom 0.5 - if inventory_mode == 1 and (not menu_items[i].givable or not states.active_girl in menu_items[i].usable_on): + if inventory_mode == 1 and (not it_item.givable or not states.active_girl in it_item.usable_on): add "#b2000040" if menu_items_length <= 0: - text "Nothing here yet" align (0.5, 0.5) anchor (0.5, 0.5) size 24 + text "Nothing here yet" align (0.5, 0.5) size 24 if current_item: frame: @@ -379,11 +375,7 @@ screen inventory_menuitem(xx, yy): ysize 96 pos (24, 375) add gui.format("interface/achievements/{}/icon_selected.webp") - if current_item.owned > 0: - $ image_zoom = crop_image_zoom(current_item.get_image(), 84, 84) - else: - $ image_zoom = crop_image_zoom(current_item.get_image(), 84, 84, True) - add image_zoom align (0.5, 0.5) + add crop_image_zoom(current_item.get_image(), 84, 84, current_item.owned <= 0) align (0.5, 0.5) add "interface/achievements/glass_selected.webp" pos (6, 6) if current_category in {"Gifts", "Ingredients", "Potions"}: @@ -391,13 +383,13 @@ screen inventory_menuitem(xx, yy): if current_item.infinite: text "{unicode}∞{/unicode}" size 30 align (0.1, 0.1) offset(-2, -10) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] else: - text str(current_item.owned) size 14 align (0.1, 0.1) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] + text "[current_item.owned]" size 14 align (0.1, 0.1) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] elif current_category == "Decorations": if current_item.in_use: - add "interface/topbar/icon_check.webp" anchor (1.0, 1.0) align (1.0, 1.0) offset (-6, -6) + add "interface/topbar/icon_check.webp" align (1.0, 1.0) offset (-6, -6) elif current_category in ("Books", "Quest Items"): if current_item.used: - add "interface/topbar/icon_check.webp" anchor (1.0, 1.0) align (1.0, 1.0) offset (-6, -6) + add "interface/topbar/icon_check.webp" align (1.0, 1.0) offset (-6, -6) if inventory_mode == 1 and (not current_item.givable or not states.active_girl in current_item.usable_on): add "#b2000040" @@ -436,4 +428,4 @@ style inventory_button: style inventory_button_text: outlines [] align (0.5, 0.5) - size 16 + size 16 \ No newline at end of file diff --git a/game/scripts/interface/letter.rpy b/game/scripts/interface/letter.rpy index 9890c47c..37734358 100644 --- a/game/scripts/interface/letter.rpy +++ b/game/scripts/interface/letter.rpy @@ -180,7 +180,10 @@ init python: self.wait = wait self.label = label self.func = func - self.queue = mailbox.letters + + @property + def queue(self): + return mailbox.letters def send(self): self.mailed = True @@ -201,27 +204,23 @@ init python: if not silent: renpy.call("letter", self.text, self.label) -label letter(text, label): +label letter(text, lbl): show screen bld1 show screen blktone show screen letter(text) with d3 - $ states.menu_pos = (0.5, 0.9) - - menu: + menu (menu_yalign=.9): "-Done reading-": pass - call reset_menu_position - hide screen letter hide screen blktone hide screen bld1 with d3 - if label: - $ renpy.call(label) + if lbl: + call expression lbl return diff --git a/game/scripts/interface/map.rpy b/game/scripts/interface/map.rpy index b27c1a0c..3750550e 100644 --- a/game/scripts/interface/map.rpy +++ b/game/scripts/interface/map.rpy @@ -1,11 +1,16 @@ -default UI_xpos_offset = 230 -default UI_ypos_offset = 150 - default map_animated = "once" define map_scale = 0.35 define map_ani_time = 1.5 +default map_randomobj = renpy.random.Random() +init python: + def __choice(seq): + seed = map_randomobj.getstate() + rv = map_randomobj.choice(seq) + map_randomobj.setstate(seed) + return rv + transform map_fadein: alpha 0 pause (map_ani_time) @@ -33,115 +38,118 @@ screen map_screen(): if map_animated == "once": timer map_ani_time+1 action SetVariable("map_animated", False) - if unfold: - add "map_unfold" xpos UI_xpos_offset ypos UI_ypos_offset zoom map_scale # 588x420 - else: - add "interface/map/map.webp" xpos UI_xpos_offset ypos UI_ypos_offset zoom map_scale # 588x420 - fixed: + pos (230, 150) + if unfold: - at map_fadein - use map_buttons - use map_screen_characters + add "map_unfold" zoom map_scale # 588x420 + else: + add "interface/map/map.webp" zoom map_scale # 588x420 + + fixed: + if unfold: + at map_fadein + use map_buttons + use map_screen_characters screen map_buttons(): tag map zorder 4 #Office imagebutton: - xpos UI_xpos_offset +112 - ypos UI_ypos_offset +234 + xpos 112 + ypos 234 idle "interface/map/room_office_idle.webp" hover "interface/map/room_office_hover.webp" - hovered SetVariable("ball_hint", "office") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "office") + unhovered SetScreenVariable("ball_hint", None) action Return("main_room_menu") #Gryffindor imagebutton: - xpos UI_xpos_offset +148 - ypos UI_ypos_offset +214 + xpos 148 + ypos 214 idle "interface/map/room_gryffindor_idle.webp" # hover "interface/map/room_gryffindor_hover.webp" - # hovered SetVariable("ball_hint", "dorm_gryffindor") - # unhovered SetVariable("ball_hint", None) + # hovered SetScreenVariable("ball_hint", "dorm_gryffindor") + # unhovered SetScreenVariable("ball_hint", None) # action Return("gryffindor_dormitories") #Ravenclaw imagebutton: - xpos UI_xpos_offset +286 - ypos UI_ypos_offset +256 + xpos 286 + ypos 256 idle "interface/map/room_ravenclaw_idle.webp" # hover "interface/map/room_ravenclaw_hover.webp" - # hovered SetVariable("ball_hint", "dorm_ravenclaw") - # unhovered SetVariable("ball_hint", None) + # hovered SetScreenVariable("ball_hint", "dorm_ravenclaw") + # unhovered SetScreenVariable("ball_hint", None) # action Return("ravenclaw_dormitories") #Hufflepuff imagebutton: - xpos UI_xpos_offset +76 - ypos UI_ypos_offset +295 + xpos 76 + ypos 295 idle "interface/map/room_hufflepuff_idle.webp" - #hovered SetVariable("ball_hint", "dorm_hufflepuff") - #unhovered SetVariable("ball_hint", None) + #hovered SetScreenVariable("ball_hint", "dorm_hufflepuff") + #unhovered SetScreenVariable("ball_hint", None) #hover "interface/map/room_hufflepuff_hover.webp" #action Return("hufflepuff_dormitories") #Slytherin imagebutton: - xpos UI_xpos_offset +214 - ypos UI_ypos_offset +136 + xpos 214 + ypos 136 idle "interface/map/room_slytherin_idle.webp" - #hovered SetVariable("ball_hint", "dorm_slytherin") - #unhovered SetVariable("ball_hint", None) + #hovered SetScreenVariable("ball_hint", "dorm_slytherin") + #unhovered SetScreenVariable("ball_hint", None) #hover "interface/map/room_slytherin_hover.webp" #action Return("slytherin_dormitories") #Weasley Store 15 x 15 if not item_store_intro_done: - add "interface/achievements/glow.webp" pos (UI_xpos_offset+246, UI_ypos_offset+231) align (0.5, 0.5) offset (15, 15) zoom 0.15 alpha 0.5 at rotate_circular + add "interface/achievements/glow.webp" xycenter (246, 231) offset (15, 15) zoom 0.15 alpha 0.5 at rotate_circular imagebutton: - xpos UI_xpos_offset +246 - ypos UI_ypos_offset +231 + xpos 246 + ypos 231 idle "interface/map/room_weasley_store_idle.webp" hover "interface/map/room_weasley_store_hover.webp" - hovered SetVariable("ball_hint", "weasley_store") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "weasley_store") + unhovered SetScreenVariable("ball_hint", None) action Return("item_store") #Clothing Store if not clothing_store_intro_done: - add "interface/achievements/glow.webp" pos (UI_xpos_offset+462, UI_ypos_offset+231) align (0.5, 0.5) offset (15, 15) zoom 0.15 alpha 0.5 at rotate_circular + add "interface/achievements/glow.webp" xycenter (462, 231) offset (15, 15) zoom 0.15 alpha 0.5 at rotate_circular imagebutton: - xpos UI_xpos_offset +462 - ypos UI_ypos_offset +231 + xpos 462 + ypos 231 idle "interface/map/room_clothing_store_idle.webp" hover "interface/map/room_clothing_store_hover.webp" - hovered SetVariable("ball_hint", "clothing_store") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "clothing_store") + unhovered SetScreenVariable("ball_hint", None) action Return("clothing_store") # Snape's Office if not states.map.snape_office.visited: - add "interface/achievements/glow.webp" pos (UI_xpos_offset+314, UI_ypos_offset+331) align (0.5, 0.5) offset (15, 15) zoom 0.15 alpha 0.5 at rotate_circular + add "interface/achievements/glow.webp" xycenter (314, 331) offset (15, 15) zoom 0.15 alpha 0.5 at rotate_circular imagebutton: - xpos UI_xpos_offset +314 - ypos UI_ypos_offset +331 + xpos 314 + ypos 331 idle "interface/map/room_potions_idle.webp" hover "interface/map/room_potions_hover.webp" - hovered SetVariable("ball_hint", "potions") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "potions") + unhovered SetScreenVariable("ball_hint", None) action Return("snape_office") #Room of Requirement if states.map.seventh_floor.unlocked: if not states.map.room_of_requirement.intro_e1: - add "interface/achievements/glow.webp" pos (UI_xpos_offset+116, UI_ypos_offset+160) align (0.5, 0.5) offset (15, 15) zoom 0.15 alpha 0.5 at rotate_circular + add "interface/achievements/glow.webp" xycenter (116, 160) offset (15, 15) zoom 0.15 alpha 0.5 at rotate_circular imagebutton: - xpos UI_xpos_offset +116 - ypos UI_ypos_offset +160 - unhovered SetVariable("ball_hint", None) - hovered SetVariable("ball_hint", "room_of_req") + xpos 116 + ypos 160 + unhovered SetScreenVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "room_of_req") action Return("seventh_floor") if not states.map.seventh_floor.visited: idle "interface/map/room_ror_empty_idle.webp" @@ -152,54 +160,66 @@ screen map_buttons(): #Lake imagebutton: - xpos UI_xpos_offset +131 - ypos UI_ypos_offset +367 + xpos 131 + ypos 367 idle "interface/map/room_boat_house_idle.webp" # hover "interface/map/room_boat_house_hover.webp" - # hovered SetVariable("ball_hint", "lake") - # unhovered SetVariable("ball_hint", None) + # hovered SetScreenVariable("ball_hint", "lake") + # unhovered SetScreenVariable("ball_hint", None) # action Return("map_lake") #Forest imagebutton: - xpos UI_xpos_offset +103 - ypos UI_ypos_offset +12 + xpos 103 + ypos 12 idle "interface/map/room_north_courtyard_idle.webp" # hover "interface/map/room_north_courtyard_hover.webp" - # hovered SetVariable("ball_hint", "forest") - # unhovered SetVariable("ball_hint", None) + # hovered SetScreenVariable("ball_hint", "forest") + # unhovered SetScreenVariable("ball_hint", None) # action Return("map_forest") #Attic if states.her.ev.sealed_scroll.examined: if not states.her.ev.sealed_scroll.sample: - add "interface/achievements/glow.webp" pos (UI_xpos_offset+340, UI_ypos_offset+226) align (0.5, 0.5) offset (15, 15) zoom 0.15 alpha 0.5 at rotate_circular + add "interface/achievements/glow.webp" xycenter (340, 226) offset (15, 15) zoom 0.15 alpha 0.5 at rotate_circular imagebutton: - xpos UI_xpos_offset +340 - ypos UI_ypos_offset +226 + xpos 340 + ypos 226 idle "interface/map/room_attic_closed_idle.webp" hover "interface/map/room_attic_closed_hover.webp" - hovered SetVariable("ball_hint", "attic") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "attic") + unhovered SetScreenVariable("ball_hint", None) action Return("map_attic") else: imagebutton: - xpos UI_xpos_offset +340 - ypos UI_ypos_offset +226 + xpos 340 + ypos 226 idle "interface/map/room_attic_open_idle.webp" hover "interface/map/room_attic_open_hover.webp" - hovered SetVariable("ball_hint", "attic") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "attic") + unhovered SetScreenVariable("ball_hint", None) action Return("map_attic") # Map animation toggle textbutton "Animation": style gui.theme("check_button") - pos (700, 530) + pos (470, 380) selected map_animated tooltip "Toggles map folding animation" action ToggleVariable("map_animated", True, False) +label set_all_map_locations: + call set_her_map_location() + call set_lun_map_location() + call set_cho_map_location() + call set_ast_map_location() + call set_sus_map_location() + #TODO: Add Tonks map location + #TODO: Add Snape map location + + call update_character_map_locations + return + label set_her_map_location(location=""): if location != "": @@ -216,32 +236,18 @@ label set_her_map_location(location=""): else: #Random if states.her.level < 11: - if random_map_loc in [1,2]: #Library - $ states.her.map_location = "library" - elif random_map_loc in [3]: #Great Hall - $ states.her.map_location = "great_hall" - else: #Gryff Room - $ states.her.map_location = "room_g" + $ states.her.map_location = __choice(("library", "library", "great_hall", "room_g", "room_g")) else: - if states.her.public_level < 12: - if random_map_loc == 1: #Great Hall - $ states.her.map_location = "great_hall" - elif random_map_loc == 2: #Courtyard - $ states.her.map_location = "courtyard" - else: #Gryff Room - $ states.her.map_location = "room_g" - else: - if random_map_loc == 1: #Slytherin Room - $ states.her.map_location = "room_s" - elif random_map_loc == 2: #Courtyard - $ states.her.map_location = "courtyard" - else: #Gryff Room - $ states.her.map_location = "room_g" - if states.her.status.blowjob == True and game.weather in ("clear", "cloudy") and not game.daytime and not states.her.busy: - $ states.her.map_location = "forest" + $ states.her.map_location = "forest" - call update_character_map_locations + elif states.her.public_level < 12: + $ states.her.map_location = __choice(("great_hall", "courtyard", "room_g", "room_g", "room_g")) + else: + $ states.her.map_location = __choice(("room_s", "courtyard", "room_g", "room_g", "room_g")) + + if location: + call update_character_map_locations return @@ -256,14 +262,10 @@ label set_lun_map_location(location = ""): $ states.lun.map_location = "room_r" else: #Random - if random_map_loc in [1]: - $ states.lun.map_location = "greenhouse" - elif random_map_loc in [2,3]: - $ states.lun.map_location = "forest" - else: #Ravenclaw Room - $ states.lun.map_location = "room_r" + $ states.lun.map_location = __choice(("greenhouse", "forest", "forest", "room_r", "room_r")) - call update_character_map_locations + if location: + call update_character_map_locations return @@ -277,12 +279,10 @@ label set_ast_map_location(location = ""): $ states.ast.map_location = "defense" else: #Random - if random_map_loc in [1,2]: - $ states.ast.map_location = "courtyard" - else: #Slytherin Room - $ states.ast.map_location = "room_s" + $ states.ast.map_location = __choice(("courtyard", "courtyard", "room_s", "room_s", "room_s")) - call update_character_map_locations + if location: + call update_character_map_locations return @@ -294,12 +294,10 @@ label set_sus_map_location(location = ""): $ states.sus.map_location = "room_r" else: #Random - if random_map_loc in [1,2]: - $ states.sus.map_location = "great_hall" - else: #Hufflepuff Room - $ states.sus.map_location = "room_h" + $ states.sus.map_location = __choice(("great_hall", "great_hall", "room_h", "room_h", "room_h")) - call update_character_map_locations + if location: + call update_character_map_locations return @@ -311,83 +309,81 @@ label set_cho_map_location(location = ""): $ states.cho.map_location = "room_r" else: #Random - if random_map_loc in [1,2]: - $ states.cho.map_location = "training_grounds" - else: #Ravenclaw Room - $ states.cho.map_location = "room_r" + $ states.cho.map_location = __choice(("training_grounds", "training_grounds", "room_r", "room_r", "room_r")) - call update_character_map_locations + if location: + call update_character_map_locations return label update_character_map_locations: - if states.her.map_location == "library": - $ her_map_xpos = 685 + if states.her.map_location == "library": + $ her_map_xpos = 455 $ her_map_ypos = 94 - if states.her.map_location == "room_g": - $ her_map_xpos = 340 + elif states.her.map_location == "room_g": + $ her_map_xpos = 110 $ her_map_ypos = 212 - if states.her.map_location == "room_s": - $ her_map_xpos = 440 + elif states.her.map_location == "room_s": + $ her_map_xpos = 210 $ her_map_ypos = 184 - if states.her.map_location == "great_hall": - $ her_map_xpos = 300 + elif states.her.map_location == "great_hall": + $ her_map_xpos = 70 $ her_map_ypos = 240 - if states.her.map_location == "courtyard": - $ her_map_xpos = 674 + elif states.her.map_location == "courtyard": + $ her_map_xpos = 444 $ her_map_ypos = 216 - if states.her.map_location == "forest": - $ her_map_xpos = 290 + elif states.her.map_location == "forest": + $ her_map_xpos = 60 $ her_map_ypos = 40 #Luna if states.lun.map_location == "room_r": - $ lun_map_xpos = 536 + $ lun_map_xpos = 306 $ lun_map_ypos = 242 - if states.lun.map_location == "forest": - $ lun_map_xpos = 430 + elif states.lun.map_location == "forest": + $ lun_map_xpos = 200 $ lun_map_ypos = 50 - if states.lun.map_location == "greenhouse": - $ lun_map_xpos = 680 + elif states.lun.map_location == "greenhouse": + $ lun_map_xpos = 450 $ lun_map_ypos = 320 #Astoria if states.ast.map_location == "room_s": - $ ast_map_xpos = 476 + $ ast_map_xpos = 246 $ ast_map_ypos = 118 - if states.ast.map_location == "courtyard": - $ ast_map_xpos = 634 + elif states.ast.map_location == "courtyard": + $ ast_map_xpos = 404 $ ast_map_ypos = 254 - if states.ast.map_location == "defense": #Event - $ ast_map_xpos = 530 + elif states.ast.map_location == "defense": #Event + $ ast_map_xpos = 300 $ ast_map_ypos = 190 #Susan if states.sus.map_location == "room_h": - $ sus_map_xpos = 360 + $ sus_map_xpos = 130 $ sus_map_ypos = 320 - if states.sus.map_location == "great_hall": - $ sus_map_xpos = 300 + elif states.sus.map_location == "great_hall": + $ sus_map_xpos = 70 $ sus_map_ypos = 280 #Cho if states.cho.map_location == "room_r": - $ cho_map_xpos = 494 + $ cho_map_xpos = 264 $ cho_map_ypos = 276 - if states.cho.map_location == "training_grounds": - $ cho_map_xpos = 750 + elif states.cho.map_location == "training_grounds": + $ cho_map_xpos = 520 $ cho_map_ypos = 50 #Tonks - $ ton_map_xpos = 548 + $ ton_map_xpos = 318 $ ton_map_ypos = 156 #Snape if game.daytime: - $ sna_map_xpos = 595 + $ sna_map_xpos = 365 $ sna_map_ypos = 270 else: - $ sna_map_xpos = 598 + $ sna_map_xpos = 368 $ sna_map_ypos = 348 return @@ -396,97 +392,81 @@ screen map_screen_characters(): tag map zorder 5 - $ UI_xpos_offset = 0 - #Hermione if states.her.unlocked: - if states.her.map_location == "forest": # Mark forest event. - add "interface/achievements/glow.webp" pos (UI_xpos_offset+her_map_xpos, UI_ypos_offset+her_map_ypos) align (0.5, 0.5) zoom 0.15 alpha 0.5 at rotate_circular + if states.her.map_location == "forest": # Mark forest event. + add "interface/achievements/glow.webp" xycenter (her_map_xpos, her_map_ypos) zoom 0.15 alpha 0.5 at rotate_circular imagebutton: - xpos +UI_xpos_offset +her_map_xpos - ypos +UI_ypos_offset +her_map_ypos - xalign 0.5 - yalign 0.5 + xcenter her_map_xpos + ycenter her_map_ypos idle "interface/map/name_hermione.webp" hover "interface/map/name_hermione_hover.webp" - hovered SetVariable("ball_hint", "summon_hermione") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "summon_hermione") + unhovered SetScreenVariable("ball_hint", None) action Return("hermione") #Luna if states.lun.unlocked: imagebutton: - xpos UI_xpos_offset+ lun_map_xpos - ypos UI_ypos_offset+ lun_map_ypos - xalign 0.5 - yalign 0.5 + xcenter lun_map_xpos + ycenter lun_map_ypos idle "interface/map/name_luna.webp" hover "interface/map/name_luna_hover.webp" - hovered SetVariable("ball_hint", "summon_luna") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "summon_luna") + unhovered SetScreenVariable("ball_hint", None) action Return("luna") #Astoria if states.ast.unlocked: imagebutton: - xpos UI_xpos_offset +ast_map_xpos - ypos UI_ypos_offset +ast_map_ypos - xalign 0.5 - yalign 0.5 + xcenter ast_map_xpos + ycenter ast_map_ypos idle "interface/map/name_astoria.webp" hover "interface/map/name_astoria_hover.webp" - hovered SetVariable("ball_hint", "summon_astoria") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "summon_astoria") + unhovered SetScreenVariable("ball_hint", None) action Return("astoria") #Susan if states.sus.unlocked: imagebutton: - xpos UI_xpos_offset +sus_map_xpos - ypos UI_ypos_offset +sus_map_ypos - xalign 0.5 - yalign 0.5 + xcenter sus_map_xpos + ycenter sus_map_ypos idle "interface/map/name_susan.webp" hover "interface/map/name_susan_hover.webp" - hovered SetVariable("ball_hint", "summon_susan") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "summon_susan") + unhovered SetScreenVariable("ball_hint", None) action Return("susan") #Cho if states.cho.unlocked: imagebutton: - xpos UI_xpos_offset +cho_map_xpos - ypos UI_ypos_offset +cho_map_ypos - xalign 0.5 - yalign 0.5 + xcenter cho_map_xpos + ycenter cho_map_ypos idle "interface/map/name_cho.webp" hover "interface/map/name_cho_hover.webp" - hovered SetVariable("ball_hint", "summon_cho") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "summon_cho") + unhovered SetScreenVariable("ball_hint", None) action Return("cho") #Snape if states.sna.unlocked: imagebutton: - xpos UI_xpos_offset +sna_map_xpos - ypos UI_ypos_offset +sna_map_ypos - xalign 0.5 - yalign 0.5 + xcenter sna_map_xpos + ycenter sna_map_ypos idle "interface/map/name_snape.webp" hover "interface/map/name_snape_hover.webp" - hovered SetVariable("ball_hint", "summon_snape") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "summon_snape") + unhovered SetScreenVariable("ball_hint", None) action Return("snape") #Tonks if states.ton.unlocked: imagebutton: - xpos UI_xpos_offset +ton_map_xpos - ypos UI_ypos_offset +ton_map_ypos - xalign 0.5 - yalign 0.5 + xcenter ton_map_xpos + ycenter ton_map_ypos idle "interface/map/name_tonks.webp" hover "interface/map/name_tonks_hover.webp" - hovered SetVariable("ball_hint", "summon_tonks") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "summon_tonks") + unhovered SetScreenVariable("ball_hint", None) action Return("tonks") diff --git a/game/scripts/interface/parcel.rpy b/game/scripts/interface/parcel.rpy index 2a24ad65..ce45f199 100644 --- a/game/scripts/interface/parcel.rpy +++ b/game/scripts/interface/parcel.rpy @@ -1,9 +1,8 @@ - init python: class Parcel(object): """ contents - Contents of the parcel, has to be a list of tuples - containing an item object and integer quantity [ (lollipop_ITEM, 5) ]. + containing an item object and integer quantity [ (lollipop_ITEM, 5) ]. wait - Wait time required for the item to be delivered. label - Call label called after the parcel was opened. func - A setup function called before the parcel contents is being shown to the player. @@ -18,7 +17,10 @@ init python: self.wait = wait self.label = label self.func = func - self.queue = mailbox.parcels + + @property + def queue(self): + return mailbox.parcels def send(self): self.mailed = True @@ -60,30 +62,30 @@ init python: icon = item.image if quantity == 1: - text = "You have received one {}.".format(item.name) + text = f"You have received one {item.name}." else: - text = "You have received {} pieces of {}.".format(num_to_word(quantity), item.name) + text = f"You have received {num_to_word(quantity)} pieces of {item.name}." else: - items = ", ".join( [" ".join( [str(x[1]), x[0].name] ) for x in self.contents] ) + items = ", ".join(f"{x[1]} {x[0].name}" for x in self.contents) icon = "interface/icons/box_brown_"+str(random.randint(1, 4))+".webp" text = "You have received your ordered items:\n{size=-4}"+items+"{/size}" return (text, icon) -label parcel(parcel, label): +label parcel(parcel, lbl): show screen bld1 show screen blktone $ renpy.checkpoint() - $ renpy.call("give_reward", *parcel.get_caption()) + call give_reward(*parcel.get_caption()) hide screen blktone hide screen bld1 with d3 - if label: - $ renpy.call(label) + if lbl: + call expression lbl return diff --git a/game/scripts/interface/popup.rpy b/game/scripts/interface/popup.rpy index 08dd5ce1..09be4cc2 100644 --- a/game/scripts/interface/popup.rpy +++ b/game/scripts/interface/popup.rpy @@ -1,11 +1,8 @@ transform popup_animation(time=4.0, xx=-200): - on start: - xoffset xx - on show: - xoffset xx - linear 0.5 xoffset absolute(0) - pause time - linear 0.5 xoffset absolute(xx) + xoffset xx + linear 0.5 xoffset absolute(0) + pause time + linear 0.5 xoffset absolute(xx) screen popup_window(msg="", xpos=0, ypos=60): tag popup_window @@ -28,8 +25,7 @@ label give_reward(text="You found something!", gift="interface/icons/box_blue_2. show screen notes with d3 - # It has to be a renpy.say function in order to evaluate text tags i.e "You found [item.name]". - $ renpy.say(None, text) + "[text!it]" hide screen gift hide screen notes diff --git a/game/scripts/interface/screens.rpy b/game/scripts/interface/screens.rpy index 0419b668..54033ea8 100644 --- a/game/scripts/interface/screens.rpy +++ b/game/scripts/interface/screens.rpy @@ -41,7 +41,6 @@ screen close_button(xoffset=0, yoffset=0, action=Return("Close"), key=["game_men imagebutton: keyboard_focus False xalign 1.0 - xanchor 1.0 offset (xoffset, yoffset) idle gui.format("interface/topbar/buttons/{}/ui_close.webp") hover image_hover(gui.format("interface/topbar/buttons/{}/ui_close.webp")) diff --git a/game/scripts/interface/stats.rpy b/game/scripts/interface/stats.rpy index 06987cab..9e4a494a 100644 --- a/game/scripts/interface/stats.rpy +++ b/game/scripts/interface/stats.rpy @@ -1,139 +1,116 @@ -init python: - def stats_sortfilter(item, sortby=False): - return item - default stats_show_locked = False -label update_stats: - - ### Hermione ### - - # Whoring - $ her_whoring_word_list = ["Pure", "Naive", "Curious", "Naughty", "Perverse", "Immoral", "Slutty", "Shameless", "Cumslut", "Total Cumslut", "Shameless Cumslut"] - $ her_whoring_word = her_whoring_word_list[int(min(states.her.level, 24)/2.4)] - - # Reputation - $ her_reputation_word_list = ["Teacher's pet", "School star", "good girl", "minx", "slutty schoolgirl", "easy lay", "whore", "slut for sex", "gryffindor whore", "school cumdump", "mudblood cumdump"] - #$ slutWords = ["Teacher's pet", "School star", "good girl", "headmaster's pet", "slutty schoolgirl", "slut", "headmaster's slut", "daddy's girl", "gryffindor slut", "Dumbledore's whore", "Dumbledore's cumdump"] - $ her_reputation_word = her_reputation_word_list[int(min(states.her.public_level, 24)/2.4)] - - # Tutoring - $ her_tutoring_word_list = ["Not started", "naive", "tempted", "curious", "tainted", "eager", "sinful", "perverted", "corrupted", "depraved", "shattered"] - $ her_tutoring_word = her_tutoring_word_list[int(states.her.ev.tutoring.stage/1.5)] - - # Mood - $ her_mood_word_list = ["Cheerful", "Reluctant", "Gloomy", "Stern", "Slightly Annoyed", "Annoyed", "Upset", "Outraged", "Mad", "Angry", "Very Angry"] - $ her_mood_word = her_mood_word_list[int(min(states.her.mood, 10)/1.0)] - - ### Astoria ### - #call astoria_clothing_level - #$ ast_cuteness_word_list = ["Ugly Duckling", "Swot", "", "", "", "", "", "Cutypie", "", "", ""] - #$ ast_cuteness_word = ast_cuteness_word_list[int(ast_clothing_level/10)] - # Mood - $ ast_mood_word_list = ["Cheerful", "Reluctant", "Gloomy", "Stern", "Slightly Annoyed", "Annoyed", "Upset", "Outraged", "Mad", "Angry", "Very Angry"] - $ ast_mood_word = ast_mood_word_list[int(min(states.ast.mood, 10)/1.0)] - - ### Cho ### - - # Whoring - $ cho_whoring_word_list = ["Incorruptible", "Focused", "Resilient", "Bi-Curious", "Naughty", "Immoral", "Perverse", "Slutty", "Shameless", "Cumslut", "Shameless Cumslut"] - $ cho_whoring_word = cho_whoring_word_list[int(min(states.cho.level, 24)/2.4)] - - # Reputation - $ cho_reputation_word_list = ["Tomboy", "Team Player", "Quidditch Star", "Flying Ace", "Minx", "Manipulative", "Exploiting", "Cheater", "Team's Cumdump", "Quidditch Whore", "Cheating Slut"] - $ cho_reputation_word= cho_reputation_word_list[int(min(states.cho.public_level, 24)/2.4)] - - # Mood - $ cho_mood_word_list = ["Cheerful", "Reluctant", "Gloomy", "Stern", "Slightly Annoyed", "Annoyed", "Upset", "Outraged", "Mad", "Angry", "Very Angry"] - $ cho_mood_word = cho_mood_word_list[int(min(states.cho.mood, 10)/1.0)] - - ### Snape ### - - # # Support - # $ sna_support_word_list = ["Tight-Arse", "Miser", "Stingy", "Sparing", "Adequate", "Loose", "Easy", "Generous", "Frivolous", "Excessive", "Exorbitant"] - # $ sna_support_word = sna_support_word_list[int(min(sna_support, 15)/1.5)] - - # Friendship - $ sna_friendship_word_list = ["Unknown", "Colleague", "Confidant", "Trusted", "Acquaintance", "Friend", "Good friend", "Homie", "If I had to pick a dude...", "BFF", "Bros"] - $ sna_friendship_word = sna_friendship_word_list[int(min(states.sna.level, 100)/10)] - - ### Tonks ### - - # Reputation - $ ton_reputation_word_list = ["Teacher", "Bore", "Weirdo", "A Bit Nutty", "Easy Going", "Tart", "Naughty Teacher", "Slutty Teacher", "Slag", "Shameful", "Disgrace"] - $ ton_reputation_word = ton_reputation_word_list[int(min(states.ton.public_level, 24)/2.4)] - - # Support - # $ ton_support_word_list = ["Undecided", "Modest", "Candid", "Unbiased", "Positive", "Fair", "Neutral", "Biased", "Scummy", "Cruel", "Heartless"] - # $ ton_support_word = ton_support_word_list[int(min(ton_support, 12)/1.2)] - - # Friendship - $ ton_friendship_word_list = ["Unknown", "inferior", "employee", "advisor", "trusted advisor", "Acquaintance", "friend", "Girlfriend", "Partner in crime", "Bonnie & Clyde", "Master & Slave"] - $ ton_friendship_word = ton_friendship_word_list[int(min(states.ton.level, 100)/10)] - - #$ ton_sluttiness_word_list = ["Masochist", "Disgrace", "Street Whore", "Harlot", "Tart", "Sexually open", "Naughty Teacher", "Easy Going", "Professor", "Bore", "Nun"] - #$ ton_sluttiness_word = ton_sluttiness_word_list[int(ton_clothing_level/10)] - - return +define her_whoring_word_list = ("Pure", "Naive", "Curious", "Naughty", "Perverse", "Immoral", "Slutty", "Shameless", "Cumslut", "Total Cumslut", "Shameless Cumslut") +define her_reputation_word_list = ("Teacher's Pet", "School Star", "Good girl", "Minx", "Slutty Schoolgirl", "Easy Lay", "Whore", "Slut for sex", "Gryffindor Whore", "School Cumdump", "Mudblood Cumdump") +#$ slutWords = ["Teacher's pet", "School Star", "Good Girl", "Headmaster's Pet", "Slutty Schoolgirl", "Slut", "Headmaster's Slut", "Daddy's Girl", "Gryffindor Slut", "Dumbledore's Whore", "Dumbledore's Cumdump"] +define her_tutoring_word_list = ("Not Started", "Naive", "Tempted", "Curious", "Tainted", "Eager", "Sinful", "Perverted", "Corrupted", "Depraved", "Shattered") +define her_mood_word_list = ("Cheerful", "Reluctant", "Gloomy", "Stern", "Slightly Annoyed", "Annoyed", "Upset", "Outraged", "Mad", "Angry", "Very Angry") +#$ ast_cuteness_word_list = ["Ugly Duckling", "Swot", "", "", "", "", "", "Cutypie", "", "", ""] +define ast_mood_word_list = ("Cheerful", "Reluctant", "Gloomy", "Stern", "Slightly Annoyed", "Annoyed", "Upset", "Outraged", "Mad", "Angry", "Very Angry") +define cho_whoring_word_list = ("Incorruptible", "Focused", "Resilient", "Bi-Curious", "Naughty", "Immoral", "Perverse", "Slutty", "Shameless", "Cumslut", "Shameless Cumslut") +define cho_reputation_word_list = ("Tomboy", "Team Player", "Quidditch Star", "Flying Ace", "Minx", "Manipulative", "Exploiting", "Cheater", "Team's Cumdump", "Quidditch Whore", "Cheating Slut") +define cho_mood_word_list = ("Cheerful", "Reluctant", "Gloomy", "Stern", "Slightly Annoyed", "Annoyed", "Upset", "Outraged", "Mad", "Angry", "Very Angry") +# $ sna_support_word_list = ["Tight-Arse", "Miser", "Stingy", "Sparing", "Adequate", "Loose", "Easy", "Generous", "Frivolous", "Excessive", "Exorbitant"] +define sna_friendship_word_list = ("Unknown", "Colleague", "Confidant", "Trusted", "Acquaintance", "Friend", "Good friend", "Homie", "If I had to pick a dude...", "BFF", "Bros") +define ton_reputation_word_list = ("Teacher", "Bore", "Weirdo", "A Bit Nutty", "Easy Going", "Tart", "Naughty Teacher", "Slutty Teacher", "Slag", "Shameful", "Disgrace") +# $ ton_support_word_list = ["Undecided", "Modest", "Candid", "Unbiased", "Positive", "Fair", "Neutral", "Biased", "Scummy", "Cruel", "Heartless"] +define ton_friendship_word_list = ("Unknown", "Inferior", "Employee", "Advisor", "Trusted advisor", "Acquaintance", "Friend", "Girlfriend", "Partner in crime", "Bonnie & Clyde", "Master & Slave") +#$ ton_sluttiness_word_list = ["Masochist", "Disgrace", "Street Whore", "Harlot", "Tart", "Sexually open", "Naughty Teacher", "Easy Going", "Professor", "Bore", "Nun"] label stats: $ gui.in_context("stats_menu") jump main_room_menu +define stats_categories_sorted = ("Genie", "Snape", "Tonks", "Hermione", "Cho", "Luna", "Astoria", "Susan") #"Ginny", "Daphne", "Padma", "Patil", "Myrtle", "Mafkin" +# Stats dictionary +define stats_dict = { + "Genie": {"ico": "genie", "name": "Genie", "sex": "Yes", "height": "6.2ft", "weight": "200lb", "job": "Headmaster", "hates": "Lamps", "likes": "Tits"}, + "Snape": {"ico": "snape", "name": "Severus Snape", "sex": "Male", "height": "5.9ft", "weight": "155lb", "job": "Teacher", "hates": "Everyone", "likes": "Rain"}, + "Tonks": {"ico": "tonks", "name": "Nymphadora Tonks", "sex": "Fluid", "height": "5.6ft", "weight": "130lb", "job": "Teacher", "hates": "Pineapple Pizza", "likes": "Girls"}, + "Hermione": {"ico": "hermione", "name": "Hermione Granger", "sex": "Female", "height": "5.2ft", "weight": "126lb", "job": "Student", "hates": "Slytherin", "likes": "Books"}, + "Cho": {"ico": "cho", "name": "Cho Chang", "sex": "Female", "height": "5.1ft", "weight": "122lb", "job": "Student", "hates": "Hermione", "likes": "Winning"}, + "Luna": {"ico": "luna", "name": "Luna Lovegood", "sex": "Female", "height": "5.2ft", "weight": "117lb", "job": "Student", "hates": "Wrackspurts", "likes": "{size=-2}Magical creatures{/size}"}, + "Astoria": {"ico": "astoria", "name": "Astoria Greengrass", "sex": "Female", "height": "5.0ft", "weight": "102lb", "job": "Student", "hates": "Rules", "likes": "Breaking them"}, + "Susan": {"ico": "susan", "name": "Susan Bones", "sex": "Female", "height": "5.1ft", "weight": "135lb", "job": "Student", "hates": "Chores", "likes": "You {size=-4}Secretly..{/size}"} +} + label stats_menu(xx=150, yy=90): + $ renpy.dynamic( + ### Hermione ### - call update_stats + # Whoring + her_whoring_word = her_whoring_word_list[int(min(states.her.level, 24)/2.4)], - # Stats dictionary - $ stats_dict = { - "Genie": {"ico": "genie", "flag": True, "name": "Genie", "sex": "Yes", "height": "6.2ft", "weight": "200lb", "job": "Headmaster", "hates": "Lamps", "likes": "Tits"}, - "Snape": {"ico": "snape", "flag": states.sna.unlocked, "name": "Severus Snape", "sex": "Male", "height": "5.9ft", "weight": "155lb", "job": "Teacher", "hates": "Everyone", "likes": "Rain"}, - "Tonks": {"ico": "tonks", "flag": states.ton.unlocked, "name": "Nymphadora Tonks", "sex": "Fluid", "height": "5.6ft", "weight": "130lb", "job": "Teacher", "hates": "Pineapple Pizza", "likes": "Girls"}, - "Hermione": {"ico": "hermione", "flag": states.her.unlocked, "name": "Hermione Granger", "sex": "Female", "height": "5.2ft", "weight": "126lb", "job": "Student", "hates": "Slytherin", "likes": "Books"}, - "Cho": {"ico": "cho", "flag": states.cho.unlocked, "name": "Cho Chang", "sex": "Female", "height": "5.1ft", "weight": "122lb", "job": "Student", "hates": "Hermione", "likes": "Winning"}, - "Luna": {"ico": "luna", "flag": states.lun.unlocked, "name": "Luna Lovegood", "sex": "Female", "height": "5.2ft", "weight": "117lb", "job": "Student", "hates": "Wrackspurts", "likes": "{size=-2}Magical creatures{/size}"}, - "Astoria": {"ico": "astoria", "flag": states.ast.unlocked, "name": "Astoria Greengrass", "sex": "Female", "height": "5.0ft", "weight": "102lb", "job": "Student", "hates": "Rules", "likes": "Breaking them"}, - "Susan": {"ico": "susan", "flag": states.sus.unlocked, "name": "Susan Bones", "sex": "Female", "height": "5.1ft", "weight": "135lb", "job": "Student", "hates": "Chores", "likes": "You {size=-4}Secretly..{/size}"} - } + # Reputation + her_reputation_word = her_reputation_word_list[int(min(states.her.public_level, 24)/2.4)], - $ stats_categories_sorted = ["Genie", "Snape", "Tonks", "Hermione", "Cho", "Luna", "Astoria", "Susan"] #"Ginny", "Daphne", "Padma", "Patil", "Myrtle", "Mafkin" - $ stats_categories_sorted_length = len(stats_categories_sorted) + # Tutoring + her_tutoring_word = her_tutoring_word_list[int(states.her.ev.tutoring.stage/1.5)], - $ current_category = states.last_girl.capitalize() if states.last_girl else stats_categories_sorted[0] - $ current_item = stats_dict[current_category] - $ current_subcategory = "overview" - $ current_sorting = stats_show_locked + # Mood + her_mood_word = her_mood_word_list[int(min(states.her.mood, 10)/1.0)], - $ category_items = stats_dict[current_category] - $ menu_items = category_items - $ menu_items_length = len(menu_items) + ### Astoria ### + #call astoria_clothing_level + #ast_cuteness_word = ast_cuteness_word_list[int(ast_clothing_level/10)], + # Mood + ast_mood_word = ast_mood_word_list[int(min(states.ast.mood, 10)/1.0)], - show screen stats(xx, yy) + ### Cho ### - label .after_init: - $ _choice = ui.interact() + # Whoring + cho_whoring_word = cho_whoring_word_list[int(min(states.cho.level, 24)/2.4)], - if _choice[0] == "category": - $ current_category = _choice[1] - $ category_items = stats_dict[current_category] - $ menu_items = stats_sortfilter(category_items, current_sorting) - $ menu_items_length = len(menu_items) - $ current_item = stats_dict[current_category] - #$ current_subcategory = "overview" - elif _choice[0] == "subcat": - if _choice[1] != current_subcategory: - $ current_subcategory = _choice[1] - else: - hide screen stats - return + # Reputation + cho_reputation_word= cho_reputation_word_list[int(min(states.cho.public_level, 24)/2.4)], - jump .after_init + # Mood + cho_mood_word = cho_mood_word_list[int(min(states.cho.mood, 10)/1.0)], + + ### Snape ### + + # # Support + # sna_support_word = sna_support_word_list[int(min(sna_support, 15)/1.5)], + + # Friendship + sna_friendship_word = sna_friendship_word_list[int(min(states.sna.level, 100)/10)], + + ### Tonks ### + + # Reputation + ton_reputation_word = ton_reputation_word_list[int(min(states.ton.public_level, 24)/2.4)], + + # Support + # ton_support_word = ton_support_word_list[int(min(ton_support, 12)/1.2)], + + # Friendship + ton_friendship_word = ton_friendship_word_list[int(min(states.ton.level, 100)/10)], + + #ton_sluttiness_word = ton_sluttiness_word_list[int(ton_clothing_level/10)], + ) + + call screen stats(xx, yy) + return screen stats(xx, yy): tag stats zorder 30 modal True + default stats_flags = { + "Genie": True, + "Snape": states.sna.unlocked, + "Tonks": states.ton.unlocked, + "Hermione": states.her.unlocked, + "Cho": states.cho.unlocked, + "Luna": states.lun.unlocked, + "Astoria": states.ast.unlocked, + "Susan": states.sus.unlocked, + } + + default current_category = states.last_girl.capitalize() if states.last_girl else stats_categories_sorted[0] + default current_item = stats_dict[current_category] + add "gui_fade" if renpy.mobile: @@ -141,12 +118,13 @@ screen stats(xx, yy): use close_button(key=["stats", "game_menu"]) fixed: + pos (xx, yy) if settings.get("animations"): at gui_animation - use stats_menu(xx, yy) - use stats_menuitem(xx, yy) + use stats_menu(current_category, stats_flags) + use stats_menuitem(current_category, current_item, stats_flags) -screen stats_menu(xx, yy): +screen stats_menu(current_category, stats_flags): tag stats_menu zorder 30 modal True @@ -154,7 +132,6 @@ screen stats_menu(xx, yy): window: style "empty" style_prefix gui.theme('achievements') - pos (xx, yy) xysize (207, 454) use invisible_button() @@ -172,14 +149,14 @@ screen stats_menu(xx, yy): vbox: pos (6, 6) for category in stats_categories_sorted: - if not stats_show_locked and not stats_dict[category]["flag"]: + if not stats_show_locked and not stats_flags[category]: pass else: frame: style "empty" xysize (195, 50) vbox: - textbutton (category if stats_dict[category]["flag"] else "???"): + textbutton (category if stats_flags[category] else "???"): style "empty" xysize (195, 46) text_align (0.6, 0.5) @@ -189,30 +166,30 @@ screen stats_menu(xx, yy): background gui.format("interface/achievements/{}/highlight_left_b.webp") else: hover_background gui.format("interface/achievements/{}/highlight_left_b.webp") - action Return(["category", category]) + action [ + SelectedIf(SetScreenVariable("current_category", category)), + SetScreenVariable("current_item", stats_dict[category]), + ] add gui.format("interface/achievements/{}/spacer_left.webp") - if stats_dict[category]["flag"]: - $ image_zoom = crop_image_zoom("interface/icons/head/"+stats_dict.get(category).get("ico")+".webp", 42, 42) - else: - $ image_zoom = crop_image_zoom("interface/icons/head/"+stats_dict.get(category).get("ico")+"_locked.webp", 42, 42) - button: style gui.theme("overlay_button") background gui.format("interface/achievements/{}/iconbox.webp") foreground "interface/achievements/glass_iconbox.webp" xysize (48, 48) - add image_zoom align (0.5, 0.5) + add crop_image_zoom("interface/icons/head/"+stats_dict.get(category).get("ico")+("" if stats_flags[category] else "_locked")+".webp", 42, 42) align (0.5, 0.5) -screen stats_menuitem(xx, yy): +screen stats_menuitem(current_category, current_item, stats_flags): tag stats_menuitem zorder 30 + default current_subcategory = "overview" + window: style "empty" style_prefix gui.theme() - pos (xx+217, yy-53) + pos (217, -53) xysize (560, 507) use invisible_button() @@ -228,9 +205,9 @@ screen stats_menuitem(xx, yy): yanchor 0.5 textbutton "Overview": - action [Return(["subcat", "overview"]), SelectedIf(current_subcategory=="overview")] + action SetLocalVariable("current_subcategory", "overview") textbutton "Details": - action [Return(["subcat", "details"]), SelectedIf(current_subcategory=="details")] + action SetLocalVariable("current_subcategory", "details") # Character sprites frame: @@ -242,40 +219,40 @@ screen stats_menuitem(xx, yy): if current_category == "Genie": add "genie_stats" zoom 0.175 align (1.0, 1.0) xzoom -1 elif current_category == "Snape": - if current_item["flag"]: + if stats_flags[current_category]: add "characters/snape/main/snape_09.webp" zoom 0.35 align (0.9, 1.0) xzoom 1 else: add "interface/characters/snape_locked.webp" zoom 0.35 align (0.9, 1.0) xzoom 1 elif current_category == "Tonks": - if current_item["flag"]: + if stats_flags[current_category]: add tonks.image zoom 0.41 align (0.7, 1.0) xzoom 1 else: add "interface/characters/tonks_locked.webp" zoom 0.41 align (0.7, 1.0) xzoom 1 elif current_category == "Hermione": - if current_item["flag"]: + if stats_flags[current_category]: add hermione.image zoom 0.39 align (0.7, 1.0) xzoom 1 else: add "interface/characters/hermione_locked.webp" zoom 0.39 align (0.65, 1.0) xzoom 1 elif current_category == "Cho": - if current_item["flag"]: + if stats_flags[current_category]: add cho.image zoom 0.42 align (0.65, 1.0) xzoom 1 else: add "interface/characters/cho_locked.webp" zoom 0.42 align (0.65, 1.0) xzoom 1 elif current_category == "Luna": - if current_item["flag"]: + if stats_flags[current_category]: add luna.image zoom 0.39 align (0.75, 1.0) xzoom 1 else: add "interface/characters/luna_locked.webp" zoom 0.39 align (0.75, 1.0) xzoom 1 elif current_category == "Astoria": - if current_item["flag"]: + if stats_flags[current_category]: add astoria.image zoom 0.4 align (0.7, 1.0) xzoom 1 else: add "interface/characters/astoria_locked.webp" zoom 0.4 align (0.7, 1.0) xzoom 1 elif current_category == "Susan": - if current_item["flag"]: + if stats_flags[current_category]: add susan.image zoom 0.4 align (0.65, 1.0) xzoom 1 else: - add "interface/characters/susan_locked.webp" zoom 0.4 align (0.65, 1.0) xzoom 1 + add "interface/characters/susan_locked.webp" zoom 0.4 align (0.65, 1.0) xzoom 1 frame: style "empty" @@ -283,10 +260,10 @@ screen stats_menuitem(xx, yy): yalign 1.0 xoffset 6 if current_subcategory == "overview": - if current_item["flag"]: - text current_item["name"] size 20 xalign 0.5 xanchor 0.5 ypos 5 + if stats_flags[current_category]: + text current_item["name"] size 20 xalign 0.5 ypos 5 else: - text "???" size 20 xalign 0.5 xanchor 0.5 ypos 5 + text "???" size 20 xalign 0.5 ypos 5 vbox: xoffset 10 @@ -301,7 +278,7 @@ screen stats_menuitem(xx, yy): vbox: spacing 3 - if current_item["flag"]: + if stats_flags[current_category]: text current_item["sex"] size 12 text current_item["height"] size 12 text current_item["weight"] size 12 @@ -317,7 +294,7 @@ screen stats_menuitem(xx, yy): vbox: spacing 3 - if current_item["flag"]: + if stats_flags[current_category]: text current_item["job"] size 12 text current_item["hates"] size 12 text current_item["likes"] size 12 @@ -326,7 +303,7 @@ screen stats_menuitem(xx, yy): text "unknown" size 12 text "unknown" size 12 - if current_item["flag"]: + if stats_flags[current_category]: vbox: yoffset 35 xoffset 50 @@ -380,7 +357,7 @@ screen stats_menuitem(xx, yy): use stat_bar(int(0/0.9), "-Reputation-", "Invisible", 0) # TODO: Add word list and variable use stat_bar(int(0), "{size=-10}-Assertiveness Training-{/size}" , "Not started", 0) # TODO: Add word list else: - if current_item["flag"]: + if stats_flags[current_category]: vbox: if current_category == "Genie": use text_stat("Bird fed:") @@ -454,9 +431,8 @@ screen stat_bar(steps, top_text, bottom_text, stat_number, top_padding=20): add Crop((0, 0, steps*36, 600), gui.format("interface/stats/{}/bar_full.webp")) add gui.format("interface/stats/{}/bar_empty.webp") - text bottom_text+" (lvl " +str(stat_number)+ ")" xalign 0.5 size 20 + text "[bottom_text] (lvl [stat_number])" xalign 0.5 size 20 screen text_stat(startText="", endText="", amount="", top_padding = 20): sensitive False - - text (startText +str(amount)+ endText) xpos 20 size 14 + text "[startText][amount][endText]" xpos 20 size 14 diff --git a/game/scripts/interface/topbar.rpy b/game/scripts/interface/topbar.rpy index 4f4edb81..a7881376 100644 --- a/game/scripts/interface/topbar.rpy +++ b/game/scripts/interface/topbar.rpy @@ -3,19 +3,11 @@ init python: if points < 1000: return str(points) else: - return str(round(points/1000.0, 1))+"{size=-2}k{/size}" + return str(round(points/1000.0, 1))+"{size=-2}k{/size}" label update_ui_points: # Debug - # Temp variables - $ toggle_points = False - $ toggle_menu = False - - # Outline settings - #TODO Refactor interface_color dependent styles to definitions - $ points_outline = [ (1, "#000", 0, 0) ] - #If points variable value exceedes one thousand make it a decimal number instead and round to x.x #Remember, "slytherin_points" is a string! If you need points integer use i.e. "slytherin" variable instead. $ slytherin_points = text_points(slytherin) @@ -24,13 +16,12 @@ label update_ui_points: $ hufflepuff_points = text_points(hufflepuff) #Check who's in the lead - $ housepoints = [slytherin, gryffindor, ravenclaw, hufflepuff] - $ housepoints_sorted = sorted(housepoints, reverse=True) + $ housepoints_sorted = sorted((slytherin, gryffindor, ravenclaw, hufflepuff), reverse=True) - $ slytherin_place = housepoints_sorted.index(housepoints[0])+1 - $ gryffindor_place = housepoints_sorted.index(housepoints[1])+1 - $ ravenclaw_place = housepoints_sorted.index(housepoints[2])+1 - $ hufflepuff_place = housepoints_sorted.index(housepoints[3])+1 + $ slytherin_place = housepoints_sorted.index(slytherin)+1 + $ gryffindor_place = housepoints_sorted.index(gryffindor)+1 + $ ravenclaw_place = housepoints_sorted.index(ravenclaw)+1 + $ hufflepuff_place = housepoints_sorted.index(hufflepuff)+1 # Set banners yanchor depending on the placement (ascending) $ housepoints_y = [None, 0.0, 0.25, 0.5, 0.75] @@ -41,6 +32,8 @@ screen ui_top_bar(): tag ui zorder 2 + default toggle_menu = False + if toggle_menu: use ui_menu @@ -60,7 +53,7 @@ screen ui_top_bar(): tooltip "Close menu" else: tooltip "Open menu" - action ToggleVariable("toggle_menu", True, False) + action ToggleScreenVariable("toggle_menu", True, False) # Sleep button imagebutton: @@ -119,11 +112,12 @@ screen ui_top_bar(): screen ui_points(): tag ui + default toggle_points = False + fixed: xalign 0.5 xsize 162 ysize 64 - xanchor 0.5 if not persistent.toggle_points and not toggle_points: add "interface/topbar/slytherin.webp" yanchor housepoints_y[slytherin_place] @@ -137,24 +131,34 @@ screen ui_points(): add "interface/topbar/ravenclaw_empty.webp" yanchor 0 add "interface/topbar/hufflepuff_empty.webp" yanchor 0 # Show points - text "{size=-5}{color=#FFF}[slytherin_points]{/color}{/size}" outlines points_outline xpos 17 ypos 30 xanchor 0.5 - text "{size=-5}{color=#FFF}[gryffindor_points]{/color}{/size}" outlines points_outline xpos 58 ypos 30 xanchor 0.5 - text "{size=-5}{color=#FFF}[ravenclaw_points]{/color}{/size}" outlines points_outline xpos 98 ypos 30 xanchor 0.5 - text "{size=-5}{color=#FFF}[hufflepuff_points]{/color}{/size}" outlines points_outline xpos 139 ypos 30 xanchor 0.5 + text "{size=-5}[slytherin_points]{/size}" xpos 17 style "housepoints" + text "{size=-5}[gryffindor_points]{/size}" xpos 58 style "housepoints" + text "{size=-5}[ravenclaw_points]{/size}" xpos 98 style "housepoints" + text "{size=-5}[hufflepuff_points]{/size}" xpos 139 style "housepoints" # Show placement number - text "{size=16}{color=#FFF}[slytherin_place]{/color}{/size}" outlines points_outline xpos 17 ypos 10 xanchor 0.5 - text "{size=16}{color=#FFF}[gryffindor_place]{/color}{/size}" outlines points_outline xpos 58 ypos 10 xanchor 0.5 - text "{size=16}{color=#FFF}[ravenclaw_place]{/color}{/size}" outlines points_outline xpos 98 ypos 10 xanchor 0.5 - text "{size=16}{color=#FFF}[hufflepuff_place]{/color}{/size}" outlines points_outline xpos 139 ypos 10 xanchor 0.5 + text "[slytherin_place]" xpos 17 style "houseplaces" + text "[gryffindor_place]" xpos 58 style "houseplaces" + text "[ravenclaw_place]" xpos 98 style "houseplaces" + text "[hufflepuff_place]" xpos 139 style "houseplaces" if room_menu_active: imagebutton: idle "interface/topbar/hover_zone.webp" tooltip "House Points\n{size=-2}Click to toggle style display{/size}" - hovered SetVariable("toggle_points", True) - unhovered SetVariable("toggle_points", False) + hovered SetLocalVariable("toggle_points", True) + unhovered SetLocalVariable("toggle_points", False) action ToggleVariable("persistent.toggle_points", True, False) +style housepoints: + outlines [(1, "#000", 0, 0)] + color "#FFF" + xanchor .5 + ypos 30 + +style houseplaces is housepoints: + size 16 + ypos 10 + screen ui_stats(): tag ui fixed: @@ -186,7 +190,7 @@ style dark_ui_stats_text: screen ui_menu(): tag ui - button style "empty" action SetVariable("toggle_menu", False) keysym "game_menu" + button style "empty" action SetScreenVariable("toggle_menu", False) keysym "game_menu" button: ypos 34 @@ -204,20 +208,19 @@ screen ui_menu(): add gui.format("interface/topbar/{}/menu.webp") vbox: - xanchor 0.5 xalign 0.5 ypos 15 textbutton "Save" action ShowMenu("save") background None xalign 0.5 text_outlines [ (2, "#00000080", 1, 0) ] textbutton "Load" action ShowMenu("load") background None xalign 0.5 text_outlines [ (2, "#00000080", 1, 0) ] if game.cheats and game.difficulty <= 2 and game.day > 1: - textbutton "Cheats" action [SetVariable("toggle_menu", False), Jump("cheats")] background None xalign 0.5 text_outlines [ (2, "#00000080", 1, 0) ] + textbutton "Cheats" action [SetScreenVariable("toggle_menu", False), Jump("cheats")] background None xalign 0.5 text_outlines [ (2, "#00000080", 1, 0) ] if game.day > 1 and renpy.android: textbutton "Preferences" action ShowMenu("preferences") background None xalign 0.5 text_outlines [ (2, "#00000080", 1, 0) ] if game.day > 1 and persistent.game_complete: - textbutton "Gallery" action [SetVariable("toggle_menu", False), Jump("scene_gallery")] background None xalign 0.5 text_outlines [ (2, "#00000080", 1, 0) ] + textbutton "Gallery" action [SetScreenVariable("toggle_menu", False), Jump("scene_gallery")] background None xalign 0.5 text_outlines [ (2, "#00000080", 1, 0) ] #if game.day > 1 and config.developer: - # textbutton "{size=-11}Show Chars{/size}" action [SetVariable("toggle_menu", False), Jump("summon_characters")] background "#000" + # textbutton "{size=-11}Show Chars{/size}" action [SetScreenVariable("toggle_menu", False), Jump("summon_characters")] background "#000" hbox: pos (50, 185) @@ -248,9 +251,9 @@ screen ui_menu(): label scene_gallery: menu: "-Watch Ball Ending 1-" if persistent.ending_01: - $ renpy.call_replay("ball_ending_E2", { "states.her.ev.yule_ball.variant": "personal" }) + $ renpy.call_replay("ball_ending_E2", scope={ "states.her.ev.yule_ball.variant": "personal" }) "-Watch Ball Ending 2-" if persistent.ending_02: - $ renpy.call_replay("ball_ending_E2", { "states.her.ev.yule_ball.variant": "public" }) + $ renpy.call_replay("ball_ending_E2", scope={ "states.her.ev.yule_ball.variant": "public" }) "-Never mind-": pass jump main_room_menu diff --git a/game/scripts/interface/tutorials.rpy b/game/scripts/interface/tutorials.rpy index 2bf395f3..9ef94c3d 100644 --- a/game/scripts/interface/tutorials.rpy +++ b/game/scripts/interface/tutorials.rpy @@ -30,8 +30,7 @@ label tutorial(entry): return label .display(entry): - show screen tutorial(entry) - $ _choice = ui.interact() + call screen tutorial(entry) return screen tutorial(entry): @@ -56,8 +55,9 @@ screen tutorial(entry): text "Tutorial" size 10 yalign 0.5 text tutorial_dict[entry][0] size 16 xalign 0.5 yalign 0.5 - if renpy.loadable("interface/tutorials/{}.webp".format(entry)): - add "interface/tutorials/{}.webp".format(entry) xalign 0.5 + $ formated = f"interface/tutorials/{entry}.webp" + if renpy.loadable(formated): + add formated xalign 0.5 text tutorial_dict[entry][1] size 12 diff --git a/game/scripts/inventory/books_waifu.rpy b/game/scripts/inventory/books_waifu.rpy index e524abcb..64923f6c 100644 --- a/game/scripts/inventory/books_waifu.rpy +++ b/game/scripts/inventory/books_waifu.rpy @@ -329,6 +329,7 @@ label waifu_book: gen "So I ended up with the same chick again?" ("base", xpos="far_left", ypos="head") gen "*Hmm*... Maybe I should try and make different choices next time...?" ("base", xpos="far_left", ypos="head") + $ waifu_progression["generic_ending"] = True # Modify item description to show seen endings. python: diff --git a/game/scripts/inventory/classes.rpy b/game/scripts/inventory/classes.rpy index c0481f3e..7f25cd6d 100644 --- a/game/scripts/inventory/classes.rpy +++ b/game/scripts/inventory/classes.rpy @@ -26,7 +26,9 @@ init python: self.func = func self.label = label self.limit = limit - self.image = "interface/icons/{}.webp".format(self.id) if image == "default" else image + if image == "default": + image = f"interface/icons/{self.id}.webp" + self.image = image self.currency = currency self.caption = caption @@ -42,10 +44,10 @@ init python: def use(self): if not self.usable: - raise Exception("Item '{}' is not usable as it does not have any function or a label.".format(self.name)) + raise Exception(f"Item {self.name!r} is not usable as it does not have any function or a label.") if self.owned == 0: - raise Exception("Item '{}' owned count is equal to zero.".format(self.name)) + raise Exception(f"Item {self.name!r} owned count is equal to zero.") if not self.type == "quest": # Quest items require manual triggers, it's more convenient. @@ -62,10 +64,10 @@ init python: def give(self, who): if not self.givable: - raise Exception("Item '{}' is not marked as givable.".format(self.name)) + raise Exception(f"Item {self.name!r} is not marked as givable.") if self.owned == 0: - raise Exception("Item '{}' owned count is equal to zero.".format(self.name)) + raise Exception(f"Item {self.name!r} owned count is equal to zero.") if not self.type == "quest": # Quest items require manual triggers, it's more convenient. @@ -103,8 +105,10 @@ init python: def __init__(self, id, type, name, placement, price=0, desc="", unlocked=True, image="default", room_image="default", room_image_hover=None, owned=0, replaces=False, use_action=None, replace_action=None, replace_anchor=None, replace_pos=None): super(Decoration, self).__init__(id, type, name, price, desc, unlocked, None, None, 1, image, False, "tokens", "Apply", owned) - self.room_image = Transform("images/rooms/main_room/decorations/{}.webp".format(self.id), zoom=self.room_scale) if room_image == "default" else Transform(room_image, zoom=self.room_scale) - self.room_image_hover = Transform(room_image_hover, zoom=self.room_scale) if room_image_hover else self.room_image + if room_image == "default": + room_image = f"images/rooms/main_room/decorations/{self.id}.webp" + self.room_image = Transform(room_image, zoom=self.room_scale) + self.room_image_hover = Transform(room_image_hover or room_image, zoom=self.room_scale) self.usable = True self.placement = placement self.in_use = False @@ -119,7 +123,7 @@ init python: def use(self): if self.owned == 0: - raise Exception("Decoration '{}' owned count is equal to zero.".format(self.name)) + raise Exception(f"Decoration {self.name!r} owned count is equal to zero.") achievements.unlock("decorator") @@ -152,10 +156,10 @@ init python: self.make_intro = False self.in_progress = {i: False for i in usable_on} - self.usable = bool( renpy.has_label("{}_use".format(self.label)) ) + self.usable = bool(renpy.has_label(f"{self.label}_use")) if self.recipe is None: - raise Exception("Potion '{}' recipe is empty!".format(self.name)) + raise Exception(f"Potion {self.name!r} recipe is empty!") def has_ingredients(self): return all(x.owned > 0 for x in self.recipe) @@ -163,7 +167,7 @@ init python: def set_active(self, who): """Marks the event as 'in progress' and will trigger a return event in the morning/evening.""" if not who in list(self.in_progress.keys()): - raise Exception("Potion '{}' is not marked as usable on '{}'.".format(self.name, who)) + raise Exception(f"Potion {self.name!r} is not marked as usable on {who!r}.") self.in_progress[who] = True @@ -176,7 +180,7 @@ init python: i.owned -= 1 self.owned += 1 - label = "{}_make".format(self.label) + label = f"{self.label}_make" if renpy.has_label(label) and not self.make_intro: self.make_intro = True @@ -191,17 +195,17 @@ init python: def give(self, who): """Use potion on """ - give_label = "{}_{}_give".format(who[:3], self.label) - check_label = "{}_potion_check".format(who[:3]) + give_label = f"{who[:3]}_{self.label}_give" + check_label = f"{who[:3]}_potion_check" if not renpy.has_label(give_label): - raise Exception("Potion '{}' give label doesn't exist.".format(self.name)) + raise Exception(f"Potion {self.name!r} give label doesn't exist.") if not renpy.has_label(check_label): - raise Exception("Potion '{}' check label doesn't exist for '{}'.".format(self.name, who)) + raise Exception(f"Potion {self.name!r} check label doesn't exist for {who!r}.") if self.owned == 0: - raise Exception("Potion '{}' owned count is equal to zero.".format(self.name)) + raise Exception(f"Potion {self.name!r} owned count is equal to zero.") if not self.check_progression(who): self.jump(check_label) @@ -212,13 +216,13 @@ init python: def use(self): """Use potion on Genie""" - label = "{}_use".format(self.label) + label = f"{self.label}_use" if not renpy.has_label(label): - raise Exception("Potion '{}' has no use label.".format(self.name)) + raise Exception(f"Potion {self.name!r} has no use label.") if self.owned == 0: - raise Exception("Potion '{}' owned count is equal to zero.".format(self.name)) + raise Exception(f"Potion {self.name!r} owned count is equal to zero.") self.owned -= 1 self.jump(label) @@ -227,12 +231,12 @@ init python: """Play the return event for """ if not self.in_progress[who]: - raise Exception("Potion '{}' is not marked as in progress.".format(self.name)) + raise Exception(f"Potion {self.name!r} is not marked as in progress.") - label = "{}_{}_return".format(who[:3], self.label) + label = f"{who[:3]}_{self.label}_return" if not renpy.has_label(label): - raise Exception("Potion '{}' has no return label.".format(self.name)) + raise Exception(f"Potion {self.name!r} has no return label.") self.in_progress[who] = False self.jump(label) diff --git a/game/scripts/inventory/game.rpy b/game/scripts/inventory/game.rpy index 78979c24..6f7fa0cf 100644 --- a/game/scripts/inventory/game.rpy +++ b/game/scripts/inventory/game.rpy @@ -1,13 +1,13 @@ init -100 python: def show_gold(st, at, old, new): if st > 1.0: - return Text("G {}".format(new)), None + return Text(f"G {new}"), None else: if new > old: - value = int( (new-old)*(1.0-st) ) + 1 + value = int((new-old)*(1.0-st)) + 1 d = Text("G {}\n+{}".format(old + int((new-old)*st), value)) else: - value = int( (old-new)*(1.0-st) ) + 1 + value = int((old-new)*(1.0-st)) + 1 d = Text("G {}\n-{}".format(old - int((old-new)*st), value)) return d, 0.01 @@ -62,7 +62,7 @@ init -100 python: value = renpy.random.choices(self.weather_types, weights=self.weather_weights)[0] if not value in self.weather_types: - raise ValueError("Unsupported weather type: '{}'".format(value)) + raise ValueError(f"Unsupported weather type: {value!r}") self._weather = value diff --git a/game/scripts/inventory/potions/_potions_.txt b/game/scripts/inventory/potions/_potions_.txt index 6b5ebffc..62a529af 100644 --- a/game/scripts/inventory/potions/_potions_.txt +++ b/game/scripts/inventory/potions/_potions_.txt @@ -331,15 +331,15 @@ init -1 python: def get_store_menu_item(self, disabled=False): if disabled: - return gui.menu_item('-{}-'.format(self.name), None, style="disabled") + return gui.menu_item(f'-{self.name}-', None, style="disabled") else: - return gui.menu_item('-{}-'.format(self.name), self) + return gui.menu_item(f'-{self.name}-', self) def get_craft_menu_item(self, disabled=False): if disabled: - return gui.menu_item('-Craft: "{}"-'.format(self.name), self.ingredients, style="disabled") + return gui.menu_item(f'-Craft: "{self.name}"-', self.ingredients, style="disabled") else: - return gui.menu_item('-Craft: "{}"-'.format(self.name), self.id) + return gui.menu_item(f'-Craft: "{self.name}"-', self.id) def get_mix_text(self): return ">You mix the {i}" + potion_lib.get_name_by_id(self.ingredients[0]) \ @@ -402,7 +402,7 @@ init -1 python: def get_playables(self): requests = [] for item in self.lib: - if hasattr(item, 'start_label') and item.start_label != None: + if hasattr(item, 'start_label') and item.start_label is not None: requests.append(item) return requests @@ -430,7 +430,7 @@ init -1 python: global p_inv, potion_lib if isinstance(potion, Potion): potion = potion.id - if potion_lib.get_id_by_name(potion) != None: + if potion_lib.get_id_by_name(potion) is not None: potion = potion_lib.get_id_by_name(potion) if potion_lib.is_valid_id(potion): if potion in p_inv.keys(): diff --git a/game/scripts/inventory/scrolls.rpy b/game/scripts/inventory/scrolls.rpy index 876755a2..5fc72207 100644 --- a/game/scripts/inventory/scrolls.rpy +++ b/game/scripts/inventory/scrolls.rpy @@ -33,7 +33,7 @@ default leg30_scroll_ITEM = Item("leg30_scroll", "scroll", "Scroll 30: The Gang" label leg1_scroll: show screen blktone - show image "images/scrolls/1.webp" onlayer screens zorder 25 + show expression "images/scrolls/1.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -42,14 +42,14 @@ label leg1_scroll: call ctc hide screen blktone - hide image "images/scrolls/1.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg2_scroll: show screen blktone - show image "images/scrolls/2.webp" onlayer screens zorder 25 + show expression "images/scrolls/2.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -61,14 +61,14 @@ label leg2_scroll: call ctc hide screen blktone - hide image "images/scrolls/2.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg3_scroll: show screen blktone - show image "images/scrolls/3.webp" onlayer screens zorder 25 + show expression "images/scrolls/3.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -76,14 +76,14 @@ label leg3_scroll: call ctc hide screen blktone - hide image "images/scrolls/3.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg4_scroll: show screen blktone - show image "images/scrolls/4.webp" onlayer screens zorder 25 + show expression "images/scrolls/4.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -93,14 +93,14 @@ label leg4_scroll: call ctc hide screen blktone - hide image "images/scrolls/4.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg5_scroll: show screen blktone - show image "images/scrolls/5.webp" onlayer screens zorder 25 + show expression "images/scrolls/5.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -109,14 +109,14 @@ label leg5_scroll: call ctc hide screen blktone - hide image "images/scrolls/5.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg6_scroll: show screen blktone - show image "images/scrolls/6.webp" onlayer screens zorder 25 + show expression "images/scrolls/6.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -125,14 +125,14 @@ label leg6_scroll: call ctc hide screen blktone - hide image "images/scrolls/6.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg7_scroll: show screen blktone - show image "images/scrolls/7.webp" onlayer screens zorder 25 + show expression "images/scrolls/7.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -141,14 +141,14 @@ label leg7_scroll: call ctc hide screen blktone - hide image "images/scrolls/7.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg8_scroll: show screen blktone - show image "images/scrolls/8.webp" onlayer screens zorder 25 + show expression "images/scrolls/8.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -157,14 +157,14 @@ label leg8_scroll: call ctc hide screen blktone - hide image "images/scrolls/8.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg9_scroll: show screen blktone - show image "images/scrolls/9.webp" onlayer screens zorder 25 + show expression "images/scrolls/9.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -173,14 +173,14 @@ label leg9_scroll: call ctc hide screen blktone - hide image "images/scrolls/9.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg10_scroll: show screen blktone - show image "images/scrolls/10.webp" onlayer screens zorder 25 + show expression "images/scrolls/10.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -190,14 +190,14 @@ label leg10_scroll: call ctc hide screen blktone - hide image "images/scrolls/10.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg11_scroll: show screen blktone - show image "images/scrolls/11.webp" onlayer screens zorder 25 + show expression "images/scrolls/11.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -205,14 +205,14 @@ label leg11_scroll: call ctc hide screen blktone - hide image "images/scrolls/11.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg12_scroll: show screen blktone - show image "images/scrolls/12.webp" onlayer screens zorder 25 + show expression "images/scrolls/12.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -220,14 +220,14 @@ label leg12_scroll: call ctc hide screen blktone - hide image "images/scrolls/12.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg13_scroll: show screen blktone - show image "images/scrolls/13.webp" onlayer screens zorder 25 + show expression "images/scrolls/13.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -237,14 +237,14 @@ label leg13_scroll: call ctc hide screen blktone - hide image "images/scrolls/13.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg14_scroll: show screen blktone - show image "images/scrolls/14.webp" onlayer screens zorder 25 + show expression "images/scrolls/14.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -253,14 +253,14 @@ label leg14_scroll: call ctc hide screen blktone - hide image "images/scrolls/14.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg15_scroll: show screen blktone - show image "images/scrolls/15.webp" onlayer screens zorder 25 + show expression "images/scrolls/15.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -270,14 +270,14 @@ label leg15_scroll: call ctc hide screen blktone - hide image "images/scrolls/15.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg16_scroll: show screen blktone - show image "images/scrolls/16.webp" onlayer screens zorder 25 + show expression "images/scrolls/16.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -287,14 +287,14 @@ label leg16_scroll: call ctc hide screen blktone - hide image "images/scrolls/16.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg17_scroll: show screen blktone - show image "images/scrolls/17.webp" onlayer screens zorder 25 + show expression "images/scrolls/17.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -303,14 +303,14 @@ label leg17_scroll: call ctc hide screen blktone - hide image "images/scrolls/17.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg18_scroll: show screen blktone - show image "images/scrolls/18.webp" onlayer screens zorder 25 + show expression "images/scrolls/18.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -319,14 +319,14 @@ label leg18_scroll: call ctc hide screen blktone - hide image "images/scrolls/18.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg19_scroll: show screen blktone - show image "images/scrolls/19.webp" onlayer screens zorder 25 + show expression "images/scrolls/19.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -335,14 +335,14 @@ label leg19_scroll: call ctc hide screen blktone - hide image "images/scrolls/19.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg20_scroll: show screen blktone - show image "images/scrolls/20.webp" onlayer screens zorder 25 + show expression "images/scrolls/20.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -353,14 +353,14 @@ label leg20_scroll: call ctc hide screen blktone - hide image "images/scrolls/20.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg21_scroll: show screen blktone - show image "images/scrolls/21.webp" onlayer screens zorder 25 + show expression "images/scrolls/21.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -370,14 +370,14 @@ label leg21_scroll: call ctc hide screen blktone - hide image "images/scrolls/21.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg22_scroll: show screen blktone - show image "images/scrolls/22.webp" onlayer screens zorder 25 + show expression "images/scrolls/22.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -386,14 +386,14 @@ label leg22_scroll: call ctc hide screen blktone - hide image "images/scrolls/22.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg23_scroll: show screen blktone - show image "images/scrolls/23.webp" onlayer screens zorder 25 + show expression "images/scrolls/23.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -402,14 +402,14 @@ label leg23_scroll: call ctc hide screen blktone - hide image "images/scrolls/23.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg24_scroll: show screen blktone - show image "images/scrolls/24.webp" onlayer screens zorder 25 + show expression "images/scrolls/24.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -418,14 +418,14 @@ label leg24_scroll: call ctc hide screen blktone - hide image "images/scrolls/24.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg25_scroll: show screen blktone - show image "images/scrolls/25.webp" onlayer screens zorder 25 + show expression "images/scrolls/25.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -435,14 +435,14 @@ label leg25_scroll: call ctc hide screen blktone - hide image "images/scrolls/25.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg26_scroll: show screen blktone - show image "images/scrolls/26.webp" onlayer screens zorder 25 + show expression "images/scrolls/26.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -452,14 +452,14 @@ label leg26_scroll: call ctc hide screen blktone - hide image "images/scrolls/26.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg27_scroll: show screen blktone - show image "images/scrolls/27.webp" onlayer screens zorder 25 + show expression "images/scrolls/27.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -467,14 +467,14 @@ label leg27_scroll: call ctc hide screen blktone - hide image "images/scrolls/27.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg28_scroll: show screen blktone - show image "images/scrolls/28.webp" onlayer screens zorder 25 + show expression "images/scrolls/28.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -482,14 +482,14 @@ label leg28_scroll: call ctc hide screen blktone - hide image "images/scrolls/28.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg29_scroll: show screen blktone - show image "images/scrolls/29.webp" onlayer screens zorder 25 + show expression "images/scrolls/29.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -497,14 +497,14 @@ label leg29_scroll: call ctc hide screen blktone - hide image "images/scrolls/29.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory label leg30_scroll: show screen blktone - show image "images/scrolls/30.webp" onlayer screens zorder 25 + show expression "images/scrolls/30.webp" onlayer screens zorder 25 as scroll with d3 pause 1 @@ -512,7 +512,7 @@ label leg30_scroll: call ctc hide screen blktone - hide image "images/scrolls/30.webp" onlayer screens zorder 25 + hide scroll with d3 jump inventory diff --git a/game/scripts/minigames/cardgame/__card_game_init__.rpy b/game/scripts/minigames/cardgame/__card_game_init__.rpy index 69923e68..11d1522f 100644 --- a/game/scripts/minigames/cardgame/__card_game_init__.rpy +++ b/game/scripts/minigames/cardgame/__card_game_init__.rpy @@ -467,93 +467,93 @@ default her_first_deck = [card_her_schoolgirl.clone(), card_item_girlmag.clone() default her_second_deck = [card_her_schoolgirl.clone(), card_item_eromag.clone(), card_item_bookgala.clone(), card_item_bookgala2.clone(), card_item_bookchairs.clone()] default her_third_deck = [card_her_librarian.clone(), card_item_pornmag.clone(), card_item_bookgala.clone(), card_item_bookgala2.clone(), card_item_bookchairs.clone()] -define card_non_spec_char = ["I see you've been practising... so have I!", - "You've activated my trap card... wait... it's in my other deck!", +define card_non_spec_char = ["I see you've been practising... So have I!", + "You've activated my trap card... Wait... it's in my other deck!", "You think you're so good, but this school has never seen a player of the likes of me! In this particular office...", - "Aha, you've walked right into my trap. Take this!", - "You'll never beat me! I will give you the reward though... in your dreams!", - "That's impossible... that card is legendary... wait, it doesn't have a shimmering effect, never mind.", - "I was sure my cards used to be good...", - "Wait, you've got that card... I've been such a fool! This is a witchmasters deck!", - "We're playing reverse rules right? Lowest amount of cards win?", - "If only slight of hand was taught at Hogwarts...", - "Wait, this can't be right. I must have put my good cards in my other robes.", - "You should be happy that they banned one of the cards that came in a cereal box promotion... that one was overpowered.", + "Aha! You've walked right into my trap! Take this!", + "You'll never beat me! The only place you'll find that reward... is in your dreams!", + "That's impossible... That card is legendary... Wait, it doesn't have a shimmering effect, never mind.", + "I was so sure my cards were good... Did they release yet another set?", + "Wait... You've got that card?! I've been such a fool! This is a witchmasters deck!", + "We're playing reverse rules, right? Lowest amount of cards win?", + "If only sleight of hand was taught at Hogwarts...", + "Wait... This can't be right... I must have put my good cards in my other robes!", + "You should be happy that they banned that card from the Pixie Puffs cereal box promotion... That one was overpowered.", "This one's a board sweeper!", - "I'll just burn this card... oh yeah, I got better cards coming.", - "This is a control deck. I'll win in the end don't you worry.", - "Maybe I should have made less of a filler deck... I'll get you in the end.", + "I'll just burn this card... I've got better cards coming.", + "This is a control deck... I'll win in the end, don't you worry.", + "Perhaps I should have made less of a filler deck... I'll still get you in the end, though.", "Your loss is inevitable. It's all in the heart of the cards.", - "Have you been Netdecking? Did those damn spiders in the forest tell you what cards to play?", - "I've been metagaming the crap out of you... I know exactly what cards you're going to play... except for that last one.", + "Have you been Netdecking? Did those damn spiders in the forest tell you which cards to play?", + "I've been metagaming the crap out of you... I can predict every card you'll play... except for that last one.", "Oh, it's my turn? I was just thinking about how I'm going to celebrate after your inevitable loss.", "I've been slowrolling you this whole time. My last card is a mega ultimate legendary.", - "What kind of deck is this... don't you even care about synergy?", - "I see what kind of player you are now... perhaps a more offensive approach is in order.", - "I was born to play card games... you merely adopted your liking of them.", - "Hahah, you don't even know that I have a card with powers that has been locked away for centuries... unfortunately I lost the key...", - "Prepare for a total wipe... your tears when I beat you that is.", - "You want to know what's shown on my cards? What do I like the most? Winning, which is why this card is going to guarantee my victory.", - "Life is like a game of Wizard Cards. If you don't win... you lose.", + "What kind of deck is this... Do you even care about synergy?", + "I see what kind of player you are now... Perhaps a more offensive approach is in order.", + "I was born to play card games... You merely adopted your enjoyment of them.", + "*Ha-Ha-Hah*! You don't even know that I have a card with powers that has been locked away for centuries... unfortunately I lost the key...", + "Prepare for a total wipe... Of your tears once I beat you, that is.", + "You want to know what imagery is displayed on my cards? What do I like the most? Winning! Which is why this card is going to guarantee my victory.", + "Life is like a game of Wizard Cards... If you're not winning... you're losing.", "Quitters never win, winners never quit, but those who never win and never quit are idiots... I'm not sure which I am.", "Go fish...", - "Do you have any spells to make you better at Wizard Cards? Didn't think so...", - "You can smell the roses as much as you want, while I smell the aroma of victory", - "Do you see any stars yet, because you're getting beaten pretty badly.", + "Do you know of any spells that'd make you better at Wizard Cards? Yeah, didn't think so...", + "You can smell the roses as much as you want, while I bask in the aroma of victory.", + "Are you seeing stars yet? Maybe some circling birds? You're getting beaten pretty badly, after all.", "Well, your performance in this round is certainly a divine comedy.", "The forecast today is calling for my victory, so I'm not worried.", "Are you out of juice already?", - "Couldn't you see from your own fortune that you're bound to lose?", - "Looks like you fell right into your own trap... now look at this!! KAPOW", + "A fortune cookie told me I would win today... So, I'm not really worried about losing.", + "Looks like you fell right into your own trap... now look at this!! KAPOW!!", "I don't need luck potion to beat you. That's how confident I am in my deck.", - "I know my deck like the back of my hand... wait, when did that mole get there?", - "Fool, you'll soon see my finishing move... but before that, UNO!", - "I'm so confident in my card collection I just shuffled and picked some at random before this game.", - "Great cards doesn't ensure a win. Right moves do.", - "The game balance of this game has been broken for centuries... and I have the winning cards.", - "The ministry of magic considered banning this game as they thought it all mattered what cards you had... something about gambling for children.", - "If I said that I picked my cards blindfolded would you believe me? Yes, they're all that good.", - "I tried to use transfiguration on one of my cards but it burnt up instead... I probably wasn't the first one who tried that.", - "Wait! Isn't that card banned? No, the stats aren't the same... phew", - "Why does that card of yours look so sticky?", - "Oh nice a shiny... wait, why has it stuck to the board?", + "I know my deck like the back of my hand... Wait, when did that mole get there?", + "You fool! Prepare yourself for my ultimate finishing move... But before that... UNO!", + "I'm so confident in my card collection, I just shuffled and created this deck at random.", + "Great cards doesn't ensure a win... It's making the right moves that does.", + "The balance of this game has been broken for centuries... and I possess the cards that exploit that flaw.", + "The ministry of magic considered banning this game... They mentioned something about loot boxes... Or was it surprise mechanics?", + "If I told you that I picked my cards while blindfolded, would you believe me? Yes, that's how good they are.", + "I tried using transfiguration on one of my cards, but it burnt up instead... Hopefully, I'm not the first who has tried that.", + "Wait! Isn't that card banned? No... the stats aren't the same... *Phew*...", + "Why does that particular card of yours have a sticky residue on it?", + "A shiny! Wait... Why has it stuck to the board?", "That's nowhere near the best move you could've done. Check this out!", - "Even a troll would play better than you at this point... no offence.", - "Some people are half blood and some pure-blood. But I'm purely a Card playing genius.", - "That must be a new card. Why haven't I seen that one before?", - "Wait, my numbers must have changed. Did you put a spell on my cards?", - "Hit me... I mean, give me another card.", - "Ah, that one. Too bad I have the perfect counter.", + "Even a troll would play better than you at this point... No offence.", + "In a world of half-bloods and pure-bloods, I proudly declare myself a card-playing genius.", + "That must be a new card... Why haven't I seen that one before?", + "Wait, my numbers must have changed! Did you jinx my cards?", + "Hit me... Not literally, of course... I mean't, give me another card.", + "Ah... That one.... Too bad I have the perfect counter.", "So, when do I get to draw a card again?", "Someone replaced one of my cards with a joker... I bet it was peeves.", - "I was told that face cards was the best ones to get... but they were talking about poker.", + "I was told that face cards are the best... But I now realise they were talking about poker.", "By Merlin's beard, where did you get that card?", - "Next time you should let me use the cards I drew. Their numbers are a lot better than these ones."] + "Next time, I'll bring out my aggro deck..."] -define snape_speech_card = ["You may have lived for hundreds of years but my superior intellect will outweigh your otherworldly powers.", - "When this is over I think I'll celebrate my victory with one of your nice bottles of alcohol.", - "You should stick to charming women... wizard cards is my game.", - "You said you were from a different world, another reality? Maybe in that reality you'd beat me at cards. But not this one!", +define snape_speech_card = ["You may have lived for hundreds of years, but my superior intellect will outweigh your otherworldly powers.", + "When this is over, I think I'll celebrate my victory with one of your more expensive bottles of wine.", + "You should stick to charming women... Wizard cards is my game.", + "You said you were from a different world, another reality? Maybe you'd beat me at cards in that reality... But not this one!", "We don't stop playing because we grow old, we grow old because we stop playing.", - "Where did you even find your trash cards? In a promotional pamphlet?", + "Where did you even find your rubbish cards? In a promotional pamphlet?", "Why are my cards so much greasier than yours?"] + card_non_spec_char -define twins_speech_card = ["Our cards are fresher than fresh. They were printed last night so they must be good.", - "Giving you a percentage of our profit was an easy bet, because we know you'll never win.", - "We weighed our packs before opening them so our cards must be rare.", - "Activate twin psychic link.", - "Some people wouldn't duel a duo because they can't maintain eye contact during play... or eye to card contact.", - "We're a two player team, so we get double the cards to chose from right?", - "We're not going easy on you just so you wont shut our shop down.", - "What's on our cards? Sweet, sweet profit of course.", - "Hey, that percentage we promised you... you mind lowering it a bit? I mean, a deal is a deal... but still.", - "You better open up the trade routes a bit more if you beat us. We don't want to deal with Filch if he finds where these cards came from.", - "We probably should have opened a few of our boosters but where's the fun without a bit of risk?"] + card_non_spec_char +define twins_speech_card = ["Our cards are fresher than fresh! They were printed last night, so they must be good!", + "Giving you a percentage of our profit was an easy bet... Since we know you'll never win.", + "We've weighed our packs before opening them, so our cards must be rare.", + "Activate twin psychic link!", + "Some people won't duel a duo because they can't maintain eye contact during play... or eye to card contact.", + "We're a two-player team, so we get double the cards to choose from, right?", + "We're not going easy on you just so you won't shut our shop down.", + "What's on our cards? Sweet, sweet profits, of course.", + "Hey, that percentage we promised you... Do you mind if we lowered it slightly? I mean, a deal is a deal... but still.", + "If you beat us, we'd appreciate it if you could give us an endorsement with our supplier.", + "In hindsight, perhaps we should've cracked open a few boosters, but where's the thrill without a bit of risk?"] + card_non_spec_char -define her_speech_card = ["You should double the points you give me if I win... or at least consider it.", - "I'm great at wizards chess so beating you at this shouldn't be a problem...", - "I should have asked for house points if I beat you... oh well, too late now.", - "Have you been looking at my deck? That's cheating, you better whip yours out..."] + card_non_spec_char +define her_speech_card = ["Would you consider doubling the points you award me if I win?", + "I'm great at wizards chess, so beating you at this shouldn't be a problem...", + "I should have asked for house points if I beat you... Oh, well... Too late now.", + "Have you been peeking at my deck? That's cheating! You better whip yours out..."] + card_non_spec_char init python: @@ -683,34 +683,34 @@ init python: take_over = lambda a, b : a > b - if not y == 0 and not table_cards[x][y-1] == None and take_over(table_cards[x][y].topvalue, table_cards[x][y-1].bottomvalue): + if not y == 0 and table_cards[x][y-1] is not None and take_over(table_cards[x][y].topvalue, table_cards[x][y-1].bottomvalue): table_cards[x][y-1].playercard = table_cards[x][y].playercard - if not y == 2 and not table_cards[x][y+1] == None and take_over(table_cards[x][y].bottomvalue, table_cards[x][y+1].topvalue): + if not y == 2 and table_cards[x][y+1] is not None and take_over(table_cards[x][y].bottomvalue, table_cards[x][y+1].topvalue): table_cards[x][y+1].playercard = table_cards[x][y].playercard - if not x == 0 and not table_cards[x-1][y] == None and take_over(table_cards[x][y].leftvalue, table_cards[x-1][y].rightvalue): + if not x == 0 and table_cards[x-1][y] is not None and take_over(table_cards[x][y].leftvalue, table_cards[x-1][y].rightvalue): table_cards[x-1][y].playercard = table_cards[x][y].playercard - if not x == 2 and not table_cards[x+1][y] == None and take_over(table_cards[x][y].rightvalue, table_cards[x+1][y].leftvalue): + if not x == 2 and table_cards[x+1][y] is not None and take_over(table_cards[x][y].rightvalue, table_cards[x+1][y].leftvalue): table_cards[x+1][y].playercard = table_cards[x][y].playercard if dobelt_number: dobelt_found = [] - if not y == 0 and not table_cards[x][y-1] == None: + if not y == 0 and table_cards[x][y-1] is not None: if table_cards[x][y].topvalue == table_cards[x][y-1].bottomvalue: dobelt_found.append([x,y-1]) - if not y == 2 and not table_cards[x][y+1] == None: + if not y == 2 and table_cards[x][y+1] is not None: if table_cards[x][y].bottomvalue == table_cards[x][y+1].topvalue: dobelt_found.append([x,y+1]) - if not x == 0 and not table_cards[x-1][y] == None: + if not x == 0 and table_cards[x-1][y] is not None: if table_cards[x][y].leftvalue == table_cards[x-1][y].rightvalue: dobelt_found.append([x-1,y]) - if not x == 2 and not table_cards[x+1][y] == None: + if not x == 2 and table_cards[x+1][y] is not None: if table_cards[x][y].rightvalue == table_cards[x+1][y].leftvalue: dobelt_found.append([x+1,y]) @@ -786,8 +786,8 @@ init python: for y in range(0,3): for x in range(0,3): score = 0 - if table_cards[x][y] == None: - if not y == 0 and not table_cards[x][y-1] == None and table_cards[x][y-1].playercard: + if table_cards[x][y] is None: + if not y == 0 and table_cards[x][y-1] is not None and table_cards[x][y-1].playercard: if take_over(self.topvalue, table_cards[x][y-1].bottomvalue): score += getcardscore else: @@ -795,7 +795,7 @@ init python: else: score += wallscore - if not y == 2 and not table_cards[x][y+1] == None and table_cards[x][y+1].playercard: + if not y == 2 and table_cards[x][y+1] is not None and table_cards[x][y+1].playercard: if take_over(self.bottomvalue, table_cards[x][y+1].topvalue): score += getcardscore else: @@ -803,7 +803,7 @@ init python: else: score += wallscore - if not x == 0 and not table_cards[x-1][y] == None and table_cards[x-1][y].playercard: + if not x == 0 and table_cards[x-1][y] is not None and table_cards[x-1][y].playercard: if take_over(self.leftvalue, table_cards[x-1][y].rightvalue): score += getcardscore else: @@ -811,7 +811,7 @@ init python: else: score += wallscore - if not x == 2 and not table_cards[x+1][y] == None and table_cards[x+1][y].playercard: + if not x == 2 and table_cards[x+1][y] is not None and table_cards[x+1][y].playercard: if take_over(self.rightvalue, table_cards[x+1][y].leftvalue): score += getcardscore else: @@ -821,20 +821,20 @@ init python: if dobelt_number: dobelt_found = [] - if not y == 0 and not table_cards[x][y-1] == None: + if not y == 0 and table_cards[x][y-1] is not None: if self.topvalue == table_cards[x][y-1].bottomvalue: dobelt_found.append(table_cards[x][y-1]) - if not y == 2 and not table_cards[x][y+1] == None: + if not y == 2 and table_cards[x][y+1] is not None: if self.bottomvalue == table_cards[x][y+1].topvalue: dobelt_found.append(table_cards[x][y+1]) - if not x == 0 and not table_cards[x-1][y] == None: + if not x == 0 and table_cards[x-1][y] is not None: if self.leftvalue == table_cards[x-1][y].rightvalue: dobelt_found.append(table_cards[x-1][y]) - if not x == 2 and not table_cards[x+1][y] == None: + if not x == 2 and table_cards[x+1][y] is not None: if self.rightvalue == table_cards[x+1][y].leftvalue: dobelt_found.append(table_cards[x+1][y]) diff --git a/game/scripts/minigames/cardgame/_card_game_.rpy b/game/scripts/minigames/cardgame/_card_game_.rpy index d21c58b6..5496ab84 100644 --- a/game/scripts/minigames/cardgame/_card_game_.rpy +++ b/game/scripts/minigames/cardgame/_card_game_.rpy @@ -3,9 +3,9 @@ init python: def start_duel(opppent_deck, after_enemy = None, rules = None, duel_player_deck = None): global standard_rules global playerdeck - if rules == None: + if rules is None: rules = standard_rules - if duel_player_deck == None: + if duel_player_deck is None: duel_player_deck = playerdeck backside_list = [] @@ -45,7 +45,7 @@ init python: response_card = "" while not(response_card == "win" or response_card == "loss"): response_card = cardgame(enemy_deck, player_deck, backside_list, rules[2], rules[3]) - if response_card == "AfterEnemy" and not after_enemy == None: + if response_card == "AfterEnemy" and after_enemy is not None: after_enemy() elif response_card == "Close": return "Close" @@ -223,7 +223,7 @@ init python: geniecard_level = tier # Change card image for each respective card. for card in cards_dynamic: - card.imagepath = card.imagepath.split("_v")[0] + "_v{}.webp".format(geniecard_level) + card.imagepath = card.imagepath.partition("_v")[0] + f"_v{geniecard_level}.webp" renpy.show_screen("advance_deck") renpy.pause() @@ -246,7 +246,7 @@ screen card_battle(l_playerdeck, l_enemydeck, shown_cards): for y in range(0,3): for x in range(0,3): - if table_cards[x][y] == None: + if table_cards[x][y] is None: hotspot (353+124*x, 25+184*y, 125, 182) clicked Return(str(x+y*3)) else: use cardrender(table_cards[x][y], 353+124*x, 25+184*y, cardzoom=0.375, animated=True) @@ -283,7 +283,7 @@ transform cardrender(pos, zoom): screen cardrender(card, xpos_card, ypos_card, interact=False, return_value=None, cardzoom=0.5, color=None, backside=False, animated=False): zorder 14 - if return_value == None: + if return_value is None: $ return_value = card $ img = card.get_image(backside=backside) @@ -343,7 +343,7 @@ screen advance_deck(): screen card_end_message(message): zorder 15 - text "{color=#FFF}{size=+40}[message]{/size}{/color}" xpos 540 ypos 300 xalign 0.5 yalign 0.5 outlines [ (5, "#000", 0, 0) ] + text "{color=#FFF}{size=+40}[message]{/size}{/color}" xcenter 540 ycenter 300 outlines [ (5, "#000", 0, 0) ] screen rules_display(game_rules_list): tag rules diff --git a/game/scripts/minigames/cardgame/_deck_builder_.rpy b/game/scripts/minigames/cardgame/_deck_builder_.rpy index 79a8101a..0ac595e1 100644 --- a/game/scripts/minigames/cardgame/_deck_builder_.rpy +++ b/game/scripts/minigames/cardgame/_deck_builder_.rpy @@ -5,34 +5,34 @@ label deck_builder: label deck_builder_jump: show screen deck_builder_screen $ renpy.block_rollback() - $ _choice = ui.interact() + $ renpy.dynamic(__choice = ui.interact()) - if _choice in unlocked_cards: - $ selectcard = unlocked_cards.index(_choice) + if __choice in unlocked_cards: + $ selectcard = unlocked_cards.index(__choice) jump deck_builder_jump - elif _choice == "gallery": + elif __choice == "gallery": hide screen deck_builder_screen show screen deck_builder_gallery - elif _choice == "back": + elif __choice == "back": hide screen deck_builder_gallery show screen deck_builder_screen - elif _choice == "Close": + elif __choice == "Close": $ selectcard = -1 hide screen deck_builder_screen jump main_room_menu - elif _choice == "guide": + elif __choice == "guide": $ selectcard = -1 hide screen deck_builder_screen jump deck_builder_guide - elif _choice == "inc": + elif __choice == "inc": $ currentpage += 1 $ selectcard = -1 jump deck_builder_jump - elif _choice == "dec": + elif __choice == "dec": $ currentpage -= 1 $ selectcard = -1 jump deck_builder_jump - elif _choice == "unselect": + elif __choice == "unselect": $ selectcard = -1 jump deck_builder_jump else: @@ -40,8 +40,8 @@ label deck_builder: python: if unlocked_cards[selectcard].copies > -1: unlocked_cards[selectcard].copies -= 1 - add_card_to_deck(playerdeck[int(_choice)].title) - playerdeck[int(_choice)] = unlocked_cards[selectcard] + add_card_to_deck(playerdeck[int(__choice)].title) + playerdeck[int(__choice)] = unlocked_cards[selectcard] selectcard = -1 pass jump deck_builder_jump @@ -111,7 +111,7 @@ screen deck_builder_screen(): #Page info $ str_currentpage = currentpage+1 $ str_currentpage_max = int(math.ceil((len(unlocked_cards)-1)/card_shown)+1.0) - text "{color=#FFFFFF}{size=-5}Page [str_currentpage]/[str_currentpage_max]{/size}{/color}" xpos 215 ypos 360 text_align 0.5 xalign 0.5 + text "{color=#FFFFFF}{size=-5}Page [str_currentpage]/[str_currentpage_max]{/size}{/color}" xcenter 215 ypos 360 text_align 0.5 #Gallery button imagebutton: @@ -161,7 +161,7 @@ screen deck_builder_gallery(): use cardrender(card, 18+80*col, 67+125*row, False, cardzoom=0.25, color=card_exist(unlocked_cards, card)) imagebutton: - anchor (1.0, 0.0) + yanchor 0.0 ypos 18 xalign 0.98 @@ -256,9 +256,9 @@ label deck_builder_guide: gen "(*Shudders*)" ("base", xpos="far_left", ypos="head") gen "(Well... might as well...)" ("base", xpos="far_left", ypos="head") - #$ _choice = ui.interact() + #$ renpy.dynamic(__choice = ui.interact()) - #if _choice == "back": + #if __choice == "back": call music_block hide screen deck_builder_tutorial @@ -277,22 +277,22 @@ screen deck_builder_tutorial(): add "images/cardgame/guide/[deck_guide_helper].webp" xpos 600 ypos 250 if deck_guide_helper == "numbers_guide": - add "images/cardgame/guide/[deck_guide_helper].webp" xpos 540 ypos 300 xalign 0.5 yalign 0.5 + add "images/cardgame/guide/[deck_guide_helper].webp" xcenter 540 ycenter 300 if deck_guide_helper == "tier_guide": - add "images/cardgame/guide/[deck_guide_helper].webp" xpos 500 ypos 200 xanchor 0.5 + add "images/cardgame/guide/[deck_guide_helper].webp" xcenter 500 ypos 200 if deck_guide_helper == "cho_stage2": - add "images/cardgame/guide/[deck_guide_helper].webp" xpos 540 ypos 300 xalign 0.5 yalign 0.5 + add "images/cardgame/guide/[deck_guide_helper].webp" xcenter 540 ycenter 300 if deck_guide_helper == "cho_stage3": - add "images/cardgame/guide/[deck_guide_helper].webp" xpos 540 ypos 300 xalign 0.5 yalign 0.5 + add "images/cardgame/guide/[deck_guide_helper].webp" xcenter 540 ycenter 300 if deck_guide_helper == "cho_stage4": - add "images/cardgame/guide/[deck_guide_helper].webp" xpos 540 ypos 300 xalign 0.5 yalign 0.5 + add "images/cardgame/guide/[deck_guide_helper].webp" xcenter 540 ycenter 300 if deck_guide_helper == "fight_guide": - add "images/cardgame/guide/[deck_guide_helper].webp" xpos 540 ypos 360 xalign 0.5 + add "images/cardgame/guide/[deck_guide_helper].webp" xcenter 540 ypos 360 ##Back button #imagebutton: diff --git a/game/scripts/minigames/dueling/signs.rpy b/game/scripts/minigames/dueling/signs.rpy index cc174993..f26f0166 100644 --- a/game/scripts/minigames/dueling/signs.rpy +++ b/game/scripts/minigames/dueling/signs.rpy @@ -85,12 +85,12 @@ # $ test_sign.interactive = True -# $ _choice = ui.interact() +# $ renpy.dynamic(__choice = ui.interact()) -# if _choice[0] == "result": +# if __choice[0] == "result": # $ test_sign.interactive = False # pause 3.0 -# if _choice[1] >= 50.0: +# if __choice[1] >= 50.0: # "Magician" "Congratulations, you have passed the test with the score of [_sign_max]%%, I am proud of you!" # menu: # "Magician" "Would you like to keep playing?" @@ -116,21 +116,21 @@ # show screen draw_magic -# $ _choice = ui.interact() +# $ renpy.dynamic(__choice = ui.interact()) -# if _choice[0] == "result": +# if __choice[0] == "result": # $ test_sign.interactive = False # pause 3.0 -# if _choice[1] == 0.0: +# if __choice[1] == 0.0: # "Magician" "You suck." -# elif 25.0 > _choice[1] > 0.0: +# elif 25.0 > __choice[1] > 0.0: # "Magician" "You still suck." -# elif 50.0 > _choice[1] > 25.0: +# elif 50.0 > __choice[1] > 25.0: # "Magician" "You're average." -# elif 75.0 > _choice[1] > 50.0: +# elif 75.0 > __choice[1] > 50.0: # "Magician" "You're above average." -# elif 100.0 > _choice[1] > 75.0: +# elif 100.0 > __choice[1] > 75.0: # "Magician" "You're good." # else: # "Magician" "Holy shit! CRITICAL HIT!" diff --git a/game/scripts/minigames/mirror/classes.rpy b/game/scripts/minigames/mirror/classes.rpy index 74c99e4e..011c3021 100644 --- a/game/scripts/minigames/mirror/classes.rpy +++ b/game/scripts/minigames/mirror/classes.rpy @@ -34,7 +34,9 @@ init 5 python: self.unlocked = unlocked self.label = label self.label_rewards = label_rewards - self.image = "interface/icons/{}.webp".format(self.id) if image == "default" else image + if image == "default": + image = f"interface/icons/{self.id}.webp" + self.image = image self.req = self.validate_req(req) self.authors = authors self.tags = tags @@ -58,12 +60,12 @@ init 5 python: return None if not isinstance(req, str): - raise TypeError("MirrorEvent '{}' requirement has to be a string, got '{}'.".format(self.id, type(req))) + raise TypeError(f"MirrorEvent {self.id!r} requirement has to be a string, got {type(req)!r}.") output = eval(req) if not isinstance(output, bool): - raise TypeError("MirrorEvent '{}' requirement must evaluate to a boolean type, got '{}'.".format(self.id, type(output))) + raise TypeError(f"MirrorEvent {self.id!r} requirement must evaluate to a boolean type, got {type(output)!r}.") return req def play(self): diff --git a/game/scripts/minigames/mirror/events/a_bad_time_to_disrobe.rpy b/game/scripts/minigames/mirror/events/a_bad_time_to_disrobe.rpy index c59fe68f..cbef02d0 100644 --- a/game/scripts/minigames/mirror/events/a_bad_time_to_disrobe.rpy +++ b/game/scripts/minigames/mirror/events/a_bad_time_to_disrobe.rpy @@ -120,7 +120,7 @@ label a_bad_time_to_disrobe_part_1: show screen blkfade with d3 - show image Text("{image=images/rooms/room_of_requirement/qmark.webp}{size=+4}{color=#cbcbcb}Hermione will remember that{/color}{/size}") as qmark zorder 100: + show expression Text("{image=images/rooms/room_of_requirement/qmark.webp}{size=+4}{color=#cbcbcb}Hermione will remember that{/color}{/size}") as qmark zorder 100: pos (10, 10) nar "Hermione returns the next morning, looking nervous but more determined than yesterday." diff --git a/game/scripts/minigames/mirror/events/an_odd_circumstance.rpy b/game/scripts/minigames/mirror/events/an_odd_circumstance.rpy index a3919e34..cc85a9a8 100644 --- a/game/scripts/minigames/mirror/events/an_odd_circumstance.rpy +++ b/game/scripts/minigames/mirror/events/an_odd_circumstance.rpy @@ -18,7 +18,7 @@ label an_odd_circumstance: $ hermione.equip(her_outfit_default) call room("main_room") stop music fadeout 1 - show image "dark_overlay" zorder 6 as dark_overlay + show expression "dark_overlay" zorder 6 as dark_overlay show screen blkfade with d5 @@ -86,7 +86,7 @@ label an_odd_circumstance: $ hermione_chibi.zorder = states.desk_chibi_zorder - 1 call her_chibi("stand",210, 450, flip=True) hide screen white - show image "dark_overlay" zorder 6 as dark_overlay + show expression "dark_overlay" zorder 6 as dark_overlay with d1 her "Silencio." diff --git a/game/scripts/minigames/mirror/menu.rpy b/game/scripts/minigames/mirror/menu.rpy index c4f01ca5..42f90b5c 100644 --- a/game/scripts/minigames/mirror/menu.rpy +++ b/game/scripts/minigames/mirror/menu.rpy @@ -35,33 +35,33 @@ label mirror_menu(xx=150, yy=90): show screen mirror(xx, yy) label .after_init: - $ _choice = ui.interact() + $ renpy.dynamic(__choice = ui.interact()) - if _choice[0] == "select": - $ current_item = _choice[1] + if __choice[0] == "select": + $ current_item = __choice[1] $ current_item.seen = True - elif _choice[0] == "category": - $ current_category = _choice[1] + elif __choice[0] == "category": + $ current_category = __choice[1] $ menu_items = mirror_sortfilter(mirror.get_instances_of_tag(current_category), current_sorting, current_filter) $ menu_items_length = len(menu_items) $ current_page = 0 $ current_item = next(iter(menu_items), None) - elif _choice == "inc": + elif __choice == "inc": $ current_page += 1 - elif _choice == "dec": + elif __choice == "dec": $ current_page += -1 - elif _choice == "filter": + elif __choice == "filter": if current_filter == "Unlocked": $ current_filter = None - elif current_filter == None: + elif current_filter is None: $ current_filter = "Unlocked" $ menu_items = mirror_sortfilter(mirror.get_instances_of_tag(current_category), current_sorting, current_filter) $ menu_items_length = len(menu_items) $ current_page = 0 $ current_item = next(iter(menu_items), None) - elif _choice == "sort": + elif __choice == "sort": if current_sorting == "A-z": $ current_sorting = "z-A" else: @@ -71,8 +71,8 @@ label mirror_menu(xx=150, yy=90): $ menu_items_length = len(menu_items) $ current_page = 0 $ current_item = next(iter(menu_items), None) - elif _choice[0] == "play": - $ _choice[1].play() + elif __choice[0] == "play": + $ __choice[1].play() $ renpy.jump_out_of_context("mirror") else: $ enable_game_menu() @@ -124,7 +124,7 @@ screen mirror_menu(xx, yy): style_prefix gui.theme('achievements_filters') pos (6, 384) - if current_filter == None: + if current_filter is None: textbutton "Show: All" action Return("filter") else: textbutton "Show: [current_filter]" action Return("filter") @@ -163,17 +163,17 @@ screen mirror_menuitem(xx, yy): xfill True action Return(["select", ev]) if is_unlocked and not ev.seen: - text "NEW" style "wardrobe_item_caption" anchor (1.0, 1.0) align (1.0, 1.0) offset (-5, -5) + text "NEW" style "wardrobe_item_caption" align (1.0, 1.0) offset (-5, -5) if ev.played: - add "interface/topbar/icon_check.webp" anchor (1.0, 1.0) align (1.0, 1.0) offset (-5, -5) zoom 0.7 + add "interface/topbar/icon_check.webp" align (1.0, 1.0) offset (-5, -5) zoom 0.7 vbox: text ev.name - text "By {}".format(authors) size 10 + text f"By {authors}" size 10 add gui.format("interface/achievements/{}/spacer_left.webp") if menu_items_length <= 0: - text "Nothing here yet" align (0.5, 0.5) anchor (0.5, 0.5) size 24 + text "Nothing here yet" align (0.5, 0.5) size 24 if current_item: frame: diff --git a/game/scripts/minigames/puzzle.rpy b/game/scripts/minigames/puzzle.rpy index db7a1855..bb622af4 100644 --- a/game/scripts/minigames/puzzle.rpy +++ b/game/scripts/minigames/puzzle.rpy @@ -53,7 +53,7 @@ screen puzzle_minigame(): grid 4 4: for i, tile in enumerate(tiles): - $ img = "interface/puzzle/{}.webp".format(tile) + $ img = f"interface/puzzle/{tile}.webp" $ empty = tiles.index(15) $ is_valid = (i in (empty-1, empty+1, empty-4, empty+4) and not ( (empty % 4 == 3) and (i % 4 == 0) ) @@ -91,7 +91,8 @@ screen puzzle_minigame(): vbox: yanchor 0.0 - align (0.5, 0.85) + ypos 0.85 + xalign .5 textbutton "-Hint-" xalign 0.5 action ToggleScreenVariable("hint", True, False) if tries >= 75: textbutton "-Force it open-" xalign 0.5 action Return(False) at pulse_hover diff --git a/game/scripts/mods.rpy b/game/scripts/mods.rpy index 78d9af71..ca832612 100644 --- a/game/scripts/mods.rpy +++ b/game/scripts/mods.rpy @@ -3,7 +3,7 @@ init -999: import json import os - if not getattr(persistent, "mods_enabled"): + if not persistent.mods_enabled: persistent.mods_enabled = _set() mods_list = _dict() @@ -20,7 +20,7 @@ init -999: path = os.path.split(manifest)[0] files = [x for x in all_files if path in x] scripts = [x for x in files if x.endswith(".rpym")] - logo = "{}/logo.webp".format(path) + logo = f"{path}/logo.webp" if not renpy.loadable(logo): logo = "#000" @@ -50,7 +50,7 @@ init -999: global mods_incompatible for i in persistent.mods_enabled.copy(): control, major, *minor = mods_list[i]["GameVer"].split(" ")[0].split(".") - ver = float("{}.{}{}".format(control, major, "".join(minor))) + ver = float(f"{control}.{major}{''.join(minor)}") if ver < mods_compatible: persistent.mods_enabled.remove(i) diff --git a/game/scripts/options.rpy b/game/scripts/options.rpy index 8a702ac7..6b5cd19e 100644 --- a/game/scripts/options.rpy +++ b/game/scripts/options.rpy @@ -1,4 +1,3 @@ - # Preferences # https://www.renpy.org/doc/html/preferences.html @@ -38,11 +37,10 @@ define config.debug = config.developer or prerelease define config.console = True # Game version and naming -define config.version = "1.45.3" +define config.version = "1.46.2" define compatible_version = 1.451 define config.name = "Witch Trainer Silver" - # Application window settings define config.window_title = f"{config.name} (v{config.version}{' PRE-RELEASE' if prerelease else ''}) ({get_renderer()}) ({renpy.bits}-bit)" define config.window_icon = "gui/icon.webp" @@ -89,6 +87,7 @@ define config.tag_zorder = { "xray_overlay": -1, "xray_mask": -1, "cg": 17, + "cg2": 18, } # Saving and loading @@ -128,6 +127,9 @@ define config.enter_replay_transition = None define config.exit_replay_transition = None define config.say_attribute_transition = d3 +# Engine Compatibility +define config.check_conflicting_properties = True + # Python define config.open_file_encoding = "utf-8" @@ -152,6 +154,7 @@ init python: build.include_update = True build.include_old_themes = False build.exclude_empty_directories = True + build.update_formats += ['zsync'] build.classify("**.rpy", "renpy") build.classify("**.rpyc", "all") @@ -183,6 +186,9 @@ init python: build.classify("**~", None) build.classify("**.db", None) build.classify("**.zip", None) + build.classify("android.keystore", None) + build.classify("bundle.keystore", None) + build.classify("update.pem", None) build.classify("cache/**", "android") build.classify("game/saves/**", None) diff --git a/game/scripts/rooms/labels.rpy b/game/scripts/rooms/labels.rpy index 14fbb4db..1852f722 100644 --- a/game/scripts/rooms/labels.rpy +++ b/game/scripts/rooms/labels.rpy @@ -11,10 +11,10 @@ label room(room=None, hide_screens=True, stop_sound=True): stop weather fadeout 0.5 $ renpy.stop_predict_screen(states.room) - $ renpy.stop_predict("images/rooms/{}/*.webp".format(states.room)) + $ renpy.stop_predict(f"images/rooms/{states.room}/*.webp") $ states.room = room $ renpy.start_predict_screen(states.room) - $ renpy.start_predict("images/rooms/{}/*.webp".format(states.room)) + $ renpy.start_predict(f"images/rooms/{states.room}/*.webp") if room == "main_room": # Update sound effects diff --git a/game/scripts/rooms/main_room/init.rpy b/game/scripts/rooms/main_room/init.rpy index fe0ca0a7..d293bf00 100644 --- a/game/scripts/rooms/main_room/init.rpy +++ b/game/scripts/rooms/main_room/init.rpy @@ -25,13 +25,12 @@ screen main_room(): sensitive room_menu_active default objects = sorted(main_room.objects, key=lambda x: x.zorder) - default weather = "weather_[game.weather]" # Hotkeys if room_menu_active and game.day > 1 and not renpy.android: use hotkeys_main - add weather pos (430, 218) anchor (0.5, 0.5) + add "weather [game.weather]" xycenter (430, 218) # Walls if game.daytime: @@ -55,7 +54,6 @@ screen main_room(): label main_room: call room("main_room", stop_sound=False) - call reset_menu_position call gen_walk(action="enter", xpos="desk", ypos="base", speed=1.5) call gen_chibi("sit_behind_desk") with d3 @@ -71,8 +69,6 @@ label main_room_menu: hide screen bld1 with d3 - call reset_menu_position - if game.daytime: jump day_resume else: diff --git a/game/scripts/rooms/main_room/objects/cupboard.rpy b/game/scripts/rooms/main_room/objects/cupboard.rpy index e709c2bd..c7a65c5d 100644 --- a/game/scripts/rooms/main_room/objects/cupboard.rpy +++ b/game/scripts/rooms/main_room/objects/cupboard.rpy @@ -121,7 +121,7 @@ init python: return int(progress_factor * random_gold) else: filtered_list = [x for x in drop_list if x.owned <= 5] - random_item = renpy.random.choice(filtered_list if filtered_list else drop_list) + random_item = renpy.random.choice(filtered_list or drop_list) return random_item elif game.difficulty == 2: @@ -131,7 +131,7 @@ init python: return int(progress_factor * random_gold) else: filtered_list = [x for x in drop_list if x.owned <= 3] - random_item = renpy.random.choice(filtered_list if filtered_list else drop_list) + random_item = renpy.random.choice(filtered_list or drop_list) if int(120 * math.log(game.day)) / 3 < random_item.price: chance = max(6 - (random_item.owned * 5), 1) diff --git a/game/scripts/rooms/main_room/objects/desk.rpy b/game/scripts/rooms/main_room/objects/desk.rpy index e310e56c..fdcce574 100644 --- a/game/scripts/rooms/main_room/objects/desk.rpy +++ b/game/scripts/rooms/main_room/objects/desk.rpy @@ -34,9 +34,6 @@ label desk: else: jump main_room_menu - #Define hints variable - $ ball_hint = None - # TODO: Refactor. Low priority. call update_character_map_locations @@ -44,113 +41,107 @@ label desk: #Screens play sound "sounds/scroll.ogg" - show screen desk_menu - with d1 - - $ _choice = ui.interact() - - hide screen desk_menu + call screen desk_menu(_with_none=False) with d1 #Do NOT add a transition here! + $ renpy.dynamic(__choice = _return) #Hermione - if _choice == "hermione" and states.her.busy: - if game.daytime: - nar "Hermione is taking classes." + if __choice == "hermione": + if states.her.busy: + if game.daytime: + nar "Hermione is taking classes." + else: + nar "Hermione is already asleep." jump main_room_menu else: - nar "Hermione is already asleep." - jump main_room_menu - elif _choice == "hermione" and not states.her.busy: - if states.her.map_location == "forest": - nar "Hermione is currently at the Forbidden Forest.\n>Would you like to go there?" - menu: - "-Yes, pay her a visit-": - jump hermione_map_BJ - "-No, summon her to your office-": - pass + if states.her.map_location == "forest": + nar "Hermione is currently at the Forbidden Forest.\n>Would you like to go there?" + menu: + "-Yes, pay her a visit-": + jump hermione_map_BJ + "-No, summon her to your office-": + pass - jump summon_hermione + jump summon_hermione #Luna - elif states.lun.unlocked and _choice == "luna" and states.lun.busy: - if game.daytime: - nar "Luna is taking classes." + elif states.lun.unlocked and __choice == "luna": + if states.lun.busy: + if game.daytime: + nar "Luna is taking classes." + else: + nar "Luna is already asleep." jump main_room_menu else: - nar "Luna is already asleep." - jump main_room_menu - elif states.lun.unlocked and _choice == "luna" and not states.lun.busy: - jump summon_luna + jump summon_luna #Astoria - elif states.ast.busy and _choice == "astoria": - if game.daytime: - nar "Astoria is taking classes." + elif __choice == "astoria": + if states.ast.busy: + if game.daytime: + nar "Astoria is taking classes." + else: + nar "Astoria is already asleep." jump main_room_menu - else: - nar "Astoria is already asleep." - jump main_room_menu - elif not states.ast.busy and _choice == "astoria": #Summoning after intro events done. - jump summon_astoria + else: #Summoning after intro events done. + jump summon_astoria #Susan - elif _choice == "susan" and states.sus.busy: - if game.daytime: - nar "Susan is taking classes." + elif __choice == "susan": + if states.sus.busy: + if game.daytime: + nar "Susan is taking classes." + else: + nar "Susan is already asleep." jump main_room_menu else: - nar "Susan is already asleep." - jump main_room_menu - elif _choice == "susan" and not states.sus.busy: - jump summon_susan + jump summon_susan #Cho - elif _choice == "cho" and states.cho.busy: - if game.daytime: - nar "Cho is taking classes." + elif __choice == "cho": + if states.cho.busy: + if game.daytime: + nar "Cho is taking classes." + else: + nar "Cho is already asleep." jump main_room_menu else: - nar "Cho is already asleep." - jump main_room_menu - elif _choice == "cho" and not states.cho.busy: - jump summon_cho + jump summon_cho #Snape - elif _choice == "snape" and states.sna.busy: - nar "Professor Snape is unavailable." - if game.daytime: + elif __choice == "snape": + if states.sna.busy: + nar "Professor Snape is unavailable." jump main_room_menu else: - jump main_room_menu - elif _choice == "snape" and not states.sna.busy: - jump summon_snape + jump summon_snape #Tonks - elif _choice == "tonks" and states.ton.busy: - nar "Tonks is unavailable." - if game.daytime: + elif __choice == "tonks": + if states.ton.busy: + nar "Tonks is unavailable." jump main_room_menu else: - jump main_room_menu - elif _choice == "tonks" and not states.ton.busy: - jump summon_tonks + jump summon_tonks #Close - elif _choice == "Close": + elif __choice == "Close": jump main_room_menu - elif _choice in {"snape_office", "seventh_floor", "map_lake", "map_forest", "map_attic", "clothing_store", "item_store", "ravenclaw_dormitories", "gryffindor_dormitories"}: + elif __choice in {"snape_office", "seventh_floor", "map_lake", "map_forest", "map_attic", "clothing_store", "item_store", "ravenclaw_dormitories", "gryffindor_dormitories"}: call gen_chibi("stand", "desk", "base") with d3 call gen_walk(action="leave", speed=1.5) - $ renpy.jump(_choice) + jump expression __choice screen desk_menu(): tag desk_interface zorder 5 + default ball_hint = None + #Background add "interface/desk/_bg_.webp" @@ -160,34 +151,32 @@ screen desk_menu(): # Ugly hands # add "interface/desk/_hands_.webp" xpos 0 ypos -30 - use crystal_ball + use crystal_ball(ball_hint) use watch #Book if item_store_intro_done: - add "interface/desk/book.webp" xalign 1.0 xpos 1080 ypos 0 + add "interface/desk/book.webp" xalign 1.0 ypos 0 imagebutton: - xpos 1080 ypos 0 xalign 1.0 idle "interface/desk/book.webp" hover "interface/desk/book_hover.webp" - hovered SetVariable("ball_hint", "book") + hovered SetScreenVariable("ball_hint", "book") keysym "inventory" - unhovered SetVariable("ball_hint", None) + unhovered SetScreenVariable("ball_hint", None) action Return("inventory") #Tissue Box - add "interface/desk/tissues.webp" xalign 1.0 xpos 1080 ypos 320 + add "interface/desk/tissues.webp" xalign 1.0 ypos 320 imagebutton: - xpos 1080 ypos 320 xalign 1.0 idle "interface/desk/tissues.webp" hover "interface/desk/tissues_hover.webp" - hovered SetVariable("ball_hint", "jerk_off") + hovered SetScreenVariable("ball_hint", "jerk_off") keysym "fap" - unhovered SetVariable("ball_hint", None) + unhovered SetScreenVariable("ball_hint", None) action Return("jerk_off") #Work @@ -195,25 +184,23 @@ screen desk_menu(): imagebutton: xpos -10 ypos 0 - xalign 0.0 + xanchor 0.0 idle "interface/desk/work.webp" hover "interface/desk/work_hover.webp" - hovered SetVariable("ball_hint", "work") + hovered SetScreenVariable("ball_hint", "work") keysym "work" - unhovered SetVariable("ball_hint", None) + unhovered SetScreenVariable("ball_hint", None) action Return("paperwork") #Cards if states.cardgame.unlocked: #Or letter_cards_unlock.read #Day 26+ imagebutton: - xpos 0 - ypos 600 xalign 0.0 yalign 1.0 idle "interface/desk/cards.webp" hover "interface/desk/cards_hover.webp" - hovered SetVariable("ball_hint", "cards") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "cards") + unhovered SetScreenVariable("ball_hint", None) action Return("deck_builder") #exit @@ -224,8 +211,8 @@ screen desk_menu(): ypos 600 idle "interface/desk/exit_mask.webp" hover "interface/desk/exit.webp" - hovered SetVariable("ball_hint", "exit") - unhovered SetVariable("ball_hint", None) + hovered SetScreenVariable("ball_hint", "exit") + unhovered SetScreenVariable("ball_hint", None) action Return("Close") #Night Overlay @@ -235,13 +222,13 @@ screen desk_menu(): use close_button -screen crystal_ball(): +screen crystal_ball(ball_hint): tag desk_interface zorder 8 add "interface/desk/crystal_ball.webp" xpos 268 ypos 0 - if not ball_hint == None: + if ball_hint is not None: add "interface/desk/hints/glow.webp" xpos 268+40 add "interface/desk/hints/"+str(ball_hint)+ ".webp" xpos 268+125 xanchor 0.5 @@ -253,9 +240,9 @@ screen watch(): ypos 0 idle "interface/desk/watch.webp" hover "interface/desk/watch_hover.webp" - unhovered SetVariable("ball_hint", None) + unhovered SetScreenVariable("ball_hint", None) keysym "sleep" - hovered If(game.daytime, SetVariable("ball_hint", "doze_off"), SetVariable("ball_hint", "sleep")) + hovered If(game.daytime, SetScreenVariable("ball_hint", "doze_off"), SetScreenVariable("ball_hint", "sleep")) action If(game.daytime, Return("night_start"), Return("day_start")) $ watch_x = 603 +67 diff --git a/game/scripts/rooms/main_room/objects/jerk_off.rpy b/game/scripts/rooms/main_room/objects/jerk_off.rpy index 22ff4ae9..630772d6 100644 --- a/game/scripts/rooms/main_room/objects/jerk_off.rpy +++ b/game/scripts/rooms/main_room/objects/jerk_off.rpy @@ -1,6 +1,3 @@ - -default jerk_off_choice = None # Last jerk-off fantasy - label jerk_off: call gen_chibi("jerk_off_behind_desk") with d3 @@ -8,8 +5,9 @@ label jerk_off: gen "(How should I finish this thing?)" ("base", xpos="far_left", ypos="head") - label .choice: - menu: + $ renpy.dynamic(jerk_off_choice=None) + + menu .choice: "-Hermione's panties!-" if states.her.ev.panty_thief.acquired: $ jerk_off_choice = "hermione" $ states.her.ev.panty_thief.soaked = True diff --git a/game/scripts/rooms/main_room/objects/poster.rpy b/game/scripts/rooms/main_room/objects/poster.rpy index c8ffe2fe..edc0ce4f 100644 --- a/game/scripts/rooms/main_room/objects/poster.rpy +++ b/game/scripts/rooms/main_room/objects/poster.rpy @@ -1,6 +1,6 @@ label enlarge_poster: - show image "#00000080" as underlay - show image Image(poster_OBJ.decoration.image) zorder 25 at truecenter as poster + show expression "#00000080" as underlay + show expression Image(poster_OBJ.decoration.image) zorder 25 at truecenter as poster call ctc diff --git a/game/scripts/rooms/main_room/objects/weather.rpy b/game/scripts/rooms/main_room/objects/weather.rpy index 19827312..cb5aa46e 100644 --- a/game/scripts/rooms/main_room/objects/weather.rpy +++ b/game/scripts/rooms/main_room/objects/weather.rpy @@ -1,4 +1,3 @@ - label weather_sound: if game.weather == "blizzard": play weather "sounds/blizzard.ogg" fadeout 0.5 fadein 0.5 if_changed @@ -11,6 +10,8 @@ label weather_sound: return transform cloud_move: + animation + xpos 520 choice: ypos 150 @@ -27,52 +28,65 @@ transform cloud_move: pause 7 repeat -image weather_clear = ConditionSwitch( - "game.daytime == True", "images/rooms/main_room/weather/sky.webp", - "game.moon == True", "images/rooms/main_room/weather/night_sky_moon.webp", - "game.daytime == False", "images/rooms/main_room/weather/night_sky.webp", +image weather clear = ConditionSwitch( # final + "game.daytime", "images/rooms/main_room/weather/sky.webp", + "game.moon", "images/rooms/main_room/weather/night_sky_moon.webp", + "True", "images/rooms/main_room/weather/night_sky.webp", ) -image weather_overcast = ConditionSwitch( - "game.daytime == True", "images/rooms/main_room/weather/sky_overcast.webp", - "game.moon == True", "images/rooms/main_room/weather/night_sky_moon_overcast.webp", - "game.daytime == False", "images/rooms/main_room/weather/night_sky_overcast.webp", +image weather overcast = ConditionSwitch( # final + "game.daytime", "images/rooms/main_room/weather/sky_overcast.webp", + "game.moon", "images/rooms/main_room/weather/night_sky_moon_overcast.webp", + "True", "images/rooms/main_room/weather/night_sky_overcast.webp", ) -image weather_cloudy_clouds_night = Composite( - (155, 230), - (40, 40), "images/rooms/main_room/weather/night_cloud_01.webp", - (60, 60), "images/rooms/main_room/weather/night_cloud_02.webp", - (80, 80), "images/rooms/main_room/weather/night_cloud_03.webp", - ) - -image weather_cloudy_clouds_day = Composite( - (155, 230), - (40, 40), "images/rooms/main_room/weather/day_cloud_01.webp", - (60, 60), "images/rooms/main_room/weather/day_cloud_02.webp", - (80, 80), "images/rooms/main_room/weather/day_cloud_03.webp", - ) - -image weather_cloudy_clouds = ConditionSwitch( - "game.daytime == True", "weather_cloudy_clouds_day", - "game.daytime == False", "weather_cloudy_clouds_night", - ) - -image weather_cloudy_fx: - animation - "weather_cloudy_clouds" +transform cloud_move: + subpixel True choice: - pos (-100, 0) + yoffset 0 choice: - pos (-100, 15) + yoffset 15 choice: - pos (-100, 30) - - ease 15.0 xpos 120 - pause 2 + yoffset 30 + xoffset -120 + choice: + linear 12 xoffset 100 + choice: + linear 15 xoffset 100 + choice: + linear 18 xoffset 100 repeat -image weather_cloudy = Fixed("weather_clear", "weather_cloudy_fx", fit_first=True) +transform weather_cloudy_clouds(tim): + # tim is either "day" or "night" + xysize (155, 230) + + contains: + animation + pos (40, 40) + pause 10 + "images/rooms/main_room/weather/"+tim+"_cloud_01.webp" + cloud_move + + contains: + animation + pos (60, 60) + pause 5 + "images/rooms/main_room/weather/"+tim+"_cloud_02.webp" + cloud_move + + contains: + animation + pos (80, 80) + "images/rooms/main_room/weather/"+tim+"_cloud_03.webp" + cloud_move + +image weather_cloudy_clouds = ConditionSwitch( + "game.daytime", weather_cloudy_clouds("day"), + "True", weather_cloudy_clouds("night"), +) + +image weather cloudy = Fixed("weather clear", "weather_cloudy_clouds", fit_first=True) # final image weather_rain_fx: animation @@ -84,7 +98,7 @@ image weather_rain_fx: pause.1 repeat -image weather_rain = Fixed("weather_overcast", "weather_rain_fx", fit_first=True) +image weather rain = Fixed("weather overcast", "weather_rain_fx", fit_first=True) # final image weather_snow_fx: animation @@ -110,7 +124,7 @@ image weather_snow_fx: pause.07 repeat -image weather_snow = Fixed("weather_overcast", "weather_snow_fx", fit_first=True) +image weather snow = Fixed("weather overcast", "weather_snow_fx", fit_first=True) # final image weather_blizzard_fx: animation @@ -136,15 +150,15 @@ image weather_blizzard_fx: pause.05 repeat -image weather_blizzard= Fixed("weather_overcast", "weather_blizzard_fx", fit_first=True) +image weather blizzard = Fixed("weather overcast", "weather_blizzard_fx", fit_first=True) # final image weather_storm_fx: animation - parallel: + contains: animation pause 20 - "images/rooms/main_room/weather/lightning_01.webp" + Null() pause.1 "images/rooms/main_room/weather/lightning_02.webp" pause.1 @@ -152,26 +166,19 @@ image weather_storm_fx: pause.1 "images/rooms/main_room/weather/lightning_04.webp" pause.1 - "images/rooms/main_room/weather/lightning_05.webp" + Null() pause.1 "images/rooms/main_room/weather/lightning_06.webp" pause.1 - "images/rooms/main_room/weather/lightning_05.webp" + Null() pause.1 "images/rooms/main_room/weather/lightning_06.webp" pause.1 - "images/rooms/main_room/weather/lightning_05.webp" + Null() pause 20 repeat - parallel: - animation - "images/rooms/main_room/weather/rain_01.webp" - pause.1 - "images/rooms/main_room/weather/rain_02.webp" - pause.1 - "images/rooms/main_room/weather/rain_03.webp" - pause.1 - repeat + contains: + "weather_rain_fx" -image weather_storm = Fixed("weather_overcast", "weather_storm_fx", fit_first=True) +image weather storm = Fixed("weather overcast", "weather_storm_fx", fit_first=True) # final \ No newline at end of file diff --git a/game/scripts/rooms/quidditch_pitch/init.rpy b/game/scripts/rooms/quidditch_pitch/init.rpy index 3f9602ce..7b040427 100644 --- a/game/scripts/rooms/quidditch_pitch/init.rpy +++ b/game/scripts/rooms/quidditch_pitch/init.rpy @@ -5,7 +5,7 @@ screen quid_pitch_back(): add "images/rooms/quidditch_pitch/back.webp" zoom 0.5 if game.weather == "cloudy": for i in range(random.randint(2, 5)): - add "object" at OBJcloud + add OBJcloud add "images/rooms/quidditch_pitch/back_overlay.webp" zoom 0.5 screen quid_pitch_mid(): @@ -18,4 +18,4 @@ screen quid_pitch_front(): zorder 5 add "images/rooms/quidditch_pitch/front.webp" zoom 0.5 for i in range(random.randint(1, 3)): - add "object" at OBJbutterfly + add OBJbutterfly diff --git a/game/scripts/rooms/quidditch_stands/init.rpy b/game/scripts/rooms/quidditch_stands/init.rpy index af8f97aa..e8c49a1b 100644 --- a/game/scripts/rooms/quidditch_stands/init.rpy +++ b/game/scripts/rooms/quidditch_stands/init.rpy @@ -1,21 +1,21 @@ - # Quidditch stands -default quidditch_stands = { +define __quidditch_stands = { "weather": "sun_high", "rain": False, "puddles": False, - "crowd": [], - "crowd_react": [None, None, None], + "crowd": (), + "crowd_react": (None, None, None), "spotlight": False, "hole": False, "tree_fire": False } +default quidditch_stands = __quidditch_stands.copy() # Crowd density presets -define crowd_few = ["low_1"] -define crowd_mid = ["low_1", "low_2", "tower_1"] -define crowd_full = ["low_1", "low_2", "low_3", "low_4", "tower_1", "tower_2"] +define crowd_few = ("low_1") +define crowd_mid = ("low_1", "low_2", "tower_1") +define crowd_full = ("low_1", "low_2", "low_3", "low_4", "tower_1", "tower_2") image quidditch_stands rain_heavy: "images/rooms/quidditch_stands/rain/heavy_0.webp" @@ -55,8 +55,9 @@ label quidditch_stands(hidden=False, reset=False, **kwargs): # Update and show the area. # Pass `hidden=True` to update only, `reset=True` to reset the area before applying arguments. if reset: - $ reset_variables("quidditch_stands") - $ quidditch_stands.update(kwargs) + $ quidditch_stands = __quidditch_stands | kwargs + else: + $ quidditch_stands.update(kwargs) if not hidden: show screen quidditch_stands_back(**quidditch_stands) show screen quidditch_stands_mid(**quidditch_stands) @@ -64,16 +65,16 @@ label quidditch_stands(hidden=False, reset=False, **kwargs): return -screen quidditch_stands_back(weather, rain=False, crowd=[], crowd_bj=False, crowd_react=[None, None, None], tree_fire=False, puddles=False, **kwargs): +screen quidditch_stands_back(weather, rain=False, crowd=(), crowd_bj=False, crowd_react=(None, None, None), tree_fire=False, puddles=False, **kwargs): zorder 0 - add "images/rooms/quidditch_stands/bg_{}.webp".format(weather) zoom 0.5 + add f"images/rooms/quidditch_stands/bg_{weather}.webp" zoom 0.5 if tree_fire: add "quid_stands_fire" pos (870, -15) - for c in set(crowd): - add "images/rooms/quidditch_stands/crowd_{}.webp".format(c) zoom 0.5 + for c in crowd: + add f"images/rooms/quidditch_stands/crowd_{c}.webp" zoom 0.5 if crowd_bj: add "crowd_bj" zoom 0.5 @@ -90,13 +91,13 @@ screen quidditch_stands_back(weather, rain=False, crowd=[], crowd_bj=False, crow screen quidditch_stands_mid(weather, **kwargs): zorder 8 - add "images/rooms/quidditch_stands/podium_{}.webp".format(weather) zoom 0.5 + add f"images/rooms/quidditch_stands/podium_{weather}.webp" zoom 0.5 screen quidditch_stands_front(weather, spotlight=False, hole=False, rain=False, **kwargs): zorder 8 - add "images/rooms/quidditch_stands/fg_{}.webp".format(weather) zoom 0.5 + add f"images/rooms/quidditch_stands/fg_{weather}.webp" zoom 0.5 if hole: add "images/rooms/quidditch_stands/hole.webp" zoom 0.5 @@ -158,7 +159,7 @@ label test_stands: pause 1.5 call quidditch_stands(hole=True) pause 1 - call quidditch_stands(weather="overcast", crowd=["bj"]) + call quidditch_stands(weather="overcast", crowd_bj=True) pause 1 + call quidditch_stands(reset=True, hidden=True) jump test_stands - diff --git a/game/scripts/rooms/quidditch_stands2/init.rpy b/game/scripts/rooms/quidditch_stands2/init.rpy index e2b04830..da5a9fe7 100644 --- a/game/scripts/rooms/quidditch_stands2/init.rpy +++ b/game/scripts/rooms/quidditch_stands2/init.rpy @@ -1,28 +1,29 @@ - # Quidditch stands -default quidditch_stands2 = { +define __quidditch_stands2 = { "weather": "sun_high", - "crowd": [], - "crowd_react": [None, None, None], + "crowd": (), + "crowd_react": (None, None, None), } +default quidditch_stands2 = __quidditch_stands2.copy() label quidditch_stands2(hidden=False, reset=False, **kwargs): if reset: - $ reset_variables("quidditch_stands2") - $ quidditch_stands2.update(kwargs) + $ quidditch_stands2 = __quidditch_stands2 | kwargs + else: + $ quidditch_stands2.update(kwargs) if not hidden: show screen quidditch_stands_back2(**quidditch_stands2) show screen quidditch_stands_front2(**quidditch_stands2) return -screen quidditch_stands_back2(weather, crowd=[], crowd_react=[None, None, None], **kwargs): +screen quidditch_stands_back2(weather, crowd=(), crowd_react=(None, None, None), **kwargs): zorder 0 - add "images/rooms/quidditch_stands2/bg_{}.webp".format(weather) zoom 0.5 + add f"images/rooms/quidditch_stands2/bg_{weather}.webp" zoom 0.5 - for c in set(crowd): - add "images/rooms/quidditch_stands2/crowd_{}.webp".format(c) zoom 0.5 + for c in crowd: + add f"images/rooms/quidditch_stands2/crowd_{c}.webp" zoom 0.5 add crowd_react[0] pos (570, 140) add crowd_react[1] pos (720, 90) @@ -31,4 +32,4 @@ screen quidditch_stands_back2(weather, crowd=[], crowd_react=[None, None, None], screen quidditch_stands_front2(weather, **kwargs): zorder 8 - add "images/rooms/quidditch_stands2/fg_{}.webp".format(weather) zoom 0.5 + add f"images/rooms/quidditch_stands2/fg_{weather}.webp" zoom 0.5 diff --git a/game/scripts/rooms/seventh_floor/init.rpy b/game/scripts/rooms/seventh_floor/init.rpy index ceee5229..1150f951 100644 --- a/game/scripts/rooms/seventh_floor/init.rpy +++ b/game/scripts/rooms/seventh_floor/init.rpy @@ -29,7 +29,6 @@ screen seventh_floor(): label seventh_floor: call room("seventh_floor") - call reset_menu_position play music "music/the-chamber-by-kevin-macleod.ogg" fadein 1 fadeout 3 if_changed call gen_chibi("stand", -100, "base") call gen_walk(xpos="left_mid", ypos="base", speed=1.5) diff --git a/game/scripts/script.rpy b/game/scripts/script.rpy index 65aa0cd1..d872c553 100644 --- a/game/scripts/script.rpy +++ b/game/scripts/script.rpy @@ -1,4 +1,3 @@ - label start: python: version = version_float() @@ -76,12 +75,20 @@ label start_dev: states.cho.ev.intro.e1_complete = True states.cho.ev.intro.e2_complete = True states.cho.ev.intro.e4_complete = True + states.sna.ev.hangouts.cho_e1 = True states.paperwork_unlocked = True - store.states.lun.ev.intro.e1_complete = True - store.states.lun.ev.intro.e2_complete = True + states.lun.ev.intro.e1_complete = True + states.lun.ev.intro.e2_complete = True + states.lun.ev.quibbler.stocked = True + thequibbler_ITEM.used = True + states.lun.ev.spectrespecs.e1_complete = True + states.lun.ev.spectrespecs.e2_complete = True + states.lun.ev.spectrespecs.e3_complete = True + states.lun.ev.spectrespecs.e4_complete = True + states.lun.favors_unlocked = True for i in mirror.items: i.unlocked = True diff --git a/game/scripts/shaders.rpy b/game/scripts/shaders.rpy index cff58c16..4b447e74 100644 --- a/game/scripts/shaders.rpy +++ b/game/scripts/shaders.rpy @@ -34,6 +34,63 @@ init python: gl_FragColor = vec4(mix(gl_FragColor.xyz, gl_FragColor.xyz * ctemp2rgb(ctemp), u_strength), 1.0); """) + renpy.register_shader("pixelatemaskshader", variables=""" + uniform sampler2D tex0; + uniform sampler2D tex1; + uniform vec2 res0; + uniform float u_step; + uniform float u_lod_bias; + attribute vec2 a_tex_coord; + varying vec2 v_tex_coord; + """, vertex_600=""" + v_tex_coord = a_tex_coord; + """, fragment_functions=""" + vec2 CalculateNewUV(vec2 uv, vec2 size, float step) { + float dx = (step / size.x); + float dy = (step / size.y); + return vec2(dx*(floor(uv.x/dx) + 0.5), dy*(floor(uv.y/dy) + 0.5)); + } + + vec4 PixelateMask(sampler2D source, float alpha, vec2 size, vec2 uv, float step, float lod) { + if (alpha > 0.0) { + vec2 new_uv = CalculateNewUV(uv, size, step); + vec4 old = vec4(texture2D(source, uv, lod).rgb, 1.0); + vec4 new = vec4(texture2D(source, new_uv, lod).rgb, 1.0); + return mix(old, new, alpha); + } + + return texture2D(source, uv, lod); + } + """, fragment_600=""" + float alpha = texture2D(tex1, v_tex_coord).a; + gl_FragColor = PixelateMask(tex0, alpha, res0, v_tex_coord, u_step, u_lod_bias); + """) + + class PixelateMask(renpy.Displayable, NoRollback): + def __init__(self, child, mask, step=1.0, **kwargs): + super().__init__(**kwargs) + self.child = renpy.displayable(child) + self.mask = renpy.displayable(mask) + self.step = step + + def render(self, width, height, st, at): + child = renpy.display.render.render(self.child, width, height, st, at) + mask = renpy.display.render.render(self.mask, width, height, st, at) + + rv = renpy.display.render.Render(width, height) + + if renpy.display.render.models: + + rv.mesh = True + rv.add_shader("pixelatemaskshader") + rv.add_uniform("u_step", self.step) + + rv.blit(child, (0, 0)) + rv.blit(mask, (0, 0)) + + renpy.redraw(self, 0) + return rv + transform color_temperature(factor=1.0, strength=1.0): mesh True shader "color_temperature_shader" diff --git a/game/scripts/shops/dress/chitchats.rpy b/game/scripts/shops/dress/chitchats.rpy index 53a6486f..1df5c6c7 100644 --- a/game/scripts/shops/dress/chitchats.rpy +++ b/game/scripts/shops/dress/chitchats.rpy @@ -623,6 +623,64 @@ label purchase_outfit(item): maf "Just a little joke professor, I'm aware of what you meant." gen "Oh... I see... Good one!" ("base", xpos="far_left", ypos="head") maf "I'll get working on it as soon as possible." + elif item == lun_outfit_tanktop: + gen "I'm looking for a summer outfit... Have you got anything like that?" ("base", xpos="far_left", ypos="head") + maf "I'm able to make anything you like, sir... But you're going to have to be a bit more descriptive." + gen "Oh... Right..." ("base", xpos="far_left", ypos="head") + gen "How about a tank top, and some shorts?" ("base", xpos="far_left", ypos="head") + maf "Are you asking me for an opinion?" + gen "Tank top and shorts, it is!" ("base", xpos="far_left", ypos="head") + maf "Alright then..." + elif item == lun_outfit_bimbo: + gen "Could you make me something a bit... Bimbo-y?" ("base", xpos="far_left", ypos="head") + maf "Bimbo-y, sir?" + gen "You know..." ("base", xpos="far_left", ypos="head") + maf "I'm not sure I do, sir." + gen "Something like this... *scribbles*..." ("base", xpos="far_left", ypos="head") + play sound "sounds/scribble.ogg" + maf "Oh... Oh, I see..." + maf "And the holes..." + gen "Very much intentional." ("base", xpos="far_left", ypos="head") + maf "Right..." + maf "I must admit, it hurts me a bit to do something like this to fabric..." + maf "However, refusing would end my streak of completing any request that has been given to me." + maf "Alright then... I'll do it." + gen "Excellent!" ("base", xpos="far_left", ypos="head") + elif item == lun_outfit_cumslut: + gen "I've got this idea for an outfit, that I can't get out of my mind." ("base", xpos="far_left", ypos="head") + maf "Right... Could you describe it for me?" + gen "It would look like this... *scribbles*..." ("base", xpos="far_left", ypos="head") + play sound "sounds/scribble.ogg" + maf "Merlin's beard... Where do you get these ideas from?" + gen "Is it that bad?" ("base", xpos="far_left", ypos="head") + maf "No, this is brilliant." + gen "Truly?" ("base", xpos="far_left", ypos="head") + maf "Of course! I'll start on it at once!" + gen "Oh! Okay then!" ("base", xpos="far_left", ypos="head") + elif item == lun_outfit_latex: + gen "I need something snappy, and make it tight!" ("base", xpos="far_left", ypos="head") + gen "Wait... I meant that I need something tight... And make it snappy!" ("base", xpos="far_left", ypos="head") + maf "I'm afraid you're going to have to be a little bit more specific, sir." + gen "A latex suit please." ("base", xpos="far_left", ypos="head") + maf "Right... Would you like a one-piece or a two-piece?" + gen "Definitely a two-piece!" ("base", xpos="far_left", ypos="head") + maf "Any other requirements?" + gen "*Hmm*... I'm not sure..." ("base", xpos="far_left", ypos="head") + gen "Oh! Some holes for the chest to poke through!" ("base", xpos="far_left", ypos="head") + gen "For comfort, of course..." ("base", xpos="far_left", ypos="head") + maf "Certainly..." + maf "I shall have it ready for you shortly." + elif item == lun_outfit_flasher: + gen "I'm looking to acquire something... Kinky." ("base", xpos="far_left", ypos="head") + maf "Kinky, sir?" + gen "Do you know what a flasher is?" ("base", xpos="far_left", ypos="head") + maf "Of course... The first ever flasher was a witch, after all." + gen "Really?" ("base", xpos="far_left", ypos="head") + maf "Most certainly... Do they not teach this in school anymore?" + gen "*Err*..." ("base", xpos="far_left", ypos="head") + gen "So, would you be able to make an outfit like that?" ("base", xpos="far_left", ypos="head") + maf "Absolutely." + gen "Excellent." ("base", xpos="far_left", ypos="head") # gen "Could you make me a Ravenclaw Cheerleader outfit?" ("base", xpos="far_left", ypos="head") # maf "You're not showing favouritism towards Ravenclaw's Quidditch team, are you?" # gen "I'm merely looking to see if it'd be worth to bring cheerleading to this country." ("base", xpos="far_left", ypos="head") @@ -878,7 +936,7 @@ label purchase_outfit(item): gen "Well, if you could, I'd like something like this... *Scribbles*." ("base", xpos="far_left", ypos="head") #TODO uncomment once conversion for python 3 allows it - #show image Transform(Fixed("paper", "geniedrawing", fit_first=True), align=(0.5, 0.5), zoom=0.5) as drawing + #show expression Transform(Fixed("paper", "geniedrawing", fit_first=True), align=(0.5, 0.5), zoom=0.5) as drawing #with d5 #call ctc #hide drawing diff --git a/game/scripts/shops/dress/menu.rpy b/game/scripts/shops/dress/menu.rpy index 57744404..9ca396e7 100644 --- a/game/scripts/shops/dress/menu.rpy +++ b/game/scripts/shops/dress/menu.rpy @@ -5,13 +5,13 @@ init python: item = sorted(item, key=lambda x: natsort_key(x.name)) if sortby == "Price (Asc)": - item = sorted(item, key=lambda x: x.price, reverse=False) + item.sort(key=lambda x: x.price, reverse=False) elif current_sorting == "Price (Desc)": - item = sorted(item, key=lambda x: x.price, reverse=True) + item.sort(key=lambda x: x.price, reverse=True) if sortby == "Lewdness (Asc)": - item = sorted(item, key=lambda x: get_outfit_score(x), reverse=False) + item.sort(key=get_outfit_score, reverse=False) elif current_sorting == "Lewdness (Desc)": - item = sorted(item, key=lambda x: get_outfit_score(x), reverse=True) + item.sort(key=get_outfit_score, reverse=True) return item label shop_dress: @@ -25,7 +25,7 @@ label shop_dress_menu: category_items = {"hermione": hermione.outfits, "tonks": tonks.outfits, "cho": cho.outfits, "luna": luna.outfits, "astoria": astoria.outfits, "susan": susan.outfits} current_category = "hermione" store_cart = set() - menu_items = shop_dress_sortfilter([x for x in category_items.get(current_category, []) if bool(x.unlocked == False and x.price > 0 and not x in store_cart)], current_sorting) + menu_items = shop_dress_sortfilter((x for x in category_items.get(current_category, []) if (x.unlocked == False and x.price > 0 and x not in store_cart)), current_sorting) current_item = next(iter(menu_items), None) parcel_callbacks = [] @@ -33,25 +33,25 @@ label shop_dress_menu: label .after_init: - $ _choice = ui.interact() + $ renpy.dynamic(__choice = ui.interact()) - if _choice[0] == "category": - $ current_category = _choice[1] - $ menu_items = shop_dress_sortfilter([x for x in category_items.get(current_category, []) if bool(x.unlocked == False and x.price > 0 and not x in store_cart)], current_sorting) + if __choice[0] == "category": + $ current_category = __choice[1] + $ menu_items = shop_dress_sortfilter((x for x in category_items.get(current_category, []) if (x.unlocked == False and x.price > 0 and x not in store_cart)), current_sorting) $ current_item = next(iter(menu_items), None) - elif _choice[0] == "buy": + elif __choice[0] == "buy": show screen blktone with d3 - if game.gold < _choice[1].price: + if game.gold < __choice[1].price: gen "(I don't have enough gold.)" ("base", xpos="far_left", ypos="head") else: if len(store_cart) < 5: - $ renpy.call("purchase_outfit", _choice[1]) + $ renpy.call("purchase_outfit", __choice[1]) play sound "sounds/money.ogg" - $ game.gold -= _choice[1].price - $ store_cart.add(_choice[1]) - $ menu_items = shop_dress_sortfilter([x for x in category_items.get(current_category, []) if bool(x.unlocked == False and x.price > 0 and not x in store_cart)], current_sorting) + $ game.gold -= __choice[1].price + $ store_cart.add(__choice[1]) + $ menu_items = shop_dress_sortfilter((x for x in category_items.get(current_category, []) if (x.unlocked == False and x.price > 0 and x not in store_cart)), current_sorting) $ current_item = next(iter(menu_items), None) if len(store_cart) < 5: @@ -63,7 +63,7 @@ label shop_dress_menu: hide screen blktone with d3 - elif _choice == "sort": + elif __choice == "sort": if current_sorting == "Price (Asc)": $ current_sorting = "Price (Desc)" elif current_sorting == "Price (Desc)": @@ -105,19 +105,19 @@ label shop_dress_menu: hide screen shop_dress hide screen blktone - $ _tmp = "tomorrow" if transit_time == 1 else "in about {} days".format(str(transit_time)) + $ _tmp = "tomorrow" if transit_time == 1 else f"in about {transit_time} days" maf "You can expect a parcel [_tmp]." # Executes callbacks upon receival of the parcel. $ curry = renpy.curry(execute_callbacks)(parcel_callbacks) if parcel_callbacks else None $ parcel_callbacks = [] $ Parcel(contents=[(k, 1) for k in store_cart], wait=transit_time, func=curry).send() - + return else: - gen "Nothing has caught my eye I'm afraid." ("base", xpos="far_left", ypos="head") - maf "Maybe next time." - return + gen "Nothing has caught my eye I'm afraid." ("base", xpos="far_left", ypos="head") + maf "Maybe next time." + return jump .after_init @@ -160,7 +160,7 @@ screen shop_dress_menu(): pos (6, 6) for category in category_items.keys(): if get_character_unlock(category): - $ icon = Fixed(icon_bg, Frame( Transform("interface/icons/head/{}.webp".format(category), fit="contain"), xysize=(42, 42), offset=(3, 3)), "interface/achievements/glass_iconbox.webp") + $ icon = Fixed(icon_bg, Frame( Transform(f"interface/icons/head/{category}.webp", fit="contain"), xysize=(42, 42), offset=(3, 3)), "interface/achievements/glass_iconbox.webp") vbox: textbutton category: diff --git a/game/scripts/shops/item/chitchats.rpy b/game/scripts/shops/item/chitchats.rpy index c16251c9..e893c4b1 100644 --- a/game/scripts/shops/item/chitchats.rpy +++ b/game/scripts/shops/item/chitchats.rpy @@ -90,13 +90,8 @@ label purchase_item(item): $ game.gold -= item.price $ item.owned += 1 - $ item_store_achievements() - - return - -init python: - def item_store_achievements(): - # We require a function because lambdas aren't pickleable + python hide: + # We hide the lambdas which aren't pickleable if isinstance(item, Decoration): _posters = filter(lambda x: (x.type == "decoration" and x.placement == poster_OBJ), inventory.items) _hats = filter(lambda x: (x.type == "decoration" and "hat" in x.name.lower()), inventory.items) @@ -105,4 +100,6 @@ init python: achievements.unlock("postman") if all(i.owned > 0 for i in _hats): - achievements.unlock("hats") \ No newline at end of file + achievements.unlock("hats") + + return diff --git a/game/scripts/shops/item/menu.rpy b/game/scripts/shops/item/menu.rpy index 62f3ddf5..76a22c92 100644 --- a/game/scripts/shops/item/menu.rpy +++ b/game/scripts/shops/item/menu.rpy @@ -4,9 +4,9 @@ init python: item = sorted(item, key=lambda x: natsort_key(x.name)) if sortby == "Price (Asc)": - item = sorted(item, key=lambda x: x.price, reverse=False) + item.sort(key=lambda x: x.price, reverse=False) elif current_sorting == "Price (Desc)": - item = sorted(item, key=lambda x: x.price, reverse=True) + item.sort(key=lambda x: x.price, reverse=True) return item label shop_item: @@ -31,9 +31,9 @@ label shop_item_menu(xx=150, yy=90): current_sorting = "Price (Asc)" if current_category in {"Gifts", "Ingredients"}: - category_items = [x for x in inventory_dict[current_category] if bool(x.price > 0 and x.unlocked)] + category_items = [x for x in inventory_dict[current_category] if (x.price > 0 and x.unlocked)] elif current_category in {"Books", "Scrolls", "Decorations", "Quest Items"}: - category_items = [x for x in inventory_dict[current_category] if bool(x.price > 0 and x.owned < x.limit and x.unlocked)] + category_items = [x for x in inventory_dict[current_category] if (x.price > 0 and x.owned < x.limit and x.unlocked)] menu_items = shop_item_sortfilter(category_items, current_sorting) menu_items_length = len(menu_items) @@ -43,39 +43,39 @@ label shop_item_menu(xx=150, yy=90): show screen shop_item(xx, yy) label .after_init: - $ _choice = ui.interact() + $ renpy.dynamic(__choice = ui.interact()) - if _choice[0] == "select": - $ current_item = _choice[1] - elif _choice[0] == "category": - $ current_category = _choice[1] + if __choice[0] == "select": + $ current_item = __choice[1] + elif __choice[0] == "category": + $ current_category = __choice[1] if current_category in {"Gifts", "Ingredients"}: - $ category_items = [x for x in inventory_dict[current_category] if bool(x.price > 0 and x.unlocked)] + $ category_items = [x for x in inventory_dict[current_category] if (x.price > 0 and x.unlocked)] elif current_category in {"Books", "Scrolls", "Decorations", "Quest Items"}: - $ category_items = [x for x in inventory_dict[current_category] if bool(x.price > 0 and x.owned < x.limit and x.unlocked)] + $ category_items = [x for x in inventory_dict[current_category] if (x.price > 0 and x.owned < x.limit and x.unlocked)] $ menu_items = shop_item_sortfilter(category_items, current_sorting) $ menu_items_length = len(menu_items) $ current_page = 0 $ current_item = next(iter(menu_items), None) pass - elif _choice == "inc": + elif __choice == "inc": $ current_page += 1 - elif _choice == "dec": + elif __choice == "dec": $ current_page += -1 - elif _choice == "sort": + elif __choice == "sort": if current_sorting == "Price (Asc)": $ current_sorting = "Price (Desc)" elif current_sorting == "Price (Desc)": $ current_sorting = "Price (Asc)" $ menu_items = shop_item_sortfilter(category_items, current_sorting) - elif _choice == "buy": + elif __choice == "buy": $ renpy.call("purchase_item", current_item) if current_category in {"Gifts", "Ingredients"}: - $ category_items = [x for x in inventory_dict[current_category] if bool(x.price > 0 and x.unlocked)] + $ category_items = [x for x in inventory_dict[current_category] if (x.price > 0 and x.unlocked)] elif current_category in {"Books", "Scrolls", "Decorations", "Quest Items"}: - $ category_items = [x for x in inventory_dict[current_category] if bool(x.price > 0 and x.owned < x.limit and x.unlocked)] + $ category_items = [x for x in inventory_dict[current_category] if (x.price > 0 and x.owned < x.limit and x.unlocked)] $ menu_items = shop_item_sortfilter(category_items, current_sorting) $ menu_items_length = len(menu_items) @@ -207,15 +207,13 @@ screen shop_item_menuitem(xx, yy): pos (24+58*(col), 113+58*(row)) add gui.format("interface/achievements/{}/iconbox.webp") - if not current_item == None and current_item.id == menu_items[i].id: + if not current_item is None and current_item.id == menu_items[i].id: add "interface/achievements/glow.webp" align (0.5, 0.5) zoom 0.105 alpha 0.7 at rotate_circular - if (menu_items[i].currency == "tokens" and tokens >= menu_items[i].price) or (menu_items[i].owned < 99 and game.gold >= menu_items[i].price): - $ image_zoom = crop_image_zoom(menu_items[i].get_image(), 42, 42) - else: - $ image_zoom = crop_image_zoom(menu_items[i].get_image(), 42, 42, True) - - add image_zoom align (0.5, 0.5) + add crop_image_zoom( + menu_items[i].get_image(), 42, 42, + (menu_items[i].currency != "tokens" or tokens < menu_items[i].price) and (menu_items[i].owned >= 99 or game.gold < menu_items[i].price) + ) align (0.5, 0.5) button: style gui.theme("overlay_button") @@ -229,17 +227,17 @@ screen shop_item_menuitem(xx, yy): if menu_items[i].currency == "tokens": if tokens >= menu_items[i].price: - text "{color=#2055da}T{/color} [price]" size 10 align (0.95, 0.95) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] + text "{color=#2055da}T{/color} [price]" size 10 pos (0.95, 0.95) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] else: - text "{color=#2055da}T{/color} {color=#ff0000}[price]{/color}" size 10 align (0.95, 0.95) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] + text "{color=#2055da}T{/color} {color=#ff0000}[price]{/color}" size 10 pos (0.95, 0.95) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] else: if game.gold >= menu_items[i].price: - text "{color=#daa520}G{/color} [price]" size 10 align (0.95, 0.95) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] + text "{color=#daa520}G{/color} [price]" size 10 pos (0.95, 0.95) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] else: - text "{color=#daa520}G{/color} {color=#ff0000}[price]{/color}" size 10 align (0.95, 0.95) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] + text "{color=#daa520}G{/color} {color=#ff0000}[price]{/color}" size 10 pos (0.95, 0.95) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] if menu_items_length <= 0: - text "Nothing here yet" align (0.5, 0.5) anchor (0.5, 0.5) size 24 + text "Nothing here yet" align (0.5, 0.5) size 24 if current_item: frame: @@ -249,12 +247,10 @@ screen shop_item_menuitem(xx, yy): pos (24, 375) add gui.format("interface/achievements/{}/icon_selected.webp") - if (current_item.currency == "tokens" and tokens >= current_item.price) or (current_item.owned < 99 and game.gold >= current_item.price): - $ image_zoom = crop_image_zoom(current_item.get_image(), 84, 84) - else: - $ image_zoom = crop_image_zoom(current_item.get_image(), 84, 84, True) - - add image_zoom align (0.5, 0.5) + add crop_image_zoom( + current_item.get_image(), 84, 84, + (current_item.currency != "tokens" or tokens < current_item.price) and (current_item.owned >= 99 or game.gold < current_item.price) + ) align (0.5, 0.5) add "interface/achievements/glass_selected.webp" pos (6, 6) if current_item.owned > 0: @@ -262,14 +258,14 @@ screen shop_item_menuitem(xx, yy): if current_item.currency == "tokens": if tokens >= current_item.price: - text "{color=#2055da}T{/color} [current_item.price]" size 14 align (0.9, 0.9) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] + text "{color=#2055da}T{/color} [current_item.price]" size 14 pos (0.9, 0.9) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] else: - text "{color=#2055da}T{/color} {color=#ff0000}[current_item.price]{/color}" size 14 align (0.90, 0.90) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] + text "{color=#2055da}T{/color} {color=#ff0000}[current_item.price]{/color}" size 14 pos (0.90, 0.90) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] else: if game.gold >= current_item.price: - text "{color=#daa520}G{/color} [current_item.price]" size 14 align (0.9, 0.9) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] + text "{color=#daa520}G{/color} [current_item.price]" size 14 pos (0.9, 0.9) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] else: - text "{color=#daa520}G{/color} {color=#ff0000}[current_item.price]{/color}" size 14 align (0.90, 0.90) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] + text "{color=#daa520}G{/color} {color=#ff0000}[current_item.price]{/color}" size 14 pos (0.90, 0.90) anchor (1.0, 1.0) color "#FFFFFF" outlines [ (1, "#000", 0, 0) ] add gui.format("interface/achievements/{}/highlight.webp") pos (112, 375) add gui.format("interface/achievements/{}/spacer.webp") pos (120, 398) diff --git a/game/scripts/theme.rpy b/game/scripts/theme.rpy index f353c943..ca91faec 100644 --- a/game/scripts/theme.rpy +++ b/game/scripts/theme.rpy @@ -1,4 +1,3 @@ - # Legacy styles (still in use) style yesno_button: diff --git a/game/scripts/utility/common_functions.rpy b/game/scripts/utility/common_functions.rpy index 20eefb75..ff5a0b5e 100644 --- a/game/scripts/utility/common_functions.rpy +++ b/game/scripts/utility/common_functions.rpy @@ -5,15 +5,12 @@ init python early: import math import random import pygame - import colorsys import fnmatch import posixpath import re - import string import functools - from bisect import bisect + import timeit as timeit_module from operator import itemgetter - from operator import add as _add from collections import OrderedDict get_volume_preference = renpy.game.preferences.get_volume @@ -102,7 +99,10 @@ init python early: print(e) def reset_variables(*args): - """Resets the given variables to their default values.""" + """ + Resets the given variables to their default values. + Should not be used : instead, define the base value and have a function set the defaulted one to the defined value (or a copy of it). + """ # Refer to renpy.ast.Default.set_default for implementation details defaults_set = renpy.store._defaults_set changed_set = renpy.store.__dict__.ever_been_changed @@ -112,39 +112,43 @@ init python early: defaults_set.remove(arg) changed_set.remove(arg) elif config.developer: - raise Exception("The variable `{}` was not previously set with a default value.".format(arg)) + raise Exception(f"The variable {arg!r} was not previously set with a default value.") renpy.execute_default_statement(False) def disable_game_menu(): - setattr(renpy.store, "_game_menu_screen", None) + global _game_menu_screen + _game_menu_screen = None def enable_game_menu(): - setattr(renpy.store, "_game_menu_screen", "save_screen") + global _game_menu_screen + _game_menu_screen = "save_screen" def make_revertable(obj): if isinstance(obj, _list): return [make_revertable(x) for x in obj] elif isinstance(obj, _dict): - return dict([(make_revertable(k), make_revertable(v)) for (k,v) in obj.items()]) + return dict((make_revertable(k), make_revertable(v)) for (k,v) in obj.items()) else: return obj def is_integer(s): - def zero(s): - return (len(s) > 1 and s.startswith("0")) - s = str(s) - - if s and s[0] in ("-", "+"): - return (not zero(s[1:]) and s[1:].isdigit()) - return (not zero(s) and s.isdigit()) + if not s: + return False + if s[0] in ("-", "+"): + # calling lstrip("0+-") would be faster but not exactly identical + s = s[1:] + if s.lstrip("0").isdigit(): + return True + return False def timeit(func, loops=10000, args=(), kwargs={}): - start = time.time() - for i in range(loops): - func(*args, **kwargs) - end = time.time() - print(f"The task has taken {end-start} seconds to finish") + rv = timeit_module.timeit("func(*args, **kwargs)", number=loops, globals=dict(func=func, args=args, kwargs=kwargs)) + print(f"The task has taken {rv} seconds to finish") + + def autorange(func, args=(), kwargs={}): + loops, time = timeit_module.Timer("func(*args, **kwargs)", globals=dict(func=func, args=args, kwargs=kwargs)).autorange() + print(f"The task has taken {time/loops} seconds to finish ({loops} iterations in {time} seconds)") def list_swap_values(l, val1, val2): """Mutates the original list.""" @@ -186,9 +190,9 @@ init python early: return s1.replace(filter, "") == s2.replace(filter, "") def istype(inst, clss): - if not isinstance(clss, (list, tuple, set)): - clss = (clss,) - return type(inst) in clss + if isinstance(clss, (list, tuple, set)): + return type(inst) in clss + return type(inst) is clss class IntLike(python_object): # Does not support rollback @@ -224,4 +228,10 @@ init python early: return len(self._callable()) def execute_callbacks(callbacks): - for callback in callbacks: callback() \ No newline at end of file + for callback in callbacks: callback() + + def extract_number(key): + match = re.match(r'^(\d+)', key) + if match: + return int(match.group(1)) + return float('inf') # Return a large number for non-numeric keys diff --git a/game/scripts/utility/common_labels.rpy b/game/scripts/utility/common_labels.rpy index 5ca6001b..ca15a815 100644 --- a/game/scripts/utility/common_labels.rpy +++ b/game/scripts/utility/common_labels.rpy @@ -11,13 +11,6 @@ label hide_characters: # Do not add transitions. Use one after return. return -# Reset menu -label reset_menu_position: - - $ states.menu_pos = (0.5, 0.6) - - return - label bld(action=None): if action == "hide": hide screen bld1 @@ -90,13 +83,11 @@ label music_block: label unlock_clothing(text="", item="interface/icons/box_blue_1.webp"): - $ states.menu_pos = (0.5, 0.75) - show screen clothing_unlock(item) show screen blktone with d3 - menu: + menu (menu_yalign=.75): "[text]" "-Done Reading-": pass @@ -107,8 +98,6 @@ label unlock_clothing(text="", item="interface/icons/box_blue_1.webp"): $ item.unlock() - call reset_menu_position - return diff --git a/game/scripts/utility/devtools.rpy b/game/scripts/utility/devtools.rpy index fb1102e2..74e5ab4b 100644 --- a/game/scripts/utility/devtools.rpy +++ b/game/scripts/utility/devtools.rpy @@ -1,6 +1,6 @@ -init -999 python early: - if renpy.version_tuple < (7,5,3,22090809): - raise RuntimeWarning("Your Ren'Py launcher is outdated, the current minimal requirement is 7.5.3.22090809+\nPlease perform an update and try launching the game again.") +python early: + if renpy.version_tuple < (8,2,1,24030407): + raise RuntimeWarning("Your Ren'Py launcher is outdated, the current minimal requirement is 8.2.1+\nPlease perform an update and try launching the game again.") from renpy.uguu import glGetString, GL_VENDOR, GL_RENDERER, GL_VERSION @@ -15,16 +15,16 @@ init -999 python early: return "DirectX" if preferences.renderer == "angle2" else "OpenGL" class stdcol: - PURPLE = '\033[1;35;48m' - CYAN = '\033[1;36;48m' - BOLD = '\033[1;37;48m' - BLUE = '\033[1;34;48m' - GREEN = '\033[1;32;48m' - YELLOW = '\033[1;33;48m' - RED = '\033[1;31;48m' - BLACK = '\033[1;30;48m' - UNDERLINE = '\033[4;37;48m' - END = '\033[1;37;0m' + PURPLE = '\033[1;35;48m' + CYAN = '\033[1;36;48m' + BOLD = '\033[1;37;48m' + BLUE = '\033[1;34;48m' + GREEN = '\033[1;32;48m' + YELLOW = '\033[1;33;48m' + RED = '\033[1;31;48m' + BLACK = '\033[1;30;48m' + UNDERLINE = '\033[4;37;48m' + END = '\033[1;37;0m' if config.developer: # Debug @@ -42,7 +42,7 @@ init -999 python early: orphaned.append(i) if orphaned: - raise Exception("Orphaned compiled scripts detected, please delete them before continuing:\n{}".format(orphaned)) + raise Exception(f"Orphaned compiled scripts detected, please delete them before continuing:\n{orphaned}") detect_orphaned_rpyc_files() @@ -91,7 +91,7 @@ init -2 python: return Image(file + ".png") if config.developer: - raise IOError("Missing image: {}".format(path)) + raise IOError(f"Missing image: {path}") return Image("images/blank.webp") def missing_label_func(name): @@ -141,19 +141,27 @@ label missing_label(): $ renpy.choice_for_skipping() $ err_msg1 = systemerror[0] $ err_msg2 = systemerror[1] - "{color=#7a0000}System{/color}" "Uh-oh. Looks like you've encountered a bug. Don't worry, we will try to return you back to the office after displaying the error message, your save file won't be affected." - "{color=#7a0000}System{/color}" "{color=#7a0000}Error:{/color} [err_msg1] '{color=#7a0000}[err_msg2]{/color}'\n\n\n{size=-4}You can report this bug on our {a=https://discord.gg/7PD57yt}discord{/a}.{/size}" + + if not _savecompat: + # Suppress debug on save update, it's normal. + "{color=#7a0000}System{/color}" "Uh-oh. Looks like you've encountered a bug. Don't worry, we will try to return you back to the office after displaying the error message, your save file won't be affected." + "{color=#7a0000}System{/color}" "{color=#7a0000}Error:{/color} [err_msg1] '{color=#7a0000}[err_msg2]{/color}'\n\n\n{size=-4}You can report this bug on our {a=https://discord.gg/7PD57yt}discord{/a}.{/size}" $ states.last_girl = None $ states.active_girl = None $ systemerror = [None, None] + $ _savecompat = False jump main_room label missing_return(): $ renpy.choice_for_skipping() - "{color=#7a0000}System{/color}" "Uh-oh. Looks like you've encountered a bug. Don't worry, we will try to return you back to the office after displaying the error message, your save file won't be affected." - "{color=#7a0000}System{/color}" "{color=#7a0000}Error:{/color} Point of no return.\n\n\n{size=-4}You can report this bug on our {a=https://discord.gg/7PD57yt}discord{/a}.{/size}" + + if not _savecompat: + # Suppress debug on save update, it's normal. + "{color=#7a0000}System{/color}" "Uh-oh. Looks like you've encountered a bug. Don't worry, we will try to return you back to the office after displaying the error message, your save file won't be affected." + "{color=#7a0000}System{/color}" "{color=#7a0000}Error:{/color} Point of no return.\n\n\n{size=-4}You can report this bug on our {a=https://discord.gg/7PD57yt}discord{/a}.{/size}" $ states.last_girl = None $ states.active_girl = None + $ _savecompat = False jump main_room screen placeholder(): diff --git a/game/scripts/utility/editor.rpy b/game/scripts/utility/editor.rpy index dfed9c18..28f2aa3e 100644 --- a/game/scripts/utility/editor.rpy +++ b/game/scripts/utility/editor.rpy @@ -86,7 +86,7 @@ init python: elif what == "temp_attr": setattr(node, "temporary_attributes", tuple(contents)) else: - raise TypeError("Type '{}' is not implemented.".format(what)) + raise TypeError(f"Type {what!r} is not implemented.") def replace_expression(self, expr, val): node = self.node @@ -97,14 +97,14 @@ init python: # We need to make sure not to add quotes # to expressions or variables. if isinstance(val, str): - val = "\"{}\"".format(val) + val = repr(val) # Insert new expression d = self.get_expressions_active(who) d[expr] = val # Convert to list of tuples - # l = [(k, "\"{}\"".format(v)) for k, v in d.items() if not v is None] # This is faster, but not robust enough. + # l = [(k, repr(v)) for k, v in d.items() if not v is None] # This is faster, but not robust enough. l = _list() l2 = _list() @@ -441,7 +441,7 @@ screen editor(): drag: pos (50, 50) - maximum (500, 500) + ymaximum 500 xsize 500 frame: diff --git a/game/scripts/utility/engine.rpy b/game/scripts/utility/engine.rpy index ed22e322..85d24745 100644 --- a/game/scripts/utility/engine.rpy +++ b/game/scripts/utility/engine.rpy @@ -39,13 +39,13 @@ init python: if cache_size >= cache_limit: if config.developer: - print("Cache limit reached, purging cache... ({}/{})\n{}".format(cache_size, cache_limit, renpy.get_filename_line())) + print(f"Cache limit reached, purging cache... ({cache_size}/{cache_limit})\n{renpy.get_filename_line()}") cache.clear() if renpy.game.interface is not None: if config.developer: - print("Statements limit reached, cleaning textures... ({})\n{}".format(self.limit, renpy.get_filename_line())) + print(f"Statements limit reached, cleaning textures... ({self.limit})\n{renpy.get_filename_line()}") renpy.game.interface.full_redraw = True renpy.game.interface.restart_interaction = True @@ -144,13 +144,13 @@ python early hide: # return (_CallException, (self.label, self.args, self.kwargs, self.from_current)) # class _JumpException(Exception): - + # def __init__(self, label): # for i in renpy.config._label_callbacks: # i(label) # class _JumpOutException(Exception): - + # def __init__(self, label): # for i in renpy.config._label_callbacks: # i(label) @@ -297,7 +297,7 @@ init -100 python: for slot in cls.__dict__.get("__slots__", ()): if slot.startswith("__") and not slot.endswith("__"): raise ValueError("slotted_object __slots__ can not be mangled. " - "If you need it, mangle it by yourself.") + "If you need it, mangle it by yourself.") def _clean(self): rv = object.__reduce_ex__(self, 2)[2] @@ -336,3 +336,70 @@ init -100 python: expression = expression() return true if expression else false + + # Adds support for nested stores for replay scope + def _call_replay(label, scope={}): + renpy.display.focus.clear_focus() + + renpy.game.log.complete() + + old_log = renpy.game.log + renpy.game.log = renpy.python.RollbackLog() + + sb = renpy.python.StoreBackup() + renpy.python.clean_stores() + + context = renpy.execution.Context(True) + renpy.game.contexts.append(context) + + if renpy.display.interface is not None: + renpy.display.interface.enter_context() + + # This has to be here, to ensure the scope stuff works. + renpy.exports.execute_default_statement() + + for k, v in renpy.config.replay_scope.items(): + stores = k.split(".") + current_obj = renpy.store + + for store in stores[:-1]: + current_obj = getattr(current_obj, store) + + setattr(current_obj, stores[-1], v) + + for k, v in scope.items(): + stores = k.split(".") + current_obj = renpy.store + + for store in stores[:-1]: + current_obj = getattr(current_obj, store) + + setattr(current_obj, stores[-1], v) + + renpy.store._in_replay = label + + try: + + context.goto_label("_start_replay") + renpy.execution.run_context(False) + + except renpy.game.EndReplay: + pass + + finally: + + context.pop_all_dynamic() + + renpy.game.contexts.pop() + renpy.game.log = old_log + sb.restore() + + if renpy.game.interface and renpy.game.interface.restart_interaction and renpy.game.contexts: + renpy.game.contexts[-1].scene_lists.focused = None + + renpy.config.skipping = None + + if renpy.config.after_replay_callback: + renpy.config.after_replay_callback() + + renpy.call_replay = _call_replay diff --git a/game/scripts/utility/image_crop.rpy b/game/scripts/utility/image_crop.rpy index 2b27c5b3..76ff7f6a 100644 --- a/game/scripts/utility/image_crop.rpy +++ b/game/scripts/utility/image_crop.rpy @@ -37,13 +37,3 @@ init python: sprite = Image(path) return Transform(sprite, crop=(x, y, w, h), xsize=xsize, ysize=ysize, fit="contain", matrixcolor=matrix, subpixel=True) - - def get_zoom(image, size): - if isinstance(image, str): - image = Image(image) - - r = renpy.render(image, 800, 800, 0, 0) - x, y = r.get_size() - xsize, ysize = size - - return min(ysize / y, xsize / x) diff --git a/game/scripts/utility/lint.rpy b/game/scripts/utility/lint.rpy index cf704884..9dfa4b81 100644 --- a/game/scripts/utility/lint.rpy +++ b/game/scripts/utility/lint.rpy @@ -92,7 +92,7 @@ init -1 python: # Node argument values are (fucking) raw val = strip(val) - msg = "'{}'".format(key) + msg = repr(key) fp = f"characters/{SAYERS.get(who)}/poses/default/face/{key}/{val}/" fn = next((f for f in files if f.startswith(fp)), f"{fp}expression.webp") @@ -137,7 +137,7 @@ init -1 python: renpy.lint.report_node = node has_failed = True - msg = "'{}' requires an integer, or a pre-defined named position, not '{}'".format(key, val) + msg = f"{key!r} requires an integer, or a pre-defined named position, not {val!r}" renpy.lint.report(msg) # This would require fixing hundreds of calls. Might postpone it... @@ -160,8 +160,8 @@ init -1 python: val = strip(val) if key == "emote": - msg = "'{}'".format(key) - fn = "characters/{}/emote/{}.webp".format(SAYERS.get(who), val) + msg = repr(key) + fn = f"characters/{SAYERS.get(who)}/emote/{val}.webp" if not has_failed: # Avoid repeating node destination diff --git a/game/scripts/utility/punk.rpy b/game/scripts/utility/punk.rpy index d510f9a6..1a7eefce 100644 --- a/game/scripts/utility/punk.rpy +++ b/game/scripts/utility/punk.rpy @@ -4,139 +4,135 @@ ## Implementation and changes ## ## LoafyLemon ## ##################################### -init python: +init python in image_payload: import binascii import struct import zlib + import os - class ImagePayload(NoRollback): + CHUNK_TYPE_END = "IEND" + CHUNK_TYPE_PUNK = "wtSi" + MAX_BYTES = 2147483647 + SIGNATURE_BYTES = 8 + BYTES_IN_KB = 2014 - CHUNK_TYPE_END = "IEND" - CHUNK_TYPE_PUNK = "wtSi" - MAX_BYTES = 2147483647 - SIGNATURE_BYTES = 8 - BYTES_IN_KB = 2014 + def bytes_to_hex(b): + return b.hex() - def __init__(self): - pass + def bytes_to_utf(b): + return b.decode() - def bytes_to_hex(self, b): - return b.hex() + def bytes_to_int(b): + return int(bytes_to_hex(b), 16) - def bytes_to_utf(self, b): - return b.decode() + def read_bytes(f, byte_count: int): + return f.read(byte_count) - def bytes_to_int(self, b): - return int(self.bytes_to_hex(b), 16) + def rewind_bytes(f, byte_count): + f.seek(f.tell() - byte_count) - def read_bytes(self, f, byte_count: int): - return f.read(byte_count) + def get_file_length(f): + f.seek(0, os.SEEK_END) + file_length = f.tell() + f.seek(0) - def rewind_bytes(self, f, byte_count): - f.seek(f.tell() - byte_count) + return file_length - def get_file_length(self, f): - f.seek(0, os.SEEK_END) - file_length = f.tell() - f.seek(0) + def read_chunk(f): + chunk_size = read_bytes(f, 4) + chunk_type = read_bytes(f, 4) + chunk_content = read_bytes(f, bytes_to_int(chunk_size)) + chunk_crc = read_bytes(f, 4) - return file_length + return [chunk_size, chunk_type, chunk_content, chunk_crc] - def read_chunk(self, f): - chunk_size = self.read_bytes(f, 4) - chunk_type = self.read_bytes(f, 4) - chunk_content = self.read_bytes(f, self.bytes_to_int(chunk_size)) - chunk_crc = self.read_bytes(f, 4) + def inject_punk_chunk(f, content): + chunk_size = len(content) - return [chunk_size, chunk_type, chunk_content, chunk_crc] + if chunk_size > MAX_BYTES: + raise ValueError(f"Cannot inject more than {MAX_BYTES} bytes") - def inject_punk_chunk(self, f, content): - chunk_size = len(content) + print(f"Injecting {CHUNK_TYPE_PUNK} chunk {chunk_size / BYTES_IN_KB} kb") - if chunk_size > self.MAX_BYTES: - raise ValueError(f"Cannot inject more than {self.MAX_BYTES} bytes") + # Create a byte array to store our chunk data in. + tmp_bytes = bytearray() + # First write the chunk type + tmp_bytes.extend(CHUNK_TYPE_PUNK.encode()) + # Now write the bytes of whatever we're trying to hide + tmp_bytes.extend(content) - print(f"Injecting {self.CHUNK_TYPE_PUNK} chunk {chunk_size / self.BYTES_IN_KB} kb") + # Write the chunk size + f.write(bytearray(struct.pack("!i", chunk_size))) - # Create a byte array to store our chunk data in. - tmp_bytes = bytearray() - # First write the chunk type - tmp_bytes.extend(self.CHUNK_TYPE_PUNK.encode()) - # Now write the bytes of whatever we're trying to hide - tmp_bytes.extend(content) + # And the content + f.write(tmp_bytes) - # Write the chunk size - f.write(bytearray(struct.pack("!i", chunk_size))) + crc = binascii.crc32(tmp_bytes) + crc_bytes = crc.to_bytes(4, "big") + print("Chunk CRC", bytes_to_hex(crc_bytes)) + f.write(crc_bytes) - # And the content - f.write(tmp_bytes) + print("Chunk injected!") - crc = binascii.crc32(tmp_bytes) - crc_bytes = crc.to_bytes(4, "big") - print("Chunk CRC", self.bytes_to_hex(crc_bytes)) - f.write(crc_bytes) + def list(input): + path = os.path.join(renpy.config.gamedir, "outfits", input) - print("Chunk injected!") + with open(path, "rb") as input_file: - def list(self, input): - path = os.path.join(config.gamedir, "outfits", input) + input_file_length = get_file_length(input_file) + input_file.read(SIGNATURE_BYTES) - with open(path, "rb") as input_file: + while True: + chunk_size, chunk_type, chunk_content, chunk_crc = read_chunk(input_file) + chunk_type_str = bytes_to_utf(chunk_type) + print(f"Chunk {chunk_type_str}, {bytes_to_int(chunk_size)} bytes") - input_file_length = self.get_file_length(input_file) - input_file.read(self.SIGNATURE_BYTES) + if input_file.tell() >= input_file_length: + return - while True: - chunk_size, chunk_type, chunk_content, chunk_crc = self.read_chunk(input_file) - chunk_type_str = self.bytes_to_utf(chunk_type) - print(f"Chunk {chunk_type_str}, {self.bytes_to_int(chunk_size)} bytes") + def inject(input, output, content): + input_path = os.path.join(renpy.config.gamedir, "outfits", input) + output_path = os.path.join(renpy.config.gamedir, "outfits", output) + content = zlib.compress(str(content).encode()) - if input_file.tell() >= input_file_length: - return + with open(input_path, "rb") as input_file, open(output_path, "wb") as output_file: - def inject(self, input, output, content): - input_path = os.path.join(config.gamedir, "outfits", input) - output_path = os.path.join(config.gamedir, "outfits", output) - content = zlib.compress(str(content).encode()) + input_file_length = get_file_length(input_file) + output_file.write(input_file.read(SIGNATURE_BYTES)) - with open(input_path, "rb") as input_file, open(output_path, "wb") as output_file: + while True: + chunk_size, chunk_type, chunk_content, chunk_crc = read_chunk(input_file) + chunk_type_str = bytes_to_utf(chunk_type) + print(f"Chunk {chunk_type_str}, {bytes_to_int(chunk_size)} bytes") - input_file_length = self.get_file_length(input_file) - output_file.write(input_file.read(self.SIGNATURE_BYTES)) + if chunk_type_str == CHUNK_TYPE_END: + inject_punk_chunk(output_file, content) - while True: - chunk_size, chunk_type, chunk_content, chunk_crc = self.read_chunk(input_file) - chunk_type_str = self.bytes_to_utf(chunk_type) - print(f"Chunk {chunk_type_str}, {self.bytes_to_int(chunk_size)} bytes") + output_file.write(chunk_size) + output_file.write(chunk_type) + output_file.write(chunk_content) + output_file.write(chunk_crc) - if chunk_type_str == self.CHUNK_TYPE_END: - self.inject_punk_chunk(output_file, content) + if input_file.tell() >= input_file_length: + return - output_file.write(chunk_size) - output_file.write(chunk_type) - output_file.write(chunk_content) - output_file.write(chunk_crc) + def extract(input): + print("Attempting to extract punked data from", input) + path = os.path.join(renpy.config.gamedir, input) - if input_file.tell() >= input_file_length: - return + with open(path, "rb") as input_file: - def extract(self, input): - print("Attempting to extract punked data from", input) - path = os.path.join(config.gamedir, "outfits", input) + input_file_length = get_file_length(input_file) + input_file.read(SIGNATURE_BYTES) - with open(path, "rb") as input_file: + while True: + chunk_size, chunk_type, chunk_content, chunk_crc = read_chunk(input_file) + chunk_type_str = bytes_to_utf(chunk_type) - input_file_length = self.get_file_length(input_file) - input_file.read(self.SIGNATURE_BYTES) + if chunk_type_str == CHUNK_TYPE_PUNK: + print("Found a punk chunk worth", bytes_to_int(chunk_size), "bytes") + return zlib.decompress(chunk_content).decode() - while True: - chunk_size, chunk_type, chunk_content, chunk_crc = self.read_chunk(input_file) - chunk_type_str = self.bytes_to_utf(chunk_type) - - if chunk_type_str == self.CHUNK_TYPE_PUNK: - print("Found a punk chunk worth", self.bytes_to_int(chunk_size), "bytes") - return zlib.decompress(chunk_content).decode() - - if input_file.tell() >= input_file_length: - print("No punked data found") - return + if input_file.tell() >= input_file_length: + print("No punked data found") + return diff --git a/game/scripts/utility/text_tags.rpy b/game/scripts/utility/text_tags.rpy index e197b142..1df3ea6c 100644 --- a/game/scripts/utility/text_tags.rpy +++ b/game/scripts/utility/text_tags.rpy @@ -1,4 +1,3 @@ - # Custom text tags # https://www.renpy.org/doc/html/custom_text_tags.html diff --git a/game/scripts/utility/transitions.rpy b/game/scripts/utility/transitions.rpy index cd2948af..e88b3ec5 100644 --- a/game/scripts/utility/transitions.rpy +++ b/game/scripts/utility/transitions.rpy @@ -1,4 +1,3 @@ - image fade = "#00000080" image fade_gradient = "interface/bld.webp" diff --git a/game/scripts/utility/translation.rpy b/game/scripts/utility/translation.rpy index e2eba6f8..9c67f39a 100644 --- a/game/scripts/utility/translation.rpy +++ b/game/scripts/utility/translation.rpy @@ -75,7 +75,7 @@ init python in cli: for i, s in enumerate(strings): n = round(float(i)/(nstrings)*100) - print("\rGenerating strings for {} ... Total progress:{} % ... Stage 2/2".format(language, n), end="") + print(f"\rGenerating strings for {language} ... Total progress:{n} % ... Stage 2/2", end="") tlfn = renpy.translation.generation.translation_filename(s) @@ -96,17 +96,17 @@ init python in cli: tlfn = os.path.join(renpy.config.gamedir, renpy.config.tl_directory, language, tlfn) f = open_tl_file(tlfn, mode="w") - f.write(u"translate {} strings:\n".format(language)) - f.write(u"\n") + f.write(f"translate {language} strings:\n") + f.write("\n") for s in sl: original = s.text translation = stl.translate(s.text) # Keeps translated strings - f.write(u" # {}:{}\n".format(elide_filename(s.filename), s.line)) - f.write(u" old \"{}\"\n".format(quote_unicode(original))) - f.write(u" new \"{}\"\n".format(quote_unicode(translation))) - f.write(u"\n") + f.write(f" # {elide_filename(s.filename)}:{s.line}\n") + f.write(f" old \"{quote_unicode(original)}\"\n") + f.write(f" new \"{quote_unicode(translation)}\"\n") + f.write("\n") def retranslate(): translator = renpy.game.script.translator @@ -135,7 +135,7 @@ init python in cli: for language in translator.languages: - print("\rGenerating dialogues for {} ... Total progress:{} % ... Stage 1/2".format(language, n), end="") + print(f"\rGenerating dialogues for {language} ... Total progress:{n} % ... Stage 1/2", end="") for _, trans in translator.file_translates[filepath]: @@ -159,9 +159,9 @@ init python in cli: f = open_tl_file(fp, mode="w") - f.write(u"# {}:{}\n".format(trans.filename, trans.linenumber)) - f.write(u"translate {} {}:\n".format(language, trans.identifier.replace(".", "_"))) - f.write(u"\n") + f.write(f"# {trans.filename}:{trans.linenumber}\n") + f.write("translate {} {}:\n".format(language, trans.identifier.replace(".", "_"))) + f.write("\n") for n in trans.block: f.write(u" # " + n.get_code() + "\n") @@ -196,7 +196,7 @@ init python in cli: f.close() if args.dry: - print("Removal required: {}".format(filepath)) + print(f"Removal required: {filepath}") else: os.unlink(filepath) os.unlink(filepath + "c") diff --git a/game/scripts/utility/updater.rpy b/game/scripts/utility/updater.rpy index e48a1589..6196d493 100644 --- a/game/scripts/utility/updater.rpy +++ b/game/scripts/utility/updater.rpy @@ -94,6 +94,8 @@ init python: control, major, *minor = version.split(" ")[0].split(".") return float("{}.{}{}".format(control, major, "".join(minor))) + _savecompat = False + def version_patch(): if renpy.is_init_phase(): # Don't update save files from when game recovers from a crash. @@ -101,10 +103,10 @@ init python: latest = version_float() # For unknown reasons, sometimes version is missing from the save, so we need a fallback - current = getattr(renpy.store, "version", latest) + current = getattr(store, "version", latest) if current < 1.452: - + for i in states.dolls: doll = getattr(store, i) doll._sprite = DefaultQueue() @@ -119,7 +121,7 @@ init python: # Fix makeup object types inside saved outfits if j.has_type("makeup"): - + objects = [x.parent.clone() for x in j.group] j.group = objects @@ -142,7 +144,7 @@ init python: # In case the player already started the event chain, send the letter early. letter_cards_store.send() - getattr(store, "letter_cards_store").wait = 7 + store.letter_cards_store.wait = 7 # Fix revertable types for modding mods_enabled = getattr(persistent, "mods_enabled", _set()) or _set() @@ -152,7 +154,7 @@ init python: setattr(persistent, "mods_list", _dict(mods_list)) # Fix event issue with Cho - ev = getattr(store, "cho_ev_inspect_her_body_t2_e3") + ev = store.cho_ev_inspect_her_body_t2_e3 if ev.completed and not states.cho.ev.inspect_her_body.T2_E3_complete: states.cho.ev.inspect_her_body.T2_E3_complete = True @@ -166,15 +168,66 @@ init python: if k.modpath: k.modpath = "mods/" + k.modpath.split("/")[-1] + if current < 1.46: + store.her_ev_cumslut_public_t5_e1.label = "hg_pr_cumslut_T5_return" + store.her_ev_cumslut_public_t5_e1.reset() + store.her_ev_cumslut_public_t5_e1.dequeue() + store.her_ev_cumslut_public_t5_e2.label = "hg_pr_cumslut_T5_return" + store.her_ev_cumslut_public_t5_e2.reset() + store.her_ev_cumslut_public_t5_e2.dequeue() + store.her_ev_cumslut_public_t5_e3.label = "hg_pr_cumslut_T5_return" + store.her_ev_cumslut_public_t5_e3.reset() + store.her_ev_cumslut_public_t5_e3.dequeue() + store.her_ev_cumslut_public_t5_e1_hub.label = "hg_pr_cumslut" + store.her_ev_cumslut_public_t5_e1_hub.req = "states.her.tier == 5" + store.her_ev_cumslut_public_t5_e1_hub.reset() + store.her_ev_cumslut_public_t5_e2_hub.label = "hg_pr_cumslut" + store.her_ev_cumslut_public_t5_e2_hub.req = "states.her.tier == 5" + store.her_ev_cumslut_public_t5_e2_hub.reset() + store.her_ev_cumslut_public_t5_e3_hub.label = "hg_pr_cumslut" + store.her_ev_cumslut_public_t5_e3_hub.req = "states.her.tier == 5" + store.her_ev_cumslut_public_t5_e3_hub.reset() + + store.lun_ev_talk_to_me_t3_e1.req = "states.lun.tier == 3" + store.lun_ev_talk_to_me_t3_e1.reset() + + store.lun_ev_inspect_her_body_t3_e1.req = "states.lun.tier == 3" + store.lun_ev_inspect_her_body_t3_e1.reset() + + store.lun_ev_play_with_yourself_t3_e1.req = "states.lun.tier == 3" + store.lun_ev_play_with_yourself_t3_e1.reset() + store.lun_ev_play_with_yourself_t3_e2.req = "states.lun.tier == 3" + store.lun_ev_play_with_yourself_t3_e2.reset() + store.lun_ev_play_with_yourself_t3_e3.req = "states.lun.tier == 3" + store.lun_ev_play_with_yourself_t3_e3.reset() + store.lun_ev_play_with_yourself_t3_e4.req = "states.lun.tier == 3" + store.lun_ev_play_with_yourself_t3_e4.reset() + + if states.lun.tier == 3: + states.lun.level = 9 + + for i in states.dolls: + doll = getattr(store, i) + + doll.body.matrix = IdentityMatrix() + + if current < 1.461: + store.ton_accessory_office.zorder = 235 + + if current < 1.462: + store.lun_ev_blowjob_t4_e1.enqueue() + store.lun_ev_blowjob_t4_e2.enqueue() + store.lun_ev_blowjob_t4_e3.enqueue() + store.lun_ev_blowjob_t4_e4.enqueue() + if current > latest: - raise Exception("Loaded save file is incompatible. (Save Version: {}, Game Version: {})".format(current, latest)) + raise Exception(f"Loaded save file is incompatible. (Save Version: {current}, Game Version: {latest})") if current < latest: - setattr(renpy.store, "version", latest) + setattr(store, "version", latest) + setattr(store, "_savecompat", True) message = "Have fun!" - achievements.attempt_repair() - renpy.call_in_new_context("modal_popup", "Update Successful", "\nYour save file has been successfully updated to version {{b}}{}{{/b}}.\n\n{}".format(config.version, message), None, "Hurray!") renpy.block_rollback() @@ -182,7 +235,7 @@ init python: def version_logo(): url = UPDATE_URL - filename = "logo_{}.webp".format(UPDATE_VER) + filename = f"logo_{UPDATE_VER}.webp" path = os.path.join(config.basedir, "update", filename) # Read file if exists diff --git a/game/scripts/wardrobe/functions.rpy b/game/scripts/wardrobe/functions.rpy index 92fd77ea..ea972f46 100644 --- a/game/scripts/wardrobe/functions.rpy +++ b/game/scripts/wardrobe/functions.rpy @@ -1,96 +1,86 @@ init -1 python: - def get_character_progression(key): + import os + + def __check_exists(key): if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return getattr(states, f"{key[:3]}").level + raise KeyError(f"{key!r} character is undefined.") + + def get_character_progression(key): + __check_exists(key) + return getattr(states, key[:3]).level def get_character_scheduling(key): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return getattr(states, f"{key[:3]}").wardrobe_scheduling + __check_exists(key) + return getattr(states, key[:3]).wardrobe_scheduling - def get_character_requirement(key, type): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return getattr(renpy.store, key[:3]+"_requirements").get(type, 0) + def get_character_requirement(key, typ): + __check_exists(key) + return getattr(renpy.store, key[:3]+"_requirements").get(typ, 0) - def get_character_response(key, type): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return getattr(renpy.store, key[:3]+"_responses").get(type) + def get_character_response(key, typ): + __check_exists(key) + return getattr(renpy.store, key[:3]+"_responses").get(typ) def get_character_object(key): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) + __check_exists(key) return getattr(store, key) - def get_character_outfit(key, type="default"): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return getattr(store, "{}_outfit_{}".format(key[:3], type)) + def get_character_outfit(key, typ="default"): + __check_exists(key) + return getattr(store, f"{key[:3]}_outfit_{typ}") - def get_character_body(key, type="default"): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return getattr(store, "{}_body_{}".format(key[:3], type)) + def get_character_body(key, typ="default"): + __check_exists(key) + return getattr(store, f"{key[:3]}_body_{typ}") def get_character_outfit_req(key, item): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) + __check_exists(key) if not isinstance(item, DollOutfit): - raise TypeError("'{}' is not a DollOutfit instance.".format(item)) + raise TypeError(f"{item!r} is not a DollOutfit instance.") - req = ["{}: {}".format(i.type, i.level) for i in item.group] + req = [f"{i.type}: {i.level}" for i in item.group] has_bra = any(i.type == "bra" for i in item.group) has_panties = any(i.type == "panties" for i in item.group) if not has_bra: - req += ["NO BRA: {}".format(get_character_requirement(key, "unequip bra"))] + req.append(f'NO BRA: {get_character_requirement(key, "unequip bra")}') if not has_panties: - req += ["NO PANTIES: {}".format(get_character_requirement(key, "unequip panties"))] + req.append(f'NO PANTIES: {get_character_requirement(key, "unequip panties")}') print("\n".join(req)) def get_character_tag(key): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return "{}_main".format(key) + __check_exists(key) + return f"{key}_main" def get_character_sayer(key): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) + __check_exists(key) return getattr(store, key[:3]) def get_character_gift_label(key): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return "give_{}_gift".format(key[:3]) + __check_exists(key) + return f"give_{key[:3]}_gift" def get_character_potion_check_label(key): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return "{}_potion_check".format(key[:3]) + __check_exists(key) + return f"{key[:3]}_potion_check" def get_character_potion_check(key): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return getattr(store, "{}_potion_check".format(key[:3])) + __check_exists(key) + return getattr(store, f"{key[:3]}_potion_check") def get_character_unlock(key): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return getattr(states, f"{key[:3]}").unlocked + __check_exists(key) + return getattr(states, key[:3]).unlocked def get_character_gifted(key): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return getattr(states, f"{key[:3]}").gifted + __check_exists(key) + return getattr(states, key[:3]).gifted def get_character_mood(key): - if not key in states.dolls: - raise KeyError("'{}' character is undefined.".format(key)) - return getattr(states, f"{key[:3]}").mood + __check_exists(key) + return getattr(states, key[:3]).mood def get_outfit_score(outfit): """Returns outfit 'lewdness' score""" @@ -191,7 +181,7 @@ init -1 python: files = [] for f in os.listdir(path): fp = os.path.join(path, f) - rp = os.path.relpath(fp, config.gamedir) + rp = os.path.relpath(fp, config.gamedir).replace("\\", "/") if os.path.isfile(os.path.join(path, f)) and f.endswith(".png"): files.append(build_button(rp)) diff --git a/game/scripts/wardrobe/reactions.rpy b/game/scripts/wardrobe/reactions.rpy index 81ff28b8..0c7efa2a 100644 --- a/game/scripts/wardrobe/reactions.rpy +++ b/game/scripts/wardrobe/reactions.rpy @@ -1,12 +1,12 @@ init python: def wardrobe_check_category(category): - req = get_character_requirement(states.active_girl, "category {}".format(category)) + req = get_character_requirement(states.active_girl, f"category {category}") flag = get_character_progression(states.active_girl) return (flag >= req) def wardrobe_check_touch(what): - req = get_character_requirement(states.active_girl, "touch {}".format(what)) + req = get_character_requirement(states.active_girl, f"touch {what}") flag = get_character_progression(states.active_girl) return (flag >= req) @@ -18,7 +18,7 @@ init python: return (flag >= req) def wardrobe_check_unequip(item): - req = get_character_requirement(states.active_girl, "unequip {}".format(item.type)) + req = get_character_requirement(states.active_girl, f"unequip {item.type}") flag = get_character_progression(states.active_girl) return (flag >= req) @@ -45,7 +45,7 @@ init python: if not item.blacklist: return True - req = max( ( get_character_requirement(states.active_girl, "unequip {}".format(i)) for i in item.blacklist ) ) + req = max((get_character_requirement(states.active_girl, f"unequip {i}") for i in item.blacklist)) flag = get_character_progression(states.active_girl) return (flag >= req) @@ -53,7 +53,7 @@ init python: def wardrobe_fallback_required(item): fallbacks = {"top", "bottom", "bra", "panties"} char = get_character_object(states.active_girl) - req = [get_character_requirement(states.active_girl, "unequip {}".format(i)) for i in fallbacks if not char.is_equipped(i) and not i in char.blacklist] + req = [get_character_requirement(states.active_girl, f"unequip {i}") for i in fallbacks if not char.is_equipped(i) and not i in char.blacklist] if not req: return False diff --git a/game/scripts/wardrobe/studio.rpy b/game/scripts/wardrobe/studio.rpy index 7ff49051..03629a54 100644 --- a/game/scripts/wardrobe/studio.rpy +++ b/game/scripts/wardrobe/studio.rpy @@ -9,57 +9,55 @@ init python in studio: import functools import posixpath - Transform = renpy.store.Transform - Flatten = renpy.store.Flatten - Drag = renpy.store.Drag - get_character_object = renpy.store.get_character_object + from store import Transform, Flatten, Drag, get_character_object @functools.cache def get_faces(): - d = _dict() + faces = _dict() for charname in renpy.store.states.dolls: charobj = get_character_object(charname) extensions = charobj.extensions + face = faces.setdefault(charname, _dict()) for part in charobj.face._face.keys(): path = posixpath.join("characters", charname, "poses", charobj.pose, "face", part) + if part in ("cheeks", "tears"): + expressions = face.setdefault(part, _list((False,))) + else: + expressions = face.setdefault(part, _list()) + for f in renpy.list_files(): fp, fn = os.path.split(f) fn, ext = os.path.splitext(fn) expression = os.path.split(fp)[1] - - - if part in ("cheeks", "tears"): - expressions = d.setdefault(charname, _dict()).setdefault(part, _list((False,))) - else: - expressions = d.setdefault(charname, _dict()).setdefault(part, _list()) if not fp.startswith(path) or not ext in extensions: continue if not expression in expressions: expressions.append(expression) - return d + return faces def get_choices(): - d = {} + choices = {} for i in renpy.store.states.dolls: - d[i] = {} - d[i]["eyebrows"] = faces[i].get("eyebrows", [None]).index("base") - d[i]["eyes"] = faces[i].get("eyes", [None]).index("base") - d[i]["mouth"] = faces[i].get("mouth", [None]).index("base") - d[i]["pupils"] = faces[i].get("pupils", [None]).index("mid") - d[i]["cheeks"] = faces[i].get("cheeks", [False]).index(False) - d[i]["tears"] = faces[i].get("tears", [False]).index(False) - d[i]["zoom"] = 0.5 - d[i]["flip"] = 1 - d[i]["alpha"] = 1.0 + choices[i] = ci = {} + fi = faces[i] + ci["eyebrows"] = fi.get("eyebrows", [None]).index("base") + ci["eyes"] = fi.get("eyes", [None]).index("base") + ci["mouth"] = fi.get("mouth", [None]).index("base") + ci["pupils"] = fi.get("pupils", [None]).index("mid") + ci["cheeks"] = fi.get("cheeks", [False]).index(False) + ci["tears"] = fi.get("tears", [False]).index(False) + ci["zoom"] = 0.5 + ci["flip"] = 1 + ci["alpha"] = 1.0 - d["background"] = { + choices["background"] = { "image": 0, "alpha": 1.0, "hue": 0, @@ -69,7 +67,7 @@ init python in studio: "list": ["wall_day", "castle", "forest", "quidditch_pitch", "highlight", "versus", "corridor", "custom"] } - d["overlay"] = { + choices["overlay"] = { "image": 0, "alpha": 1.0, "hue": 0, @@ -78,31 +76,29 @@ init python in studio: "blur": 0.0, "list": [None, "curtains", "card", "g_bottom", "g_left", "g_circular"] } - return d + return choices def get_drags(): active_girl = renpy.store.states.active_girl - d = {} - - for i in renpy.store.states.dolls: - d[i] = [drag_init(getattr(renpy.store, i)), (i == active_girl)] - return d + return {i: [drag_init(getattr(renpy.store, i)), (i == active_girl)] for i in renpy.store.states.dolls} def get_face(char): - eyebrows = choices[char]["eyebrows"] - eyes = choices[char]["eyes"] - mouth = choices[char]["mouth"] - pupils = choices[char]["pupils"] - cheeks = choices[char]["cheeks"] - tears = choices[char]["tears"] + cho = choices[char] + eyebrows = cho["eyebrows"] + eyes = cho["eyes"] + mouth = cho["mouth"] + pupils = cho["pupils"] + cheeks = cho["cheeks"] + tears = cho["tears"] + fa = faces[char] d = { - "eyebrows": faces[char]["eyebrows"][eyebrows], - "eyes": faces[char]["eyes"][eyes], - "mouth": faces[char]["mouth"][mouth], - "pupils": faces[char]["pupils"][pupils], - "cheeks": faces[char]["cheeks"][cheeks], - "tears": faces[char]["tears"][tears], + "eyebrows": fa["eyebrows"][eyebrows], + "eyes": fa["eyes"][eyes], + "mouth": fa["mouth"][mouth], + "pupils": fa["pupils"][pupils], + "cheeks": fa["cheeks"][cheeks], + "tears": fa["tears"][tears], } return d @@ -134,9 +130,10 @@ init python in studio: def drag_update(drag): drag.char_obj.set_face(**get_face(drag.char_name)) - zoom = choices[drag.char_name]["zoom"] - flip = choices[drag.char_name]["flip"] - alpha = choices[drag.char_name]["alpha"] + cho = choices[drag.char_name] + zoom = cho["zoom"] + flip = cho["flip"] + alpha = cho["alpha"] d = Flatten(drag.char_obj.image) d = Transform(d, zoom=zoom, xzoom=flip, alpha=alpha) @@ -144,15 +141,17 @@ init python in studio: return def drag_reset(drag): - choices[drag.char_name]["eyebrows"] = faces[drag.char_name]["eyebrows"].index("base") - choices[drag.char_name]["eyes"] = faces[drag.char_name]["eyes"].index("base") - choices[drag.char_name]["mouth"] = faces[drag.char_name]["mouth"].index("base") - choices[drag.char_name]["pupils"] = faces[drag.char_name]["pupils"].index("mid") - choices[drag.char_name]["cheeks"] = faces[drag.char_name]["cheeks"].index(False) - choices[drag.char_name]["tears"] = faces[drag.char_name]["tears"].index(False) - choices[drag.char_name]["zoom"] = 0.5 - choices[drag.char_name]["flip"] = 1 - choices[drag.char_name]["alpha"] = 1.0 + cho = choices[drag.char_name] + fa = faces[drag.char_name] + cho["eyebrows"] = fa["eyebrows"].index("base") + cho["eyes"] = fa["eyes"].index("base") + cho["mouth"] = fa["mouth"].index("base") + cho["pupils"] = fa["pupils"].index("mid") + cho["cheeks"] = fa["cheeks"].index(False) + cho["tears"] = fa["tears"].index(False) + cho["zoom"] = 0.5 + cho["flip"] = 1 + cho["alpha"] = 1.0 drag.char_obj.set_face(**get_face(drag.char_name)) @@ -203,7 +202,7 @@ screen studio(): $ bg_blur = studio.choices["background"]["blur"] $ bg_matrix = bg_hue*bg_saturation*bg_brightness $ bg_image = studio.choices["background"]["list"][studio.choices["background"]["image"]] - $ bg_image = "images/rooms/_bg_/{}.webp".format(bg_image) + $ bg_image = f"images/rooms/_bg_/{bg_image}.webp" $ bg = Transform(bg_image, matrixcolor=bg_matrix, blur=bg_blur) $ ov_hue = HueMatrix(studio.choices["overlay"]["hue"]) @@ -214,9 +213,8 @@ screen studio(): $ ov_matrix = ov_hue*ov_saturation*ov_brightness $ ov_image = studio.choices["overlay"]["list"][studio.choices["overlay"]["image"]] - if not ov_image is None: - $ ov_image = "images/rooms/overlays/{}.webp".format(ov_image) - $ ov = Transform(ov_image, matrixcolor=ov_matrix, blur=ov_blur, alpha=ov_alpha) + if ov_image is not None: + $ ov = Transform(f"images/rooms/overlays/{ov_image}.webp", matrixcolor=ov_matrix, blur=ov_blur, alpha=ov_alpha) else: $ ov = None @@ -294,13 +292,12 @@ screen studio(): vbox: label "Overlay" default ov_dict = studio.choices["overlay"] - $ ov_active = bool(ov_dict["image"] > 0) hbox: add "interface/studio/overlay.webp" size icon_size bar value DictValue(ov_dict, "image", len(ov_dict["list"])-1, False, step=1, force_step=True) tooltip "Overlay Image" - if ov_active: + if ov_dict["image"] > 0: hbox: add "interface/studio/hue.webp" size icon_size bar value DictValue(ov_dict, "hue", 360.0, False, step=1.0, force_step=True) tooltip "Overlay Hue" @@ -337,7 +334,7 @@ screen studio(): selected v[1] text_color ("#009900" if active else "#f9d592") text_hover_color "#fff" text_first_indent 20 - background Transform("interface/icons/head/{}.webp".format(k), size=(16, 16), offset=(22, 3)) + background Transform(f"interface/icons/head/{k}.webp", size=(16, 16), offset=(22, 3)) vbox: align (1.0, 1.0) diff --git a/game/scripts/wardrobe/wardrobe.rpy b/game/scripts/wardrobe/wardrobe.rpy index 728044dc..5754d2d9 100644 --- a/game/scripts/wardrobe/wardrobe.rpy +++ b/game/scripts/wardrobe/wardrobe.rpy @@ -1,4 +1,3 @@ - default wardrobe_music = False default wardrobe_chitchats = True default wardrobe_autosave = False @@ -19,20 +18,28 @@ define wardrobe_subcategories_sorted = { define wardrobe_categories = ("head", "piercings & tattoos", "upper body", "upper undergarment", "lower body", "lower undergarment", "legwear", "misc") define wardrobe_outfit_schedule = ("day", "night", "cloudy", "rainy", "snowy") +default __lock = False +default __predicted = None init python: + def preload_wardrobe_assets(c): + global __lock, __predicted - _lock = False + if renpy.version_tuple < (8, 2): + renpy.start_predict_screen("wardrobe") + else: + # use the new renpy.invoke_in_main_thread + renpy.invoke_in_main_thread(renpy.start_predict_screen, "wardrobe") - def preload_wardrobe_assets(): - global _lock, _predicted - _lock = True - renpy.start_predict_screen("wardrobe") - c = get_character_object(states.active_girl) + # this is not thread-safe, but there's no better way : it's the slow part d = [v[0] for i in c.wardrobe_list for v in i.get_layers(i._hash).values()] - renpy.start_predict(*d, "interface/wardrobe/*.webp") - _predicted = d - _lock = False + + if renpy.version_tuple < (8, 2): + renpy.start_predict(*d, "interface/wardrobe/*.webp") + else: + renpy.invoke_in_main_thread(renpy.start_predict, *d, "interface/wardrobe/*.webp") + __predicted = d + __lock = False def rebuild_wardrobe_icons(items, subcat): if not settings.get("multithreading"): @@ -128,49 +135,48 @@ style loading_trivia_text: layeredimage loading: always "gui_fade" - always Transform(Text("Loading", style="loading_text"), align=(0.5, 0.4)) + always Text("Loading", style="loading_text"): + align (0.5, 0.35) always "loading_spinner" image loading_spinner: align (0.5, 0.5) - Text("{unicode}╞▰═════════╡{/unicode}", style="loading_text") + Text("{unicode}╞╪═════════╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞═▰════════╡{/unicode}", style="loading_text") + Text("{unicode}╞═╪════════╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞══▰═══════╡{/unicode}", style="loading_text") + Text("{unicode}╞══╪═══════╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞═══▰══════╡{/unicode}", style="loading_text") + Text("{unicode}╞═══╪══════╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞════▰═════╡{/unicode}", style="loading_text") + Text("{unicode}╞════╪═════╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞═════▰════╡{/unicode}", style="loading_text") + Text("{unicode}╞═════╪════╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞══════▰═══╡{/unicode}", style="loading_text") + Text("{unicode}╞══════╪═══╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞═══════▰══╡{/unicode}", style="loading_text") + Text("{unicode}╞═══════╪══╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞════════▰═╡{/unicode}", style="loading_text") + Text("{unicode}╞════════╪═╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞═════════▰╡{/unicode}", style="loading_text") + Text("{unicode}╞═════════╪╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞═════════▰╡{/unicode}", style="loading_text") + Text("{unicode}╞════════╪═╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞════════▰═╡{/unicode}", style="loading_text") + Text("{unicode}╞═══════╪══╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞═══════▰══╡{/unicode}", style="loading_text") + Text("{unicode}╞══════╪═══╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞══════▰═══╡{/unicode}", style="loading_text") + Text("{unicode}╞═════╪════╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞═════▰════╡{/unicode}", style="loading_text") + Text("{unicode}╞════╪═════╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞════▰═════╡{/unicode}", style="loading_text") + Text("{unicode}╞═══╪══════╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞═══▰══════╡{/unicode}", style="loading_text") + Text("{unicode}╞══╪═══════╡{/unicode}", style="loading_text") pause 0.1 - Text("{unicode}╞══▰═══════╡{/unicode}", style="loading_text") - pause 0.1 - Text("{unicode}╞═▰════════╡{/unicode}", style="loading_text") + Text("{unicode}╞═╪════════╡{/unicode}", style="loading_text") pause 0.1 repeat @@ -186,14 +192,15 @@ label _wardrobe: show loading zorder 1000 # Ensure there's no thread in use before assigning a new one. - while _lock: + while __lock: $ renpy.pause(0.5, hard=True) - $ renpy.invoke_in_thread(preload_wardrobe_assets) + $ __lock = True + $ renpy.invoke_in_thread(preload_wardrobe_assets, get_character_object(states.active_girl)) # Await thread return # Note: renpy.pause must be called from within the main thread - while _lock: + while __lock: $ renpy.pause(0.5, predict=True) hide loading @@ -204,10 +211,10 @@ label _wardrobe: show screen main_room show screen ui_top_bar - $ _game_menu_screen = "save" - $ _skipping = True - $ renpy.stop_predict(_predicted) - $ del _predicted + $ _game_menu_screen = "save" # documented + $ _skipping = True # documented + $ renpy.stop_predict(__predicted) + $ __predicted = None $ renpy.suspend_rollback(False) $ renpy.block_rollback() return @@ -225,40 +232,45 @@ screen wardrobe(xx, yy): use wardrobe_menu(xx, yy) if current_category == "outfits": use wardrobe_outfit_menuitem(20, 50) - elif current_subcategory != None: + elif current_subcategory is not None: use wardrobe_menuitem(20, 50) label wardrobe_menu(): + $ renpy.dynamic( + char_active = get_character_object(states.active_girl), + char_outfit = get_character_outfit(states.active_girl, typ="last"), + ) + $ char_outfit.save() + + $ renpy.dynamic( + wardrobe_subcategories = char_active.wardrobe, + current_category = "head", + ) python: - - char_active = get_character_object(states.active_girl) - char_outfit = get_character_outfit(states.active_girl, type="last") - char_outfit.save() - - wardrobe_subcategories = char_active.wardrobe - if renpy.android: - wardrobe_subcategories.update( { "outfits": { k:char_active.outfits for k in {"load", "save", "delete", "schedule"} } } ) + wardrobe_subcategories.update(outfits=dict.fromkeys(("load", "save", "delete", "schedule"), char_active.outfits)) else: - wardrobe_subcategories.update( { "outfits": { k:char_active.outfits for k in {"load", "save", "delete", "schedule", "import", "export"} } } ) + wardrobe_subcategories.update(outfits=dict.fromkeys(("load", "save", "delete", "schedule", "import", "export"), char_active.outfits)) - # Defaults - current_category = "head" - category_items = set_wardrobe_categories(current_category) - current_subcategory = list(category_items.keys())[0] if category_items else "" - current_item = char_active.get_equipped_wardrobe_item(category_items, current_subcategory) - last_track = renpy.music.get_playing() - rebuild_wardrobe_icons(category_items, current_subcategory) + $ renpy.dynamic( + category_items = set_wardrobe_categories(current_category), + ) + $ renpy.dynamic( + current_subcategory = next(iter(category_items), ""), + ) + $ renpy.dynamic( + current_item = char_active.get_equipped_wardrobe_item(category_items, current_subcategory), + last_track = renpy.music.get_playing(), + ) + $ rebuild_wardrobe_icons(category_items, current_subcategory) if wardrobe_music: play music "music/Spring_In_My_Step.ogg" fadein 1 if_changed + show screen wardrobe(662, 50) + label .after_init: - hide gui_fade - - if not renpy.get_screen("wardrobe"): - show screen wardrobe(662, 50) $ renpy.hide(get_character_tag(states.active_girl)) $ renpy.config.skipping = None $ _game_menu_screen = None @@ -271,12 +283,12 @@ label wardrobe_menu(): # while mixing python and renpy scope # https://github.com/renpy/renpy/issues/959 - $ _choice = ui.interact() + $ renpy.dynamic(__choice = ui.interact()) - if _choice[0] == "category": - if not current_category == _choice[1]: - if wardrobe_check_category(_choice[1]): - $ current_category = _choice[1] + if __choice[0] == "category": + if not current_category == __choice[1]: + if wardrobe_check_category(__choice[1]): + $ current_category = __choice[1] $ category_items = set_wardrobe_categories(current_category) $ current_subcategory = list(category_items.keys())[0] if category_items else "" @@ -292,13 +304,13 @@ label wardrobe_menu(): elif current_category == "piercings & tattoos": $ char_active.strip("top", "bottom", "robe", "accessory", "bra", "panties", "stockings", "gloves") else: - $ wardrobe_react("category_fail", _choice[1]) + $ wardrobe_react("category_fail", __choice[1]) $ rebuild_wardrobe_icons(category_items, current_subcategory) - elif _choice[0] == "subcategory": - if not current_subcategory == _choice[1]: - $ current_subcategory = _choice[1] + elif __choice[0] == "subcategory": + if not current_subcategory == __choice[1]: + $ current_subcategory = __choice[1] if current_category == "outfits": $ char_active.clear_outfit_button_cache() @@ -307,19 +319,19 @@ label wardrobe_menu(): $ rebuild_wardrobe_icons(category_items, current_subcategory) - elif _choice[0] == "equip": + elif __choice[0] == "equip": ### CLOTHING ### - if isinstance(_choice[1], DollCloth): - if _choice[1].type == "hair" and char_active.is_equipped_item(_choice[1]): + if isinstance(__choice[1], DollCloth): + if __choice[1].type == "hair" and char_active.is_equipped_item(__choice[1]): play sound "sounds/fail.ogg" $ renpy.notify("Hair cannot be removed.") else: - if char_active.is_equipped_item(_choice[1]): + if char_active.is_equipped_item(__choice[1]): # UNEQUIP - if wardrobe_check_unequip(_choice[1]): - $ wardrobe_react("unequip", _choice[1]) - $ char_active.unequip(_choice[1]) + if wardrobe_check_unequip(__choice[1]): + $ wardrobe_react("unequip", __choice[1]) + $ char_active.unequip(__choice[1]) if current_item: $ current_item.clear_button_cache() @@ -327,61 +339,61 @@ label wardrobe_menu(): $ current_item = None else: - $ wardrobe_react("unequip_fail", _choice[1]) + $ wardrobe_react("unequip_fail", __choice[1]) else: # EQUIP - if wardrobe_check_equip(_choice[1]): - $ wardrobe_react("equip", _choice[1]) + if wardrobe_check_equip(__choice[1]): + $ wardrobe_react("equip", __choice[1]) # Blacklist handling - if not wardrobe_check_blacklist(_choice[1]): - $ wardrobe_react("blacklist", _choice[1]) + if not wardrobe_check_blacklist(__choice[1]): + $ wardrobe_react("blacklist", __choice[1]) - $ _choice[1].mark_as_seen() - $ char_active.equip(_choice[1]) + $ __choice[1].mark_as_seen() + $ char_active.equip(__choice[1]) if current_item: $ current_item.clear_button_cache() $ current_item.build_button() - $ current_item = _choice[1] + $ current_item = __choice[1] $ current_item.clear_button_cache() $ current_item.build_button() - if wardrobe_fallback_required(_choice[1]): + if wardrobe_fallback_required(__choice[1]): # Has to be called regardless of player preference. - $ renpy.call(get_character_response(states.active_girl, "fallback"), _choice[1]) + $ renpy.call(get_character_response(states.active_girl, "fallback"), __choice[1]) else: - $ wardrobe_react("equip_fail", _choice[1]) + $ wardrobe_react("equip_fail", __choice[1]) ### OUTFIT ### - elif isinstance(_choice[1], DollOutfit): + elif isinstance(__choice[1], DollOutfit): $ _outfit = char_active.create_outfit(temp=True) - if _outfit == _choice[1]: + if _outfit == __choice[1]: $ renpy.notify("Load failed: Outfit already equipped.") else: - if wardrobe_check_equip_outfit(_choice[1]): + if wardrobe_check_equip_outfit(__choice[1]): if not _outfit.exists(): $ _confirmed = wardrobe_suppress_warnings or renpy.call_screen("confirm", "Discard unsaved changes and load this outfit?") if _confirmed: - $ wardrobe_react("equip_outfit", _choice[1]) - $ char_active.equip(_choice[1]) - $ current_item = _choice[1] + $ wardrobe_react("equip_outfit", __choice[1]) + $ char_active.equip(__choice[1]) + $ current_item = __choice[1] else: $ renpy.notify("Load failed: Cancelled by user.") else: - $ wardrobe_react("equip_outfit", _choice[1]) - $ char_active.equip(_choice[1]) - $ current_item = _choice[1] + $ wardrobe_react("equip_outfit", __choice[1]) + $ char_active.equip(__choice[1]) + $ current_item = __choice[1] else: - $ wardrobe_react("equip_outfit_fail", _choice[1]) + $ wardrobe_react("equip_outfit_fail", __choice[1]) - elif _choice[0] == "setcolor": + elif __choice[0] == "setcolor": python: - current_item.set_color(_choice[1]) + current_item.set_color(__choice[1]) current_item.clear_button_cache() current_item.build_button() @@ -400,21 +412,21 @@ label wardrobe_menu(): if rebuild: outfit.is_stale() - elif _choice[0] == "touch": - if wardrobe_check_touch(_choice[1]): - $ wardrobe_react("touch", _choice[1]) + elif __choice[0] == "touch": + if wardrobe_check_touch(__choice[1]): + $ wardrobe_react("touch", __choice[1]) else: - $ wardrobe_react("touch_fail", _choice[1]) + $ wardrobe_react("touch_fail", __choice[1]) - elif _choice[0] == "addoutfit": + elif __choice[0] == "addoutfit": python: _outfit = char_active.create_outfit(temp=True) if _outfit.exists(): renpy.notify("Save failed: Outfit already exists.") else: - if _choice[1]: - _index = char_active.outfits.index(_choice[1]) + if __choice[1]: + _index = char_active.outfits.index(__choice[1]) _confirmed = wardrobe_suppress_warnings or renpy.call_screen("confirm", "Overwrite this outfit?") if _confirmed: @@ -440,32 +452,33 @@ label wardrobe_menu(): category_items = set_wardrobe_categories(current_category) - elif _choice[0] == "deloutfit": + elif __choice[0] == "deloutfit": python: _confirmed = wardrobe_suppress_warnings or renpy.call_screen("confirm", "Delete this outfit?") if _confirmed: - _choice[1].delete() + __choice[1].delete() category_items = set_wardrobe_categories(current_category) renpy.notify("Outfit Deleted.") - elif _choice[0] == "export": + elif __choice[0] == "export": python: filename = renpy.input("Save as:", datetime.datetime.now().strftime("%d %b %Y-%H%M%S")) if not filename.endswith(".png"): filename += ".png" - _choice[1].export_data(filename) + __choice[1].export_data(filename) achievements.unlock("export") - elif _choice[0] == "import": - $ _outfit = char_active.import_outfit(_choice[1]) + elif __choice[0] == "import": + $ _outfit = char_active.import_outfit(__choice[1]) + $ category_items = set_wardrobe_categories(current_category) - elif _choice[0] == "schedule": - $ renpy.call_screen("wardrobe_schedule_menuitem", _choice[1]) + elif __choice[0] == "schedule": + $ renpy.call_screen("wardrobe_schedule_menuitem", __choice[1]) - elif _choice == "music": + elif __choice == "music": python: if wardrobe_music: wardrobe_music = False @@ -474,7 +487,7 @@ label wardrobe_menu(): wardrobe_music = True renpy.music.play("music/Spring_In_My_Step.ogg", fadein=1) - elif _choice == "randomise": + elif __choice == "randomise": python: _confirmed = False @@ -554,7 +567,7 @@ label wardrobe_menu(): current_item.clear_button_cache() current_item.build_button(current_subcategory) - else: #_choice == "Close": + else: #__choice == "Close": python: _confirmed = False @@ -626,22 +639,16 @@ screen wardrobe_menu(xx, yy): yspacing 18 for i, category in enumerate(wardrobe_categories): - if wardrobe_check_category(category): - $ icon = Fixed(icon_bg, Transform("interface/wardrobe/icons/categories/{}/{}.webp".format(states.active_girl, category), zoom=0.45, anchor=(0.5, 0.5), align=(0.5, 0.5)), icon_frame) - else: - $ icon = Fixed(icon_bg, Transform("interface/wardrobe/icons/categories/{}/{}.webp".format(states.active_girl, category), zoom=0.45, anchor=(0.5, 0.5), align=(0.5, 0.5), matrixcolor=SaturationMatrix(0.0)), icon_frame) - $ icon_xoffset = -18 if (i % 2) == 0 else 18 - button: focus_mask None xysize (72, 72) - background lock_wardrobe_icon(icon) + background lock_wardrobe_icon(Fixed(icon_bg, Transform(f"interface/wardrobe/icons/categories/{states.active_girl}/{category}.webp", zoom=0.45, anchor=(0.5, 0.5), align=(0.5, 0.5), matrixcolor=(IdentityMatrix() if wardrobe_check_category(category) else SaturationMatrix(0.0))), icon_frame)) activate_sound "sounds/scroll.ogg" tooltip category sensitive (not bool(DollThread._count)) action Return(["category", category]) if current_category == category: - xoffset icon_xoffset + xoffset (-18 if (i % 2) == 0 else 18) # Outfits and Studio hbox: @@ -677,7 +684,6 @@ screen wardrobe_menu(xx, yy): corner1 (184, 218) corner2 (924, 1200) zoom 0.45 - anchor (0.5, 1.0) align (0.5, 1.0) # Easter Egg (Headpats, boobs, pussy) @@ -766,7 +772,7 @@ screen wardrobe_menuitem(xx, yy): pos (12, 108) for subcategory in category_items.keys(): - $ icon = lock_wardrobe_icon("interface/wardrobe/icons/{}.webp".format(subcategory)) + $ icon = lock_wardrobe_icon(f"interface/wardrobe/icons/{subcategory}.webp") button: focus_mask None @@ -819,7 +825,7 @@ screen wardrobe_outfit_menuitem(xx, yy): pos (8, 108) for subcategory in category_items.keys(): - $ icon = lock_wardrobe_icon("interface/wardrobe/icons/{}.webp".format(subcategory)) + $ icon = lock_wardrobe_icon(f"interface/wardrobe/icons/{subcategory}.webp") $ action = Return(["subcategory", subcategory]) if subcategory == "schedule" and not get_character_scheduling(states.active_girl): @@ -892,7 +898,7 @@ screen wardrobe_schedule_menuitem(item): spacing 0 for i in wardrobe_outfit_schedule: $ boolean = "" if item.schedule[i] else "Not " - $ caption = "{}worn during the {}".format(boolean, i) if i in ("day", "night") else "{}worn in {} weather".format(boolean, i) + $ caption = f"{boolean}worn during the {i}" if i in ("day", "night") else f"{boolean}worn in {i} weather" textbutton i: style gui.theme("dropdown") tooltip caption