From c0b15af7193be2aeb9819852521671e9fbc6a87e Mon Sep 17 00:00:00 2001 From: overdev Date: Mon, 11 Oct 2021 18:42:23 +0200 Subject: [PATCH] custom distances and meshes for placeable housing objects + script properties that the player can make potions for quests, overhaul of the placement system in the players house (with controller compatibility), fixed the spelling of the "Hay Bale", fixed the texture on the gramophone + volume message --- gavrant player housing overhaul.esp | Bin 0 -> 64227 bytes meshes/clutter/bones/deerskullhornsstatic.nif | 3 + .../candles/candlehornchandelier02.nif | 4 +- meshes/clutter/candles/candlehornfloor01.nif | 3 + meshes/clutter/candles/candlehorntable01.nif | 2 +- meshes/clutter/common/commoncrate01.nif | 2 +- meshes/clutter/common/commoncrate02.nif | 2 +- meshes/clutter/glazedcandlesstatic02.nif | 2 +- .../ruins/ruinsfloorcandlelampmidon.nif | 4 +- .../ruins/ruinsfloorcandlelampsmon.nif | 4 +- meshes/clutter/shrines/shrinebase.nif | 4 +- .../architecture/undercity/gramophone.nif | 4 +- .../phasmalistworkstation_placeable.nif | 3 + .../animaltrophies/mountedantlers.nif | 4 +- .../animaltrophies/wallmountedbear01.nif | 4 +- .../animaltrophies/wallmountedelkfemale02.nif | 4 +- .../animaltrophies/wallmountedelkmale02.nif | 4 +- .../animaltrophies/wallmountedgoat01.nif | 4 +- .../animaltrophies/wallmountedhorker01.nif | 4 +- .../animaltrophies/wallmountedmudcrab01.nif | 4 +- .../animaltrophies/wallmountedsabrecat01.nif | 4 +- .../animaltrophies/wallmountedskeever01.nif | 4 +- .../wallmountedslaughterfish01.nif | 4 +- .../animaltrophies/wallmountedwolf01.nif | 4 +- .../playerhousing/ceramic/ruinspot01.nif | 4 +- .../playerhousing/ceramic/ruinspot02.nif | 4 +- .../playerhousing/ceramic/ruinspot03.nif | 4 +- .../playerhousing/ceramic/ruinspot04.nif | 4 +- .../playerhousing/ceramic/ruinspot05.nif | 4 +- .../playerhousing/ceramic/ruinspot06.nif | 4 +- .../furniture/gramophone_placeable.nif | 3 + .../lights/glazedcandles01static.nif | 2 +- .../lights/impwallsconcecandle01c.nif | 2 +- .../lights/ruinscandlesconceon01.nif | 2 +- .../lights/silvercandlestick01.nif | 4 +- .../lights/silvercandlestick02.nif | 4 +- .../playerhousing/miscellaneous/haybale01.nif | 4 +- .../miscellaneous/meadbarrel01.nif | 2 +- .../miscellaneous/nobledivider01.nif | 4 +- .../miscellaneous/noblewallshelf01.nif | 4 +- .../miscellaneous/noblewallshelf02.nif | 4 +- .../playerhousing/plants/basketflowers.nif | 4 +- .../playerhousing/plants/basketthistles.nif | 4 +- .../plants/planter01deathbell.nif | 4 +- .../plants/planter01dragontongue.nif | 4 +- .../playerhousing/plants/planter01juniper.nif | 4 +- .../plants/planter01snowberries.nif | 4 +- .../plants/planter01vinemaple.nif | 4 +- .../plants/planter02nightshade.nif | 4 +- .../plants/planter03lavender.nif | 4 +- .../plants/planter04vinemaple.nif | 4 +- .../plants/planterkettleferns.nif | 4 +- .../plants/ruinsflowervase01.nif | 4 +- meshes/enderal/playerhousing/rugs/rug01.nif | 2 +- meshes/enderal/playerhousing/rugs/rug02.nif | 2 +- meshes/enderal/playerhousing/rugs/rug03.nif | 2 +- meshes/enderal/playerhousing/rugs/rug04.nif | 2 +- meshes/enderal/playerhousing/rugs/rug05.nif | 2 +- meshes/enderal/playerhousing/rugs/rug06.nif | 2 +- meshes/enderal/playerhousing/rugs/rug07.nif | 2 +- meshes/enderal/playerhousing/rugs/rug08.nif | 2 +- meshes/enderal/playerhousing/rugs/rug09.nif | 2 +- meshes/enderal/playerhousing/rugs/rug10.nif | 2 +- meshes/enderal/playerhousing/rugs/rug11.nif | 2 +- meshes/enderal/playerhousing/rugs/rug12.nif | 2 +- meshes/enderal/playerhousing/rugs/rug13.nif | 2 +- meshes/enderal/playerhousing/rugs/rug14.nif | 2 +- meshes/enderal/playerhousing/rugs/rug15.nif | 2 +- .../enderal/playerhousing/rugs/ruground01.nif | 4 +- .../enderal/playerhousing/rugs/ruground02.nif | 4 +- .../enderal/playerhousing/rugs/ruground03.nif | 4 +- .../enderal/playerhousing/rugs/ruground04.nif | 4 +- .../playerhousing/wallbasket/wallbasket01.nif | 4 +- .../playerhousing/wallbasket/wallbasket03.nif | 4 +- .../playerhousing/wallbasket/wallbasket04.nif | 4 +- .../wallbasket/wallbaskethex01.nif | 4 +- .../wallbasket/wallbaskethex04.nif | 4 +- meshes/furniture/orcfurniture/orcshelf01.nif | 2 +- scripts/_00e_gaboff_grammophonesc.pex | Bin 1319 -> 3361 bytes scripts/_00e_game_playerhouse_boardsc.pex | Bin 5975 -> 5967 bytes scripts/_00e_placeablegrammophonplay.pex | Bin 2206 -> 3750 bytes scripts/_00e_playerhousing_furniture.pex | Bin 1717 -> 2083 bytes scripts/_00e_playerhousing_furnitureitem.pex | Bin 2787 -> 2219 bytes scripts/_00e_playerhousing_lightfurniture.pex | Bin 1029 -> 787 bytes .../_00e_playerhousing_mannequincontrol.pex | Bin 6544 -> 5623 bytes .../_00e_playerhousingcurrentomanipulate.pex | Bin 2273 -> 10263 bytes .../_00e_playerhousingcurrentotranslation.pex | Bin 1300 -> 3929 bytes scripts/_00e_playerhousingmaster.pex | Bin 5987 -> 12641 bytes scripts/_00e_playerhousingtutorial.pex | Bin 1758 -> 621 bytes scripts/_00e_playersetupscript.pex | Bin 21993 -> 22558 bytes scripts/_00e_questfunctions.pex | Bin 40939 -> 41097 bytes scripts/source/_00e_gaboff_grammophonesc.psc | 132 ++++ .../source/_00e_game_playerhouse_boardsc.psc | 186 +++++ .../source/_00e_placeablegrammophonplay.psc | 161 +++++ .../source/_00e_playerhousing_furniture.psc | 48 ++ .../_00e_playerhousing_furnitureitem.psc | 43 ++ .../_00e_playerhousing_lightfurniture.psc | 23 + .../_00e_playerhousing_mannequincontrol.psc | 231 ++++++ .../_00e_playerhousingcurrentomanipulate.psc | 336 +++++++++ .../_00e_playerhousingcurrentotranslation.psc | 117 ++++ scripts/source/_00e_playerhousingmaster.psc | 554 +++++++++++++++ scripts/source/_00e_playerhousingtutorial.psc | 14 + scripts/source/_00e_playersetupscript.psc | 663 ++++++++++++++++++ 103 files changed, 2642 insertions(+), 122 deletions(-) create mode 100644 gavrant player housing overhaul.esp create mode 100644 meshes/clutter/bones/deerskullhornsstatic.nif create mode 100644 meshes/clutter/candles/candlehornfloor01.nif create mode 100644 meshes/enderal/forgottenstories/phasmalist/phasmalistworkstation_placeable.nif create mode 100644 meshes/enderal/playerhousing/furniture/gramophone_placeable.nif create mode 100644 scripts/source/_00e_gaboff_grammophonesc.psc create mode 100644 scripts/source/_00e_game_playerhouse_boardsc.psc create mode 100644 scripts/source/_00e_placeablegrammophonplay.psc create mode 100644 scripts/source/_00e_playerhousing_furniture.psc create mode 100644 scripts/source/_00e_playerhousing_furnitureitem.psc create mode 100644 scripts/source/_00e_playerhousing_lightfurniture.psc create mode 100644 scripts/source/_00e_playerhousing_mannequincontrol.psc create mode 100644 scripts/source/_00e_playerhousingcurrentomanipulate.psc create mode 100644 scripts/source/_00e_playerhousingcurrentotranslation.psc create mode 100644 scripts/source/_00e_playerhousingmaster.psc create mode 100644 scripts/source/_00e_playerhousingtutorial.psc create mode 100644 scripts/source/_00e_playersetupscript.psc diff --git a/gavrant player housing overhaul.esp b/gavrant player housing overhaul.esp new file mode 100644 index 0000000000000000000000000000000000000000..48e32180232b16cee7990597cf378f7469da8bf3 GIT binary patch literal 64227 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 literal 0 HcmV?d00001 diff --git a/meshes/clutter/bones/deerskullhornsstatic.nif b/meshes/clutter/bones/deerskullhornsstatic.nif new file mode 100644 index 00000000..c2be82e2 --- /dev/null +++ b/meshes/clutter/bones/deerskullhornsstatic.nif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71cbb24a6d2960723460c4a5252542a821acb1d3a0f70c2c34874ddf12a41317 +size 21126 diff --git a/meshes/clutter/candles/candlehornchandelier02.nif b/meshes/clutter/candles/candlehornchandelier02.nif index fde67402..8dc9b99d 100644 --- a/meshes/clutter/candles/candlehornchandelier02.nif +++ b/meshes/clutter/candles/candlehornchandelier02.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f7a4299b8668c38db5c15fe8e8e73c4e062e6152141a3fa8d876feecef9d7cf -size 204715 +oid sha256:51c59f9bca26934c82e9c6e77a6cd645b44c3d5b5ff7b474432c2a9d0d21af57 +size 110553 diff --git a/meshes/clutter/candles/candlehornfloor01.nif b/meshes/clutter/candles/candlehornfloor01.nif new file mode 100644 index 00000000..66a577b2 --- /dev/null +++ b/meshes/clutter/candles/candlehornfloor01.nif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d067451bb3b5770a6cc4ed4a6a81a5fb1aec4a0a1e7ee45c7c4a04b818a625d0 +size 70451 diff --git a/meshes/clutter/candles/candlehorntable01.nif b/meshes/clutter/candles/candlehorntable01.nif index 2517c49e..c207b4db 100644 --- a/meshes/clutter/candles/candlehorntable01.nif +++ b/meshes/clutter/candles/candlehorntable01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0400b1539f93bd92b4d57427baefff0020d9dccd6966d3c72f96845af4fcbd60 +oid sha256:8e1c1e1945280266118e7428a833fc01a1e7bec1ee468c43ec4e73cdea8e33b7 size 22598 diff --git a/meshes/clutter/common/commoncrate01.nif b/meshes/clutter/common/commoncrate01.nif index 721e28fa..47c9cf45 100644 --- a/meshes/clutter/common/commoncrate01.nif +++ b/meshes/clutter/common/commoncrate01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f33afa0983e7160d06c6fdd34ea970a4e15dc4e9d6f3b5059045855d3e09fcc +oid sha256:0c49e03f150498acc893e6a7f7bd46a45695dc2f3b2a21243f6bb42790c31266 size 29179 diff --git a/meshes/clutter/common/commoncrate02.nif b/meshes/clutter/common/commoncrate02.nif index cb229593..e2e953a8 100644 --- a/meshes/clutter/common/commoncrate02.nif +++ b/meshes/clutter/common/commoncrate02.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3712f2bcf8d03f1bf138bedd3837c8e82eab930cd72a964f2d76564348d3446d +oid sha256:b3396a288d3ea2503943759ca68d0531a500e560e18c0027d4ea4dd2b4efba52 size 29336 diff --git a/meshes/clutter/glazedcandlesstatic02.nif b/meshes/clutter/glazedcandlesstatic02.nif index 7e5c8600..72b34638 100644 --- a/meshes/clutter/glazedcandlesstatic02.nif +++ b/meshes/clutter/glazedcandlesstatic02.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62362d2e5b14ca342cc415354c41103ac980cc1a3089e8d1d53ac67fe49e77d5 +oid sha256:415b81560a38a59f53d5b60f7c2af4116751e140aded49b78ec71f71d0dc103d size 38537 diff --git a/meshes/clutter/ruins/ruinsfloorcandlelampmidon.nif b/meshes/clutter/ruins/ruinsfloorcandlelampmidon.nif index 755c378b..ddafe995 100644 --- a/meshes/clutter/ruins/ruinsfloorcandlelampmidon.nif +++ b/meshes/clutter/ruins/ruinsfloorcandlelampmidon.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8594d77f5bd1de888a16889702df76f32380998e3b523b114e1bca1d99d3218 -size 45703 +oid sha256:e3b4faa6e7463467775df4925857ce1adaab42f582628143214b80c4bcae56cd +size 45749 diff --git a/meshes/clutter/ruins/ruinsfloorcandlelampsmon.nif b/meshes/clutter/ruins/ruinsfloorcandlelampsmon.nif index b1f5d07a..64c6ff87 100644 --- a/meshes/clutter/ruins/ruinsfloorcandlelampsmon.nif +++ b/meshes/clutter/ruins/ruinsfloorcandlelampsmon.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab3a5c2d9818157930879309502a0f84f566f1ac96594ccf6c31ad6ccc4c5d25 -size 43438 +oid sha256:cf974a15ca13097d4c52b290a9f67543b56ef432d2c7f089b594fa4b20d68d63 +size 43484 diff --git a/meshes/clutter/shrines/shrinebase.nif b/meshes/clutter/shrines/shrinebase.nif index a4510dd4..b2b571d3 100644 --- a/meshes/clutter/shrines/shrinebase.nif +++ b/meshes/clutter/shrines/shrinebase.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:898dcdbeb40f988d288e840e77f200faad4a6bc4fba9faba3a0b9243c5285fff -size 68708 +oid sha256:43efa6c573e55fcb0a526d47b15d23261d58c90398bddaedf44a7560cee9f1ab +size 68754 diff --git a/meshes/enderal/architecture/undercity/gramophone.nif b/meshes/enderal/architecture/undercity/gramophone.nif index 71554c38..a612e364 100644 --- a/meshes/enderal/architecture/undercity/gramophone.nif +++ b/meshes/enderal/architecture/undercity/gramophone.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d73fca940cc7703a7dfc8eb9417b7167f3b33b4fd88dae72605782abbebaf2bc -size 90471 +oid sha256:0e7f5a6066a0c2e52785ea9dfebfcecb638e340fba7a01e23e7e386999c3f83d +size 81790 diff --git a/meshes/enderal/forgottenstories/phasmalist/phasmalistworkstation_placeable.nif b/meshes/enderal/forgottenstories/phasmalist/phasmalistworkstation_placeable.nif new file mode 100644 index 00000000..06a58a6b --- /dev/null +++ b/meshes/enderal/forgottenstories/phasmalist/phasmalistworkstation_placeable.nif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc95f4df8df708a43f4d6ca9b7acd2a36e7019a37df0f009006cd18250bd508f +size 358465 diff --git a/meshes/enderal/playerhousing/animaltrophies/mountedantlers.nif b/meshes/enderal/playerhousing/animaltrophies/mountedantlers.nif index 120b58b7..0bbf8c74 100644 --- a/meshes/enderal/playerhousing/animaltrophies/mountedantlers.nif +++ b/meshes/enderal/playerhousing/animaltrophies/mountedantlers.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ab0e91d5a6f297e064bbdf1cc52afe06bc8eba8bfb32cf8c613b68c9254ba80 -size 39314 +oid sha256:f83ea781b74a47140b4262bb377907d571e0a0eeb126b04e985b311cd3647389 +size 47592 diff --git a/meshes/enderal/playerhousing/animaltrophies/wallmountedbear01.nif b/meshes/enderal/playerhousing/animaltrophies/wallmountedbear01.nif index 93dc63cc..a0dd67f9 100644 --- a/meshes/enderal/playerhousing/animaltrophies/wallmountedbear01.nif +++ b/meshes/enderal/playerhousing/animaltrophies/wallmountedbear01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d24ed9fd23085d4e95be56dd2b16f6d6d394b515d16d0c1aff7f44c0ab1fbadd -size 58397 +oid sha256:e1499edfd3cf480c7841750000a5cc7b8c6485d555aff72aa27f362cf656b190 +size 64571 diff --git a/meshes/enderal/playerhousing/animaltrophies/wallmountedelkfemale02.nif b/meshes/enderal/playerhousing/animaltrophies/wallmountedelkfemale02.nif index dfd7869d..fa81d438 100644 --- a/meshes/enderal/playerhousing/animaltrophies/wallmountedelkfemale02.nif +++ b/meshes/enderal/playerhousing/animaltrophies/wallmountedelkfemale02.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:820095123be6ae566421883af770791cafd1f8a053ae3c2685bb4f32b68dde17 -size 49644 +oid sha256:37441eb2814c4583a9ba05bf16d19c3cdb8d35eb0d63d54623da8d04d473a969 +size 52146 diff --git a/meshes/enderal/playerhousing/animaltrophies/wallmountedelkmale02.nif b/meshes/enderal/playerhousing/animaltrophies/wallmountedelkmale02.nif index 6121821b..1c7bd1ee 100644 --- a/meshes/enderal/playerhousing/animaltrophies/wallmountedelkmale02.nif +++ b/meshes/enderal/playerhousing/animaltrophies/wallmountedelkmale02.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0efd2b363482bd54faee2ee1cd82c1970cdf6ed472cb1d095ba7e55ebacb145 -size 83835 +oid sha256:b9411b627eaf4d9c37c5785a64a04283a49e4cd1e836d4768075d4024582b308 +size 85559 diff --git a/meshes/enderal/playerhousing/animaltrophies/wallmountedgoat01.nif b/meshes/enderal/playerhousing/animaltrophies/wallmountedgoat01.nif index 65e1c597..629c0981 100644 --- a/meshes/enderal/playerhousing/animaltrophies/wallmountedgoat01.nif +++ b/meshes/enderal/playerhousing/animaltrophies/wallmountedgoat01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c0a670fca4e807cf909afc546b7fb89cfb191d45f95ea9ef468fe56023f7411a -size 81804 +oid sha256:64248c2afaa5a0d52e360a928decde6067650e72c16e65468ecf6153c686f497 +size 84821 diff --git a/meshes/enderal/playerhousing/animaltrophies/wallmountedhorker01.nif b/meshes/enderal/playerhousing/animaltrophies/wallmountedhorker01.nif index 2c244c0a..202394b2 100644 --- a/meshes/enderal/playerhousing/animaltrophies/wallmountedhorker01.nif +++ b/meshes/enderal/playerhousing/animaltrophies/wallmountedhorker01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f40adde6738c17cd6a1d71dfb5618d1e725dc5e58678a44c4d081d3c4c9d02d -size 59561 +oid sha256:fbd846eec39806a6d844d244719ca676c4544e6aedb2759246868a47d22596cd +size 62253 diff --git a/meshes/enderal/playerhousing/animaltrophies/wallmountedmudcrab01.nif b/meshes/enderal/playerhousing/animaltrophies/wallmountedmudcrab01.nif index 81905298..4a66fcce 100644 --- a/meshes/enderal/playerhousing/animaltrophies/wallmountedmudcrab01.nif +++ b/meshes/enderal/playerhousing/animaltrophies/wallmountedmudcrab01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed04287dadc71bd0cec077de1e49a434c6937b2b3232aae811891c9637d50ac3 -size 112623 +oid sha256:91e1443f888916c65a0f2f6f1a69f95447ad304cf271d1f80bc2d118a19ea7af +size 118702 diff --git a/meshes/enderal/playerhousing/animaltrophies/wallmountedsabrecat01.nif b/meshes/enderal/playerhousing/animaltrophies/wallmountedsabrecat01.nif index 953c3baf..55b502b6 100644 --- a/meshes/enderal/playerhousing/animaltrophies/wallmountedsabrecat01.nif +++ b/meshes/enderal/playerhousing/animaltrophies/wallmountedsabrecat01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4eb1d8df14a066d70d0036edbe63cc218c3074218a9b9fd87fbfddfc650ddf0 -size 95871 +oid sha256:2f1fab5d9df9e5ede6c77bbc70707a3b272dde2e87920efde7ff61acea4d51f2 +size 98389 diff --git a/meshes/enderal/playerhousing/animaltrophies/wallmountedskeever01.nif b/meshes/enderal/playerhousing/animaltrophies/wallmountedskeever01.nif index b58e8ef2..b7c6ce72 100644 --- a/meshes/enderal/playerhousing/animaltrophies/wallmountedskeever01.nif +++ b/meshes/enderal/playerhousing/animaltrophies/wallmountedskeever01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ecbc70f2b6fc5ca7d67afe7fbf0dd1a1a1049916c4278ebe122f56417e1938a4 -size 72279 +oid sha256:cc7612d1125a560b1c274c5684970b276954086d16ec439ff8b1e36b819b1bf6 +size 76673 diff --git a/meshes/enderal/playerhousing/animaltrophies/wallmountedslaughterfish01.nif b/meshes/enderal/playerhousing/animaltrophies/wallmountedslaughterfish01.nif index e5af12ae..a351ccd4 100644 --- a/meshes/enderal/playerhousing/animaltrophies/wallmountedslaughterfish01.nif +++ b/meshes/enderal/playerhousing/animaltrophies/wallmountedslaughterfish01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42efdb9dac6d5f6b999c129359f100970a189f208fc219af98250c90af3b4616 -size 85082 +oid sha256:d28156b5337655d7c9b57ed12a5ec4ac3300ff65a3ff41c1c60bab0f77c518ab +size 92228 diff --git a/meshes/enderal/playerhousing/animaltrophies/wallmountedwolf01.nif b/meshes/enderal/playerhousing/animaltrophies/wallmountedwolf01.nif index 5ad66adb..4decd82f 100644 --- a/meshes/enderal/playerhousing/animaltrophies/wallmountedwolf01.nif +++ b/meshes/enderal/playerhousing/animaltrophies/wallmountedwolf01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dcc7e401ce674500e455602f6d99c2ded737a31354614d0cc0a73093faac7ff2 -size 69797 +oid sha256:1de80376e4157ded4275e7d2ba75fc20fd4d526f63d7dcdfcf351f37ec95eff6 +size 74135 diff --git a/meshes/enderal/playerhousing/ceramic/ruinspot01.nif b/meshes/enderal/playerhousing/ceramic/ruinspot01.nif index 83340351..6b9d5822 100644 --- a/meshes/enderal/playerhousing/ceramic/ruinspot01.nif +++ b/meshes/enderal/playerhousing/ceramic/ruinspot01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7983a91e3a54c41134b272a267dccffc9ca0445d07d4f6b19f6b6a049bea4685 -size 23671 +oid sha256:79587c9f0580ac9789292c536bd2606d46ade01249e56dc39cd389e019ad5aef +size 23717 diff --git a/meshes/enderal/playerhousing/ceramic/ruinspot02.nif b/meshes/enderal/playerhousing/ceramic/ruinspot02.nif index 05a9e798..35732929 100644 --- a/meshes/enderal/playerhousing/ceramic/ruinspot02.nif +++ b/meshes/enderal/playerhousing/ceramic/ruinspot02.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74f3df04d68c60b9ea583dbd45d24592e1986eb37ec8b34caebf81e0e0d24be4 -size 23767 +oid sha256:9e4b4b1add71050c76de6a1238192c073ff3062902c3777d34fdd31e17785c60 +size 23813 diff --git a/meshes/enderal/playerhousing/ceramic/ruinspot03.nif b/meshes/enderal/playerhousing/ceramic/ruinspot03.nif index 242b5393..a2dc32ab 100644 --- a/meshes/enderal/playerhousing/ceramic/ruinspot03.nif +++ b/meshes/enderal/playerhousing/ceramic/ruinspot03.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d63fd80f710901f33c8b84c69369ec4c1cf32704b53b8e2545331c9f01253908 -size 26387 +oid sha256:18cf1e6b08528403ce0a0df52725085d8e7dbd67cef7c9c097b5bf9411412c37 +size 26433 diff --git a/meshes/enderal/playerhousing/ceramic/ruinspot04.nif b/meshes/enderal/playerhousing/ceramic/ruinspot04.nif index 42f2e69e..1eab0e2e 100644 --- a/meshes/enderal/playerhousing/ceramic/ruinspot04.nif +++ b/meshes/enderal/playerhousing/ceramic/ruinspot04.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:808882b402161584d4b90fcc7824c639e1513dcc48923331155d243c605d3aaf -size 26515 +oid sha256:4164a4992e6466f278862d0dd1569c4b5b4a46ed3c64fbf8e372212ff3818b69 +size 26561 diff --git a/meshes/enderal/playerhousing/ceramic/ruinspot05.nif b/meshes/enderal/playerhousing/ceramic/ruinspot05.nif index 43ca46e3..b055c8d6 100644 --- a/meshes/enderal/playerhousing/ceramic/ruinspot05.nif +++ b/meshes/enderal/playerhousing/ceramic/ruinspot05.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c066caeec397d17a96184b744bbd0fe798b928d926baa48a2c49b2e6903211c8 -size 34311 +oid sha256:b2d3a5107c0874ff01196a7d0389643e4473c0c955aea19d4cfc70e7e54d67e0 +size 34357 diff --git a/meshes/enderal/playerhousing/ceramic/ruinspot06.nif b/meshes/enderal/playerhousing/ceramic/ruinspot06.nif index 578bf81c..e0d31af3 100644 --- a/meshes/enderal/playerhousing/ceramic/ruinspot06.nif +++ b/meshes/enderal/playerhousing/ceramic/ruinspot06.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bad73835746e2ee3652ce7ca48af029baf5e29ce51bd080898aa129670b2e1fb -size 31863 +oid sha256:e7080dd6f54373a1f1c217996b34c7b6ab51a08e2dc21534368a564de1c083b0 +size 31909 diff --git a/meshes/enderal/playerhousing/furniture/gramophone_placeable.nif b/meshes/enderal/playerhousing/furniture/gramophone_placeable.nif new file mode 100644 index 00000000..22ea1820 --- /dev/null +++ b/meshes/enderal/playerhousing/furniture/gramophone_placeable.nif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:455a36e7f2bdd0e4914a9366741e258e0e1e47fc14dcce64963a5cb4ad7d7ec9 +size 81791 diff --git a/meshes/enderal/playerhousing/lights/glazedcandles01static.nif b/meshes/enderal/playerhousing/lights/glazedcandles01static.nif index dd887f26..76dc9a63 100644 --- a/meshes/enderal/playerhousing/lights/glazedcandles01static.nif +++ b/meshes/enderal/playerhousing/lights/glazedcandles01static.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e69d0423040a584f1f985fa3ce62dc5772fb3deec76ffe5c8d5cc555b04c894 +oid sha256:931bc467bdf5a8507cae9b9b237f109d3d873bf84ab6284831c04c54b0e77662 size 22735 diff --git a/meshes/enderal/playerhousing/lights/impwallsconcecandle01c.nif b/meshes/enderal/playerhousing/lights/impwallsconcecandle01c.nif index 2bac4126..6fc15f54 100644 --- a/meshes/enderal/playerhousing/lights/impwallsconcecandle01c.nif +++ b/meshes/enderal/playerhousing/lights/impwallsconcecandle01c.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5103a4eef463431257fa2a5c9550da782440550e32c60ff35631836a486521ff +oid sha256:67ab95873693c755c734090a86fbce429fb466903fe12f3a22fda76c66482c4e size 38740 diff --git a/meshes/enderal/playerhousing/lights/ruinscandlesconceon01.nif b/meshes/enderal/playerhousing/lights/ruinscandlesconceon01.nif index 7ddf17e8..39da23c9 100644 --- a/meshes/enderal/playerhousing/lights/ruinscandlesconceon01.nif +++ b/meshes/enderal/playerhousing/lights/ruinscandlesconceon01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f1ea68a65f7714ab233b0095cb6adac69f2bebe6fb65ba8edbfcd2d49b0ae86 +oid sha256:be5986875da55289a57fd5526bb35562b5bb14166ca3633016e427175337f241 size 55244 diff --git a/meshes/enderal/playerhousing/lights/silvercandlestick01.nif b/meshes/enderal/playerhousing/lights/silvercandlestick01.nif index ff0a1750..b199127b 100644 --- a/meshes/enderal/playerhousing/lights/silvercandlestick01.nif +++ b/meshes/enderal/playerhousing/lights/silvercandlestick01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eaf875993841a75402ef4de04b22c6e11ef90877517770fc4d1084f4603b2da3 -size 45264 +oid sha256:6c4d6a1225508e0dbe0f274ee4683a36eefebd6592b16835c00f715d2d1d503e +size 45310 diff --git a/meshes/enderal/playerhousing/lights/silvercandlestick02.nif b/meshes/enderal/playerhousing/lights/silvercandlestick02.nif index 48a7a3a8..7b16f451 100644 --- a/meshes/enderal/playerhousing/lights/silvercandlestick02.nif +++ b/meshes/enderal/playerhousing/lights/silvercandlestick02.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d050b95a73ebb28058dc0484c62f7a3013a427797d21e59ad07417acba8f033 -size 114365 +oid sha256:402388b6823a2484fa6d13d10ddfac86e345f6b20cf76f1db40f89f43ebce966 +size 114411 diff --git a/meshes/enderal/playerhousing/miscellaneous/haybale01.nif b/meshes/enderal/playerhousing/miscellaneous/haybale01.nif index 2175f315..4e23b85c 100644 --- a/meshes/enderal/playerhousing/miscellaneous/haybale01.nif +++ b/meshes/enderal/playerhousing/miscellaneous/haybale01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33264c2351f19f50d1c32c357e67791062a4457faf2416a7d984ba467559b100 -size 34618 +oid sha256:34a638cff9f9ffc9f1363394da4e79ef596372b8d920ed014f8c9fc8f3a6454f +size 34475 diff --git a/meshes/enderal/playerhousing/miscellaneous/meadbarrel01.nif b/meshes/enderal/playerhousing/miscellaneous/meadbarrel01.nif index 24ab88b9..19cc6677 100644 --- a/meshes/enderal/playerhousing/miscellaneous/meadbarrel01.nif +++ b/meshes/enderal/playerhousing/miscellaneous/meadbarrel01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:623aa02438817305d058ef4e7539fdf0530ebc86e3cd3e8104971cf3bc6ece08 +oid sha256:f43e806716f71aca52df80df0fc52a393476e877fda8dd331f9ff29796e65763 size 20259 diff --git a/meshes/enderal/playerhousing/miscellaneous/nobledivider01.nif b/meshes/enderal/playerhousing/miscellaneous/nobledivider01.nif index 61c203f6..3182bbe0 100644 --- a/meshes/enderal/playerhousing/miscellaneous/nobledivider01.nif +++ b/meshes/enderal/playerhousing/miscellaneous/nobledivider01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c8e5c331a28a16609410143e4a157a42c92f5ab79fea5752cf33650bc6c1203 -size 50078 +oid sha256:c2b3580029fca6d473024b4956dcd6d9e8d618d90d3ff25d2415f72a564c621f +size 50094 diff --git a/meshes/enderal/playerhousing/miscellaneous/noblewallshelf01.nif b/meshes/enderal/playerhousing/miscellaneous/noblewallshelf01.nif index fa3e3415..f96241cd 100644 --- a/meshes/enderal/playerhousing/miscellaneous/noblewallshelf01.nif +++ b/meshes/enderal/playerhousing/miscellaneous/noblewallshelf01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f808aa716efe3b1acfc98e9cc4e5a96da594f8151a26ece385d1d00eec317c13 -size 11682 +oid sha256:8d52f351e9918a788b9a7ec557e802bc95f3603abc8dc98223255625f45153f7 +size 11720 diff --git a/meshes/enderal/playerhousing/miscellaneous/noblewallshelf02.nif b/meshes/enderal/playerhousing/miscellaneous/noblewallshelf02.nif index 13328cfb..1c8200e7 100644 --- a/meshes/enderal/playerhousing/miscellaneous/noblewallshelf02.nif +++ b/meshes/enderal/playerhousing/miscellaneous/noblewallshelf02.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8b5150868fe979842fc367ff9a98bf2ae1033b8edf8d9093763fb216c995e9c -size 13575 +oid sha256:a672cbdd72ccf8317d484eb9578217221b42796698d0cd3463fc2a892105a395 +size 13595 diff --git a/meshes/enderal/playerhousing/plants/basketflowers.nif b/meshes/enderal/playerhousing/plants/basketflowers.nif index 82bf6741..bb8c8104 100644 --- a/meshes/enderal/playerhousing/plants/basketflowers.nif +++ b/meshes/enderal/playerhousing/plants/basketflowers.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:afbe296205122b6f36e6f3ebdf97ebf73b1cb5f68386864886097f40400faf89 -size 119683 +oid sha256:b40fc18aad49b802c077897087b677d9220c7c88b1d37003e23a59d550b590c9 +size 119729 diff --git a/meshes/enderal/playerhousing/plants/basketthistles.nif b/meshes/enderal/playerhousing/plants/basketthistles.nif index bb076200..0c343c9c 100644 --- a/meshes/enderal/playerhousing/plants/basketthistles.nif +++ b/meshes/enderal/playerhousing/plants/basketthistles.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d47577ae4510dd3c957add5564acd7cabeca5a7978bc576195c99817d6a73677 -size 142953 +oid sha256:606d414c474fcebd94da86a09dc53b193502888efa59b4f5234ef6d60f886397 +size 142999 diff --git a/meshes/enderal/playerhousing/plants/planter01deathbell.nif b/meshes/enderal/playerhousing/plants/planter01deathbell.nif index 34a2c48b..ad7b179e 100644 --- a/meshes/enderal/playerhousing/plants/planter01deathbell.nif +++ b/meshes/enderal/playerhousing/plants/planter01deathbell.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:050608bed7b9b379048adaaa27243c981dc39a90c4eeed6cecfd10b9db9b6dbb -size 70931 +oid sha256:0812033790bc68b78ce58e8e53eadd89e35ef33bf71bc85ff7167c1697964776 +size 70746 diff --git a/meshes/enderal/playerhousing/plants/planter01dragontongue.nif b/meshes/enderal/playerhousing/plants/planter01dragontongue.nif index d3dcc33d..46f360b7 100644 --- a/meshes/enderal/playerhousing/plants/planter01dragontongue.nif +++ b/meshes/enderal/playerhousing/plants/planter01dragontongue.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e024cc1d440939aac37160b7b2b8a88c1e053a06c19308dc32b4c78f1b9e6d1f -size 79253 +oid sha256:e03ef1e97e7b8685f0f73ac7c681a97276ca818f889e5507db9dc97c31a44d7a +size 79068 diff --git a/meshes/enderal/playerhousing/plants/planter01juniper.nif b/meshes/enderal/playerhousing/plants/planter01juniper.nif index b1601e43..ff2eadb0 100644 --- a/meshes/enderal/playerhousing/plants/planter01juniper.nif +++ b/meshes/enderal/playerhousing/plants/planter01juniper.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:201a143a9fb30c452f6e024621719b8ddea7a9623455c37f6678b934373d8fcd -size 81311 +oid sha256:2dc0a6f7d1c6b090279d076c88e926d158c3cabac5dda4d36fe5c29fb2c0fafd +size 81126 diff --git a/meshes/enderal/playerhousing/plants/planter01snowberries.nif b/meshes/enderal/playerhousing/plants/planter01snowberries.nif index b46dd82c..7d480e6d 100644 --- a/meshes/enderal/playerhousing/plants/planter01snowberries.nif +++ b/meshes/enderal/playerhousing/plants/planter01snowberries.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e540081ea2648b2a7f63d0724160e76923973016665f9735ece4502c9f4bac3 -size 148398 +oid sha256:14194be0a61c2d0f9371a5d9203fe2ff06bbc46e0492ff1338485b68f8992a24 +size 148213 diff --git a/meshes/enderal/playerhousing/plants/planter01vinemaple.nif b/meshes/enderal/playerhousing/plants/planter01vinemaple.nif index 80263a4f..0d7bbf28 100644 --- a/meshes/enderal/playerhousing/plants/planter01vinemaple.nif +++ b/meshes/enderal/playerhousing/plants/planter01vinemaple.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e4c4e7957c06a651b102154d3185d834b910534b9a553f5c18290fbfdd5ff6d -size 65556 +oid sha256:72555975422333d59db3f007a73d7634573544c2c4276306d68dfe3ae8c06082 +size 65371 diff --git a/meshes/enderal/playerhousing/plants/planter02nightshade.nif b/meshes/enderal/playerhousing/plants/planter02nightshade.nif index 3915e103..073dcb6e 100644 --- a/meshes/enderal/playerhousing/plants/planter02nightshade.nif +++ b/meshes/enderal/playerhousing/plants/planter02nightshade.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1901f5aa9ba6a6e91f8214cc18748ed7fc14a7707d1cfe13702378026b9699d5 -size 56662 +oid sha256:bf3cf308ed410ac030b0d39a21cf5423c0af7d54f4526bd93d322dd9fdc8d2c5 +size 56566 diff --git a/meshes/enderal/playerhousing/plants/planter03lavender.nif b/meshes/enderal/playerhousing/plants/planter03lavender.nif index bc7572ac..c252259b 100644 --- a/meshes/enderal/playerhousing/plants/planter03lavender.nif +++ b/meshes/enderal/playerhousing/plants/planter03lavender.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:892b71960b59c331999bf320319efe0e4c6523356dd723a8bc0095d59a06e1cd -size 145244 +oid sha256:7926bf1deb2e7d68168dd99f7edf8be17a8f165f36f56b9feb0a7c7f9bbfccf0 +size 145146 diff --git a/meshes/enderal/playerhousing/plants/planter04vinemaple.nif b/meshes/enderal/playerhousing/plants/planter04vinemaple.nif index ff9d334d..9567dd77 100644 --- a/meshes/enderal/playerhousing/plants/planter04vinemaple.nif +++ b/meshes/enderal/playerhousing/plants/planter04vinemaple.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d91569da84036f8284fcd0e0bd332553af6636671be58ede73a12a492044d92f -size 75934 +oid sha256:3ed8a88998aa2619e07097bbbb1d3c7c66463678d934833cb10442a912fd6f36 +size 75885 diff --git a/meshes/enderal/playerhousing/plants/planterkettleferns.nif b/meshes/enderal/playerhousing/plants/planterkettleferns.nif index fc8f8f22..82980139 100644 --- a/meshes/enderal/playerhousing/plants/planterkettleferns.nif +++ b/meshes/enderal/playerhousing/plants/planterkettleferns.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97548a8c28f050ceb9179ea052b4e4ee25771e46bcea490e7dd3697b43800aef -size 51352 +oid sha256:c305572146f337a4f081b32f016d6558e66841120056f52d2a55a2fc0ec3eaec +size 53814 diff --git a/meshes/enderal/playerhousing/plants/ruinsflowervase01.nif b/meshes/enderal/playerhousing/plants/ruinsflowervase01.nif index 7ab62904..f83afedd 100644 --- a/meshes/enderal/playerhousing/plants/ruinsflowervase01.nif +++ b/meshes/enderal/playerhousing/plants/ruinsflowervase01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e84784271ffff713998b1fec41e1852cb290149a8a1faec77d531dfb34e4c3a -size 100260 +oid sha256:9d916bca00d358ccb2fd51d3c6c0910fca88a557cd798a73105e0c1b434600d1 +size 101999 diff --git a/meshes/enderal/playerhousing/rugs/rug01.nif b/meshes/enderal/playerhousing/rugs/rug01.nif index 2810dc5a..a54f5d8e 100644 --- a/meshes/enderal/playerhousing/rugs/rug01.nif +++ b/meshes/enderal/playerhousing/rugs/rug01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3972a0086c620214878654c36f8ed39b8153e05b527e4d4009af765754ac061 +oid sha256:6819891fd500cffc2ccb9fd80056bca661de7bae2dd2e272b712fa379c10895f size 1841 diff --git a/meshes/enderal/playerhousing/rugs/rug02.nif b/meshes/enderal/playerhousing/rugs/rug02.nif index d2f30820..25a490e6 100644 --- a/meshes/enderal/playerhousing/rugs/rug02.nif +++ b/meshes/enderal/playerhousing/rugs/rug02.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de78c8cf9378d44cc74e1a589baaa927075fc0faa0e7f79396113adfa13400a9 +oid sha256:718115e13c856ecbc838f6c055e1aa8f8a3f0d38d2166f50bfd9a9461d7934d9 size 1965 diff --git a/meshes/enderal/playerhousing/rugs/rug03.nif b/meshes/enderal/playerhousing/rugs/rug03.nif index 769e0851..353629cb 100644 --- a/meshes/enderal/playerhousing/rugs/rug03.nif +++ b/meshes/enderal/playerhousing/rugs/rug03.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a77e3dedebc400c5036ffd2b532c88351d752fa8f281640fdf8859f3325d7cb +oid sha256:44ae42b15a6400a95e809566efde082b9f4573b96477fb5ec19049efadb29ddc size 4244 diff --git a/meshes/enderal/playerhousing/rugs/rug04.nif b/meshes/enderal/playerhousing/rugs/rug04.nif index a6707dff..7f9f06a7 100644 --- a/meshes/enderal/playerhousing/rugs/rug04.nif +++ b/meshes/enderal/playerhousing/rugs/rug04.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:acd0b05e17464d4e24d477bb9450c8ac84c1ff3e67119d330620f61cb1383441 +oid sha256:2df6a8dd6e168efadd404cbcbf4831428a1c237be12b42aad321193ac1b85c53 size 4571 diff --git a/meshes/enderal/playerhousing/rugs/rug05.nif b/meshes/enderal/playerhousing/rugs/rug05.nif index 2dc4b6d6..fc98d426 100644 --- a/meshes/enderal/playerhousing/rugs/rug05.nif +++ b/meshes/enderal/playerhousing/rugs/rug05.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:10b09e913f6971bdc017a877aac1fc5a3e67faa7fe81eb3aa10362484e8733ce +oid sha256:7758681df056cedb26bddc52a8a7150499d32e5625cd3a3c57fc59eb946f7d04 size 5774 diff --git a/meshes/enderal/playerhousing/rugs/rug06.nif b/meshes/enderal/playerhousing/rugs/rug06.nif index 63497fc2..4de20ab6 100644 --- a/meshes/enderal/playerhousing/rugs/rug06.nif +++ b/meshes/enderal/playerhousing/rugs/rug06.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1536b97767ca17e556e93ec40adc6de7374bfcf5315937610188fb38d7cb144f +oid sha256:7edfd0c46a600e6321dbf1f1142ed6fd35a369a41133fb86919e527dd000bb37 size 4455 diff --git a/meshes/enderal/playerhousing/rugs/rug07.nif b/meshes/enderal/playerhousing/rugs/rug07.nif index 5816b93d..766312bd 100644 --- a/meshes/enderal/playerhousing/rugs/rug07.nif +++ b/meshes/enderal/playerhousing/rugs/rug07.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ab25d678d002f9faa25cf30c7c22c000bbdeac864568ece6fb6115c6d5b325e +oid sha256:b357d2a9c4fd93b19bfac18578e94c3a57098649de25a2508051bb151bb347cf size 5914 diff --git a/meshes/enderal/playerhousing/rugs/rug08.nif b/meshes/enderal/playerhousing/rugs/rug08.nif index 4d188856..a8ffad11 100644 --- a/meshes/enderal/playerhousing/rugs/rug08.nif +++ b/meshes/enderal/playerhousing/rugs/rug08.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93bea4cc857ef2ac4701e539ad3066e5fd9d140eb92eb85419aecc32b2f16f84 +oid sha256:7c2ec58e2d49404b90bdfd9930a1a483ca72e02a41ca12d02ec92c093c34edce size 2425 diff --git a/meshes/enderal/playerhousing/rugs/rug09.nif b/meshes/enderal/playerhousing/rugs/rug09.nif index 6fc3c1d8..9fd4d3c8 100644 --- a/meshes/enderal/playerhousing/rugs/rug09.nif +++ b/meshes/enderal/playerhousing/rugs/rug09.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8fec2acd8a078c519219717dd944472094cbb4bd7ba851e92077a227e21d7d69 +oid sha256:792f01b69f259c5ea8f50d5036af0a5a7b7b62c57659f1788d7d3614746717cf size 2889 diff --git a/meshes/enderal/playerhousing/rugs/rug10.nif b/meshes/enderal/playerhousing/rugs/rug10.nif index 90491730..4108bd5f 100644 --- a/meshes/enderal/playerhousing/rugs/rug10.nif +++ b/meshes/enderal/playerhousing/rugs/rug10.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6188ace1f76ccdddc920d6322dcc9724a407d363405ea0721f341ac24c877b40 +oid sha256:bf8894a10c355bbc023ffe4dcd7ed25683626c4f39f48dd3dce1dfbe13334927 size 2889 diff --git a/meshes/enderal/playerhousing/rugs/rug11.nif b/meshes/enderal/playerhousing/rugs/rug11.nif index 3bbb86d4..cbad3a82 100644 --- a/meshes/enderal/playerhousing/rugs/rug11.nif +++ b/meshes/enderal/playerhousing/rugs/rug11.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be07c76bf5128111d6f4d669d7c3dcabad8d2a82e2b0547eead8a206b0a82f89 +oid sha256:d8674b04eabdf31faf28a6162b48f80e03dda40919ac058be733ac93c7430875 size 5914 diff --git a/meshes/enderal/playerhousing/rugs/rug12.nif b/meshes/enderal/playerhousing/rugs/rug12.nif index 9bcda827..e9f9326f 100644 --- a/meshes/enderal/playerhousing/rugs/rug12.nif +++ b/meshes/enderal/playerhousing/rugs/rug12.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c6fa3289b2b3a404ec516f60e055f02f8d8823c174e00cd82f10c19bae4af93 +oid sha256:13c7782ec66a1a0165a48752f62acbe6aa67f9396b79513f7623baf3b97b0fb0 size 5978 diff --git a/meshes/enderal/playerhousing/rugs/rug13.nif b/meshes/enderal/playerhousing/rugs/rug13.nif index f2c911c2..95688719 100644 --- a/meshes/enderal/playerhousing/rugs/rug13.nif +++ b/meshes/enderal/playerhousing/rugs/rug13.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fdd302fe631f9d40402720b82c451eb012be8845602e766e81888cfcca26ec88 +oid sha256:154a69bf04e4d445ecbd94bef5591fa49284d9a29cf1a5b266b88f9a2d410312 size 1925 diff --git a/meshes/enderal/playerhousing/rugs/rug14.nif b/meshes/enderal/playerhousing/rugs/rug14.nif index d9c7e1e7..37724567 100644 --- a/meshes/enderal/playerhousing/rugs/rug14.nif +++ b/meshes/enderal/playerhousing/rugs/rug14.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2eea16bf2f52496812e9728d0505e96e6fbb3317f17bc53f04b40758d2207aff +oid sha256:5de176cc068bd288dfe3842f9af1aac5e518b9c3f1bd125fb2919459f979ad54 size 2757 diff --git a/meshes/enderal/playerhousing/rugs/rug15.nif b/meshes/enderal/playerhousing/rugs/rug15.nif index e29aca9d..5cb31ab3 100644 --- a/meshes/enderal/playerhousing/rugs/rug15.nif +++ b/meshes/enderal/playerhousing/rugs/rug15.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1f860e91a31af6269de176fb3bb1ed7998a56542f2ef3d028205062e5d97865 +oid sha256:f391ba6824b0b02f9b29d1257fded5f997a0aea72e21dd26f451ac9d992dd63f size 1925 diff --git a/meshes/enderal/playerhousing/rugs/ruground01.nif b/meshes/enderal/playerhousing/rugs/ruground01.nif index a9e1642b..a0cdee1c 100644 --- a/meshes/enderal/playerhousing/rugs/ruground01.nif +++ b/meshes/enderal/playerhousing/rugs/ruground01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e018ff3e389025499af8eca1537e6c512b3b19adb69f599d4c5e9e3e63483cf3 -size 4379 +oid sha256:ae7f6e2683e62a72282687c90ec76bd0f4cdee09ad08e1db210b1d73346c4298 +size 4672 diff --git a/meshes/enderal/playerhousing/rugs/ruground02.nif b/meshes/enderal/playerhousing/rugs/ruground02.nif index 47a0675b..5ebdce4f 100644 --- a/meshes/enderal/playerhousing/rugs/ruground02.nif +++ b/meshes/enderal/playerhousing/rugs/ruground02.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a72f84a4846b2642e0743f3964aade25f81e4359add4bfade597b78c145ef2e -size 4379 +oid sha256:c7b4cdfccfbc145d455fb67cb5fc9c02a3c7980fee5aa82a4323a2c5fcc6d413 +size 4672 diff --git a/meshes/enderal/playerhousing/rugs/ruground03.nif b/meshes/enderal/playerhousing/rugs/ruground03.nif index 691a5185..e65bcf07 100644 --- a/meshes/enderal/playerhousing/rugs/ruground03.nif +++ b/meshes/enderal/playerhousing/rugs/ruground03.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c88130465659726ae4da5e3e3e73a2377d88b2543c546e0ddca60c5e97f5e8a -size 4560 +oid sha256:662d507186b1daadea2f8c7b5aabe230f30c845672e637ee481d53f16e494c40 +size 4853 diff --git a/meshes/enderal/playerhousing/rugs/ruground04.nif b/meshes/enderal/playerhousing/rugs/ruground04.nif index 3684dfb9..02336ced 100644 --- a/meshes/enderal/playerhousing/rugs/ruground04.nif +++ b/meshes/enderal/playerhousing/rugs/ruground04.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0cc94ef9089f176962efe326bec58ef4eb44b5179107665e6c6dc84b5db6b718 -size 4372 +oid sha256:b281aa1e72b703585f9fcff415cbb1bbbc6468e2f1adb4bba999ffded01e10fd +size 4669 diff --git a/meshes/enderal/playerhousing/wallbasket/wallbasket01.nif b/meshes/enderal/playerhousing/wallbasket/wallbasket01.nif index 824f854f..ca571968 100644 --- a/meshes/enderal/playerhousing/wallbasket/wallbasket01.nif +++ b/meshes/enderal/playerhousing/wallbasket/wallbasket01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9f70d9d6dffa38c13dbeff623ac48770aeb867b8af36fb6734b254522459e64 -size 16611 +oid sha256:c0c0a8add7ed862036dc6fb318779c2f009ef45f798d7924241264bef3cb51db +size 16657 diff --git a/meshes/enderal/playerhousing/wallbasket/wallbasket03.nif b/meshes/enderal/playerhousing/wallbasket/wallbasket03.nif index 4727331a..23b35a64 100644 --- a/meshes/enderal/playerhousing/wallbasket/wallbasket03.nif +++ b/meshes/enderal/playerhousing/wallbasket/wallbasket03.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e05258e6c91771efb65d03c2c4f48deddc331727e6bb9cfc379d919663e1a6ab -size 18455 +oid sha256:f4e4183f39a49a03da31c1c8a0474277e48ed391d459047a6db03042d2f632b4 +size 18501 diff --git a/meshes/enderal/playerhousing/wallbasket/wallbasket04.nif b/meshes/enderal/playerhousing/wallbasket/wallbasket04.nif index f6fcefe9..fad58ab4 100644 --- a/meshes/enderal/playerhousing/wallbasket/wallbasket04.nif +++ b/meshes/enderal/playerhousing/wallbasket/wallbasket04.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7077e4d9e6b13f49c8cf56fc7f5e0ecd33afdbc467ab4b792ed235df59740d03 -size 16611 +oid sha256:68bf78763a9916b169814f0ab7fe2867eb6b10928815d6b852ee3ce1c245c338 +size 16657 diff --git a/meshes/enderal/playerhousing/wallbasket/wallbaskethex01.nif b/meshes/enderal/playerhousing/wallbasket/wallbaskethex01.nif index da38038d..d80d4dec 100644 --- a/meshes/enderal/playerhousing/wallbasket/wallbaskethex01.nif +++ b/meshes/enderal/playerhousing/wallbasket/wallbaskethex01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:768b08d1d60056391f5e31a321b074e095003563fec94df01401fc7f5c144781 -size 9353 +oid sha256:5297d46e73a75ebe1b59adf902918011ec5b00cad338dfae5ef8cb548a47751a +size 9399 diff --git a/meshes/enderal/playerhousing/wallbasket/wallbaskethex04.nif b/meshes/enderal/playerhousing/wallbasket/wallbaskethex04.nif index 67444142..157a58a5 100644 --- a/meshes/enderal/playerhousing/wallbasket/wallbaskethex04.nif +++ b/meshes/enderal/playerhousing/wallbasket/wallbaskethex04.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0958e8b9ded0fa60a102ba23b1107f11ca6ce22daa043964b890e13a9d30231a -size 10240 +oid sha256:b57d839a517654e465a16768d2c097297526a3fa00a26ad1c00b75e7180baf30 +size 10286 diff --git a/meshes/furniture/orcfurniture/orcshelf01.nif b/meshes/furniture/orcfurniture/orcshelf01.nif index 64f5d401..fa9f17b4 100644 --- a/meshes/furniture/orcfurniture/orcshelf01.nif +++ b/meshes/furniture/orcfurniture/orcshelf01.nif @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32bfae2369bd740ef12ba9a69101a89cc7a868adbb204a0f7b0e6796205f6e08 +oid sha256:4cfc908ce41c7acdbbbff75d3e334f0cfe8d579e6fc79faa61dade0581c96c79 size 56366 diff --git a/scripts/_00e_gaboff_grammophonesc.pex b/scripts/_00e_gaboff_grammophonesc.pex index a23385ac79ddbd393627540c72974a0b2e22f272..1160c5a976c19be91fb23b17e1df576d578e9eca 100644 GIT binary patch literal 3361 zcma)7OH&(15bn_vgfPY!2-w&HCw3AWECI$w#Bq2CL3jvD0+Om!DQoQrtu4(cyDKQ) z{I7D&F_-*>9DL3%NL4ENW_DK($0Y2Oc6<8WU-yjuJpJYOaEKV;`SJZ9f6+`Ooz7MA z#w%H?Rr0pcY|2($3SQb=XgO7iuM1ZSOVY?zuC!M!9L;YnEf-ePNAx{SU1|#F$%Et4 z?q+2_cbG5l&_JHMCD(8{4d$gQee$Sbygg_;R+UCK>xMYvdUGNh?IsjUu55YIWZ8b( z-Ng!GS6D733SzzLTIb5^KtUY0Oht_p#D-y;&b~Cvya7MSg4pDZ#=7eo)jGjgNdoQ` z*IZ>T8j3%(h1xe8+z{;+4OOKuE!UF5Xi%(fnI;zq@ai?MxcA>Pnm9e!?_;N!Q_kX0`0U(xJhQcYpLQE0iLKXax;sv+8>S zm?92u)Bu*67!5BaYaaAmoVj(1XR|JEw$cHS35dmjSPF<`8Y}WM%W=8AE$sto=FU0# zG~7Qr5tS>Ambkks9M?dz{WgxFPG0$`%^kPa78pV)9GY7O- zOK`=pbG8i>Cwron(5wdc$2L-`%ZnhpRT@7Q_DAv?>tp+-Np&=W1Zj2KPblTq4L9Xn zSZ=k>9qcS8<;_^imDuu>qsFUdaWjSD)FBf5!aJF&0$bBUso(05H8srMyLvj*WNxMk{UI#O2deC2n&E2*w zR24i`ZQD3_C`~6lWV}(gfD|~89s5j&TI^6u9csBlJ?T&@9qK71io7Y$`7Y`T?#cIb z9d{a|5W{O&lVQ9y5ebMW(G42!SrartpU{+E({u~#HqBruPced@*`75=YJE!g=>e8f zi4zUcLz<@rdQ2I;7HJ7cM|4Cl{Z*z@ zEM+>RUO#9usYpYUsFxAfn6~=32l=G92u0p2+566MhlFl^zdBM^ujnk%2^l~K31|9?}$9v=OOWia=AzBVm5;kctA$!8;5u=P&1rx?#W~Lb3VYK4sj+q8?3e2aBo-tbVwdcWI z?fPbrfD`HA0G$}PDx-~G(N;!TMtA*qgOKRzuJFRB_aGe7XsrRYAtXE=RYmrP9R=sB zzC@P6dEVvF2%|OBrAI8G=`}#Orb>%=<$vv$kGdumE?U(CRY!#)lG0PDn*I%~`>hWn z)J9JzXm3Ie?p6;M7e-G>mkiCw6?BHLpcCuWiBb;GZTmx)$H47i;D*N-C zFcVq@H`4#3IQVg$4@QQPU9|}9qMhI3w+CqU>ENO=Es2(GA3KHQ&U2`4aCU0+#SAql?G*o*-3q{hT80 z33Tx#qdDYKgbg-efGQ%VqRt7DlFrf-lmfwZJ>bj}dxH;AN!cWjG7j-9qq6SRRU4)C z;PBWtRKOf74>80(VRQ?AzeBSAp+j#@lr)NegWLLV6*uWAbfR4hLyTs?^p0c)Ps~;4 e($!`77a{(EBK;S&!nf~$DMsIEQjET1iv2(T)g6KW literal 1319 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 vwbesbb?6zfz7d!t0&reUx literal 5975 zcmb_eTUQ&`72Zb@2(U1Yalpo=2wxM&aU|gzY8w|YHwQ2V1;>}74AOwc3^Ve~2;wwO zoTh7aHEr7Tr9Yy-p%48Ped_8%yH+3j)Tcc4+vm&~2_Y`&%IpQ&XP?f75U=lbI||8(U^^(KcS1Ud65XW^vp#yz=tI^{QW@u7YLT=|aV;Ig}{O z&dt$l8a(hAgm+Av!E#^(CUs7`fveD-Nyk{T&8eE_SV7G*>BK$D-%aUy;Ea_5YnxB@ zEScbP#+>q!xn6V1bgbk$Wh<~;$FQlrVwKCLLp=}Ho|~lrET(5VC6k8o`C@Uxb=Iwo z;@S+mGh_I3=C)~Pvc+w~qr|xD+LX@c*FtJ!&|=LiRSe%OOTIw};^^$NeSE`q*9;pH zE%t%l3E3NhDYX~Jyv=#T+cX0eRw+BVW%|CcVNzE)e|!998Mq_qWMe$^YdK)I|68QqGFad(?P}Z z)7HBBmHwpB`e~a7MLLsBuj?t5E}Oo!;h5#?`%BFoO=_;C)ZP|_9mOuYH*NH;j9tT= zY2Aroq0psfcG+OXrXr+vWdiSD8xQ{f)`j<7o#%Vji{9i_y&>uu?EE=vjDwAZN{ z_x+;5UQh6}=IejOuxlnI$I9hdI7S`Inl!pQa{i7Llqx2N4jrj(qIBTONcvT?#J5>F zjAe&o?xOCoX-=~u$kW8z`W@NfgljlNKei+4yPJ;iDY;a#X7egC3%JkSKi_z}oR zTq6mhUh1SSz%f7y&240i$JfC<1PU|PZqG292t0~P>_fF(cyumX4@ zVU68LZ3?bj1;`0SM<4rFG#^_ynw%y@Jmwg z6@5j&3gOqp@S706rmyL@5`IStzM*gE_Y(d<3cjUp>5n1As6!wJFb3bTKO@47@sqtz zri5|iBqfP5G0Z44BaxFbIY3X*o05QY{R%maWXW$pZ=HpB`JK}OIfe2YqO?MW>AXTN zXy%Lh_$3sB{4VRQD_YK58hKkISGD9mdIvQ2N+eMm*XoOND3BiIc@nN&haMS*B%FD# zzPL!4`eFcu)UVn4P)#WsVVjbO)(tFfs>R!M3l4?ShEQyg1>LAR6=a;bOr!8AWV?h~ zJg*nS^kalC+&PU3?bVBuDAN?Zuk>6&0Y%a-(9i19PS6-45DFMXNk@yTsO{*?S+H>T z#ONN%J^I9epeahA`lSS}j~SW;;XX(o&>Y$zg*Hf0Z@-`if=&s#&wVWtcV8177xV$I zVrK*`3VNtFLDpLW=avLPjXH;|9zpX^BgOOqXCw}`WkHuUTN|BXawm8fLf#m77aDjk zH1W1I@Wz{X&o=RjCi5=peVB*&6Gel&f+JBtB)ayAK!I)A8-W5;$gRB*C_vJOyPQ>o z29Fe>!R#h!4F(rbUkwI#N`qHW29J=ok6`#?{5=8w6o1d?=a^k7x(fwuf{LNvgyqK= z1%g)C8$u`_0T*-?q(@8|1cxCw;~z;5AdeXlV0{82mSBCtq;~8*6LcCU)}&0C`8bHY z`=>S*BG0ncl9Z`y3Vv&uI~=l#aV5oEB-xoiPgh(3F%!L8k=Gb zrx5Ew1W-ElL&ZAw;&7V|iuGy~>(xVJ9sAGWx(-u@CA-0~PZ!>MTJOOw%5+&^^yFA~*4CqqA7r7S;|r&IPTC4ts&M z2W}th06J^f+s5w-Y5OZxTtMBW$Mdtk~TVwyYVZesxP?SE^qnajVa&RWn956ia=qU8P?U`P3)a#Z=E z4Qjwa{e_^Df&!@+)NSCPekS+zO|-2tg%f-Qs>%Ux0QNyauLKQaA>-4o;sZ_|;Hod` doS!#vs=DQOiW?f+u1~PvUkDn~_py{L{s$S7TOR-b diff --git a/scripts/_00e_placeablegrammophonplay.pex b/scripts/_00e_placeablegrammophonplay.pex index f4a59800699c8c86713d9f93b8a2708f67319ffe..52825a0fd3b45e6b44aeeb8ceed534f90df60ed0 100644 GIT binary patch literal 3750 zcmb_d+jbMz8UD95k}MxEU>h8V8rgx6v`sLl07@E=EXg()OR;=t(zU9LXSS_@(H?bX zWR`ETy80Y_hCV|t`xL#%ZQr0b?f36JqXPlTMdx1{{rf*3_x$_l@Bhq9kRUui{`{}M zQn9_hUTZgf+mZIMFE>NG+YNf1K!J4rWiN6lUsiFTynyDawbt|fM)Qm6z59*F>rMIt zU3;H4T+F;UXl-w_cWS$v`&%@*DdSdb$C3)0K^!D#D-L=u`jO|*%zk)2JmoihX{&yZ zat*buyqKmMs_ewx85@{vsDqx%*jz(Z?9h#N0^8lRyOL%aYD4;dIgV|o!^+G_sa2_| ztgd{fPgesaQ%}=Qpjv*m!6&xJDluo=SPh=>SBk5MDl%{w~ z*VA=74E%mqw$JR4@?9B4_Nk=L5{;JUvxWW8R*`nI<(+n#p%;W+e6CdrU9LoY-jkF) z=FrHh1c6UeJ+$N4c3y3}l-X7>tt2MPPREmHvMW^_)fBhT)rKyd`oXd7BMgs;bosd9 zyNQ2OIhW>2CGN5e_iA;ml(n5W2LBuUuNvHGE6>w5B=ltrabf$_(sNVUQ24{?8sI)BBEC$=c=e7f@Uk@A6>f zT5*U@Q!a|ba)^J`@9O_ZDp!VN)q}80g;I$X57B=slKu%juJ;wjHc-X5W5>nlwHG@b z8R6tb#X!$iF%EE)#i%D8@5GaCG16-?spM<3B~yW_Dc9inQpq4QfvU(;PYuYi?Dp=` z)jbfSScZtFg@ApTtjewNNJ1I+L&br}qSFsC+=x#5okF6gr;SH3nop<6E7JjsK#>DnA9hn#HJhK-!kHFs%#B$pR~TjOTX?D)cG z%C1Wmcb+b_WW24A1hy=3I*&P!?LYNp6rUuGh-j_szU)WwzSosaiT!gc=QV{&N~VOh zFvJ#EtxoWorg3K-+J0a1(pjfG2bcKja9)j!E?uncR@=`T&1R#y)!1#X-=W-|>;`8t zEyQ|?+@Zw-6%HFTNNRqJoOEo4ufsH<^wKWV9IjSD69TV`8qMIX5i3QqL<_V;%k(k* z3a~=gH57^AhK8H;Dd2PZjn>Q&W$89x9dK8Z@OLxYCUq$cfAOTz&j0lpuDAMjCO_#@y)fCF#=63`(J@DlI}-~$x(05O1ro8s5G zMyDD5Nux82{zap+cx&WBif|$ETqH|Amn;}t{wq%gZ?@VU=7RyKhi}%)m z$AX#t0GXK&kSPph1bvHPEYK6YpCY+(l3)dsw*kD0Uk#0_MbGPS-L54?YsKDQF8z%~UZEEWaV2fu*vpqG6O%L*JmQH?qR8m-YCArLC=kwUXs& z*&Y^lVuGGc&@_n81+AtdltcsSj-Z=@Drqz@ftpvak{g27^u-2Q;2Vqhu~g==pepm8 z{F%t`s))ewpbiG4bdLqH{Z!D4#4D~&*j~G)FHuZ$4eVV(4Pc4;+8aXw4k*?z8-b<4 zD%99bJsml!WbawA9 zaNW2xVuQ}W>%qtXXmwsyBxKq=Z~@8DQ8A9-cMY!pKedN3To1-DzJDXzozYjwAvWs> zzXdJG1O5B45qJj5_d^Od?~q5IZ=6GJ*(4OP37{Wg=Jb+GY5WKhN4lvnfqLM0pN~l} zCZzYMS!SYtNYt>u%W!2p7-eI3uxKV#%8w=qWgPhew1!DwZZ3j?0%J2wOf>mREiT3z bTKJG!_>hcLkrNub?3gfir88mdTE+RlnErXk literal 2206 zcmah}TT>KA6#jZ|Ttz@4LX2525#=U$i*D2uMpR15rC2miDQcK$cPGwvZ_V^#`IgFC z{#E`)UhL4fOrKYsfe_5HQA&HbGu z2xV}P$Y*KL?do1fE1KS~_OcM8dvTJ~_d01`p|ZENy^TjW|0yp*4?mNpWdb8H@=P1; z#qp;4PA18QF+tctt*N$k5Fxidk z=!_Wc(d8fr-)==HZz+R|MO!`!giG$qCkbN4RqaH+7#k=q&V8(&sI^SW1hDY5uh>bg z>ZTKzdMZsnRT&jo5Bn)QX6l)nkfBDy&qw8@E&52KVgJ8o_iDScs}Ci{TSoV`6tCMh zj}pJ#mMI$#`Wo5otrfz0A>1s4TZM4D5bmIo$>a?xw&0lEmF+k)GJUGk7I`N!pSh__ znj)re0?HdvgfWix>mcb%TkuLd=yLF0sYHiw2c`>?n=ha2zi964GCjfB6eTe3=3z`}VC+E`$nbJdH_bty*OUpE;!lR4|8me2(+ZK!_#Oxi7kX z376fzf-AU+1zh`JU&o@`D_Fs*+c$6nYgp&L$$bmAx$okh+m_NW$m#(e@+YQ*5nxo% z$W{ImV_xES1miemt-u6nyETa^FHGZ%7iPSrDwxVyZ<@t9FURbL#D%n=K^0*Ezb&EWe(I_zvcvZc_CK?0ggZz^$1?D5o0u5XB8GHEip+8x6B+? zXj|pq(rJO~1%tDcZGhPcfklBE47(;UF0f>+jI(ItQ02io&yNXA(_`6jBi@Pt87>oT z#hS`=nsa5IaWJ0!&D^=<5a)<^Yam0aw*?65BEy4v7Bn)z$`LxpV^v_%n^y~Sg+V8) zg0b!h+~pM)x`eMi2lt&~>}AXC(NC}iwWJB-@(|MwHqXO(*NU^^E?s7-Al1R%IOLiq z%+oQ`K9wcVdJ?%jL^bIYai$Teo#A}3j4(D6jV+S_ig#lq2kT^ q$L+Sy^9mX^s>S+-L+%mnm_8V|$NF66Ijs)|tmJz%p%&rf1NavqXPKe^ diff --git a/scripts/_00e_playerhousing_furniture.pex b/scripts/_00e_playerhousing_furniture.pex index 13a7434d92b583fee7c4b7cff0e0afac0ae9de86..7c6430f6c9a019e1105584ce15d8ef4dab0e0a48 100644 GIT binary patch literal 2083 zcmaJ>TT>f16h4b@+>8m3P$+HGkd%arNM+8K9QYq83%D~ANw!*(x-l_^%9)6k$gG&B%SY^Pe=Ou?Qef(M#v(xpZ@skM`Eo?rPey} zojwmcsuu})(K_mdQs`dD%iYMO!k*Mh3Pq*ETJxLJ#>vLvR<*HPIias<>0`S=G5VV8 zrgk)^vDZqg#GD3LmscEa!+u@!fJ&Z_BI+Otmj}RU!d0>@v{2IVDc=$8HkVXtod3*S z{T=ss$fe6^XO9Jr6y2WhXy@GLY>)s`W+A)o2!Q7tIWZxb?r?UkLcdLOwtdixv26kuIIp{@s}mKO zY;L>_COqsCR84DFOhj?k$ zh|vhkHG8A3IDXok7XFureyw{(t+Eszyc&C;X~&6}!_GUG2g>(F1d`-b*tO6d)~ubj zjvEJi$ISDci*^+Ox%^)F5^%B0&{Uj>ow|U4S=ZZ&Vni@WNdN~lUJtzg{g(@%^Cnx)1 zC_@?+ht3fdYEB?Myt99wOm|QSAN893R!L5~M?LA9Q`8+tvj_sa9X_m-RwmM@%U$6K z-exFgT((ikuamo$Z|V@`Ph++nJN+JIKCWa#C?wnww(+omE7kSLMEe?;Q&I8 zCqc&ioVmRaR}euNI_yWacPp`@*m#y2n^eSI-*+OO6iJG2QKpVtK3HB&jpwxdA6E)j zT=HLf0yjbG5XCWxKMEtx^p{Gq%QTDAPH05hDhSRsSL0P~j~ z?9*gsoR;7xjsY{%^ciM8Pi9I$EvS&8`^d&Li@u--0G9z}<}G??(IbqEG)0TP#5~ZI zTPXBEkVFHO*zDCWR3|(p?=w<@Dz51p3x@$xA0%3=d_LQ%#uYrCW#G@ zy?CF_h(#N@nB*xiaBRZDr~(V&RZMsoZ()p$Ib$X2m|(^M?!NbCf literal 1717 zcmaJ>>rNX-7(HW~JA`W?P?8Mg+8gDP1aPEE5XDiXC`AReNmR*NugCV3^^Cha4&qVz zHhql#>Vx!G&y2k$q-u9H+H=l+^UZhL{rl%X{wfwA!0VSke=k8+_x4^?&y(mzr7hdd zv}sl=-PCB;P1SBEi!pwwlSE#&(yl@2^406tc!t&g+eO!-FO|D+ky99ZX`SuCnWl0B z*RPyv<9@~?llp1w^amQBsdJlUx|S$RH?+}Ni*d!Ot&GEPOV{hlU?R4ruAR0fN-+IH z?N=4MA5}x8%ESssr?MRx-RUNgi|9x8Q<63q%IlV*>bXDv(N+?nR>sTJ||UwCcBxEYPY#78#a}R zx5ikx><|8lHSH&Nh!S77bNV<3Pjc`y2S-@vuzlJFcG;-ky4r9YTzXryV+>Ui8@YV< z2}XO>+}|6Z{Q)`{phFBrS8vXrW4e~u_^LmVEGh`Y6+L+`^PIf5R+dJ&t9rm7Ii*l!?nW(q7@ZBwZkC`l- z6Z@@zC{G$~=Se|vctn8PgBJU;8+i&(_czwQD?_|p*F!mBWk zF^mWQUYVf7KA9rCM=VCD`gcRTr+d4+Nf9&LI!miL%B6b(GXnE`%o2?Y%n_~d!88^a z&)^ai7a8pm?&sPRmPuFeIaawI(A`72egug%e1UbY4X#bDEv{{@9loDi68Mrw3M~5q zi6KGZtB(ax`1(`fn;@)&nl1}`E3hlD>S>{fg_)fKzMB?!Aiy|R7m56a+z zh{zrh(fwW!)`B swimpa2qO^sNah8`Ji*Q^;ixa*nAK;6C>0ss$!#^jT$tW5)$&K`KRL^QrT_o{ diff --git a/scripts/_00e_playerhousing_furnitureitem.pex b/scripts/_00e_playerhousing_furnitureitem.pex index 4353001d01d0685d537be6f1af8d4f1a7ef80923..9329857004dd342fd603f68c99f6e47f046ebb95 100644 GIT binary patch literal 2219 zcmb7E-Bu$-5UwGAB!q+wEG&r2$gZ#=EbIacjCv75z#JvP5Z22$OghQ9p*v@$19Io% z_!vHk7arfhJFon@Co_`8)kD{TRDE6lRXu-w|LbqDF)|3}hhP5qlb$!Xw#v=3o_))_ zt{C_(?=+7G9(U!yV-?A+UiN*5QbjHWcLn8-%IDuSYG)fq+dH*`tuy+H%>VO%P~#^| zo=aOYN}mWR0=7`&CBdcba^{t~Ht(<&75Y8fVNn7_dCF+Q5xnI}S8%&W$*$XKF;4l~ z<&Vsfb=GDc;|`-z(Y&&`+aL67X1SDp4;h4?W0tyHj0&M`Tfe!-(U(f-Mn8HC5MUT-*XS``yK(_Zy>HO} zXLN8p;OMkaBeJFG-?-B0G9QxbhqIJI&(H5O$8Ec;W%_!z#yPtQRx5cfJq()CmZhA& z#r!gYmw79=j{B_Frj%s`Vpi}&)^T|tE&kU&DS%L4hF8v2Z<*-~JUk>cT(>f3zpJvF=y?+4 zTCeqwJZ!^OSm3LWc^xv_cK8zdf(q34WPl~2A6{w)~5=84X2YN#D5iQV15iQck5j~})h)ntWr#wo4SQeXyY>64|&fXN{_eWvJ9z!YdYU}orXz|103eNsqxGH{%tEHclBLXH-o ztwW}026fDZ!YnN!=W=x;!_0L%DR0nPG>A3jEjDk^D}!DSXKjqpwyx1wfF9O+nRcKxJPKUF z-YkW4AERAN`3?ROw1@xunEwG5)xxiu{RD=%r=so~v52?3GlxG=lQW^ literal 2787 zcmbtV>2exJ5dKCWA+U^2%SYsR<1@ZwA>a6j5k@kOgdB{WR4OTI1tZuPW~tr9iXSTP zkk`ncJV<`!o7p2mavZBNUB!0y^xZwpU*G@!XKD-rJU{*M+mE=|Tv@3!U-j${((AfI z-%*|B`p{EOF!W?Kkp1O>-$Jh8^mkSpsjq2tmwqX62CS6Q!$l!Hg2NKy0H*iCA zZd;XI71)lFUb$(U8mia3e(#=zsOclm%GxF zswGh_S$$hMgJI7O?46#pqAV=e2wHnxhs+(x#4JZyL04Mz#cX|&@1+V{?*pca#lGza z(rdoAJ)B}@vKdN6*1}tyE*6_xrCP1>-J5Ey8MtLnGC8A^wOcf`WBbxbmA7k+Qngm8 zACO{BVdgkNTbtF57mZPg@t)J^2F6CI+^D`SHMS4hpeN_OO>ahO{Y|}AZM>;hM(t#G z<1S)BM_qkg9u>&-9lsS83DXB6!9u}hq#Qr)W#F3r`2*QO}zT^S9)lY9Y6`lySH8slnIQ`Dz9aFc~6+ z0@7=)+e_$GOnA~C_JUaSA=109*G~jikTtKtJc9AI+!=O|>r3CaJ95YU6+c(%_3e7m zx|a0Q8hGwNdcg-h;UjaK41vR-ELM_D*Khm=#Uy9d+Vgm0*%qAyPV1cvu={_^E7uxv z`3XPA6G6RZkhkB}_J8xg8^Skcr9_bM7KlRY}3`Vca~{ z`1XF1^Q--PaLa6jk=l;jC-HxNZKqncqK%f>te6d3rPF`T1`fCfPf$R)fsqL}-3#tH zr2VeDhjhp8bCY&t5Go>Lx49r?KVIiQAkC#KFs9eLMp7|C{yg#qrlDa5vxEi03BpOj zsR*>*I8eZsgmbVG_zLF}xPXfZT*Bo9uHfqguHsq(H*k}1%fJd&uu8biI41-$+96N+ zB_@$I0c&Os$HL&Ja6Clv4BH$XyE$`A${d}AIg3ohoD8#>4Gm|Q>}gsvUbNvev=|Xn z_<}YfVh&5R6A=qIOIs1K$WlzlM4pIXrBkLl#+!gHj=%-7QYQs23S1&(%70woGVjT~ zvX9H$&$Cj=5oajIx?c^wXnuy(yNc`3wF8!k-(uwotde$9$P3=n_%gqX0#n-A1ev#p z)7h$VR?yrunffcn#W=K@Kp|3G(ERgMH%O$u@Nepj?<49Flscqx&lF#< zB{$i$vjX>x#!VVo=A502M`8^8SHVN`Op5${#L;-n!G6N89*L*;2G3B!8p?RiQJH51 zMKFR#0uP8X)kivlS@Iui{u6;5QSzT?{^4XQXTre{tjf9(HiC#X^sH|fzL|Bw@WVk` z5_n0p3?&@Zju$1JVmCy<#2~({2Lxa BGjad` diff --git a/scripts/_00e_playerhousing_lightfurniture.pex b/scripts/_00e_playerhousing_lightfurniture.pex index a1f8bfe0ce9ced31ca6a0943fa0b8d13c5eeee42..c8eee5b0cb8c25cc9fcaa11f0abd4b3aeff7e08d 100644 GIT binary patch delta 296 zcmZqWn9L^dEBwGcW+nzk1|Ue7-`X@$Ktr0{F|Q;)FEgKk-^Df9JH$Ug*TvYx-_js} zL42Zzj|g{ieqKsuNoIatVh#gaMrKM%YTm>>@)Lh`PxfMR<>Ium^2^Ul4NEMV+{dIa zxrMQi8)kYj1M}paOmg*146KX{Yzz=v85S|HLs^VKnuCE8ydWV6V3cBH-~$TtGYCKh7zBYT7#W0sLd@cf48n{IB0wH9NR}6heC^P^7 delta 565 zcmYjNJ#QL85Pbv30pT+w1`^xYNn@9!rAr(WOGXd{$yjoM4t5NiocFBrA*m3#dRWa2^_6E} zci*0lj)!=)8unCeV2(T!INGp(Gg`-Gy&-u<#khsn1Tps;6i30F}YyGf#t0e91nW>FU?F@Sd)R$agw@&+wV!qwIX? z^X8}^zIciH#Q_2OWV>%-hu|@rDSAxL9gpqysZY&8fn sCBN39420O;5XlG7$(E#)o3-lLb2I40~0yZ;~i0A0&jh5!Hn diff --git a/scripts/_00e_playerhousing_mannequincontrol.pex b/scripts/_00e_playerhousing_mannequincontrol.pex index f895a808241ed725094bf4d80459ce2749597771..8729aeb163e5ad8dc82259f33080ed3a5757ba59 100644 GIT binary patch literal 5623 zcma)8+jA6Y75{Z+CbtQM00~RDBq6N8LgHj5A(sUuK!O26LJ}Ys*wC5jBuysWlb#+} zKo@p_RTmc2^2O4%{2#PjZx3sgmbYCWe6Xxl*Rm{q@KwtPU-0*RJ>NGyP@6R;Gjq=Q z&N<(?cmMa&dmlwAV1R#DKm6y078d<@#=b){Z$R ztZeqIYi3Y6=Ez_22GhQMU5LiVoDttz9n55`3^tEBV++@;w0}W5n9GsZKrgRboFDevZlwPfdg%agXGIGQdvUXeRtt-9B(Ou(<7utWxOgV}7r*f3$` zEq~n2+rI5Oh)c5Q?nXx9`OIP3TD2S>^~1Jf=a);2c-nO`Qqjz!a@l4q4q^<^_0TXd zpgm6{=dYU{qKmG#idxOiqjH#>xhtq27zj!=F*Gbi%e1?nXZ1bD>PkGvO7uL>>X)p| z3nTdvM+Y+MW-LUHyKc7J?cSoWNKc;WxoBqX42ze+)`emviis`OCmeH^RIX&qX=?_t z;jC-=*t}3|09reqb<-=f6^P6tE=32OrL0v(%!E&-i{jJeo*sTa(v)Pyb+!{J)aWE5 z#P1Iihr>iynCJ-+U5OBp=nE6QVWK-sBoRI5IvkRL0r7j09Z@|nz!}J;x;55=`d|_! ztVPSSoV10ilXl)*$g)CtE4zp~PMhl2=`w1jjGE;%TE0x@bP1g)p|hwQa-`ucoO5e_ ztzhN-#e%~Lb)7t#E}6E^{?v|4xpIgjBOHa8?PRQ1QDchX6mzTs=<3o~Qe!Dp1%dV{ zq+g#U6f2=vsTAsEZFOsl_a`mOmJwx3?M@}%s1t1EX`tM8JuTJt$8 zZ74c5A}TRY|1OG}pMR3*@*5SG6gv_JKJ|G1AvW=`X`n(pt_2cNNEC?j za1$B`;v@zhHenkQm?g{+E)%X0ULnjAt`bZ_nvfw_ghj#C!rt(;y@#ANw|&MxP!YAUPl0L;0@d(yeZ)=sZs}Q#1p=>2>7amuOWc1 zLx8w=1Ni?9d=uZ2@DAR=wq_yE6^N9+Luzmq6yy#>F=AMhdJkAy!F{!I9Y@E5{g@i+XP@DKLP zW`n|1}jpD7u_Xd7kWy>P8==~JJ4Gq+BgT=Kr;tI6ODAmkW)Dzof6sMT)vC}9AOYg@fmE{ zV4x+2Z3aGT;Fy7z#Y`KLF(?^F-dFUGz%aO30v1}6{zL&oW zZw%p`A)JNMGP^=}M+j%VwaktX&WdRMPU3t*g(_QtNw%DryeNBgQVtzUJ1I-c@`M{V zs59!z^@Z*fZPZY@Ce-F6FO*0_4$Q?e25nEN3#ZhDOobZvVq?(|)1;Xs%gl%eRVbip zTq*`M%~di(e3qX%;+Ofk!cRNzy(C5$4D^z?x0Uue(Y$(EHYf#V1 z!8aw$Qbi*2N^0&Wf1!-e&B`@;fXi)w?=$kxkS{gdj$}osuvk(MWnSVrxyvCg-!Ve< zt(2NJSI{-qb%noKuB26dHc-zA>CxJX2p25|Y;Gg&%xh$kUUVRUQc>C>nG;hUItmP?p!Rr1B`G+)R9XFYQA z#C`s5411UhJY18;a&%`+xD%&4Uf>R!GA{}7P{@nJ7<doV2&cS;w{#67G;^1IPLbD3zDB8S;C75w?n<9OS&S9d{u_Li z7CztO_kH^Opy>BjUUrX{F}L?ALxK!q_vz_<;kDQ-6gbAQd(*%d4Lm5uQWSjfjC_Qa z9vIjcLvZjw8LDAF?32s(nPvQ?QjozirlPJhul=%tx715Z^yvHVf560CEQ#>lOIlVf z5ocsZP)60~4_UTHWQ(DEn`L~=&lA#(dt`4uR4*@E3_LRMPy{Ge@FRgln$>89hk`0% zY$?4$1tnY8YT)gl-5JAU(XdY>=P@Oo2x~DKd92@osQb7%X6U(~)$m+AlymVfI`BWC Cp~T_< literal 6544 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 U#zOlf3uBSJR7)(fSL3n#5302*?*IS* diff --git a/scripts/_00e_playerhousingcurrentomanipulate.pex b/scripts/_00e_playerhousingcurrentomanipulate.pex index aaa5c14e639b98dd81d8ce89cc67ed58971e545a..4592e6e3cebf736b525ddf5845f7a228458bc092 100644 GIT binary patch literal 10263 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 literal 2273 zcma)6+fo}x5bYI0NazN}fVf(AY)o#T8xoRp!w&c%mBeL8z`VFN(n#85*-`C|ipsy_ z6Y`cH$YG5SJAHjt7k9kW=nPiBl1xNJ{p(-#PQH7$sXR z!LA173g!7vKeM(7%}$hRwdCp_-Oxr=DgK-zk6Bf-sBTfiqC<X5@rkuMZE2UhzoX z?!}b%X3D#y6e5p;p3g4E@XZ)rQW~46Yi4Jh=JX|&3@95=HK1m|fdO>`8U`F1U~j8z zZ>wxmR_N);Flfv67De9`#gK_%7({Sbv8~lxjFjSVEUmZZ^or=(6YV~eOT4J4+g=o0 zWrzl>?R7oY8RbX@>{=(8=fQE%(Ky3{=d9-i%2U6m^M8K-i{cQxLoxaLl3>OF%L6Jwp^*q9ibB**r9j2I;xnv<#V ziT^=Kjqr|93I)hn`9d8Nj*NFe%%U{4k`ONI%Ofg>+GJfBT0&LJuoc)U<_cifVC%3A z*d}ZXwhem#+gWv}=+Hxl7SvV3eFW^#J>}*dT5>2GqYrWlEiL0qGBaR+!93Q?^2&&b z!+)R_XB|od-0_r$t@RkbPDrw-w*&tQWs zyQ|oO3BI-VL&dHsHs;WpdeZM^`AEgB-;w2G#ctfeexle-v&W`Gcv2{SOHOqFwiUpx zpN@NxL`e=6)PdF=+EA;u5DQUQN#GtKhAi!kOeIlSF0L`#a~2@T39*y oI1tV={AXt9Gd<(b=ZHXyF*SpvU#PzV{o6+io`J{gmlL!90Tz}_lmGw# diff --git a/scripts/_00e_playerhousingcurrentotranslation.pex b/scripts/_00e_playerhousingcurrentotranslation.pex index c5a11038976367bbec7fe79c5018206966354d9f..9ba38cb55c3e295700d4cf7ab90c8f4a1c4c95da 100644 GIT binary patch literal 3929 zcma)7TUQ%L60WvJ;wJ7FFODyY0b?A%+zdv$jw3*T0E3KVpyoV?^A`3rkCFL};m&c1lRuGWks=j@)S&Wx(7>(*6Y_5A1T`+r5Qks$moe);)V znky_Vr3=}r`Bu6Wr{P)l)po;mrR|^OUDNierf)g+V%;lJSIYJs+j3}dC!IUYpJW$y zR@Y88m$LLF&HO1h2zveGbSslDq>lGq9HmYRxokSUQ`k;rX<|2(%NO#espH&HDxWzy z)_c^wC;gmn`jUF~9N*DwG$;K=ow{?ChF@~t*c3alj~uf^eMQGESt@0-O0kMnDoL9L zPGwo*NJW{dTBb+w%Zztsx;32jMV*W-$Eng>GTC;7eO-yR3gjwgNxFrvO_$=bT$V-O zV+r+_Ps(La`YHRWD$gmpTXjsI`kKopsw1$gPCjYRIjHTo`?2onq*@ zO4IOUwM_kJ_A^KIH2=0P$xtV!I8;zvZuP5<)u$b+bHFBSj!`rH3Pk{NiWD7>`ho__ zyhEG24ZEnKB>al$C%iY7U#v(EE6Yphk|ulyOPTQMvS^hpSxTUlKxVfs-)LaQa=xqD z-0RqByQF1Z$)slDj=d$XEL*Q;JL9=Pv}>zyGEvkM*z_JRW5dF(R5iKThK}aI7Ip&# z8o5l{zEmloN<~@29Mfny2Uy8c2TmtCgh3_G3CSuLEd|VSz^nw!qkvgwq{>3Q{qiW( zOxu=UH7pyG=)0J#rpL!LiOiv0F}<2u#Sj$UU?wgxmX$zfHDJ~PW+PxWsSAT+URD8s zE3>9<0|0;{)4+Da^PO5aSn-aN4(e6wh?5x)hziyjBwDNEmQ$|#+BR^zG=W0{=$Nab zH7nY?>$pYL4ZtRrwmGX{ibCWsFOyM})oOt78pM$;t z6__sQf=s3&X)2K-2`V?KLW(S=*Yp}+v4HCI)&C)nJi10bf_hbY_;tsqPjh&8QJlL# zDEI&ks(qp%oR)th0W%sZjRm4{^nrf{+z)GqB4G56xM8Gz1A85gIdm6d`~`N+#W+O* zgFjkk{Arc2KxW-&H=8K8rrN%yUPe?vx(etD z(o!g}GOXfJnh-Rq^tPb2CTLvHoxt^n;30j~DZQ(u>z&dmE#2spPD45>D53I03>7S) zyw4ig5QOd9$YK_YAwe_Xj33rmYlc(D^g(OZ*#4G}s`SRxMr=gTJ>JmT_gGu|{G+zG z$#aaN-HEe96-=39frQw&x22=q+{PwSLx#=Nrh@~tr#2m=rt~;9!SDW-JEW=(rem>f zTP%IRwpb|EeMDuq$nAdH!Twh)9Z^7=`#3l$=&_(p1XRWX-eTYdjp421slIBhq@cMr ztvS}3gBG~Ec!PT&2)!Kv_Ys$42uF)B1m{C;0oYnpeiXS{dZ%W;^VL-zjIs1Q75-{GRdL3JUp Sv|3*zoKscxb?f9!SpOG(YldL} literal 1300 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 O(s8JXe{`Ukj{gL&`S8#H diff --git a/scripts/_00e_playerhousingtutorial.pex b/scripts/_00e_playerhousingtutorial.pex index 155fd64cb48cd7614bd01e094e6501a31002054a..2522d8b804bf412d5d8548ddc6c43cb9c085eff9 100644 GIT binary patch delta 357 zcmcb|`<6xESNMT@%uEc73_y@@b=lpC0*cb?j(H{dd71eP{4TD+-XZ=0x-P~h{+0#- z45AZVOcF(cOA?DpLP|^Wi!u{)Jd1-f^2_rWxbpH#ph67X$@zIHnI)O|d5Jj;Y#Es; zDXDo3tbwJe#U%_%{!YREKCU6IdI~ZQc4BlC z_~H6t+(o?|grVCWM2Uja-hT5253q1{3~9$+OS5ZyBQgG38=aYr-GM&JiE&OV!jaiZ zg0MH#J&C4P?Z{Vg=$k;Rw-!3judjl`WCW}4=$|CjLD1_-g^8|Ky}*X~Au8_^85=Bl z-td>$JZ}H9AE7psaqRac<~*;Hizs+3dtO@Qiy-zpp?n_s2WF% zHJV%L#)q;S90aoG#_80?lsw9YR^2rbYsR?eS<*c=uCCQf)ys~ZScV6vd0w_{XtgE# zft@U8zfu$sNs~m%=9g|ai6W^eDs^PMk;B6l%G=6VHoMz^v!!*2Y9}#9^XA38KKbF3 z+<1ywUz#0%C{gLjPSQtXM;q4CO>a@|_9!Rc0C4X&y5yaH5kAzd?=NueqjeuvA(ldgm{F8(j{7aDnw)QktdrISBtJH$aV|reIpW|vu{5TJX=a|xH&YbwbJN7dlTCwJ1*)uO7IPV& zz$MHRTp(1Q6SypJg}b!gNr6S46I~iX$uWKN3@dGg z5-rVbfrh}Xlzv{|j=0embmJhkw)0ju$eo9%sIHlDR3cdV1#7EHfSM{YU0X zG4mQTu5&E5?h1+T3$UweX=WPhxy|;jThR8!IcYD_-U?pfGB5E+O>`|5Swic$NIMC( Xmik+#7uYHeri6`RBzwMbdgR6rFVQN= diff --git a/scripts/_00e_playersetupscript.pex b/scripts/_00e_playersetupscript.pex index 34777c10b6be222f791c9afe926a6d01d4cd281b..38d7c9aaba0aa8e58afcec52e544cf7d7f456ac4 100644 GIT binary patch literal 22558 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 Cc{$+# diff --git a/scripts/_00e_questfunctions.pex b/scripts/_00e_questfunctions.pex index 585a8c67263b3c0d7af15b7270251529cd470013..bd821ba703a5d927db43442452be683eefb8e4d5 100644 GIT binary patch literal 41097 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 E0E1~rm;e9( literal 40939 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 1.0 + fVolume = 0.5 + EndIf + RegisterForModEvent("BardsLoadGame", "OnBardsLoadGame") + iSoundID = musicSound.Play(Self) + Sound.SetInstanceVolume(iSoundID, fVolume) + RegisterForSingleUpdate(_00E_QuestFunctions.AdjustTimePeriodByEngineTimerError(fMusicLength)) + GoToState("") + _00E_PlayerhousingKoppophonVolume.Show(fVolume * 100.0) +EndFunction + +Function ChangeMusicVolume() + If fVolume >= 0.0 && fVolume < 1.0 + fVolume += 0.25 + Else ; fVolume >= 1.0 or something is wrong with fVolume + fVolume = 0.0 + EndIf + Sound.SetInstanceVolume(iSoundID, fVolume) + _00E_PlayerhousingKoppophonVolume.Show(fVolume * 100.0) +EndFunction + +Function StopMusic() + bMusicLocked = True + + GoToState("DoneCleanup") + UnregisterForModEvent("BardsLoadGame") + UnregisterForUpdate() + + If iSoundID != -1 + Sound.StopInstance(iSoundID) + iSoundID = -1 + EndIf + + bMusicLocked = False +EndFunction + +Function TryStopMusic() + If bMusicLocked == False + StopMusic() + Else + RegisterForSingleUpdate(0.5) + EndIf +EndFunction + + +;===================================================================================== +; EVENTS +;===================================================================================== + +Event OnInit() + GoToState("DoneCleanup") +EndEvent + +Event OnActivate(ObjectReference akActionRef) + If akActionRef == PlayerREF && bMusicLocked == False + bMusicLocked = True + + If iSoundID == -1 + If _00E_Gaboff_GrammophoneMSG.Show() == 0 + PlayerREF.RemoveItem(Gold001, 5) + PlayMusic(_00E_MUS_Special_OceansWidowM, MUSIC_LENGTH) + EndIf + Else + ChangeMusicVolume() + EndIf + + bMusicLocked = False + EndIf +EndEvent + +Event OnUpdate() + TryStopMusic() +EndEvent + +Event OnBardsLoadGame(string eventName, string strArg, float numArg, Form sender) + ; Player just loaded a save with the gramophone playing. The sound is dead by now. + TryStopMusic() +EndEvent + +Event OnCellAttach() + TryStopMusic() +EndEvent + +Event OnLoad() + TryStopMusic() +EndEvent + +Event OnCellDetach() + TryStopMusic() +EndEvent + +Event OnUnload() + TryStopMusic() +EndEvent + +State DoneCleanup + Event OnCellAttach() + ; Do nothing + EndEvent + + Event OnLoad() + ; Do nothing + EndEvent + + Event OnCellDetach() + ; Do nothing + EndEvent + + Event OnUnload() + ; Do nothing + EndEvent +EndState diff --git a/scripts/source/_00e_game_playerhouse_boardsc.psc b/scripts/source/_00e_game_playerhouse_boardsc.psc new file mode 100644 index 00000000..5297a5c8 --- /dev/null +++ b/scripts/source/_00e_game_playerhouse_boardsc.psc @@ -0,0 +1,186 @@ +scriptName _00E_Game_Playerhouse_BoardSC extends ObjectReference conditional + +;===================================================================================== +; FUNCTIONS +;===================================================================================== + +function EnableFurniture(Int iLevel) + + FadeToBlackIMOD.Apply(1.00000) + utility.Wait(2 as Float) + FadeToBlackHoldIMOD.ApplyCrossFade(1 as Float) + if iLevel == 1 + _00E_Game_Playerhouse_ArkMarket_Level01Linker.Enable() + elseIf iLevel == 2 + _00E_Game_Playerhouse_ArkMarket_Level02Linker.Enable() + elseIf iLevel == 3 + _00E_Game_Playerhouse_ArkMarket_Level03Linker.Enable() + endIf + FadeToBlackBackIMOD.ApplyCrossFade(1 as Float) + +endFunction + +function DisableFurniture() + + FadeToBlackIMOD.Apply(1.00000) + utility.Wait(2 as Float) + FadeToBlackHoldIMOD.ApplyCrossFade(1 as Float) + _00E_Game_Playerhouse_ArkMarket_Level01Linker.Disable(false) + _00E_Game_Playerhouse_ArkMarket_Level02Linker.Disable(false) + _00E_Game_Playerhouse_ArkMarket_Level03Linker.Disable(false) + FadeToBlackBackIMOD.ApplyCrossFade(1 as Float) + +endFunction + + +function OnActivate(ObjectReference akActionRef) + + ;backwards compatibility for saves prior patch 1.2.3.0 + If (_00E_Game_Playerhouse_ArkMarket_Level01Linker.IsEnabled()) + _00E_FurniturePurchased.SetValue(1) + EndIf + ;backwards compatibility for saves prior patch 1.2.3.0 + + Int iButton = _00E_Game_PlayerHouse_ArkMarket_Board.Show(0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000) + if iButton == 7 + return + elseIf iButton == 0 + + If PlayerREF.GetParentCell() == CapitalCityPlayerhouse + PlayerREF.RemoveItem(Gold001, 300) + Else + PlayerREF.RemoveItem(Gold001, 1250) + EndIf + + _00E_FurniturePurchased.SetValue(1) + self.EnableFurniture(1) + + elseIf iButton == 1 + + If PlayerREF.GetParentCell() == CapitalCityPlayerhouse + PlayerREF.RemoveItem(Gold001, 500) + Else + PlayerREF.RemoveItem(Gold001, 1500) + EndIf + + _00E_FurniturePurchased.SetValue(2) + self.EnableFurniture(2) + + elseIf iButton == 2 + + If PlayerREF.GetParentCell() == CapitalCityPlayerhouse + PlayerREF.RemoveItem(Gold001, 700) + Else + PlayerREF.RemoveItem(Gold001, 1750) + EndIf + + _00E_FurniturePurchased.SetValue(3) + self.EnableFurniture(3) + + elseif iButton == 4 + + int iButton02 = _00E_Game_PlayerHouse_RemoveFurniture.Show() + + if iButton02 == 0 + + ReturnAndRefund() + + Else + + Activate(PlayerREF) + + EndIf + + elseif iButton == 5 + + Cell cCurrentCell = Self.GetParentCell() + String sHouseName = NQ24.ChooseHouseName() + cCurrentCell.SetName(sHouseName) + + If cCurrentCell == CapitalCityPlayerhouse + Player.sHouseMarketQuarterName = sHouseName + ElseIf cCurrentCell == CapitalCityPlayerHouseUpper + Player.sHouseNobleQuarterName = sHouseName + EndIf + + elseif iButton == 6 + + _00E_PlayerhousingMaster.GetMaster().ShowExpansionBoardTutorial() + + endIf + +endFunction + +;===================================================================================== +; FUNCTIONS +;===================================================================================== + +Function ReturnAndRefund() + + DisableFurniture() + + If PlayerREF.GetParentCell() == CapitalCityPlayerhouse + + If _00E_FurniturePurchased.GetValue() == 1 + PlayerREF.AddItem(Gold001, 150) + _00E_FurniturePurchased.SetValue(0) + ElseIf _00E_FurniturePurchased.GetValue() == 2 + PlayerREF.AddItem(Gold001, 250) + _00E_FurniturePurchased.SetValue(0) + ElseIf _00E_FurniturePurchased.GetValue() == 3 + PlayerREF.AddItem(Gold001, 350) + _00E_FurniturePurchased.SetValue(0) + EndIf + + ElseIf PlayerREF.GetParentCell() == CapitalCityPlayerhouseUpper + + If _00E_FurniturePurchased.GetValue() == 1 + PlayerREF.AddItem(Gold001, 625) + _00E_FurniturePurchased.SetValue(0) + ElseIf _00E_FurniturePurchased.GetValue() == 2 + PlayerREF.AddItem(Gold001, 750) + _00E_FurniturePurchased.SetValue(0) + ElseIf _00E_FurniturePurchased.GetValue() == 3 + PlayerREF.AddItem(Gold001, 875) + _00E_FurniturePurchased.SetValue(0) + EndIf + + EndIf + +EndFunction + +;===================================================================================== +; PROPERTIES +;===================================================================================== + +Actor Property PlayerREF Auto + +Cell Property CapitalCityPlayerhouse Auto +Cell Property CapitalCityPlayerHouseUpper Auto + +GlobalVariable Property _00E_FurniturePurchased Auto + +bool Property bLevel01FurniturePurchased Auto Conditional Hidden +bool Property bLevel02FurniturePurchased Auto Conditional Hidden +bool Property bLevel03FurniturePurchased Auto Conditional Hidden + +imagespacemodifier property FadeToBlackBackIMOD auto +ObjectReference property _00E_Game_Playerhouse_ArkMarket_Level01Linker auto +message property _00E_Game_PlayerHouse_ArkMarket_Board auto +imagespacemodifier property FadeToBlackIMOD auto +Bool property __Config_bHouseHasLevel02 auto conditional +{Check this if this house has level 02 furniture designed.} +ObjectReference property _00E_Game_Playerhouse_ArkMarket_Level02Linker auto +imagespacemodifier property FadeToBlackHoldIMOD auto +Bool property __Config_bHouseHasLevel01 auto conditional +{Check this if this house has level 01 furniture designed.} +ObjectReference property _00E_Game_Playerhouse_ArkMarket_Level03Linker auto +Bool property __Config_bHouseHasLevel03 auto conditional +{Check this if this house has level 03 furniture designed.} + +MiscObject Property Gold001 Auto + +Message Property _00E_Game_PlayerHouse_RemoveFurniture Auto + +_00E_NQ24_Playerhousing_Functions Property NQ24 Auto +_00E_PlayerHousing_CellNameSC Property Player Auto diff --git a/scripts/source/_00e_placeablegrammophonplay.psc b/scripts/source/_00e_placeablegrammophonplay.psc new file mode 100644 index 00000000..4a428c87 --- /dev/null +++ b/scripts/source/_00e_placeablegrammophonplay.psc @@ -0,0 +1,161 @@ +Scriptname _00E_PlaceableGrammophonPlay extends ObjectReference + +Sound Property _00E_MUS_Placeable_Koppophon Auto +MusicType Property _00E_SilenceTransitionHighPriority Auto ; OBSOLETE. Left for version update on older saves. +MusicType Property _00E_SilenceKoppophon Auto +GlobalVariable Property _00E_AchievementsEnabled Auto +Message Property _00E_PlayerhousingKoppophonVolume Auto +Actor Property PlayerREF Auto + +Int playbackId = -1 +Float volume = 0.5 +Bool bDone ; Unlocked END_KOPPOPHON_01 achievement +Bool bMusicLocked = False +Bool bOldSilenceUpdated = False + +Float Property MUSIC_LENGTH = 87.2 AutoReadOnly + + +;===================================================================================== +; FUNCTIONS +;===================================================================================== + +Function StopMusic() + bMusicLocked = True + + UnregisterForModEvent("BardsLoadGame") + UnregisterForUpdate() + + If bOldSilenceUpdated == False + bOldSilenceUpdated = True + If playbackId != -1 + _00E_SilenceTransitionHighPriority.Remove() + EndIf + EndIf + + If playbackId != -1 + Sound.StopInstance(playbackId) + playbackId = -1 + EndIf + + _00E_SilenceKoppophon.Remove() + + bMusicLocked = False +EndFunction + +Function TryStopMusic() + If bMusicLocked == False + StopMusic() + Else + RegisterForSingleUpdate(0.5) + EndIf +EndFunction + +Function Cleanup() + GoToState("DoneCleanup") + TryStopMusic() +EndFunction + + +;===================================================================================== +; EVENTS +;===================================================================================== + +Event OnInit() + GoToState("DoneCleanup") +EndEvent + +Event OnActivate(ObjectReference triggerRef) + If triggerRef == PlayerREF && _00E_PlayerhousingMaster.ReferenceCanBeActivated(Self) && bMusicLocked == False + bMusicLocked = True + + If playbackId == -1 ; Start playing + bOldSilenceUpdated = True + RegisterForModEvent("BardsLoadGame", "OnBardsLoadGame") + + _00E_SilenceKoppophon.Add() + + playbackId = _00E_MUS_Placeable_Koppophon.Play(Self) + If volume <= 0.0 || volume > 1.0 + volume = 0.5 + EndIf + Sound.SetInstanceVolume(playbackId, volume) + RegisterForSingleUpdate(_00E_QuestFunctions.AdjustTimePeriodByEngineTimerError(MUSIC_LENGTH)) + + GoToState("") + + _00E_PlayerhousingKoppophonVolume.Show(volume * 100.0) + + If _00E_AchievementsEnabled.GetValueInt() == 1 && (bDone == False) + bDone = True + Game.UnlockAchievement("END_KOPPOPHON_01") + EndIf + + ElseIf bOldSilenceUpdated == False + ; Player just loaded an older save with the Koppophon playing. The sound is dead by now. + StopMusic() + + Else ; Volume control + Float fNewVolume = volume + 0.25 + If fNewVolume > 1.0 + fNewVolume = 0.0 + EndIf + + Sound.SetInstanceVolume(playbackId, fNewVolume) + If fNewVolume == 0.0 ; On mute + _00E_SilenceKoppophon.Remove() + ElseIf volume == 0.0 ; On unmute + _00E_SilenceKoppophon.Add() + EndIf + volume = fNewVolume + + _00E_PlayerhousingKoppophonVolume.Show(volume * 100.0) + + EndIf + + bMusicLocked = False + EndIf +EndEvent + +Event OnUpdate() + TryStopMusic() +EndEvent + +Event OnBardsLoadGame(string eventName, string strArg, float numArg, Form sender) + ; Player just loaded a save with the Koppophon playing. The sound is dead by now. + TryStopMusic() +EndEvent + +Event OnCellAttach() + Cleanup() +EndEvent + +Event OnLoad() + Cleanup() +EndEvent + +Event OnCellDetach() + Cleanup() +EndEvent + +Event OnUnload() + Cleanup() +EndEvent + +State DoneCleanup + Event OnCellAttach() + ; Do nothing + EndEvent + + Event OnLoad() + ; Do nothing + EndEvent + + Event OnCellDetach() + ; Do nothing + EndEvent + + Event OnUnload() + ; Do nothing + EndEvent +EndState diff --git a/scripts/source/_00e_playerhousing_furniture.psc b/scripts/source/_00e_playerhousing_furniture.psc new file mode 100644 index 00000000..f5717f8f --- /dev/null +++ b/scripts/source/_00e_playerhousing_furniture.psc @@ -0,0 +1,48 @@ +scriptname _00E_Playerhousing_Furniture extends ObjectReference +{A manipulatable housing object while being in the world} + +Float Property CustomDistance Auto +{ Custom distance from the player in the placemenet Move Mode } +Float Property OffsetAngleZ Auto +{ Custom offset Z rotation in the placemenet Move Mode } +Float Property OffsetPositionZ Auto +{ Custom offset Z position in the placemenet Move Mode } +Bool Property IsSetPositionIncompatible Auto +{ If the .nif of the object has a bhkCollisionObject with SET_LOCAL flag, SetPosition() or MoveTo() can easily mess this object up in the placement mode. } + +Form Property InventoryItem Auto Hidden + +_00E_Playerhousing_FurnitureItem Property furnitureItem Auto Hidden +{ OBSOLETE. Left for compatibility with older saves. } + +Form Function GetInventoryItem() + If furnitureItem ; Update from the old way of storing the base inventory item + If InventoryItem == None + InventoryItem = furnitureItem.GetBaseObject() + EndIf + furnitureItem = None + EndIf + + Return InventoryItem +EndFunction + +Function finishPlacement() + ; This function is called when the furniture object is at the right position and being placed. + + SetMotionType(Motion_Dynamic, True) + + ; in case we place a mannequin, we need to store its position + ObjectReference myObjRef = self as ObjectReference + If myObjRef as _00E_Playerhousing_MannequinControl + (myObjRef as _00E_Playerhousing_MannequinControl).FinishPlacement() + Else + BlockActivation(true) + Disable() + Utility.Wait(0.1) + Enable() + + If myObjRef as _00E_Phasmalist_Workbench + (myObjRef as _00E_Phasmalist_Workbench).FinishPlacement() + EndIf + EndIf +EndFunction diff --git a/scripts/source/_00e_playerhousing_furnitureitem.psc b/scripts/source/_00e_playerhousing_furnitureitem.psc new file mode 100644 index 00000000..30ea0540 --- /dev/null +++ b/scripts/source/_00e_playerhousing_furnitureitem.psc @@ -0,0 +1,43 @@ +scriptname _00E_Playerhousing_FurnitureItem extends ObjectReference +{A manipulatable housing object while being in the players inventory} + +ActorBase Property _MANNEQUIN_toCreate auto +Furniture Property _FURNITURE_toCreate auto +Container Property _CONTAINER_toCreate auto +Light Property _LIGHT_toCreate auto +MiscObject Property _MISC_toCreate Auto +Activator Property _ACTIVATOR_toCreate Auto + +_00E_PlayerhousingMaster Property master Auto + +Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) + If akNewContainer == None + If master == None + master = _00E_PlayerhousingMaster.GetMaster() + EndIf + master.playerItemDropped(Self) + EndIf +EndEvent + +_00E_Playerhousing_Furniture Function placeFurnitureAtMe() + _00E_Playerhousing_Furniture result = None + If _MANNEQUIN_toCreate + result = PlaceAtMe(_MANNEQUIN_toCreate, abForcePersist = True, abInitiallyDisabled = True) as _00E_Playerhousing_Furniture + ElseIf _FURNITURE_toCreate + result = PlaceAtMe(_FURNITURE_toCreate, abInitiallyDisabled = True) as _00E_Playerhousing_Furniture + ElseIf _CONTAINER_toCreate + result = PlaceAtMe(_CONTAINER_toCreate, abInitiallyDisabled = True) as _00E_Playerhousing_Furniture + ElseIf _LIGHT_toCreate + result = PlaceAtMe(_LIGHT_toCreate, abInitiallyDisabled = True) as _00E_Playerhousing_Furniture + ElseIf _ACTIVATOR_toCreate + result = PlaceAtMe(_ACTIVATOR_toCreate, abInitiallyDisabled = True) as _00E_Playerhousing_Furniture + ElseIf _MISC_toCreate + result = PlaceAtMe(_MISC_toCreate, abInitiallyDisabled = True) as _00E_Playerhousing_Furniture + EndIf + + If result == None + Debug.MessageBox("ERROR: *_toCreate property in playerhousingfurnitureitem is no furnitureitem, please write a bugticket") + EndIf + + Return result +EndFunction \ No newline at end of file diff --git a/scripts/source/_00e_playerhousing_lightfurniture.psc b/scripts/source/_00e_playerhousing_lightfurniture.psc new file mode 100644 index 00000000..e61375f6 --- /dev/null +++ b/scripts/source/_00e_playerhousing_lightfurniture.psc @@ -0,0 +1,23 @@ +Scriptname _00E_Playerhousing_LightFurniture extends _00E_Playerhousing_Furniture + +Light Property LIGHT_toCreate auto +{not used due to graphic bugs} +; ObjectReference createdLight + +function finishPlacement() +{this function is called when the furniture object is at the right position and being placed; use e.g. for light} + parent.finishPlacement() + ;real light cannot be placed since it causes graphic bugs + + ;createdLight = placeAtMe(LIGHT_toCreate) + ;createdLight.setScale(0.99) +Endfunction + +;/ +Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer) + if akOldContainer== None + createdLight.disable() + createdLight.delete() + Endif +Endevent +/; \ No newline at end of file diff --git a/scripts/source/_00e_playerhousing_mannequincontrol.psc b/scripts/source/_00e_playerhousing_mannequincontrol.psc new file mode 100644 index 00000000..8b70a7b1 --- /dev/null +++ b/scripts/source/_00e_playerhousing_mannequincontrol.psc @@ -0,0 +1,231 @@ +Scriptname _00E_Playerhousing_MannequinControl extends Actor + +import utility + +Actor Property PlayerREF Auto + +Bool bIsInPlacementMode = False +Bool bActivationBlocked = False + + +;===================================================================================== +; EVENTS +;===================================================================================== + +Event OnCellLoad() + If bIsInPlacementMode == False + ResetOnLoad() + EndIf +EndEvent + +Event OnLoad() + If bIsInPlacementMode + ResetOnLoad() + EndIf +EndEvent + +Event OnActivate(ObjectReference TriggerRef) + If TriggerRef == PlayerREF && _00E_PlayerhousingMaster.ReferenceCanBeActivated(self) && bActivationBlocked == False + bActivationBlocked = True + + ConvertArmorSlots() ; Version update + + OpenInventory(True) + ResetPosition() + Wait(0.1) + EnableAI(False) + + bActivationBlocked = False + EndIf +EndEvent + +Event OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer) + If (akBaseItem as Armor) + If TryRegisterAddedArmor(akBaseItem) + EquipItem(akBaseItem) + Else + ;Turn it back if the mannequin has one of these already, or if all the slots are full. + RemoveItem(akBaseItem, aiItemCount, True, PlayerREF) + EndIf + Else + RemoveItem(akBaseItem, aiItemCount, True, PlayerREF) + EndIf +EndEvent + +Event OnObjectUnequipped(Form akBaseObject, ObjectReference akReference) + If (akBaseObject as Armor) + UnregisterRemovedArmor(akBaseObject) + EndIf +EndEvent + + +;===================================================================================== +; ARMOR SLOTS TRACKING +;===================================================================================== + +Form Property ArmorSlot01 Auto Hidden ; Obsolete. Left for version updates on older saves. +Form Property ArmorSlot02 Auto Hidden ; Obsolete. Left for version updates on older saves. +Form Property ArmorSlot03 Auto Hidden ; Obsolete. Left for version updates on older saves. +Form Property ArmorSlot04 Auto Hidden ; Obsolete. Left for version updates on older saves. +Form Property ArmorSlot05 Auto Hidden ; Obsolete. Left for version updates on older saves. +Form Property ArmorSlot06 Auto Hidden ; Obsolete. Left for version updates on older saves. +Form Property ArmorSlot07 Auto Hidden ; Obsolete. Left for version updates on older saves. +Form Property ArmorSlot08 Auto Hidden ; Obsolete. Left for version updates on older saves. +Form Property ArmorSlot09 Auto Hidden ; Obsolete. Left for version updates on older saves. +Form Property ArmorSlot10 Auto Hidden ; Obsolete. Left for version updates on older saves. + +Form[] ArmorSlots +Bool bConvertedArmorSlots = False + +Function ConvertArmorSlots() + If bConvertedArmorSlots + Return + EndIf + bConvertedArmorSlots = True + + ArmorSlots = New Form[10] + + Int index = _ConvertArmorSlot(0, ArmorSlot01) + index = _ConvertArmorSlot(index, ArmorSlot02) + index = _ConvertArmorSlot(index, ArmorSlot03) + index = _ConvertArmorSlot(index, ArmorSlot04) + index = _ConvertArmorSlot(index, ArmorSlot05) + index = _ConvertArmorSlot(index, ArmorSlot06) + index = _ConvertArmorSlot(index, ArmorSlot07) + index = _ConvertArmorSlot(index, ArmorSlot08) + index = _ConvertArmorSlot(index, ArmorSlot09) + index = _ConvertArmorSlot(index, ArmorSlot10) + + ArmorSlot01 = None + ArmorSlot02 = None + ArmorSlot03 = None + ArmorSlot04 = None + ArmorSlot05 = None + ArmorSlot06 = None + ArmorSlot07 = None + ArmorSlot08 = None + ArmorSlot09 = None + ArmorSlot10 = None +EndFunction + +Int Function _ConvertArmorSlot(Int index, Form armorItem) + If armorItem && ArmorSlots.Find(armorItem) < 0 + ArmorSlots[index] = armorItem + index += 1 + EndIf + + Return index +EndFunction + +Bool Function TryRegisterAddedArmor(Form armorItem) + ; First check to see if this is already in a slot + If ArmorSlots.Find(armorItem) >= 0 + Return False + EndIf + + ; Now find an emtpy slot to put it in, if there is one. + Int i = 0 + While i < ArmorSlots.Length + If ArmorSlots[i] == None + ArmorSlots[i] = armorItem + Return True + EndIf + + i += 1 + EndWhile + + ; Nope. No room left. + Return False +EndFunction + +Function UnregisterRemovedArmor(Form armorItem) + ;This loop will also clear duplicates that might have been generated. + Int i = 0 + While i < ArmorSlots.Length + If ArmorSlots[i] == armorItem + ArmorSlots[i] = None + EndIf + i += 1 + EndWhile +EndFunction + +Function ReequipAllArmor() + UnequipAll() + + Int i = 0 + While i < ArmorSlots.Length + If ArmorSlots[i] + EquipItem(ArmorSlots[i]) + EndIf + i += 1 + EndWhile +EndFunction + + +;===================================================================================== +; FUNCTIONS +;===================================================================================== + +Float forceX +Float forceY +Float forceZ +Float forceAngleX +Float forceAngleY +Float forceAngleZ + +Bool bPosisionValidated = False + +Function ResetPosition() + If bPosisionValidated == False + bPosisionValidated = True + + If forceX == 0 && forceY == 0 && forceZ == 0 + Float fAngleZ = PlayerREF.GetAngleZ() + Float fDistanceFromPlayer = 100.0 + + forceX = PlayerREF.GetPositionX() + fDistanceFromPlayer * Math.sin(fAngleZ) + forceY = PlayerREF.GetPositionY() + fDistanceFromPlayer * Math.cos(fAngleZ) + forceZ = PlayerREF.GetPositionZ() + EndIf + EndIf + + SetPosition(forceX, forceY, forceZ) + SetAngle(forceAngleX, forceAngleY, forceAngleZ) +EndFunction + +Function ResetOnLoad() + ConvertArmorSlots() ; Version update + + BlockActivation() + + EnableAI(True) + If bIsInPlacementMode == False + ResetPosition() + EndIf + ReequipAllArmor() + EnableAI(False) +EndFunction + +Function StartPlacement() + bIsInPlacementMode = True +EndFunction + +Function FinishPlacement() + bIsInPlacementMode = False + + Disable() + + forceX = GetPositionX() + forceY = GetPositionY() + forceZ = GetPositionZ() + forceAngleX = GetAngleX() + forceAngleY = GetAngleY() + forceAngleZ = GetAngleZ() + + bPosisionValidated = True + + Enable() + + _00E_QuestFunctions.WaitForReferenceToLoad(self) + ResetOnLoad() +EndFunction diff --git a/scripts/source/_00e_playerhousingcurrentomanipulate.psc b/scripts/source/_00e_playerhousingcurrentomanipulate.psc new file mode 100644 index 00000000..ff095ced --- /dev/null +++ b/scripts/source/_00e_playerhousingcurrentomanipulate.psc @@ -0,0 +1,336 @@ +Scriptname _00E_PlayerhousingCurrentOManipulate extends ReferenceAlias + +EffectShader Property _00E_PlayerHousingManipulationShader Auto +Sound Property UIMenuPrevNext Auto +Actor Property PlayerRef Auto + +String Property CONTROL_TURN_LEFT = "Strafe Left" AutoReadOnly +String Property CONTROL_TURN_RIGHT = "Strafe Right" AutoReadOnly +String Property CONTROL_MOVE_UP = "Forward" AutoReadOnly +String Property CONTROL_MOVE_DOWN = "Back" AutoReadOnly + +Int Property TRANSLATION_TURN_LEFT = 0 AutoReadOnly +Int Property TRANSLATION_TURN_RIGHT = 1 AutoReadOnly +Int Property TRANSLATION_MOVE_UP = 2 AutoReadOnly +Int Property TRANSLATION_MOVE_DOWN = 3 AutoReadOnly + +Int Property STATE_IDLE = 0 AutoReadOnly +Int Property STATE_UPDATING = 1 AutoReadOnly +Int Property STATE_WORKING = 2 AutoReadOnly + +Float Property ROTATION_SPEED_START = 15.0 AutoReadOnly +Float Property ROTATION_SPEED_FALLBACK = 20.0 AutoReadOnly +Float Property ROTATION_SPEED_MAX = 180.0 AutoReadOnly +Float Property ROTATION_SPEED_CHANGE_MOD = 0.25 AutoReadOnly +Float Property ROTATION_MAX = 90.0 AutoReadOnly + +Float Property MOVEMENT_SPEED_START = 10.0 AutoReadOnly +Float Property MOVEMENT_SPEED_FALLBACK = 20.0 AutoReadOnly +Float Property MOVEMENT_SPEED_MAX = 200.0 AutoReadOnly +Float Property MOVEMENT_SPEED_CHANGE_MOD = 0.25 AutoReadOnly +Float Property MOVEMENT_MAX = 100.0 AutoReadOnly + +Float Property FAST_TRANSLATION_SPEED = 1000000.0 AutoReadOnly + +Float fObjectPosX +Float fObjectPosY +Float fObjectPosZ +Float fObjectAngleX +Float fObjectAngleY +Float fObjectAngleZ +Float fPlayerPosZ +Float fTablePosZ + +Float fTranslationSpeed +Float fTranslationSpeedIncrease + +Int iWorkingState +Int iCurrentTranslation +Bool bGamepadMode +Int iWatchedKeyCode +Int iTurnLeftKey +Int iTurnRightKey +Int iMoveUpKey +Int iMoveDownKey + +Function Setup(ObjectReference curObjectRef) + ForceRefTo(curObjectRef) + + iWorkingState = STATE_IDLE + + bGamepadMode = Game.UsingGamepad() + If bGamepadMode == False + iTurnLeftKey = Input.GetMappedKey(CONTROL_TURN_LEFT, 0) + iTurnRightKey = Input.GetMappedKey(CONTROL_TURN_RIGHT, 0) + iMoveUpKey = Input.GetMappedKey(CONTROL_MOVE_UP, 0) + iMoveDownKey = Input.GetMappedKey(CONTROL_MOVE_DOWN, 0) + Else + iTurnLeftKey = 274 + iTurnRightKey = 275 + iMoveUpKey = 280 + iMoveDownKey = 281 + EndIf + + If PlayerRef == None ; Just in case + PlayerRef = Game.GetPlayer() + EndIf + + fPlayerPosZ = PlayerRef.GetPositionZ() + fTablePosZ = fPlayerPosZ + 64.0 + + GoToState("Working") + + TryRegisterForKey(iTurnLeftKey, CONTROL_TURN_LEFT) + TryRegisterForKey(iTurnRightKey, CONTROL_TURN_RIGHT) + TryRegisterForKey(iMoveUpKey, CONTROL_MOVE_UP) + TryRegisterForKey(iMoveDownKey, CONTROL_MOVE_DOWN) + + _00E_PlayerHousingManipulationShader.Play(curObjectRef) +EndFunction + +Function TryRegisterForKey(Int iKeyCode, String control) + If iKeyCode > 0 + RegisterForKey(iKeyCode) + Else + RegisterForControl(control) + EndIf +EndFunction + +Function Shutdown(Bool bRegisterNewOffsets) + GoToState("") + UnregisterForAllKeys() + UnregisterForAllControls() + UnregisterForUpdate() + + ObjectReference myRef = GetRef() + If myRef != None + _00E_PlayerHousingManipulationShader.Stop(myRef) + + While iWorkingState != STATE_IDLE && iWorkingState != STATE_WORKING + Utility.WaitMenuMode(0.05) + EndWhile + If iWorkingState == STATE_WORKING + myRef.StopTranslation() + EndIf + + If bRegisterNewOffsets + Float fNewOffsetAngleZ = myRef.GetAngleZ() - PlayerRef.GetAngleZ() + Float fNewOffsetPosZ = myRef.GetPositionZ() - PlayerRef.GetPositionZ() + (GetOwningQuest() as _00E_PlayerhousingMaster).RegisterNewHousingObjectOffsets(fNewOffsetAngleZ, fNewOffsetPosZ) + EndIf + + Clear() + EndIf +EndFunction + +State Working + Event OnKeyDown(Int iKeyCode) + TryStartTranslation(KeyCodeToTranslationMode(iKeyCode), iKeyCode) + EndEvent + + Event OnKeyUp(Int iKeyCode, Float fHoldTime) + TryStopTranslation(KeyCodeToTranslationMode(iKeyCode)) + EndEvent + + Event OnControlDown(String control) + TryStartTranslation(ControlToTranslationMode(control), 0) + EndEvent + + Event OnControlUp(String control, Float fHoldTime) + TryStopTranslation(ControlToTranslationMode(control)) + EndEvent + + Event OnUpdate() + ; OnControlUp is not always properly triggered. Maybe OnKeyUp too. The code below is a workaround for that. + ; For gamepads this failsafe is useless because Input.IsKeyPressed always returns False for controller buttons. + If iWatchedKeyCode > 0 && iWorkingState == STATE_WORKING + If Input.IsKeyPressed(iWatchedKeyCode) + RegisterForSingleUpdate(0.05) + Else + TryStopTranslation(iCurrentTranslation) + EndIf + EndIf + EndEvent + + Event OnTranslationComplete() + ; The previously started translation reached its end point + + If iWorkingState != STATE_WORKING + Return + EndIf + iWorkingState = STATE_UPDATING + + ObjectReference myRef = GetRef() + + If iWatchedKeyCode <= 0 || fTranslationSpeedIncrease < 0.0 + ; Do nothing + ElseIf iCurrentTranslation == TRANSLATION_TURN_LEFT || iCurrentTranslation == TRANSLATION_TURN_RIGHT + Float fRotationAngle = GetNextTranslationStep(ROTATION_SPEED_MAX, ROTATION_SPEED_CHANGE_MOD, ROTATION_MAX) + fObjectAngleZ = myRef.GetAngleZ() + TurnTranslate(myRef, fRotationAngle) + + iWorkingState = STATE_WORKING + Return + ElseIf iCurrentTranslation == TRANSLATION_MOVE_UP || iCurrentTranslation == TRANSLATION_MOVE_DOWN + Float fMoveZ = GetNextTranslationStep(MOVEMENT_SPEED_MAX, MOVEMENT_SPEED_CHANGE_MOD, MOVEMENT_MAX) + fObjectPosZ = myRef.GetPositionZ() + MoveTranslate(myRef, fMoveZ) + + iWorkingState = STATE_WORKING + Return + EndIf + + ; Fallback + FinalizeTranslation(myRef) + UIMenuPrevNext.Play(PlayerRef) + + iWorkingState = STATE_IDLE + EndEvent +EndState + +Int Function KeyCodeToTranslationMode(Int iKeyCode) + If iKeyCode > 0 + If iKeyCode == iTurnLeftKey + Return TRANSLATION_TURN_LEFT + ElseIf iKeyCode == iTurnRightKey + Return TRANSLATION_TURN_RIGHT + ElseIf iKeyCode == iMoveUpKey + Return TRANSLATION_MOVE_UP + ElseIf iKeyCode == iMoveDownKey + Return TRANSLATION_MOVE_DOWN + EndIf + EndIf + + Return -1 +EndFunction + +Int Function ControlToTranslationMode(String control) + If control == CONTROL_TURN_LEFT + Return TRANSLATION_TURN_LEFT + ElseIf control == CONTROL_TURN_RIGHT + Return TRANSLATION_TURN_RIGHT + ElseIf control == CONTROL_MOVE_UP + Return TRANSLATION_MOVE_UP + ElseIf control == CONTROL_MOVE_DOWN + Return TRANSLATION_MOVE_DOWN + EndIf + + Return -1 +EndFunction + +Function TryStartTranslation(Int iTranslationMode, Int iTriggerKeyCode) + If iTranslationMode < 0 || iWorkingState != STATE_IDLE + Return + EndIf + + iWorkingState = STATE_UPDATING + iCurrentTranslation = iTranslationMode + iWatchedKeyCode = iTriggerKeyCode + + ObjectReference myRef = GetRef() + + fObjectPosX = myRef.GetPositionX() + fObjectPosY = myRef.GetPositionY() + fObjectPosZ = myRef.GetPositionZ() + + fObjectAngleX = myRef.GetAngleX() + fObjectAngleY = myRef.GetAngleY() + fObjectAngleZ = myRef.GetAngleZ() + + fTranslationSpeedIncrease = 0.0 + + If iCurrentTranslation == TRANSLATION_TURN_LEFT || iCurrentTranslation == TRANSLATION_TURN_RIGHT + If iWatchedKeyCode > 0 + fTranslationSpeed = ROTATION_SPEED_START + TurnTranslate(myRef, fTranslationSpeed * ROTATION_SPEED_CHANGE_MOD) + Else + fTranslationSpeed = ROTATION_SPEED_FALLBACK + TurnTranslate(myRef, ROTATION_MAX) + EndIf + ElseIf iCurrentTranslation == TRANSLATION_MOVE_UP || iCurrentTranslation == TRANSLATION_MOVE_DOWN + If iWatchedKeyCode > 0 + fTranslationSpeed = MOVEMENT_SPEED_START + MoveTranslate(myRef, fTranslationSpeed * MOVEMENT_SPEED_CHANGE_MOD) + Else + fTranslationSpeed = MOVEMENT_SPEED_FALLBACK + MoveTranslate(myRef, MOVEMENT_MAX) + EndIf + EndIf + + If iWatchedKeyCode > 0 && bGamepadMode == False + RegisterForSingleUpdate(0.05) + EndIf + + iWorkingState = STATE_WORKING +EndFunction + +Function TryStopTranslation(Int iTranslationMode) + If iCurrentTranslation != iTranslationMode || iWorkingState != STATE_WORKING + Return + EndIf + + iWorkingState = STATE_UPDATING + + ObjectReference myRef = GetRef() + myRef.StopTranslation() + UnregisterForUpdate() + FinalizeTranslation(myRef) + + iWorkingState = STATE_IDLE +EndFunction + +Function TurnTranslate(ObjectReference myRef, Float fRotationAngle) + If iCurrentTranslation == TRANSLATION_TURN_LEFT + fObjectAngleZ -= fRotationAngle + Else + fObjectAngleZ += fRotationAngle + EndIf + myRef.TranslateTo(fObjectPosX, fObjectPosY, fObjectPosZ, fObjectAngleX, fObjectAngleY, fObjectAngleZ, FAST_TRANSLATION_SPEED, fTranslationSpeed) +EndFunction + +Function MoveTranslate(ObjectReference myRef, Float fMoveZ) + If iCurrentTranslation == TRANSLATION_MOVE_DOWN + Float fNewZ = fObjectPosZ - fMoveZ + If fObjectPosZ > fTablePosZ && fNewZ < fTablePosZ + ; A primitive "drop on the table" + fNewZ = fTablePosZ + fTranslationSpeedIncrease = -1.0 ; Stop on reaching fPlayerPosZ. + ElseIf fObjectPosZ > fPlayerPosZ && fNewZ < fPlayerPosZ + ; A primitive "drop on the floor" + fNewZ = fPlayerPosZ + fTranslationSpeedIncrease = -1.0 ; Stop on reaching fPlayerPosZ. + EndIf + fObjectPosZ = fNewZ + Else + fObjectPosZ += fMoveZ + EndIf + myRef.TranslateTo(fObjectPosX, fObjectPosY, fObjectPosZ, fObjectAngleX, fObjectAngleY, fObjectAngleZ, fTranslationSpeed, FAST_TRANSLATION_SPEED) +EndFunction + +Float Function GetNextTranslationStep(Float fSpeedMax, Float fSpeedChangeMod, Float fChangeMax) + If fTranslationSpeed < fSpeedMax + If fTranslationSpeedIncrease < 20.0 + fTranslationSpeedIncrease += 5.0 + EndIf + fTranslationSpeed += fTranslationSpeedIncrease + If fTranslationSpeed > fSpeedMax + fTranslationSpeed = fSpeedMax + EndIf + EndIf + Float fResult = fTranslationSpeed * fSpeedChangeMod + If fTranslationSpeed >= fSpeedMax || fResult > fChangeMax + Return fChangeMax + Else + Return fResult + EndIf +EndFunction + +Function FinalizeTranslation(ObjectReference myRef) + ; TranslateTo below prevents the object from twitching and becoming blurry when a translation ends + If iCurrentTranslation == TRANSLATION_TURN_LEFT || iCurrentTranslation == TRANSLATION_TURN_RIGHT + fObjectAngleZ = myRef.GetAngleZ() + ElseIf iCurrentTranslation == TRANSLATION_MOVE_UP || iCurrentTranslation == TRANSLATION_MOVE_DOWN + fObjectPosZ = myRef.GetPositionZ() + EndIf + myRef.TranslateTo(fObjectPosX, fObjectPosY, fObjectPosZ, fObjectAngleX, fObjectAngleY, fObjectAngleZ, FAST_TRANSLATION_SPEED, FAST_TRANSLATION_SPEED) +EndFunction diff --git a/scripts/source/_00e_playerhousingcurrentotranslation.psc b/scripts/source/_00e_playerhousingcurrentotranslation.psc new file mode 100644 index 00000000..45bac641 --- /dev/null +++ b/scripts/source/_00e_playerhousingcurrentotranslation.psc @@ -0,0 +1,117 @@ +Scriptname _00E_PlayerhousingCurrentOTranslation extends ReferenceAlias + +EffectShader Property _00E_PlayerHousingTranslationShader Auto +Actor Property PlayerRef Auto + +Bool bIsWorking = False +Bool bIsWarmingUp = False + +Float fDistance +Float fOffsetAngleZ +Float fOffsetPosZ + +Float Property ORBIT_ANGULAR_SPEED_CAP = 30.0 AutoReadOnly +Float Property FAST_TRANSLATION_SPEED = 1000000.0 AutoReadOnly + + +Function Setup(_00E_Playerhousing_Furniture furnitureRef, Bool bEnteringPlacement, Float fStoredOffsetAngleZ, Float fStoredOffsetPositionZ) + bIsWarmingUp = True + furnitureRef.Disable() + + If PlayerRef == None + PlayerRef = Game.GetPlayer() + EndIf + + fDistance = furnitureRef.CustomDistance + If fDistance <= 0.0 + fDistance = 100.0 + EndIf + + If bEnteringPlacement + fOffsetAngleZ = furnitureRef.OffsetAngleZ + fOffsetPosZ = furnitureRef.OffsetPositionZ + + If furnitureRef.IsSetPositionIncompatible == False + Float x = PlayerRef.GetPositionX() + Float y = PlayerRef.GetPositionY() + Float z = PlayerRef.GetPositionZ() + Float fAngleZ = PlayerRef.GetAngleZ() + + furnitureRef.SetPosition(x + fDistance * Math.sin(fAngleZ), y + fDistance * Math.cos(fAngleZ), z + fOffsetPosZ) + furnitureRef.SetAngle(0, 0, fAngleZ + fOffsetAngleZ) + EndIf + + ObjectReference myRef = furnitureRef as ObjectReference + If (myRef as _00E_Playerhousing_MannequinControl) + (myRef as _00E_Playerhousing_MannequinControl).StartPlacement() + ElseIf (myRef as _00E_Phasmalist_Workbench) + (myRef as _00E_Phasmalist_Workbench).StartPlacement() + EndIf + Else + fOffsetAngleZ = fStoredOffsetAngleZ + fOffsetPosZ = fStoredOffsetPositionZ + EndIf + + ForceRefTo(furnitureRef) + bIsWorking = True + furnitureRef.Enable() +EndFunction + +Function Shutdown() + bIsWorking = False + + ObjectReference myRef = GetRef() + If myRef + While bIsWarmingUp && (PlayerRef.GetParentCell() == myRef.GetParentCell()) + Utility.WaitMenuMode(0.05) + EndWhile + myRef.StopTranslation() + _00E_PlayerHousingTranslationShader.Stop(myRef) + Clear() + EndIf +EndFunction + +Event OnLoad() + ; Loop needs to be extracted from the rest of the code due to performance reasons (don't know why exactly, but defining new functions slows this down dramatically) + ObjectReference myRef = GetRef() + Float fPrevAngleZ = -1.0 + + myRef.SetMotionType(4) ; Set motion type to Motion_Keyframed. This would fix "collision phantoms" of the object while the player is moving around "dragging" it. + _00E_PlayerHousingTranslationShader.Play(myRef) + + bIsWarmingUp = False + + While bIsWorking + Float x = PlayerRef.GetPositionX() + Float y = PlayerRef.GetPositionY() + Float z = PlayerRef.GetPositionZ() + Float fAngleZ = PlayerRef.GetAngleZ() + + ; Cap the angular speed of the object's orbiting around the player at ORBIT_ANGULAR_SPEED_CAP. + ; This fixes some objects pushing the player (because they pass THROUGH the player?) on sharp camera turns. + If fPrevAngleZ >= 0.0 + Float fDelta = fAngleZ - fPrevAngleZ + If fDelta < -180.0 + fDelta += 360.0 + ElseIf fDelta > 180.0 + fDelta -= 360.0 + EndIf + If fDelta < -ORBIT_ANGULAR_SPEED_CAP + fAngleZ = fPrevAngleZ - ORBIT_ANGULAR_SPEED_CAP + If fAngleZ < 0.0 + fAngleZ += 360.0 + EndIf + ElseIf fDelta > ORBIT_ANGULAR_SPEED_CAP + fAngleZ = fPrevAngleZ + ORBIT_ANGULAR_SPEED_CAP + If fAngleZ >= 360.0 + fAngleZ -= 360.0 + EndIf + EndIf + EndIf + + If bIsWorking + myRef.TranslateTo(x + fDistance * Math.sin(fAngleZ), y + fDistance * Math.cos(fAngleZ), z + fOffsetPosZ, 0, 0, fAngleZ + fOffsetAngleZ, FAST_TRANSLATION_SPEED, FAST_TRANSLATION_SPEED) + EndIf + fPrevAngleZ = fAngleZ + EndWhile +EndEvent diff --git a/scripts/source/_00e_playerhousingmaster.psc b/scripts/source/_00e_playerhousingmaster.psc new file mode 100644 index 00000000..bff27002 --- /dev/null +++ b/scripts/source/_00e_playerhousingmaster.psc @@ -0,0 +1,554 @@ +scriptname _00E_PlayerhousingMaster extends Quest + +Actor Property player Auto +ReferenceAlias Property currentHousingObjectInTranslation Auto +ReferenceAlias Property currentHousingObjectInManipulation Auto +Message Property _00E_Playerhousing_CannotPlaceObjectsHere Auto +Message Property _00E_Playerhousing_ContainerContentMove Auto +Message Property _00E_Playerhousing_StartTutorial Auto +Message Property _00E_Playerhousing_ExpansionBoardTutorial Auto +Message Property _00E_Playerhousing_TranslationMode Auto +Message Property _00E_Playerhousing_TranslationModeTutorial Auto +Message Property _00E_Playerhousing_TranslationModeTutorial_Gamepad Auto +Message Property _00E_Playerhousing_ManipulationMode Auto +Message Property _00E_Playerhousing_ManipulationModeTutorial Auto +Message Property _00E_Playerhousing_ManipulationModeTutorial_Gamepad Auto +Sound Property UIMenuActive Auto +GlobalVariable Property _00E_Meditate_Allowed Auto +GlobalVariable Property _00E_Phasmalist_TankMode Auto +GlobalVariable Property _00E_DisableCraftingTutorials Auto + +_00E_Playerhousing_Furniture currentHousingObject + +Bool bIsInPlacementMode = False +Bool bDisableNormalActivation = False +Bool bGamepadMode = False +Bool bDroppedFromInventory = False +Int iPickupKey + +Float fStoredOffsetAngleZ +Float fStoredOffsetPositionZ + +String Property CONTROL_ACTIVATE = "Activate" AutoReadOnly +String Property CONTROL_SHEATH = "Ready Weapon" AutoReadOnly + + +;===================================================================================== +; GLOBAL FUNCTIONS +;===================================================================================== + +_00E_PlayerhousingMaster Function GetMaster() Global + Return Game.GetFormFromFile(0x00043270, "Skyrim.esm") as _00E_PlayerhousingMaster +EndFunction + +Bool Function ReferenceCanBeActivated(ObjectReference ref) Global + If (ref as _00E_Playerhousing_Furniture) + _00E_PlayerhousingMaster master = GetMaster() + If master + Return master.IsNormalActivationEnabled() + EndIf + EndIf + + Return True +EndFunction + + +;===================================================================================== +; TUTORIALS +;===================================================================================== + +Bool bStartTutorialShown = False + +Bool bHideTranslationTutorial = False +Bool bHideTranslationTutorial_Gamepad = False +Bool bHideManipulationTutorial = False +Bool bHideManipulationTutorial_Gamepad = False + +Function ShowStartBuildModeTutorial() + If _00E_DisableCraftingTutorials.GetValueInt() == 0 && bStartTutorialShown == False + bStartTutorialShown = True + _00E_Playerhousing_StartTutorial.Show() + EndIf +EndFunction + +Function ShowExpansionBoardTutorial() + ; Called from _00E_Game_Playerhouse_BoardSC + If _00E_Playerhousing_ExpansionBoardTutorial.Show() == 1 + bHideTranslationTutorial = False + bHideTranslationTutorial_Gamepad = False + bHideManipulationTutorial = False + bHideManipulationTutorial_Gamepad = False + EndIf +EndFunction + +Bool Function _ShowPlacementModeTutorial(Message msgTutorial, Bool bHideFlag) + If bHideFlag == False + Return (msgTutorial.Show() == 1) + Else + Return bHideFlag + EndIf +EndFunction + +Function ShowTranslationModeTutorial() + If bGamepadMode + bHideTranslationTutorial_Gamepad = _ShowPlacementModeTutorial(_00E_Playerhousing_TranslationModeTutorial_Gamepad, bHideTranslationTutorial_Gamepad) + Else + bHideTranslationTutorial = _ShowPlacementModeTutorial(_00E_Playerhousing_TranslationModeTutorial, bHideTranslationTutorial) + EndIf +EndFunction + +Function ShowManipulationModeTutorial() + If bGamepadMode + bHideManipulationTutorial_Gamepad = _ShowPlacementModeTutorial(_00E_Playerhousing_ManipulationModeTutorial_Gamepad, bHideManipulationTutorial_Gamepad) + Else + bHideManipulationTutorial = _ShowPlacementModeTutorial(_00E_Playerhousing_ManipulationModeTutorial, bHideManipulationTutorial) + EndIf +EndFunction + + +;===================================================================================== +; SERVICE FUNCTIONS +;===================================================================================== + +Bool Function CanEnterPlacementMode() + Return (_00E_Meditate_Allowed.GetValue() != 0.0 && _00E_Phasmalist_TankMode.GetValue() == 0.0) +EndFunction + +Float fPlacementModeCarryWeightMod = 0.0 + +Function EnterPlacementMode() + If bIsInPlacementMode == False + bIsInPlacementMode = True + _00E_Meditate_Allowed.SetValueInt(0) + Game.SetInChargen(true, true, false) ; Forbid saving the game while placing stuff + + ; Make the player over encumbered to prevent them from the default running and in general to slow them down + fPlacementModeCarryWeightMod = Player.GetAV("CarryWeight") * 2.0 + If fPlacementModeCarryWeightMod < 1000.0 + fPlacementModeCarryWeightMod = 1000.0 + EndIf + Player.ModAV("CarryWeight", -fPlacementModeCarryWeightMod) + + bGamepadMode = Game.UsingGamepad() + If bGamepadMode == False + iPickupKey = Input.GetMappedKey(CONTROL_SHEATH, 0) + Else + iPickupKey = 277 + EndIf + EndIf +EndFunction + +Function ExitPlacementMode() + If bIsInPlacementMode + bIsInPlacementMode = False + If fPlacementModeCarryWeightMod != 0.0 + Player.ModAV("CarryWeight", fPlacementModeCarryWeightMod) + fPlacementModeCarryWeightMod = 0.0 + EndIf + Game.SetInChargen(false, true, false) ; Re-allow saving + _00E_Meditate_Allowed.SetValueInt(1) + EndIf + + currentHousingObject = None ; Prevent persistence +EndFunction + +Function PickUpHousingObject() + ; Clear currentHousingObject ASAP because of possible race conditions + _00E_Playerhousing_Furniture furnitureRef = (currentHousingObject as _00E_Playerhousing_Furniture) + currentHousingObject = None + + Form furnBaseObject = furnitureRef.GetBaseObject() + If (furnBaseObject as ActorBase) || (furnBaseObject as Container) + If furnitureRef.GetNumItems() > 0 + furnitureRef.RemoveAllItems(Player) + _00E_Playerhousing_ContainerContentMove.Show() + Else + ; Whatever... + furnitureRef.RemoveAllItems(Player) + EndIf + EndIf + Player.AddItem(furnitureRef.GetInventoryItem(), 1, False) + furnitureRef.Disable() + _00E_Phasmalist_Workbench worbenchRef = (furnitureRef as ObjectReference) as _00E_Phasmalist_Workbench + If worbenchRef + worbenchRef.OnPickUp() + EndIf + furnitureRef.Delete() +EndFunction + +Function FinishPlacingHousingObject() + ; Clear currentHousingObject ASAP because of possible race conditions + _00E_Playerhousing_Furniture furnitureRef = (currentHousingObject as _00E_Playerhousing_Furniture) + currentHousingObject = None + + Utility.Wait(0.05) ; Wait for the shaders to stop for sure + furnitureRef.finishPlacement() + PlaySwitchSound() +EndFunction + +Function PlaySwitchSound() + UIMenuActive.Play(player) +EndFunction + +Function RegisterNewHousingObjectOffsets(Float fNewOffsetAngleZ, Float fNewOffsetPositionZ) + fStoredOffsetAngleZ = fNewOffsetAngleZ + fStoredOffsetPositionZ = fNewOffsetPositionZ +EndFunction + +Function Update_209() + bStartTutorialShown = ((Self as Quest) as _00E_PlayerhousingTutorial).StartTutorialIsShown() +EndFunction + + +;===================================================================================== +; CONTROLS +;===================================================================================== + +Bool bLockActions = False +Bool bActiveActivate = False + +Function LockActions() + bLockActions = True + InterruptActivate() +EndFunction + +Function UnlockActions() + bLockActions = False + InterruptActivate() +EndFunction + +Function InterruptActivate() + If bActiveActivate + bActiveActivate = False + UnregisterForUpdate() + EndIf +EndFunction + +Function EnableBuildmodeControls() + RegisterForControl(CONTROL_ACTIVATE) + If bIsInPlacementMode && iPickupKey > 0 + RegisterForKey(iPickupKey) + EndIf + + UnlockActions() +EndFunction + +Function DisableBuildmodeControls() + LockActions() + + UnregisterForAllControls() + UnregisterForAllKeys() + UnregisterForUpdate() +EndFunction + +Event OnControlDown(String control) + If control == CONTROL_ACTIVATE + If bActiveActivate + bActiveActivate = False + bDisableNormalActivation = True + UnregisterForUpdate() + ElseIf bLockActions == False + bActiveActivate = True + bDisableNormalActivation = False + RegisterForSingleUpdate(1.1) + EndIf + EndIf +EndEvent + +Event OnControlUp(String control, Float holdTime) + If control == CONTROL_ACTIVATE + If bActiveActivate + bActiveActivate = False + UnregisterForUpdate() + If bLockActions == False + activateShortPressed() + EndIf + EndIf + EndIf +EndEvent + +Event OnUpdate() + If bActiveActivate + bActiveActivate = False + bDisableNormalActivation = True + If bLockActions == False + activateLongPressed() + EndIf + EndIf +EndEvent + +Event OnKeyDown(Int iKeyCode) + If iKeyCode == iPickupKey + If bLockActions == False + pickUpPressed() + EndIf + EndIf +EndEvent + + +;===================================================================================== +; DEFAULT STATE +;===================================================================================== + +Event OnBeginState() + ExitPlacementMode() +EndEvent + +Function playerItemDropped(_00E_Playerhousing_FurnitureItem akItemReference) + ; Called from _00E_Playerhousing_FurnitureItem on a placeable dropped from the inventory + Player.AddItem(akItemReference, 1, False) + _00E_Playerhousing_CannotPlaceObjectsHere.Show() +EndFunction + +Function activateShortPressed() + ; Process short activate press +EndFunction + +Function activateLongPressed() + ; Process long activate press +EndFunction + +Function pickUpPressed() + ; Process pick up key press +EndFunction + +Function enableBuildmode() + ; Enter the build mode when the player enters their house + ShowStartBuildModeTutorial() + GoToState("Buildmode") +EndFunction + +Function disableBuildmode() + ; Exit a build mode when the player leaves their house +EndFunction + +Bool Function IsNormalActivationEnabled() + ; The player can activate a placeable furniture normally + Return True +EndFunction + + +;===================================================================================== +; STATE Buildmode +;===================================================================================== + +STATE Buildmode + ; The player can enter the manipulation or translation mode by choosing a housing object or dropping a housing item + + Event OnBeginState() + ExitPlacementMode() + bDisableNormalActivation = True + EnableBuildmodeControls() + EndEvent + + Event OnEndState() + DisableBuildmodeControls() + EndEvent + + Function playerItemDropped(_00E_Playerhousing_FurnitureItem akItemReference) + If CanEnterPlacementMode() == False || bLockActions ; Locked by something else + Player.AddItem(akItemReference, 1, False) + Return + EndIf + LockActions() + + currentHousingObject = akItemReference.placeFurnitureAtMe() + If currentHousingObject == None + ; Some error happened + Player.AddItem(akItemReference, 1, False) + UnlockActions() + Return + EndIf + + DisableBuildmodeControls() + akItemReference.Disable() + currentHousingObject.InventoryItem = akItemReference.GetBaseObject() + akItemReference.Delete() + bDroppedFromInventory = True + GoToState("Translation") + EndFunction + + Function activateLongPressed() + LockActions() + + _00E_Playerhousing_Furniture targetRef = Game.GetCurrentCrosshairRef() as _00E_Playerhousing_Furniture + If targetRef && targetRef.IsFurnitureInUse() == False && Utility.IsInMenuMode() == False && CanEnterPlacementMode() + currentHousingObject = targetRef + GoToState("Translation") + Else + UnlockActions() + EndIf + EndFunction + + Function activateShortPressed() + ObjectReference targetRef = Game.GetCurrentCrosshairRef() + If (targetRef as _00E_Playerhousing_Furniture) && (bLockActions == False) + If (targetRef as _00E_Playerhousing_FurnitureItem) + ; Activate() would mean "Take" for this misc. object, so do nothing + ElseIf (targetRef as _00E_Theriantrophist_BlockCraftingSC) || (targetRef as _00E_Playerhousing_MannequinControl) || (targetRef as _00E_BedScript) || (targetRef as _00E_Phasmalist_Workbench) || (targetRef as _00E_PlaceableGrammophonPlay) + ; These objects do activation themselves in OnActivate event + Else + targetRef.Activate(player, true) + EndIf + EndIf + EndFunction + + Function enableBuildmode() + ; Do nothing + EndFunction + + Function disableBuildmode() + GoToState("") + EndFunction + + Bool Function IsNormalActivationEnabled() + Return ((bDisableNormalActivation == False) && (bLockActions == False)) + EndFunction + +ENDSTATE + + +;===================================================================================== +; STATE Translation +;===================================================================================== + +STATE Translation + ; The selected housing object is moved with the player + + Event OnBeginState() + Bool bEnteringPlacement = (bIsInPlacementMode == False) + + Game.DisablePlayerControls(abMovement = false, abFighting = true, abCamSwitch = false, abLooking = false, abSneaking = false, abMenu = true, abActivate = true) + EnterPlacementMode() + + If bEnteringPlacement && bDroppedFromInventory == False + ObjectReference housingObjRef = currentHousingObject as ObjectReference + If (housingObjRef as _00E_PlaceableGrammophonPlay) + (housingObjRef as _00E_PlaceableGrammophonPlay).StopMusic() + EndIf + EndIf + + If bDroppedFromInventory == False + PlaySwitchSound() + Else + bDroppedFromInventory = False + EndIf + + _00E_Playerhousing_TranslationMode.Show() + + (currentHousingObjectInTranslation as _00E_PlayerhousingCurrentOTranslation).Setup(currentHousingObject, bEnteringPlacement, fStoredOffsetAngleZ, fStoredOffsetPositionZ) + + ShowTranslationModeTutorial() + + EnableBuildmodeControls() + EndEvent + + Event OnEndState() + Game.EnablePlayerControls(abMovement = true, abFighting = true, abCamSwitch = true, abLooking = true, abSneaking = true, abMenu = true, abActivate = true) + EndEvent + + Function activateShortPressed() + DisableBuildmodeControls() + (currentHousingObjectInTranslation as _00E_PlayerhousingCurrentOTranslation).Shutdown() + GoToState("Manipulation") + EndFunction + + Function activateLongPressed() + DisableBuildmodeControls() + (currentHousingObjectInTranslation as _00E_PlayerhousingCurrentOTranslation).Shutdown() + FinishPlacingHousingObject() + GoToState("Buildmode") + EndFunction + + Function pickUpPressed() + DisableBuildmodeControls() + (currentHousingObjectInTranslation as _00E_PlayerhousingCurrentOTranslation).Shutdown() + PickUpHousingObject() + GoToState("Buildmode") + EndFunction + + Function enableBuildmode() + ; Do nothing + EndFunction + + Function disableBuildmode() + DisableBuildmodeControls() + (currentHousingObjectInTranslation as _00E_PlayerhousingCurrentOTranslation).Shutdown() + If currentHousingObject + PickUpHousingObject() + EndIf + GoToState("") + EndFunction + + Bool Function IsNormalActivationEnabled() + Return False + EndFunction + +ENDSTATE + + +;===================================================================================== +; STATE Manipulation +;===================================================================================== + +STATE Manipulation + ; The player can change orientation or altitude of the selected housing object by using the keys + + Event OnBeginState() + Game.DisablePlayerControls(abMovement = false, abFighting = true, abCamSwitch = false, abLooking = false, abSneaking = false, abMenu = true, abActivate = true) + Game.SetPlayerAIDriven(True) + + PlaySwitchSound() + + _00E_Playerhousing_ManipulationMode.Show() + + (currentHousingObjectInManipulation as _00E_PlayerhousingCurrentOManipulate).Setup(currentHousingObject) + + ShowManipulationModeTutorial() + + EnableBuildmodeControls() + EndEvent + + Event OnEndState() + Game.SetPlayerAIDriven(False) + Game.EnablePlayerControls(abMovement = true, abFighting = true, abCamSwitch = true, abLooking = true, abSneaking = true, abMenu = true, abActivate = true) + EndEvent + + Function activateShortPressed() + DisableBuildmodeControls() + (currentHousingObjectInManipulation as _00E_PlayerhousingCurrentOManipulate).Shutdown(True) + GoToState("Translation") + EndFunction + + Function activateLongPressed() + DisableBuildmodeControls() + (currentHousingObjectInManipulation as _00E_PlayerhousingCurrentOManipulate).Shutdown(False) + FinishPlacingHousingObject() + GoToState("Buildmode") + EndFunction + + Function pickUpPressed() + DisableBuildmodeControls() + (currentHousingObjectInManipulation as _00E_PlayerhousingCurrentOManipulate).Shutdown(False) + PickUpHousingObject() + GoToState("Buildmode") + EndFunction + + Function enableBuildmode() + ; Do nothing + EndFunction + + Function disableBuildmode() + DisableBuildmodeControls() + (currentHousingObjectInManipulation as _00E_PlayerhousingCurrentOManipulate).Shutdown(False) + If currentHousingObject + PickUpHousingObject() + EndIf + GoToState("") + EndFunction + + Bool Function IsNormalActivationEnabled() + Return False + EndFunction + +ENDSTATE diff --git a/scripts/source/_00e_playerhousingtutorial.psc b/scripts/source/_00e_playerhousingtutorial.psc new file mode 100644 index 00000000..308e38f8 --- /dev/null +++ b/scripts/source/_00e_playerhousingtutorial.psc @@ -0,0 +1,14 @@ +Scriptname _00E_PlayerhousingTutorial extends Quest +{ OBSOLETE. Left for version update. } + +Bool Function StartTutorialIsShown() + Return False +EndFunction + +STATE NoTutorial + + Bool Function StartTutorialIsShown() + Return True + EndFunction + +Endstate diff --git a/scripts/source/_00e_playersetupscript.psc b/scripts/source/_00e_playersetupscript.psc new file mode 100644 index 00000000..65452046 --- /dev/null +++ b/scripts/source/_00e_playersetupscript.psc @@ -0,0 +1,663 @@ +Scriptname _00E_PlayerSetUpScript extends ObjectReference +{Initializes all the necessary Quests, maintains the player, contains various OnPlayerLoadGame() failsafes} + +Float Property CURRENT_PATCH_VERSION = 2.09 AutoReadOnly + + +;===================================================================================== +; EVENTS +;===================================================================================== + +Event OnInit() + + ; needs the IsInMenuMode() check to prevent stuck messages when FS is not loaded + While Utility.IsInMenuMode() + Utility.WaitMenuMode(0.1) + EndWhile + + CheckIfForgottenStoriesIsLoaded() + + If self == (PlayerREF as ObjectReference) + + If fPatchVersion == 0.00 + fPatchVersion = CURRENT_PATCH_VERSION + EndIf + + GoToState("RealPlayer") + PlayerREF.SetActorValue("speedMult", 95) + PlayerREF.SetActorValue("Healrate", 0) + + SetAmountAutosaves() + + EnableDisableKillmove() + + AddPerks() + + DisableRegularWaiting() + StartQuests(QuestsToStart) + + EndIf + +EndEvent + +Event OnPlayerLoadGame() + If self == (PlayerREF as ObjectReference) ; A check just in case. Most likely this condition is always True + CheckIfForgottenStoriesIsLoaded() + Maintenance() + If GetState() != "RealPlayer" ; Post-1.2.5.0 version update + GoToState("RealPlayer") + EndIf + EndIf +EndEvent + +State RealPlayer + + ;/ Event OnBeginState() + Debug.Trace(self + ": OnBeginState RealPlayer") + EndEvent /; + +EndState + + +;===================================================================================== +; FUNCTIONS +;===================================================================================== + +Function CheckIfForgottenStoriesIsLoaded() + + ; function that quits back to the main menu when the Enderal - Forgotten Stories.esm is not not being added to the plugins.txt + ; and hence not being loaded in-game. Unknown reason, probably write protection issues + + If Game.GetModByName("Enderal - Forgotten Stories.esm") == 255 + bFSWasNotLoadedBefore = true + _00E_Game_ForgottenStoriesNotLoaded.Show() + Game.QuitToMainMenu() + Else + If bFSWasNotLoadedBefore == true + AddPerks() + If FSQuestsToStartFailsafePatch1560 == None + FSQuestsToStartFailsafePatch1560 = Game.GetFormFromFile(0x0102F4B0, "Enderal - Forgotten Stories.esm") as FormList + EndIf + StartQuests(FSQuestsToStartFailsafePatch1560) + bFSWasNotLoadedBefore = false + EndIf + EndIf + +EndFunction + +;===================================================================================== +; 1.5.6.0 +;===================================================================================== + +Function ResetFSNQR05Temple() + + ; resets the cells which is needed due to the fixes on enemies and ambushes in patch 1.5.6.0 + Quest FS_NQR05 = Game.GetFormFromFile(0x000438D2,"Skyrim.esm") as Quest + Cell FS_NQR05_Temple_02_New = Game.GetFormFromFile(0x00045101,"Skyrim.esm") as Cell + If FS_NQR05.GetStage() < 165 + FS_NQR05_Temple_02_New.Reset() + EndIf + +EndFunction + +;===================================================================================== +; 1.5.7.0 +;===================================================================================== + +Function CleanMQ12bGhostFlags() + + ; cleans old ghost flags on certain NPCs after the siege when patch 1.5.7.0 is applied + ; only needed once, since it won't happen anymore for everyone with a save before the siege + _00E_MQ12b_Functions MQ12bFunctions = Game.GetFormFromFile(0x0002EBAD,"Skyrim.esm") as _00E_MQ12b_Functions + MQ12bFunctions.OldRemoveGhostFlag() + +EndFunction + +;===================================================================================== +; 1.5.8.0 +;===================================================================================== + +Function ResetAuroraOnLoad() + ; resets Aurora if she was stuck during the ritual scene due to the gamehour change while she was in the smoking animation + _00E_FS_NQ07_Functions FS_NQ07Functions = Game.GetFormFromFile(0x0101CA09,"Enderal - Forgotten Stories.esm") as _00E_FS_NQ07_Functions + FS_NQ07Functions.ResetAurora() +EndFunction + +Function DisableMQ12bPanicTriggerbox() + ; disables MQ12b_SC3_PanicTriggerboxREF when patch 1.5.8.0 is applied + _00E_MQ12b_Functions MQ12bFunctions = Game.GetFormFromFile(0x0002EBAD,"Skyrim.esm") as _00E_MQ12b_Functions + If MQ12bFunctions.IsCompleted() + MQ12bFunctions.DisablePanicTriggerbox() + EndIf +EndFunction + +Function ReAddDarkKeeperAffinity() + + ; Dark Keeper Affinity Update + Spell _00E_Affinity_AbDarkKeeper = Game.GetFormFromFile(0x00143340,"Skyrim.esm") as Spell + If PlayerREF.HasSpell(_00E_Affinity_AbDarkKeeper) + PlayerREF.RemoveSpell(_00E_Affinity_AbDarkKeeper) + Utility.Wait(1) + PlayerREF.AddSpell(_00E_Affinity_AbDarkKeeper, false) + EndIf + +EndFunction + +Function ReAddFuryDrivenPerk() + + ; Fury Driven ability update + Spell abFuryDriven = Game.GetFormFromFile(0x000855CE, "Skyrim.esm") as Spell + If PlayerREF.HasSpell(abFuryDriven) + PlayerREF.RemoveSpell(abFuryDriven) + Utility.Wait(1) + PlayerREF.AddSpell(abFuryDriven, False) + EndIf + +EndFunction + +Function UpdateLivingTempleTrigger() + + ; Living Temple's ambush trigger update + ObjectReference triggerRef = Game.GetFormFromFile(0x000C6766, "Skyrim.esm") as ObjectReference + (triggerRef as defaultActivateSelf).playerAndAlliesOnly = True + +EndFunction + +Function UpdateMQ11a() + + ; MQ11a update + ObjectReference portcullisRef = Game.GetFormFromFile(0x000E1D1F, "Skyrim.esm") as ObjectReference + Quest MQ11a = Game.GetFormFromFile(0x0002EBA9, "Skyrim.esm") as Quest + If (MQ11a.GetStage() <= 125) && (portcullisRef.Is3DLoaded() == False) + (portcullisRef as _00E_DUNGate01Script).isOpen = False + EndIf + + If MQ11a.IsRunning() && (MQ11a.IsCompleted() == False) + (MQ11a as _00E_MQ11a_Functions).UpdateCaliaAliasScriptState() + EndIf + + ObjectReference NQ34_EnableMarkerREF = Game.GetFormFromFile(0x000480E8, "Skyrim.esm") as ObjectReference + If MQ11a.GetStage() >= 45 + NQ34_EnableMarkerREF.Enable() + EndIf + + Actor NQ34_WildMageREF = Game.GetFormFromFile(0x00141F00, "Skyrim.esm") as Actor + Quest NQ34 = Game.GetFormFromFile(0x00020A12, "Skyrim.esm") as Quest + If NQ34.GetStage() == 15 || NQ34.GetStage() == 20 + NQ34_WildMageREF.Enable() + EndIf + + If NQ34_WildMageREF.IsDead() && NQ34.GetStage() == 15 + NQ34.SetStage(20) + EndIf + +EndFunction + +Function AddPerks() + + ; adds the new Balancing perks for alchemy potions to the player, this is needed because of the changes with the Lycantroph + PlayerREF.AddPerk(_00E_FS_Alchemy_BalancingPerk) + PlayerREF.AddPerk(_00E_FS_Alchemy_BalancingPerk_RestorePotions) + +EndFunction + +Function DisableRegularWaiting() +{Disables regular waiting by adding the no-wait ability} + + PlayerREF.AddSpell(_00E_AbBlockWaiting, False) + +EndFunction + +Function StartQuests(Formlist QuestList) + + ; starts all quests that are in the formlist + Int iIndex = QuestList.GetSize() + While iIndex + iIndex -= 1 + Quest kQuest = QuestList.GetAt(iIndex) as Quest + kQuest.Start() + endwhile + +EndFunction + +;===================================================================================== +; 1.6.0.0 +;===================================================================================== + +Function UpdatePhasmalistContainer() + + ObjectReference Phasmalist_ApparationInventory_Bandit_Tier4 = Game.GetFormFromFile(0x0101E99B, "Enderal - Forgotten Stories.esm") as ObjectReference + ObjectReference Phasmalist_ApparationInventory_Archer_Tier5 = Game.GetFormFromFile(0x0101E9CA, "Enderal - Forgotten Stories.esm") as ObjectReference + Armor _00E_Phasmalist_Trinket_Bandit_Tier4 = Game.GetFormFromFile(0x0101E9A6, "Enderal - Forgotten Stories.esm") as Armor + Armor _00E_Phasmalist_Trinket_Archer_Tier5 = Game.GetFormFromFile(0x0101E9D4, "Enderal - Forgotten Stories.esm") as Armor + + _00E_Phasmalist_ApparationSC _36E_Phasmalist_Apparation_Hybrid_Tier4 = Game.GetFormFromFile(0x01025309, "Enderal - Forgotten Stories.esm") as _00E_Phasmalist_ApparationSC + _36E_Phasmalist_Apparation_Hybrid_Tier4.inventoryContainer = Phasmalist_ApparationInventory_Bandit_Tier4 + + If (PlayerREF.GetItemCount(_00E_Phasmalist_Trinket_Bandit_Tier4) > 0 && PlayerREF.GetItemCount(_00E_Phasmalist_Trinket_Archer_Tier5) == 0) + Phasmalist_ApparationInventory_Archer_Tier5.RemoveAllItems(Phasmalist_ApparationInventory_Bandit_Tier4, false, true) + EndIf + +EndFunction + +Function UpdatePassengerBookAtShipwreck() + + _00E_FS_NQ02_Functions FS_NQ02_Functions = (Game.GetFormFromFile(0x000438AC, "Skyrim.esm") as Quest) as _00E_FS_NQ02_Functions + FS_NQ02_Functions.UpdatePassengerBook() + +EndFunction + +Function ResetMQ02Riddle() + + GlobalVariable _00E_MQ02Riddle = Game.GetFormFromFile(0x00074B07, "Skyrim.esm") as GlobalVariable + + If _00E_MQ02Riddle.GetValueInt() > 0 + _00E_MQ02_Functions MQ02Functions = Game.GetFormFromFile(0x0002EBA1, "Skyrim.esm") as _00E_MQ02_Functions + MQ02Functions.ResetRiddle() + EndIf + +EndFunction + + +;===================================================================================== +; 1.6.1.0 +;===================================================================================== + + +Function UpdateMQ02() + _00E_MQ02_Functions MQ02Functions = Game.GetFormFromFile(0x0002EBA1, "Skyrim.esm") as _00E_MQ02_Functions + Int mq02stage = MQ02Functions.GetStage() + If mq02stage >= 138 && mq02stage < 170 + MQ02Functions.MQ02_TripToArkEnableMarker.EnableNoWait() + EndIf +EndFunction + + +;===================================================================================== +; 1.6.2.0 +;===================================================================================== + + +Function UpdateItemHandler() + + Cell ClassMenue = Game.GetFormFromFile(0x000A7FBC, "Skyrim.esm") as Cell + + If PlayerREF.GetParentCell() == ClassMenue + Quest ClassMenuItemHandler = Game.GetFormFromFile(0x00048442, "Skyrim.esm") as Quest + ReferenceAlias Player = ClassMenuItemHandler.GetAliasByName("Player") as ReferenceAlias + Player.ForceRefTo(PlayerREF) + EndIf + +EndFunction + + +;===================================================================================== +; 2.0.6 +;===================================================================================== + +Function UpdateMQ12b_206() + _00E_MQ12b_Functions MQ12bFunctions = Game.GetFormFromFile(0x0002EBAD, "Skyrim.esm") as _00E_MQ12b_Functions + Quest MQ15 = Game.GetFormFromFile(0x0002EBB0, "Skyrim.esm") as Quest + If MQ12bFunctions.GetStage() >= 135 && MQ15.GetStage() < 5 + MQ12bFunctions.OldReenableDisabledNPC() + EndIf +EndFunction + + +;===================================================================================== +; 2.0.8 +;===================================================================================== + +Function Update_208() + ; Obsolete abilities cleanup + _00E_FS_NQ07_Functions FS_NQ07_Quest = Game.GetFormFromFile(0x0001CA09, "Enderal - Forgotten Stories.esm") as _00E_FS_NQ07_Functions + Int iFS_NQ07Stage = FS_NQ07_Quest.GetStage() + If iFS_NQ07Stage >= 5 && iFS_NQ07Stage < 410 + FS_NQ07_Quest.UpdateAarosCarryTraySpell() + Else + RemoveObsoleteSpell(0x0009A893, "Skyrim.esm", 0x000F649A, "Skyrim.esm") + EndIf + + RemoveObsoleteSpell(0x0010D339, "Skyrim.esm", 0x000F649A, "Skyrim.esm") + RemoveObsoleteSpell(0x0006FFAF, "Skyrim.esm", 0x000F6498, "Skyrim.esm") + RemoveObsoleteSpell(0x000F64A0, "Skyrim.esm", 0x000F6498, "Skyrim.esm") + + ; Refill _00E_AnimTest_SC package arrays where needed + FillAnimTestPackages(0x00137889, "Skyrim.esm", 0x00070657, "Skyrim.esm") + FillAnimTestPackages(0x0013788A, "Skyrim.esm", 0x00070657, "Skyrim.esm") + FillAnimTestPackages(0x0013789F, "Skyrim.esm", 0x00070657, "Skyrim.esm") + FillAnimTestPackages(0x001378A2, "Skyrim.esm", 0x00070657, "Skyrim.esm") + FillAnimTestPackages(0x001378AA, "Skyrim.esm", 0x00070657, "Skyrim.esm") + FillAnimTestPackages(0x001378AB, "Skyrim.esm", 0x00070657, "Skyrim.esm") + FillAnimTestPackages(0x00147E12, "Skyrim.esm", 0x00070657, "Skyrim.esm") + FillAnimTestPackages(0x00147E14, "Skyrim.esm", 0x00070657, "Skyrim.esm") + + FillAnimTestPackages(0x0010D336, "Skyrim.esm", 0x00070645, "Skyrim.esm") + FillAnimTestPackages(0x0010D33B, "Skyrim.esm", 0x00070645, "Skyrim.esm") + FillAnimTestPackages(0x00147DEA, "Skyrim.esm", 0x00070645, "Skyrim.esm") + FillAnimTestPackages(0x00147E37, "Skyrim.esm", 0x00070645, "Skyrim.esm") + + ; "Gypsy minstrels" update + Keyword performSpotKwd = Game.GetFormFromFile(0x000FB905, "Skyrim.esm") as Keyword + (Game.GetFormFromFile(0x00044EBC, "Skyrim.esm") as _00E_BardPlayInstrumentScript).LinkedPlayMarkerKeyword = performSpotKwd + + (Game.GetFormFromFile(0x00046D79, "Skyrim.esm") as _00E_GypsyMinstrelsControlScript).UpdateWaypoint() +EndFunction + +Function RemoveObsoleteSpell(Int idNPC, String esmNPC, Int idSpell, String esmSpell) + Spell obsoleteSpell = Game.GetFormFromFile(idSpell, esmSpell) as Spell + (Game.GetFormFromFile(idNPC, esmNPC) as Actor).RemoveSpell(obsoleteSpell) +EndFunction + +Function FillAnimTestPackages(Int idNPC, String esmNPC, Int idPackage, String esmPackage) + Package newPackage = Game.GetFormFromFile(idPackage, esmPackage) as Package + (Game.GetFormFromFile(idNPC, esmNPC) as _00E_AnimTest_SC).UpdateFillPackages(newPackage) +EndFunction + + +;===================================================================================== +; 2.0.9 +;===================================================================================== + +Function Update_209() + Spell abSoulcaller = Game.GetFormFromFile(0x002F0EA, "Enderal - Forgotten Stories.esm") as Spell + If PlayerREF.HasSpell(abSoulcaller) + PlayerREF.RemoveSpell(abSoulcaller) + Utility.Wait(1) + PlayerREF.AddSpell(abSoulcaller, False) + EndIf + + Perk perkBloodlust = Game.GetFormFromFile(0x00069D38, "Skyrim.esm") as Perk + _ResetPerk(perkBloodlust) + + _00E_PlayerhousingMaster.GetMaster().Update_209() +EndFunction + + +;===================================================================================== +; ALL UPDATES +;===================================================================================== + +Function EnableDisableKillmove() + + ; it seems like that this ini setting does not do stuff by itself (or it is bugged) + ; therefore we need to read it from the file and change the global with which the killmoves are conditioned + If (Utility.GetINIBool("bVATSDisable:VATS") == 1) + KillMove.SetValueInt(0) + ElseIf (Utility.GetINIBool("bVATSDisable:VATS") == 0) + KillMove.SetValueInt(1) + EndIf + +EndFunction + +Function SetAmountAutosaves() + + ; increases amount of autosaves created from 3 to 5 without editing the ini files + ; new default ini files already have set the int to 5 + If Utility.GetINIInt("iAutoSaveCount:SaveGame") == 3 + Utility.SetINIInt("iAutoSaveCount:SaveGame", 5) + EndIf + +EndFunction + +Function SetAutoSaveInterval() + + ; updates the autosave interval + _00E_AutoSaveSystem_Functions AutoSaveSystem_Functions = Game.GetFormFromFile(0x00048141, "Skyrim.esm") as _00E_AutoSaveSystem_Functions + AutoSaveSystem_Functions.UpdateAutoSaveInterval() + +EndFunction + +Function FailsafeMQ05PrologueAliases() + + ; failsafe for issue 1536, fills empty aliases + If MQ05PrologueFunctions == None + MQ05PrologueFunctions = Game.GetFormFromFile(0x00033A5B, "Skyrim.esm") as _00E_MQ05Prologue_Functions + EndIf + MQ05PrologueFunctions.FillEmptyAliasesFailsafe() + +EndFunction + +Function RefreshMountNamesOnLoad() + + _00E_NQ06_Functions NQ06Functions = Game.GetFormFromFile(0x000725BA,"Skyrim.esm") as _00E_NQ06_Functions + NQ06Functions.RefreshNamesOnSaveLoad() + +EndFunction + +Function _ResetPerk(Perk p) + If PlayerREF.HasPerk(p) + PlayerREF.RemovePerk(p) + PlayerREF.AddPerk(p) + EndIf +EndFunction + +Function ResetArmorWeightPerks() + + ; Perks modifying armor weights need some push on each game load to work. + ; The push is needed only if the player is over-encumbered on game load. + ; If the player is not over-encumbered, the push is not needed because checking the inventory, picking up items, sheathing/drawing a weapon will reset the perks anyway. + If PlayerREF.IsOverEncumbered() + _ResetPerk(_00E_Class_Keeper_P05_C_Conditioning) + _ResetPerk(_00E_Class_Vagrant_P05_B_Lightweight) + EndIf + +EndFunction + +Function FixMoreAffinitiesMod() +{Fixes "More Affinites" mod missing properties in the Levelsystem scripts} + + _00E_QuestFunctions QuestFunctionsScript = (Game.GetFormFromFile(0x00010AA2, "Skyrim.esm") as Quest) as _00E_QuestFunctions + If QuestFunctionsScript._00E_RemoveAllItems_TrashContainer == NONE + + Debug.Messagebox("Found broken scripts caused by mod >>More Affinities<<. Press OK to fix scripts.") + _00E_ConfigMenu ConfigMenuScript = (Game.GetFormFromFile(0x00010AA2, "Skyrim.esm") as Quest) as _00E_ConfigMenu + ConfigMenuScript.controlQuest = (Game.GetFormFromFile(0x0101EC71, "Enderal - Forgotten Stories.esm") as Quest) as _FS_Phasmalist_ControlQuest + ConfigMenuScript._00E_ConfigMenu_DisableCraftingTutorials = Game.GetFormFromFile(0x00046D8E, "Skyrim.esm") as Message + ConfigMenuScript._00E_ConfigMenu_DisableMenuTutorials = Game.GetFormFromFile(0x00046D8A, "Skyrim.esm") as Message + ConfigMenuScript._00E_ConfigMenu_DisableOtherTutorials = Game.GetFormFromFile(0x00046D8F, "Skyrim.esm") as Message + ConfigMenuScript._00E_ConfigMenu_DisableQuestTutorials = Game.GetFormFromFile(0x00046D8C, "Skyrim.esm") as Message + ConfigMenuScript._00E_ConfigMenu_DisableReadAloudBooks = Game.GetFormFromFile(0x0102E982, "Enderal - Forgotten Stories.esm") as Message + ConfigMenuScript._00E_ConfigMenu_DisableSkillTutorials = Game.GetFormFromFile(0x00046D8D, "Skyrim.esm") as Message + ConfigMenuScript._00E_ConfigMenu_GameplayOptions = Game.GetFormFromFile(0x0102F1BC, "Enderal - Forgotten Stories.esm") as Message + ConfigMenuScript._00E_ConfigMenu_Meditate = Game.GetFormFromFile(0x00046D98, "Skyrim.esm") as Message + ConfigMenuScript._00E_ConfigMenu_OtherOptions = Game.GetFormFromFile(0x00046D89, "Skyrim.esm") as Message + ConfigMenuScript._00E_ConfigMenu_VideoSkip = Game.GetFormFromFile(0x0102E983, "Enderal - Forgotten Stories.esm") as Message + ConfigMenuScript._00E_DisableCraftingTutorials = Game.GetFormFromFile(0x00046D90, "Skyrim.esm") as GlobalVariable + ConfigMenuScript._00E_DisableMenuTutorials = Game.GetFormFromFile(0x00046D8B, "Skyrim.esm") as GlobalVariable + ConfigMenuScript._00E_DisableOtherTutorials = Game.GetFormFromFile(0x00046D93, "Skyrim.esm") as GlobalVariable + ConfigMenuScript._00E_DisableQuestTutorials = Game.GetFormFromFile(0x00046D92, "Skyrim.esm") as GlobalVariable + ConfigMenuScript._00E_DisableReadAloudBooks = Game.GetFormFromFile(0x0102E984, "Enderal - Forgotten Stories.esm") as GlobalVariable + ConfigMenuScript._00E_DisableSkillTutorials = Game.GetFormFromFile(0x00046D91, "Skyrim.esm") as GlobalVariable + ConfigMenuScript._00E_FS_ConfigMenu_Mount_Teleport = Game.GetFormFromFile(0x0102F1B9, "Enderal - Forgotten Stories.esm") as Message + ConfigMenuScript._00E_FS_ConfigMenu_Phasmalist_Teleport = Game.GetFormFromFile(0x0101F2B6, "Enderal - Forgotten Stories.esm") as Message + ConfigMenuScript._00E_FS_IsForgottenStoriesActivated = Game.GetFormFromFile(0x0004320E, "Skyrim.esm") as GlobalVariable + ConfigMenuScript._00E_HorseFlute_New = ((Game.GetFormFromFile(0x000725BA, "Skyrim.esm") as Quest).GetAliasByName("HorseFlute")) as _00E_Horseflute_SC + ConfigMenuScript._00E_VideoSkip = Game.GetFormFromFile(0x0102E985, "Enderal - Forgotten Stories.esm") as GlobalVariable + + + QuestFunctionsScript.BastionPerks = Game.GetFormFromFile(0x0006686B, "Skyrim.esm") as Formlist + QuestFunctionsScript.DerwishPerks = Game.GetFormFromFile(0x0006686D, "Skyrim.esm") as Formlist + QuestFunctionsScript.ElementalismPerks = Game.GetFormFromFile(0x00066875, "Skyrim.esm") as Formlist + QuestFunctionsScript.EspionagePerks = Game.GetFormFromFile(0x00066889, "Skyrim.esm") as Formlist + QuestFunctionsScript.GameHour = Game.GetFormFromFile(0x00000038, "Skyrim.esm") as GlobalVariable + QuestFunctionsScript.Gold001 = Game.GetFormFromFile(0x0000000f, "Skyrim.esm") as MiscObject + QuestFunctionsScript.LifeAndDeathPerks = Game.GetFormFromFile(0x00066873, "Skyrim.esm") as Formlist + QuestFunctionsScript.MAGIllusionCharm = Game.GetFormFromFile(0x00075805, "Skyrim.esm") as Sound + QuestFunctionsScript.ManipulationPerks = Game.GetFormFromFile(0x0006686A, "Skyrim.esm") as Formlist + QuestFunctionsScript.PlayerSkillMenu = ((Game.GetFormFromFile(0x00010AA2, "Skyrim.esm") as Quest).GetAliasByName("Player") as Alias) as _00E_Game_SkillmenuSC + QuestFunctionsScript.RagePerks = Game.GetFormFromFile(0x00066887, "Skyrim.esm") as Formlist + QuestFunctionsScript.SympathyEsme = Game.GetFormFromFile(0x0102A498, "Enderal - Forgotten Stories.esm") as GlobalVariable + QuestFunctionsScript.TrickeryPerks = Game.GetFormFromFile(0x0006687F, "Skyrim.esm") as Formlist + QuestFunctionsScript.VagabondPerks = Game.GetFormFromFile(0x00066877, "Skyrim.esm") as Formlist + QuestFunctionsScript._00E_AchievementsEnabled = Game.GetFormFromFile(0x00046F83, "Skyrim.esm") as GlobalVariable + QuestFunctionsScript._00E_AllAmmos = Game.GetFormFromFile(0x000456C0, "Skyrim.esm") as Formlist + QuestFunctionsScript._00E_ArmorSetScript_sSetBonusRemoved = Game.GetFormFromFile(0x00036F96, "Skyrim.esm") as Message + QuestFunctionsScript._00E_DisableQuestTutorials = Game.GetFormFromFile(0x00046D92, "Skyrim.esm") as GlobalVariable + QuestFunctionsScript._00E_DisableSkillTutorials = Game.GetFormFromFile(0x00046D91, "Skyrim.esm") as GlobalVariable + QuestFunctionsScript._00E_FS_A3_AlreadyKnowThisLevel = Game.GetFormFromFile(0x0102F533, "Enderal - Forgotten Stories.esm") as Message + QuestFunctionsScript._00E_FS_A3_NeedToLearnOtherLevels = Game.GetFormFromFile(0x0101EC7D, "Enderal - Forgotten Stories.esm") as Message + QuestFunctionsScript._00E_FS_A3_sIn = Game.GetFormFromFile(0x00043BE0, "Skyrim.esm") as Message + QuestFunctionsScript._00E_FS_A3_sMageClassName = Game.GetFormFromFile(0x00043BE4, "Skyrim.esm") as Message + QuestFunctionsScript._00E_FS_A3_sRogueClassName = Game.GetFormFromFile(0x00043BE3, "Skyrim.esm") as Message + QuestFunctionsScript._00E_FS_A3_sToUnlockThisClass = Game.GetFormFromFile(0x00043BE1, "Skyrim.esm") as Message + QuestFunctionsScript._00E_FS_A3_sWarriorClassName = Game.GetFormFromFile(0x00043BE2, "Skyrim.esm") as Message + QuestFunctionsScript._00E_FS_A3_sYouNeedSkillpoints = Game.GetFormFromFile(0x00043BDF, "Skyrim.esm") as Message + QuestFunctionsScript._00E_FS_NQ02_Esme = Game.GetFormFromFile(0x0101F0D0, "Enderal - Forgotten Stories.esm") as ActorBase + QuestFunctionsScript._00E_FS_NQR05_SlowMotionSP = Game.GetFormFromFile(0x0102E2BD, "Enderal - Forgotten Stories.esm") as Spell + QuestFunctionsScript._00E_FS_NQR05_SlowMotion_IntroM = Game.GetFormFromFile(0x0102E2BF, "Enderal - Forgotten Stories.esm") as Sound + QuestFunctionsScript._00E_FS_NQR05_SlowMotion_OutroM = Game.GetFormFromFile(0x0102E2C1, "Enderal - Forgotten Stories.esm") as Sound + QuestFunctionsScript._00E_Levelsystem_sAbilityStanceQyrai = Game.GetFormFromFile(0x00046D9B, "Skyrim.esm") as Message + QuestFunctionsScript._00E_Levelsystem_sAbilityStanceSkaragg = Game.GetFormFromFile(0x00046D9C, "Skyrim.esm") as Message + QuestFunctionsScript._00E_PleaseRemoveMoney = Game.GetFormFromFile(0x000480DA, "Skyrim.esm") as Message + QuestFunctionsScript._00E_RemoveAllItems_TrashContainer = Game.GetFormFromFile(0x000469E7, "Skyrim.esm") as ObjectReference + QuestFunctionsScript._00E_SkillbookWarning = Game.GetFormFromFile(0x00031ACF, "Skyrim.esm") as Message + + + _00E_Game_SkillmenuSC SkillMenuScript = ((Game.GetFormFromFile(0x00010AA2, "Skyrim.esm") as Quest).GetAliasByName("Player") as Alias) as _00E_Game_SkillmenuSC + SkillMenuScript._00E_FS_Game_Affinity_Spectralist = Game.GetFormFromFile(0x01029A35, "Skyrim.esm") as Message + + + _00E_PlayerHousing_CellNameSC CellNameScript = ((Game.GetFormFromFile(0x00010AA2, "Skyrim.esm") as Quest).GetAliasByName("Player") as Alias) as _00E_PlayerHousing_CellNameSC + CellNameScript.FS_NQR03 = Game.GetFormFromFile(0x0014CEA2, "Skyrim.esm") as Quest + CellNameScript.FS_NQR03_RhalataTemple = Game.GetFormFromFile(0x0010D1C2, "Skyrim.esm") as Cell + CellNameScript._00E_sPlayerHouseMarketQuarterName = Game.GetFormFromFile(0x00047CA5, "Skyrim.esm") as Message + CellNameScript._00E_sPlayerHouseNobleQuarterName = Game.GetFormFromFile(0x00047CA6, "Skyrim.esm") as Message + CellNameScript._00E_sRhalataTempleName = Game.GetFormFromFile(0x00047C29, "Skyrim.esm") as Message + + + _00E_WeatherControlScriptSC WeatherControlScript = ((Game.GetFormFromFile(0x00010AA2, "Skyrim.esm") as Quest).GetAliasByName("Player") as Alias) as _00E_WeatherControlScriptSC + WeatherControlScript.CapitalCityCastleWorld = Game.GetFormFromFile(0x00070729, "Skyrim.esm") as WorldSpace + WeatherControlScript.CapitalCityLocation = Game.GetFormFromFile(0x000A1A12, "Skyrim.esm") as Location + WeatherControlScript.MQ09 = Game.GetFormFromFile(0x0007FA91, "Skyrim.esm") as Quest + WeatherControlScript.MQ12b = Game.GetFormFromFile(0x0002EBAD, "Skyrim.esm") as Quest + WeatherControlScript.MQ17 = Game.GetFormFromFile(0x0007FA93, "Skyrim.esm") as Quest + WeatherControlScript.SkyrimOvercastRain = Game.GetFormFromFile(0x000C821F, "Skyrim.esm") as Weather + WeatherControlScript.Vyn = Game.GetFormFromFile(0x00001D3C, "Skyrim.esm") as WorldSpace + WeatherControlScript._00E_EnderalOvercast = Game.GetFormFromFile(0x00072785, "Skyrim.esm") as Weather + WeatherControlScript._00E_MQ11c_SilberhainDeadWeather = Game.GetFormFromFile(0x00096807, "Skyrim.esm") as GlobalVariable + WeatherControlScript._00E_SuntempleLocations = Game.GetFormFromFile(0x0003BB5B, "Skyrim.esm") as FormList + + Utility.Wait(1) + Debug.Messagebox("Scripts fixed. Make sure to save the game. Restart the client and reload the save that you just created.\n If you have set items equipped, unequip them all and re-equip them for potential set bonuses to apply.") + EndIf + +EndFunction + +;===================================================================================== +; MAINTENANCE +;===================================================================================== + +Function Maintenance() + + If fPatchVersion <= 1.25 && !bdoOnce + int iButton01 = _00E_Game_OldSaves_01.Show() + If iButton01 == 0 + Game.QuitToMainMenu() + ElseIf iButton01 == 1 + int iButton02 = _00E_Game_OldSaves_02.Show() + If iButton02 == 0 + Game.QuitToMainMenu() + ElseIf iButton02 == 1 + bdoOnce = true + EndIf + EndIf + ElseIf fPatchVersion >= 1.5 && fPatchVersion < CURRENT_PATCH_VERSION + + ; only do this once when update 1.5.6.0 is applied + If fPatchVersion < 1.56 + ResetFSNQR05Temple() + EndIf + ; only do this once when update 1.5.7.0 is applied + If fPatchVersion < 1.57 + CleanMQ12bGhostFlags() + EndIf + ; only do this once when update 1.5.8.0 is applied + If fPatchVersion < 1.58 + ResetAuroraOnLoad() + DisableMQ12bPanicTriggerbox() + ReAddDarkKeeperAffinity() + ReAddFuryDrivenPerk() + UpdateLivingTempleTrigger() + UpdateMQ11a() + EndIf + ; only do this once when update 1.6.0.0 is applied + If fPatchVersion < 1.60 + UpdatePhasmalistContainer() + UpdatePassengerBookAtShipwreck() + ResetMQ02Riddle() + EndIf + ; only do this once when update 1.6.1.0 is applied + If fPatchVersion < 1.61 + UpdateMQ02() + EndIf + ; only do this once when update 1.6.2.0 is applied + If fPatchVersion < 1.62 + UpdateItemHandler() + EndIf + ; only do this once when update 2.0.6 (SE) is applied + If fPatchVersion < 2.06 + UpdateMQ12b_206() + EndIf + ; only do this once when update 2.0.8 (SE) is applied + If fPatchVersion < 2.08 + Update_208() + EndIf + ; only do this once when update 2.0.9 (SE) is applied + If fPatchVersion < 2.09 + Update_209() + EndIf + fPatchVersion = CURRENT_PATCH_VERSION + EndIf + + ; changes to the actor value healrate will not persist in consecutive saves + ; every time a save gets loaded the healrate needs to be set to 0, otherwise it will go back again to default at 0.7 + ; this is called before active magic effects of potions or spells are applied to the player which could also alter the value + PlayerREF.SetActorValue("Healrate", 0) + + EnableDisableKillmove() + + ResetArmorWeightPerks() + + SetAmountAutosaves() + + SetAutoSaveInterval() + + FailsafeMQ05PrologueAliases() + + RefreshMountNamesOnLoad() + + ; fixes properties that were accidentally set to NONE by the "More Affinities" mod + If Game.GetModByName("Enderal_FS_More_Affinities.esp") != 255 + FixMoreAffinitiesMod() + EndIf + +EndFunction + +;===================================================================================== +; PROPERTIES +;===================================================================================== + +float fPatchVersion +bool bdoOnce = false +bool bFSWasNotLoadedBefore = false + +_00E_MQ05Prologue_Functions Property MQ05PrologueFunctions Auto + +Perk Property _00E_FS_Alchemy_BalancingPerk Auto +Perk Property _00E_FS_Alchemy_BalancingPerk_RestorePotions Auto + +Spell Property _00E_AbBlockWaiting Auto +Actor Property PlayerREF Auto + +FormList Property QuestsToStart Auto +FormList Property FSQuestsToStartFailsafePatch1560 Auto + +Message Property _00E_Game_OldSaves_01 Auto +Message Property _00E_Game_OldSaves_02 Auto +Message Property _00E_Game_ForgottenStoriesNotLoaded Auto + +GlobalVariable Property KillMove Auto + +Perk Property _00E_Class_Keeper_P05_C_Conditioning Auto +Perk Property _00E_Class_Vagrant_P05_B_Lightweight Auto