Browse Source

Add Props 1 and Props 2

Need to work on getting particles to not die out
habeebweeb 4 years ago
parent
commit
724d3bae2a

+ 52 - 0
COM3D2.MeidoPhotoStudio.Plugin/Config/MeidoPhotoStudio/mm_dogu_extend.json

@@ -0,0 +1,52 @@
+[
+    "megane001_z2_scenario_model",
+    "odogu_chuukaset_chahan_photo_ver",
+    "odogu_chuukaset_gyouza_photo_ver",
+    "odogu_chuukaset_mabo_photo_ver",
+    "odogu_chuukaset_tea_photo_ver",
+    "odogu_classroomchair_photo_ver",
+    "odogu_classroomdesk_photo_ver",
+    "odogu_handcameravv_photo_ver",
+    "odogu_kitchen_photo_ver",
+    "odogu_maidroomchair_photo_ver",
+    "odogu_oxcamera_photo_ver",
+    "odogu_pc_photo_ver",
+    "odogu_pc_keyboard_photo_ver",
+    "odogu_pc_monitor_photo_ver",
+    "odogu_pc_mouse_photo_ver",
+    "odogu_planter_lightblue",
+    "odogu_planter_red",
+    "odogu_pr_table_photo_ver",
+    "odogu_pr_table_chuuka_photo_ver",
+    "odogu_pr_table_wasyoku_photo_ver",
+    "odogu_pr_table_yousyoku_photo_ver",
+    "odogu_publictoiletbenki_photo_ver",
+    "odogu_salonscreen_photo_ver",
+    "odogu_seikaku_cool",
+    "odogu_seikaku_jyunshin",
+    "odogu_seikaku_tsundere",
+    "odogu_sentaku_kago_photo_ver",
+    "odogu_sentaku_towel_photo_ver",
+    "odogu_sentakumono",
+    "odogu_smroom2_sankakumokuba",
+    "odogu_styluspen_black",
+    "odogu_styluspen_blue",
+    "odogu_styluspen_green",
+    "odogu_styluspen_red",
+    "odogu_styluspen_white",
+    "odogu_styluspen_yellow",
+    "odogu_tableflower_photo_ver",
+    "odogu_tabletpc",
+    "odogu_virginroad_photo_ver",
+    "odogu_vvlight_photo_ver",
+    "odogu_wasyokuset_gohan_photo_ver",
+    "odogu_wasyokuset_hashi_photo_ver",
+    "odogu_wasyokuset_misoshiru_photo_ver",
+    "odogu_wasyokuset_nimono_photo_ver",
+    "odogu_wasyokuset_ocha_photo_ver",
+    "odogu_yousyokuset_chickenrice_photo_ver",
+    "odogu_yousyokuset_coffee_photo_ver",
+    "odogu_yousyokuset_cornsoup_photo_ver",
+    "odogu_yousyokuset_hamburg_photo_ver",
+    "odogu_yousyokuset_sakiwarespoon_photo_ver"
+]

+ 206 - 0
COM3D2.MeidoPhotoStudio.Plugin/Config/MeidoPhotoStudio/mm_ignore_list.json

@@ -0,0 +1,206 @@
+[
+    "adultshop",
+    "aquarium",
+    "aquarium_isu",
+    "BackStage",
+    "Bar",
+    "BarLounge",
+    "Bathroom",
+    "BigSight",
+    "BigSight_Night",
+    "boutique",
+    "Casino",
+    "CasinoMini",
+    "cathedral",
+    "ClassRoom",
+    "ClassRoom_Play",
+    "classroom_nodesk",
+    "com3d2pool",
+    "com3d2pool_night",
+    "DanceRoom",
+    "DressRoom_NoMirror",
+    "empireclub_elevator",
+    "EmpireClub_Entrance",
+    "empireclub_hallway",
+    "EmpireClub_Rotary",
+    "EmpireClub_Rotary_Night",
+    "fantasyinn",
+    "fantasyinn_night",
+    "GameShop",
+    "gelaende",
+    "gelaende_night",
+    "HeroineRoom_A",
+    "HeroineRoom_A_Night",
+    "HeroineRoom_A1",
+    "HeroineRoom_A1_Night",
+    "HeroineRoom_B",
+    "HeroineRoom_B_Night",
+    "HeroineRoom_B1",
+    "HeroineRoom_B1_Night",
+    "HeroineRoom_C",
+    "HeroineRoom_C_Night",
+    "HeroineRoom_C1",
+    "HeroineRoom_C1_Night",
+    "HeroineRoom_D",
+    "HeroineRoom_D_Night",
+    "HeroineRoom_D1",
+    "HeroineRoom_D1_Night",
+    "HeroineRoom_E",
+    "HeroineRoom_E_Night",
+    "HeroineRoom_E1",
+    "HeroineRoom_E1_Night",
+    "HeroineRoom_F",
+    "HeroineRoom_F_Night",
+    "HeroineRoom_F1",
+    "HeroineRoom_F1_Night",
+    "HeroineRoom_G",
+    "HeroineRoom_G_Night",
+    "HeroineRoom_G1",
+    "HeroineRoom_G1_Night",
+    "HeroineRoom_H1",
+    "HeroineRoom_H1_Night",
+    "HeroineRoom_J1",
+    "HeroineRoom_J1_Night",
+    "HeroineRoom_K1",
+    "HeroineRoom_K1_Night",
+    "HeroineRoom_L1",
+    "HeroineRoom_L1_Night",
+    "homelesstents",
+    "HoneymoonRoom",
+    "izakaya",
+    "izakaya_play",
+    "japanesehouse",
+    "japanesehouse_night",
+    "KaraokeRoom",
+    "Kitchen",
+    "Kitchen_Night",
+    "LargeBathRoom",
+    "LiveStage",
+    "LiveStage_Side",
+    "LiveStage_use_dance",
+    "LockerRoom",
+    "luxurytoilet",
+    "machikado",
+    "machikado_night",
+    "MaidRoom",
+    "MainKitchen",
+    "MainKitchen_LightOff",
+    "MainKitchen_Night",
+    "MusicShop",
+    "MyBedRoom",
+    "MyBedRoom_Night",
+    "MyBedRoom_NightOff",
+    "MyRoom",
+    "MyRoom_Night",
+    "Oheya",
+    "OiranRoom",
+    "OpemCafe",
+    "opemcafe_aikiss",
+    "opemcafe_aikiss_night",
+    "opemcafe_cristalia",
+    "opemcafe_cristalia_night",
+    "opemcafe_evenicle2",
+    "opemcafe_evenicle2_night",
+    "opemcafe_inuyome2",
+    "opemcafe_inuyome2_night",
+    "opemcafe_korolum",
+    "opemcafe_korolum2",
+    "opemcafe_korolum2_night",
+    "opemcafe_korolum_night",
+    "opemcafe_laplacian",
+    "opemcafe_laplacian_night",
+    "opemcafe_nekow",
+    "opemcafe_nekow_night",
+    "OpemCafe_Night",
+    "opemcafe_nitro",
+    "opemcafe_nitro_night",
+    "opemcafe_pencil",
+    "opemcafe_pencil_night",
+    "opemcafe_rance10",
+    "opemcafe_rance10_night",
+    "opemcafe_raspberry",
+    "opemcafe_raspberry_night",
+    "opemcafe_riddlejoker",
+    "opemcafe_riddlejoker_night",
+    "opemcafe_sagapla",
+    "opemcafe_sagapla_night",
+    "opemcafe_wanko",
+    "opemcafe_wanko_night",
+    "OutletPark",
+    "park",
+    "park_car",
+    "park_car_night",
+    "park_night",
+    "Penthouse",
+    "PlayRoom",
+    "PlayRoom2",
+    "poledancestage",
+    "Pool",
+    "PrivateRoom",
+    "privateroom2",
+    "privateroom2_night",
+    "privateroom2_nightoff",
+    "PrivateRoom_Night",
+    "Restaurant",
+    "Restaurant_Night",
+    "Rotenburo",
+    "Rotenburo_Night",
+    "Salon",
+    "Salon_Day",
+    "Salon_Entrance",
+    "Salon_Garden",
+    "Sea",
+    "seacafe",
+    "seacafe_night",
+    "Sea_Night",
+    "Sea_VR",
+    "Sea_VR_Night",
+    "ShinShitsumu",
+    "ShinShitsumu_ChairRot",
+    "ShinShitsumu_Night",
+    "Shitsumu",
+    "Shitsumu_ChairRot",
+    "Shitsumu_ChairRot_Night",
+    "Shitsumu_Night",
+    "ShoppingMall",
+    "ShoppingMall_Night",
+    "shrine",
+    "shrine_night",
+    "Shukuhakubeya_BedRoom",
+    "Shukuhakubeya_BedRoom_Night",
+    "Shukuhakubeya_Living",
+    "Shukuhakubeya_Living_Night",
+    "Shukuhakubeya_Other_BedRoom",
+    "Shukuhakubeya_Toilet",
+    "Shukuhakubeya_Toilet_Night",
+    "Shukuhakubeya_WashRoom",
+    "Shukuhakubeya_WashRoom_Night",
+    "SMClub",
+    "SMRoom",
+    "SMRoom2",
+    "Soap",
+    "Spa",
+    "Spa_Night",
+    "springgarden",
+    "springgarden_night",
+    "springgarden_yatai",
+    "springgarden_yatai_night",
+    "Syosai",
+    "Syosai_Night",
+    "Theater",
+    "Theater_LightOff",
+    "Toilet",
+    "Town",
+    "Train",
+    "train_notsurikawa",
+    "Villa",
+    "Villa_BedRoom",
+    "Villa_BedRoom_Night",
+    "villa_bedroom_door",
+    "Villa_Farm",
+    "Villa_Farm_Night",
+    "Villa_Night",
+    "Yashiki",
+    "Yashiki_Day",
+    "Yashiki_Pillow"
+]

+ 571 - 0
COM3D2.MeidoPhotoStudio.Plugin/Config/MeidoPhotoStudio/translations.en.json

@@ -494,6 +494,577 @@
         "props1AddButton": "Add",
         "props2AddButton": "Add"
     },
+    "props1Dropdown": {
+        "photo_ver/Odogu_HeroineChair_cooldere_photo_ver": "Kuudere Chair",
+        "photo_ver/Odogu_HeroineChair_junshin_photo_ver": "Junshin Chair",
+        "photo_ver/Odogu_HeroineChair_muku_photo_ver": "Muku Chair",
+        "photo_ver/Odogu_HeroineChair_tsumdere_photo_ver": "Tsundere Chair",
+        "photo_ver/Odogu_Etoile_Chair_photo_ver": "Fluffy Chair",
+        "Odogu_MariGold": "Marigolds",
+        "Odogu_SimpleTable": "Simple Table",
+        "Odogu_SalonSofa_small_photo_ver": "Small Sofa",
+        "Odogu_SalonSofa_long_photo_ver": "Wide Sofa",
+        "Odogu_SalonSofa_Dance_photo_ver": "Dance Sofa",
+        "Odogu_SalonSofa_4P_photo_ver": "Long Sofa",
+        "Odogu_WineGlass": "Empty Wine Glass",
+        "Odogu_Nabe": "Pot (Filled)",
+        "Odogu_Jyouro": "Watering Can",
+        "Odogu_Kadou": "Table with Flowers",
+        "Odogu_KadouChair": "Square Stool",
+        "Odogu_Manaita": "Cutting Board",
+        "Odogu_StandMike": "Mic",
+        "Odogu_StandMikeBase": "Mic Base",
+        "photo_ver/Odogu_Umeko_Mike_photo_ver": "Koala Mic",
+        "Odogu_NoteBook_photo_ver": "Notebook",
+        "Odogu_Sankousyo_photo_ver": "Reference Book",
+        "Odogu_MaidRoomBook001_photo_ver": "Empire's Manners Book",
+        "Odogu_MaidRoomBook002_photo_ver": "EN to JP Dictionary",
+        "Odogu_MaidRoomBook003_photo_ver": "Marketing Book",
+        "Odogu_MaidRoomBook004_photo_ver": "Recipe Book",
+        "Odogu_MaidRoomBook005_photo_ver": "Flower Arrangement Book",
+        "Odogu_Enpitsu_photo_ver": "Pencil (Green)",
+        "Odogu_Enpitsu_Black_photo_ver": "Pencil (Black)",
+        "Odogu_Enpitsu_Red_photo_ver": "Pencil (Red)",
+        "Odogu_Keshigomu_photo_ver": "Eraser (Blue)",
+        "Odogu_Keshigomu_Purple_photo_ver": "Eraser (Purple)",
+        "Odogu_Keshigomu_Yellow_photo_ver": "Eraser (Yellow)",
+        "Odogu_Pen_photo_ver": "Pen (Pink)",
+        "Odogu_Pen_Black_photo_ver": "Pen (Black)",
+        "Odogu_Pen_Brown_photo_ver": "Pen (Brown)",
+        "Odogu_Pen_Green_photo_ver": "Pen (Green)",
+        "Odogu_StickNori_photo_ver": "Glue Stick",
+        "Odogu_AcquaPazza": "Acqua Pazza",
+        "Odogu_BirthdayCake": "Birthday Cake",
+        "Odogu_vichyssoise": "Vichyssoise",
+        "Odogu_Shortcake": "Shortcake",
+        "Odogu_Sandwich": "Egg Sandwiches",
+        "Odogu_MontBlanc": "Mont Blanc",
+        "Odogu_WineBottle(cap_off)": "Wine Bottle (Cap Off)",
+        "Odogu_WineBottle(cap_on)": "Wine Bottle",
+        "Odogu_Smoothie_Green": "Smoothie (Kiwi)",
+        "Odogu_Smoothie_Red": "Smoothie (Strawberry)",
+        "Odogu_Cocktail_Blue": "Cocktail (Blue)",
+        "Odogu_Cocktail_Red": "Cocktail (Red)",
+        "Odogu_Cocktail_Yellow": "Cocktail (Yellow)",
+        "Odogu_Coffiecup": "Coffee",
+        "Odogu_CardsDeck": "Deck of Cards",
+        "Odogu_CardShooter": "Card Shooter",
+        "Odogu_Card_c1": "Card A (Club)",
+        "Odogu_Card_c2": "Card 2 (Club)",
+        "Odogu_Card_c3": "Card 3 (Club)",
+        "Odogu_Card_c4": "Card 4 (Club)",
+        "Odogu_Card_c5": "Card 5 (Club)",
+        "Odogu_Card_c6": "Card 6 (Club)",
+        "Odogu_Card_c7": "Card 7 (Club)",
+        "Odogu_Card_c8": "Card 8 (Club)",
+        "Odogu_Card_c9": "Card 9 (Club)",
+        "Odogu_Card_c10": "Card 10 (Club)",
+        "Odogu_Card_c11": "Card Jack (Club)",
+        "Odogu_Card_c12": "Card Queen (Club)",
+        "Odogu_Card_c13": "Card King (Club)",
+        "Odogu_Card_d1": "Card A (Diamond)",
+        "Odogu_Card_d2": "Card 2 (Diamond)",
+        "Odogu_Card_d3": "Card 3 (Diamond)",
+        "Odogu_Card_d4": "Card 4 (Diamond)",
+        "Odogu_Card_d5": "Card 5 (Diamond)",
+        "Odogu_Card_d6": "Card 6 (Diamond)",
+        "Odogu_Card_d7": "Card 7 (Diamond)",
+        "Odogu_Card_d8": "Card 8 (Diamond)",
+        "Odogu_Card_d9": "Card 9 (Diamond)",
+        "Odogu_Card_d10": "Card 10 (Diamond)",
+        "Odogu_Card_d11": "Card Jack (Diamond)",
+        "Odogu_Card_d12": "Card Queen (Diamond)",
+        "Odogu_Card_d13": "Card King (Diamond)",
+        "Odogu_Card_h1": "Card A (Heart)",
+        "Odogu_Card_h2": "Card 2 (Heart)",
+        "Odogu_Card_h3": "Card 3 (Heart)",
+        "Odogu_Card_h4": "Card 4 (Heart)",
+        "Odogu_Card_h5": "Card 5 (Heart)",
+        "Odogu_Card_h6": "Card 6 (Heart)",
+        "Odogu_Card_h7": "Card 7 (Heart)",
+        "Odogu_Card_h8": "Card 8 (Heart)",
+        "Odogu_Card_h9": "Card 9 (Heart)",
+        "Odogu_Card_h10": "Card 10 (Heart)",
+        "Odogu_Card_h11": "Card Jack (Heart)",
+        "Odogu_Card_h12": "Card Queen (Heart)",
+        "Odogu_Card_h13": "Card King (Heart)",
+        "Odogu_Card_s1": "Card A (Spades)",
+        "Odogu_Card_s2": "Card 2 (Spades)",
+        "Odogu_Card_s3": "Card 3 (Spades)",
+        "Odogu_Card_s4": "Card 4 (Spades)",
+        "Odogu_Card_s5": "Card 5 (Spades)",
+        "Odogu_Card_s6": "Card 6 (Spades)",
+        "Odogu_Card_s7": "Card 7 (Spades)",
+        "Odogu_Card_s8": "Card 8 (Spades)",
+        "Odogu_Card_s9": "Card 9 (Spades)",
+        "Odogu_Card_s10": "Card 10 (Spades)",
+        "Odogu_Card_s11": "Card Jack (Spades)",
+        "Odogu_Card_s12": "Card Queen (Spades)",
+        "Odogu_Card_s13": "Card King (Spades)",
+        "Odogu_Card_joker": "Card Joker",
+        "Odogu_CasinoChip_10": "Casino Chip (10)",
+        "Odogu_CasinoChip_100": "Casino Chip (100)",
+        "Odogu_CasinoChip_1000": "Casino Chip (1000)",
+        "Odogu_Condom_Open_photo_ver": "Condom (Open)",
+        "Odogu_Condom_Close": "Condom (Used Open)",
+        "Odogu_Condom_Pack": "Condom (Used Closed)",
+        "Odogu_DildoBox": "Condom Wrapper",
+        "Odogu_Girochin_A": "Guillotine",
+        "Odogu_Girochin_B": "Guillotine Base",
+        "Odogu_LongDaiza": "Ottoman",
+        "Odogu_LoveSofa": "Sex Sofa",
+        "Odogu_Kousokudai": "Restraint Table",
+        "Odogu_KousokudaiHgata": "Restraint Table (H)",
+        "Odogu_KousokuKijyouiChair": "Restraint Chair",
+        "Odogu_Sukebeisu": "Sukebe Chair",
+        "Odogu_Mat": "Inflatable Pool Mat",
+        "Odogu_SankakuMokuba": "Wooden Horse",
+        "nei_photo_ver": "Nei Doll",
+        "neirobo_photo_ver": "Nei Doll (Robot)",
+        "photo_ver/NeiMaid_photo_ver": "Nei Doll (Maid)",
+        "odogu_sp001_cake": "Cake (Orange)",
+        "odogu_sp001_food": "Meal Platter",
+        "odogu_sp001_yakisoba": "Yakisoba",
+        "odogu_denkigai2018s_coneice_chocomint": "Ice Cream (Mint)",
+        "odogu_denkigai2018s_coneice_strawberry": "Ice Cream (Strawberry)",
+        "odogu_denkigai2018s_coneice_vanilla": "Ice Cream (Vanilla)",
+        "odogu_sp003_nikuman": "Steamed Bun",
+        "odogu_sp003_seironikuman": "Steamed Buns",
+        "odogu_sp001_beercan": "Beer Can",
+        "odogu_sp001_beerjug": "Mug of Beer",
+        "odogu_denkigai2018s_melondish": "Honeydew",
+        "odogu_denkigai2018s_syatifloot": "Inflatable Dolphin",
+        "odogu_denkigai2018s_toropicalicetea": "Tropical Drink",
+        "odogu_alicesoft_redhoney": "Hanny (Red)",
+        "odogu_alicesoft_bluehoney": "Hanny (Blue)",
+        "odogu_alicesoft_greenhoney": "Hanny (Green)",
+        "odogu_alicesoft_brownhoney": "Hanny (Brown)",
+        "odogu_denkigai2018s_beachball_blue": "Beach Ball (Blue)",
+        "odogu_denkigai2018s_beachball_green": "Beach Ball (Green)",
+        "odogu_denkigai2018s_beachball_red": "Beach Ball (Red)",
+        "odogu_denkigai2018s_beachball_yellow": "Beach Ball (Yellow)",
+        "odogu_sp002_oharaibou": "Purification Rod",
+        "odogu_sp002_tukimidango": "Tsukimi Dango",
+        "odogu_sp002_susuki": "Silvergrass Vase",
+        "odogu_sp002_waraningyou": "Straw Doll",
+        "odogu_sp002_waraningyou_gosunkugi": "Straw Doll (Pin)",
+        "odogu_sp002_omamori": "Charm",
+        "odogu_sp002_takebouki": "Bamboo Broom",
+        "odogu_sp003_snowboard_blue": "Snowboard (Blue)",
+        "odogu_sp003_snowboard_green": "Snowboard (Green)",
+        "odogu_sp003_snowboard_red": "Snowboard (Red)",
+        "odogu_sp003_snowboard_yellow": "Snowboard (Yellow)",
+        "odogu_sp003_yukidaruma_blue": "Snowpal (Blue)",
+        "odogu_sp003_yukidaruma_green": "Snowpal (Green)",
+        "odogu_sp003_yukidaruma_red": "Snowpal (Red)",
+        "odogu_sp003_yukidaruma_yellow": "Snowpal (Yellow)",
+        "odogu_sp003_yukigassentama": "Snowball",
+        "odogu_sp003_yukigassenyama": "Pile of Snowballs",
+        "odogu_sp003_kumaoyabun": "Snow Bear Chief",
+        "odogu_denkigai2018w_handaxe_black": "Fantasy Axe (Black)",
+        "odogu_denkigai2018w_handaxe_gold": "Fantasy Axe (Gold)",
+        "odogu_denkigai2018w_handaxe_silver": "Fantasy Axe (Silver)",
+        "odogu_denkigai2018w_handaxe_white": "Fantasy Axe (White)",
+        "odogu_denkigai2018w_healerwand_black": "Magic Staff (Black)",
+        "odogu_denkigai2018w_healerwand_gold": "Magic Staff (Gold)",
+        "odogu_denkigai2018w_healerwand_sliver": "Magic Staff (Silver)",
+        "odogu_denkigai2018w_healerwand_white": "Magic Staff (White",
+        "odogu_denkigai2018w_magicbook_black": "Spell Tome (Black)",
+        "odogu_denkigai2018w_magicbook_brown": "Spell Tome (Brown)",
+        "odogu_denkigai2018w_magicbook_purple": "Spell Tome (Purple)",
+        "odogu_denkigai2018w_magicbook_white": "Spell Tome (White)",
+        "odogu_denkigai2018w_manganiku": "Manga Meat",
+        "odogu_denkigai2018w_tarubeer": "Mug of Beer (Barrel)",
+        "odogu_sagapla_qurotyan": "Kyoro-chan",
+        "odogu_cristalia_arwindow": "AR Window",
+        "odogu_sp004_tyokobanana": "Chocolate Banana",
+        "odogu_sp004_ikayaki": "Ikayaki",
+        "odogu_sp004_ringoame": "Candy Apple",
+        "odogu_sp004_mizufuusen_yellow": "Water Balloon (Yellow)",
+        "odogu_sp004_mizufuusen_blue": "Water Balloon (Blue)",
+        "odogu_sp004_mizufuusen_orange": "Water Balloon (Orange)",
+        "odogu_sp004_mizufuusen_pink": "Water Balloon (Pink)",
+        "odogu_sp004_bati": "Taiko Bachi",
+        "odogu_sp004_maturiutiwa_red": "Festival Fan (Red)",
+        "odogu_sp004_maturiutiwa_blue": "Festival Fan (Blue)",
+        "crepeshop": "Crepe Stall",
+        "crepeshop_night": "Crepe Stall (Night)",
+        "goza": "Tatami Mat",
+        "goza_night": "Tatami Mat (Night)",
+        "kujibikishop": "Lottery Stall",
+        "kujibikiishop_night": "Lottery Stall (Night)",
+        "potatoshop": "French Fries Stall",
+        "potatoshop_night": "French Fries Stall (Night)",
+        "ringoameshop": "Candy Apple Stall",
+        "ringoameshop_night": "Candy Apple Stall (Night)",
+        "shatekishop": "Shooting Gallery",
+        "shatekishop_night": "Shooting Gallery (Night)",
+        "takoyakishop": "Takoyaki Stall",
+        "takoyakishop_night": "Takoyaki Stall (Night)",
+        "yakisobashop": "Yakisoba Stall",
+        "yakisobashop_night": "Yakisoba Stall (Night)",
+        "odogu_vinylpool": "Vinyl Pool",
+        "odogu_vinylpool_water": "Vinyl Pool (No Water)",
+        "odogu_sitirin": "Charcoal Grill",
+        "odogu_sanma": "Grilled Mackerel Pike",
+        "odogu_toumorokoshi": "Grilled Corn",
+        "odogu_meioudan_blue": "Fireworks Mortar (Blue)",
+        "odogu_meioudan_green": "Fireworks Mortar (Green)",
+        "odogu_meioudan_purple": "Fireworks Mortar (Purple)",
+        "odogu_meioudan_red": "Fireworks Mortar (Red)",
+        "watermelon": "Watermelon",
+        "ramune": "Ramune",
+        "odogu_gp002_bento": "Wrapped Bento",
+        "odogu_gp002_candle": "Candle",
+        "odogu_gp002_crad_four": "Four Cards",
+        "odogu_gp002_crad_one": "Ace Card",
+        "gp002_champagne": "Glass of Champagne",
+        "odogu_gp002_chinesefood": "Chinese Food Platter",
+        "odogu_gp002_hataki": "Feather Duster",
+        "odogu_gp002_moyashistir-fry": "Stir Fry Platter",
+        "odogu_gp002_moyashistir-fry_empty": "Stir Fry Platter (Eaten)",
+        "odogu_gp002_silkhat": "Top Hat",
+        "odogu_gp002_silkhat_pigeon": "Top Hat (Dove)",
+        "odogu_gp002_silvertray_acquapazza": "Acqua Pazza (Platter)",
+        "odogu_gp002_silvertray_omurice": "Omurice (Platter)",
+        "gp002_steak": "Steak",
+        "gp002_sushi": "Sushi Platter",
+        "odogu_gp002_vrcontroller": "Vive Controller",
+        "odogu_gp002_zoukin": "Napkin",
+        "odogu_gp002_zoukin2": "Napkin (Folded)",
+        "odogu_gp002_crepe": "Crepe",
+        "odogu_gp002_paperbag": "Paper Bag",
+        "odogu_lovevibe_panda": "Vibe (Panda)",
+        "odogu_lovevibe_zou": "Vibe (Elephant)",
+        "odogu_lovevibe_risu": "Vibe (Squirrel)",
+        "odogu_charaevent011_burgerbasket": "Hamburgers on Tray",
+        "odogu_charaevent011_yakitori": "Yakitori",
+        "odogu_charaevent011_danboru": "Cardboard Box",
+        "odogu_sp006_bedisu": "Aquarium Sofa Bed",
+        "odogu_sp006_isu": "Aquarium Sofa",
+        "odogu_denkigai2019w_camera": "Video Camera",
+        "odogu_cw003_valentinechoco": "Valentine Chocolate",
+        "Odogu_Gp01_Box": "Water Box",
+        "handmirror": "Hand Mirror",
+        "maidroom_mirror_l": "Standing Mirror",
+        "maidroom_mirror_s": "Wall Mirror",
+        "rect_mirror": "Mirror (Rectangle)",
+        "round_mirror": "Mirror (Round)",
+        "square_mirror": "Mirror (Square)",
+        "aquarium04": "Whale Shark",
+        "fishroot": "",
+        "honeyempty": "",
+        "odogu_calender": "",
+        "odogu_cat": "Cat Doll",
+        "odogu_dresser": "Dresser",
+        "odogu_dresserchair": "Dresser Chair",
+        "odogu_furaidopoteto": "French Fries",
+        "odogu_gardenumbrella": "Patio Umbrella",
+        "odogu_gp002_symbola": "Symbol Diamond",
+        "odogu_gp002_symbola_base": "Symbol Diamond Base",
+        "odogu_gp002_symbolb": "Symbol Heart",
+        "odogu_gp002_symbolb_base": "Symbol Heart Base",
+        "odogu_gp002_whip": "Whip",
+        "odogu_hamburgercar": "Hamburger Food Truck",
+        "odogu_hamburgersignboardl": "Hamburger Signboard",
+        "odogu_hamburgersignboards": "Signboard",
+        "odogu_heroinechair_ane": "Ane Chair",
+        "odogu_heroinechair_boku": "Bokukko Chair",
+        "odogu_heroinechair_buaisou": "Wary Chair",
+        "odogu_heroinechair_dos": "Sadist Chair",
+        "odogu_heroinechair_imouto": "Imouto Chair",
+        "odogu_heroinechair_koakuma": "Koakuma Chair",
+        "odogu_heroinechair_maidhisho": "Secretary Maid Chair",
+        "odogu_heroinechair_mukuchi": "Bookworm Chair",
+        "odogu_heroinechair_ojousama": "Ojousama Chair",
+        "odogu_heroinechair_osananajimi": "Osanajimi Chair",
+        "odogu_heroinechair_oshitoyaka": "Ojou Chair",
+        "odogu_heroinechair_yandere": "Yandere Chair",
+        "odogu_kakigori": "Shaved Ice",
+        "odogu_karaoke004_card_1": "Card (Kiss Master)",
+        "odogu_karaoke004_card_10": "Card (Kabedon)",
+        "odogu_karaoke004_card_11": "Card (Sexy Pose)",
+        "odogu_karaoke004_card_12": "Card (Idol Pose)",
+        "odogu_karaoke004_card_13": "Card (Sexy Police)",
+        "odogu_karaoke004_card_14": "Card (Propose to Master)",
+        "odogu_karaoke004_card_15": "Card (Blow Master's Ear)",
+        "odogu_karaoke004_card_16": "Card (Beg)",
+        "odogu_karaoke004_card_17": "Card (Dog Beg)",
+        "odogu_karaoke004_card_18": "Card (Sexy Pose Arms Up)",
+        "odogu_karaoke004_card_19": "Card (After Sex)",
+        "odogu_karaoke004_card_2": "Card (Whisper)",
+        "odogu_karaoke004_card_20": "Card (Kiss Maid)",
+        "odogu_karaoke004_card_21": "Card (Blow Maid's Ear)",
+        "odogu_karaoke004_card_22": "Card (Master Strip)",
+        "odogu_karaoke004_card_23": "Card (Look in Disgust)",
+        "odogu_karaoke004_card_24": "Card (Air Massage)",
+        "odogu_karaoke004_card_25": "Card (Give Clothes)",
+        "odogu_karaoke004_card_26": "Card (Staring Contest)",
+        "odogu_karaoke004_card_3": "Card (Confess)",
+        "odogu_karaoke004_card_4": "Card (Jump 3 Times)",
+        "odogu_karaoke004_card_5": "Card (Moe Cat)",
+        "odogu_karaoke004_card_6": "Card (Recent Ecchi)",
+        "odogu_karaoke004_card_7": "Card (Sexy Mozzarella)",
+        "odogu_karaoke004_card_8": "Card (Seduction)",
+        "odogu_karaoke004_card_9": "Card (Lewd Sound)",
+        "odogu_karaoke005_chair_1": "Karaoke Chair",
+        "odogu_karaoke005_chair_2": "Karaoke Chair Base",
+        "odogu_karaoke_box": "Karaoke Box",
+        "odogu_karaoketable": "Karaoke Table",
+        "odogu_moe_chair": "Stool",
+        "odogu_moe_chairbase": "Stool Base",
+        "odogu_personal_om007plus_canvas": "Easel",
+        "odogu_personal_om007plus_chu-b_lip_black": "Chu-B Lip (Black)",
+        "odogu_personal_om005_presentbox": "Present",
+        "odogu_personal_om005_presentbox_broken": "Present (Crushed)",
+        "odogu_pretzel_sara": "Snack Platter",
+        "odogu_sexisu": "Sex Stool",
+        "odogu_yakitoribanner": "Yakitori Banner",
+        "odogu_yakitoricar": "Yakitori Food Truck",
+        "odogu_yakitorisignboard": "Yakitori Signboard",
+        "megane001_z2_scenario_model": "Weird Glasses Thing",
+        "odogu_chuukaset_chahan_photo_ver": "Fried Rice",
+        "odogu_chuukaset_gyouza_photo_ver": "Gyoza",
+        "odogu_chuukaset_mabo_photo_ver": "Mapo Tofu",
+        "odogu_chuukaset_tea_photo_ver": "Tea",
+        "odogu_classroomchair_photo_ver": "Classroom Chair",
+        "odogu_classroomdesk_photo_ver": "Classroom Desk",
+        "odogu_handcameravv_photo_ver": "Vintage Camera",
+        "odogu_kitchen_photo_ver": "Kitchen",
+        "odogu_maidroomchair_photo_ver": "Maid Chair",
+        "odogu_oxcamera_photo_ver": "OX Camera",
+        "odogu_pc_photo_ver": "PC Tower",
+        "odogu_pc_keyboard_photo_ver": "Keyboard",
+        "odogu_pc_monitor_photo_ver": "Monitor",
+        "odogu_pc_mouse_photo_ver": "Mouse",
+        "odogu_planter_lightblue": "Planter (Light Blue)",
+        "odogu_planter_red": "Panter (Red)",
+        "odogu_pr_table_photo_ver": "Floor Table",
+        "odogu_pr_table_chuuka_photo_ver": "Floor Table (Chinese Food)",
+        "odogu_pr_table_wasyoku_photo_ver": "Floor Table (Japanese Food)",
+        "odogu_pr_table_yousyoku_photo_ver": "Floor Table (Western Food)",
+        "odogu_publictoiletbenki_photo_ver": "Toilet",
+        "odogu_salonscreen_photo_ver": "Big Screen",
+        "odogu_seikaku_cool": "Feather & Book",
+        "odogu_seikaku_jyunshin": "Flowers",
+        "odogu_seikaku_tsundere": "Plushy Basket",
+        "odogu_sentaku_kago_photo_ver": "Laundry Basket",
+        "odogu_sentaku_towel_photo_ver": "Towel Stack",
+        "odogu_sentakumono": "Clothesline",
+        "odogu_smroom2_sankakumokuba": "Wooden Horse 2",
+        "odogu_styluspen_black": "Stylus (Black)",
+        "odogu_styluspen_blue": "Stylus (Blue)",
+        "odogu_styluspen_green": "Stylus (Green)",
+        "odogu_styluspen_red": "Stylus (Red)",
+        "odogu_styluspen_white": "Stylus (White)",
+        "odogu_styluspen_yellow": "Stylus (Yellow)",
+        "odogu_tableflower_photo_ver": "Table With Flowers",
+        "odogu_tabletpc": "Tablet PC",
+        "odogu_virginroad_photo_ver": "Wedding Aisle",
+        "odogu_vvlight_photo_ver": "Vive Lighthouse",
+        "odogu_wasyokuset_gohan_photo_ver": "Bowl of Rice",
+        "odogu_wasyokuset_hashi_photo_ver": "Chopsticks",
+        "odogu_wasyokuset_misoshiru_photo_ver": "Miso",
+        "odogu_wasyokuset_nimono_photo_ver": "Boiled Food",
+        "odogu_wasyokuset_ocha_photo_ver": "Green Tea",
+        "odogu_yousyokuset_chickenrice_photo_ver": "Chicken Fried Rice",
+        "odogu_yousyokuset_coffee_photo_ver": "Coffee (Small)",
+        "odogu_yousyokuset_cornsoup_photo_ver": "Corn Soup",
+        "odogu_yousyokuset_hamburg_photo_ver": "Hamburger Steak",
+        "odogu_yousyokuset_sakiwarespoon_photo_ver": "Spork",
+        "animal_cat": "Cat",
+        "animal_dog": "Dog",
+        "animal_niwatori": "Chicken",
+        "animal_suzume": "Tree Sparrow",
+        "animal_suzumefly": "Tree Sparrow (Fly)",
+        "odogu_bbqgrill": "BBQ Grill",
+        "odogu_bucket": "Bucket",
+        "odogu_coolerbox": "Cooler",
+        "odogu_coolerbox_night": "Cooler (Night)",
+        "odogu_diary": "Diary",
+        "odogu_game_darts": "Dart",
+        "odogu_game_dartsboard": "Dartboard",
+        "odogu_game_kamihikouki": "Paper Plane",
+        "odogu_game_nei_heartful": "Nei Doll (Heart)",
+        "odogu_game_nei_kanban1": "Nei Sign (Ring Toss)",
+        "odogu_game_nei_kanban2": "Nei Sign (Darts)",
+        "odogu_game_nei_kanban3": "Nei Sign (Paper Plane)",
+        "odogu_game_nei_kanban4": "Nei Sign (End)",
+        "odogu_game_nei_kanban5": "Nei Sign (Call Maid)",
+        "odogu_game_nei_usb": "Nei Doll (USB)",
+        "odogu_game_wa": "Ring",
+        "odogu_game_wanage": "Ring Toss Peg",
+        "odogu_nabe_huta": "Pot (Lid Closed)",
+        "odogu_nabe_water": "Pot (Water)",
+        "odogu_natumikan": "Orange",
+        "odogu_omurice1": "Omurice",
+        "odogu_omurice2": "Omurice",
+        "odogu_omurice3": "Omurice (Daisuki)",
+        "odogu_omuriceh": "Omurice (Ecchi)",
+        "odogu_omuricekao1": "Omurice (´• ω •`)",
+        "odogu_omuricekao2": "Omurice ( *´艸`)",
+        "odogu_omuriceoppai": "Omurice (Tiddie Man)",
+        "odogu_pafe": "Parfait",
+        "odogu_rb_chair": "Stool",
+        "odogu_rb_chair_night": "Stool (Night)",
+        "odogu_rb_duck": "Rubber Duck",
+        "odogu_rb_obon": "Round Tray",
+        "odogu_rb_tokkuri": "Sake Bottle",
+        "odogu_saracorn": "Plate of Corn",
+        "odogu_saraimo": "Plate of Potatoes",
+        "odogu_saratomato": "Plate of Tomatoes",
+        "odogu_satumaimo_ha": "Sweet Potato Leaves",
+        "odogu_sunanoshiro": "Sand Castle",
+        "odogu_sunanoyama": "Sand Pile",
+        "odogu_trumptowerbig": "Tower of Cards",
+        "odogu_trumptowersmall": "Tower of Cards (Small)",
+        "odogu_tsutsuhanabi": "Fireworks Pipe",
+        "odogu_ukiwa": "Pool Floatie",
+        "odogu_vf_crops_corn": "Crops (Corn)",
+        "odogu_vf_crops_corn_night": "Crops (Corn Night)",
+        "odogu_vf_crops_gekkabijin": "Crops (Pipe Cactus)",
+        "odogu_vf_crops_gekkabijin_night": "Crops (Pipe Cactus Night)",
+        "odogu_vf_crops_gekkabijinflower": "Crops (Pipe Cactus Flowering)",
+        "odogu_vf_crops_gekkabijinflower_night": "Crops (Pipe Cactus Flowering Night)",
+        "odogu_vf_crops_himawari": "Crops (Sunflower)",
+        "odogu_vf_crops_himawari_night": "Crops (Sunflower Night)",
+        "odogu_vf_crops_natsumikan": "Crops (Orange)",
+        "odogu_vf_crops_natsumikan_night": "Crops (Orange Night)",
+        "odogu_vf_crops_suika": "Crops (Melon)",
+        "odogu_vf_crops_suika_night": "Crops (Melon Night)",
+        "odogu_vf_crops_tomato": "Crops (Tomato)",
+        "odogu_vf_crops_tomato_night": "Crops (Tomato Night)",
+        "odogu_vf_crops_zakuro": "Crops (Pomegranate)",
+        "odogu_vf_crops_zakuro_night": "Crops (Pomegranate Night)",
+        "odogu_vf_kanban_ok": "Signboard (OK)",
+        "odogu_vf_kanban_ok_night": "Signboard (OK Night)",
+        "odogu_vf_kanban_saibai": "Signboard (Cultivating)",
+        "odogu_vf_kanban_saibai_night": "Signboard (Cultivating Night)",
+        "odogu_vf_kanban_taiki": "Signboard (Standby)",
+        "odogu_vf_kanban_taiki_night": "Signboard (Standby Night)",
+        "odogu_vf_radio": "Radio",
+        "odogu_vf_radio_night": "Radio (Night)",
+        "odogu_villa_coffeemaker": "Coffee Maker",
+        "odogu_villa_reizouko": "Fridge",
+        "odogu_villa_table": "Table",
+        "odogu_villa_tvrimocon": "TV Remote",
+        "odogu_villa_winecellar": "Wine Cellar",
+        "odogu_villabr_sideboard": "Nightstand",
+        "villa_bedroom_door": "Bedroom Door"
+    },
+    "props2Dropdown": {
+        "Mob_Man_Stand001": "Mob Man Stand 1",
+        "Mob_Man_Stand002": "Mob Man Stand 2",
+        "Mob_Man_Stand003": "Mob Man Stand 3",
+        "Mob_Man_Sit001": "Mob Man Sit 1",
+        "Mob_Man_Sit002": "Mob Man Sit 2",
+        "Mob_Man_Sit003": "Mob Man Sit 3",
+        "Mob_Girl_Stand001": "Mob Girl Stand 1",
+        "Mob_Girl_Stand002": "Mob Girl Stand 2",
+        "Mob_Girl_Stand003": "Mob Girl Stand 3",
+        "Mob_Girl_Sit001": "Mob Girl Sit 1",
+        "Mob_Girl_Sit002": "Mob Girl Sit 2",
+        "Mob_Girl_Sit003": "Mob Girl Sit 3",
+        "Salon:65": "Stage Light (Yellow)",
+        "Salon:63": "Stage Light (Red)",
+        "Salon:69": "Stage Light (Blue)",
+        "Odogu_XmasTreeMini_photo_ver": "Mini Xmas Tree",
+        "Odogu_KadomatsuMini_photo_ver": "Mini New Year's Pine",
+        "denkigai2015w_mugcup": "Mug (Denkigai 2015)",
+        "denkigai2015w_standB": "Phone Stand (Denkigai 2015)",
+        "Odogu_magazin001_FanBook": "Fanbook 1",
+        "Odogu_magazin002_FanBook": "Fanbook 2",
+        "denkigai2016s_Poster3d2act2": "Poster (ACT2)",
+        "denkigai2016s_Mastercard": "Credit Card",
+        "denkigai2016s_Leathercase": "Phone Case",
+        "denkigai2016s_Okou": "Incense",
+        "denkigai2016s_mugcup": "Mug (Denkigai 2016)",
+        "denkigai2016s_stand": "Phone Stand (Denkigai 2016)",
+        "denkigai2016s_Mizu": "Canned Water",
+        "Odogu_denkigai2016w_calendar": "Calendar (Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar0": "Calendar (Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar1": "Calendar Jan (Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar2": "Calendar Feb (Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar3": "Calendar Mar (Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar4": "Calendar Apr (Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar5": "Calendar May (Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar6": "Calendar Jun (Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar7": "Calendar Jul (Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar8": "Calendar Aug (Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar9": "Calendar Sep (Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar10": "Calendar Oct Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar11": "Calendar Nov Denkigai 2016)",
+        "Odogu_denkigai2016w_calendar12": "Calendar Dec Denkigai 2016)",
+        "denkigai2017w_karaoke002": "Poster (Karaoke VR2)",
+        "denkigai2017w_PosterStarter": "Poster (Starter)",
+        "denkigai2017w_Poster3d21": "Poster (Starter 2)",
+        "Odogu_yashi_juice": "Coconut Juice",
+        "Odogu_nangoku_Shell": "Conch Shell",
+        "Poster3d2act31_B2poster01": "Poster 1 (ACT3)",
+        "Odogu_Onsenmanju": "Manjuu",
+        "Odogu_Nihonshu": "Japanese Rice Wine",
+        "Poster3d2act31_B2poster02": "Poster 2 (ACT3)",
+        "Odogu_DoujinshiTaba": "Doujinshi",
+        "Odogu_KISSMarketCatalog": "Kiss Market Catalogue",
+        "Poster3d2act31_B2poster03": "Poster 3 (ACT3)",
+        "nei_photo_ver": "Nei Doll",
+        "neirobo_photo_ver": "Nei Doll (Robot)",
+        "neimaid": "Nei Doll (Maid)",
+        "Odogu_MaidRoomBook001_photo_ver": "Empire's Manners Book",
+        "Odogu_MaidRoomBook002_photo_ver": "EN to JP Dictionary",
+        "Odogu_MaidRoomBook003_photo_ver": "Marketing Book",
+        "Odogu_MaidRoomBook004_photo_ver": "Recipe Book",
+        "Odogu_MaidRoomBook005_photo_ver": "Flower Arrangement Book",
+        "Odogu_Enpitsu_photo_ver": "Pencil (Green)",
+        "Odogu_Keshigomu_photo_ver": "Eraser (Blue)",
+        "Odogu_Pen_Black_photo_ver": "Pen (Black)",
+        "Odogu_StickNori_photo_ver": "Glue Stick",
+        "Odogu_CM3D2VCCD": "Custom Maid Vocal Collection",
+        "Odogu_COM3D2VCCD": "Custom Maid Vocal 3D2 Collection",
+        "odogu_yomeidokanteidan_accset": "Bride Maid Jewelry Box",
+        "odogu_yomeidokanteidan_bladset": "Bride Maid Blade (White)",
+        "odogu_yomeidokanteidan_bladset_z1": "Bride Maid Blade (Red)",
+        "odogu_yomeidokanteidan_bladset_z2": "Bride Maid Blade (Black)",
+        "odogu_yomeidokanteidan_bladset_z3": "Bride Maid Blade (Brown)",
+        "odogu_yomeidokanteidan_bladset_z4": "Bride Maid Blade (Purple)",
+        "odogu_yomeidokanteidan_portrait": "Uncle's Portrait",
+        "odogu_yomeidokanteidan_nicepot": "Nice Pot (Light Blue)",
+        "odogu_yomeidokanteidan_nicepot_1": "Nice Pot (Brown)",
+        "odogu_yomeidokanteidan_nicepot_2": "Nice Pot (Sky Blue)",
+        "odogu_yomeidokanteidan_nicepot_3": "Nice Pot (Blue)",
+        "odogu_yomeidokanteidan_nicepot_4": "Nice Pot (Black)",
+        "odogu_yomeidokanteidan_nicescroll": "Nice Scroll",
+        "odogu_yomeidokanteidan_bromide": "Uncle's Photo",
+        "odogu_yomeidokanteidan_sticker": "Muku Sticker",
+        "odogu_yomeidokanteidan_sword": "Sword (Blue)",
+        "odogu_yomeidokanteidan_sword_1": "Sword (Red)",
+        "odogu_yomeidokanteidan_sword_2": "Sword (Black)",
+        "odogu_yomeidokanteidan_sword_3": "Sword (White)",
+        "odogu_yomeidokanteidan_sword_4": "Sword (Brown)",
+        "odogu_denkigai2018w_card": "Card",
+        "denkigai2019wposter": "Poster (Ojousama)",
+        "odogu_yomeidokanteidan_jewelrybox_b": "Jewelry Box 2",
+        "odogu_yomeidokanteidan_minimat": "Uncle Mat",
+        "odogu_yomeidokanteidan_coaster": "Uncle Coaster",
+        "Particle/pLineY": "Particle (Line)",
+        "Particle/pLineP02": "Particle (Line Heart)",
+        "Particle/pHeart01": "Particle (Heart)",
+        "Particle/pLine_act2": "Particle (Stars)",
+        "Particle/pstarY_act2": "Particle (Starfield)",
+        "p_kamihubuki_photo_ver": "Confetti",
+        "p_mizu001_photo_ver": "Sink Water",
+        "p_soap_bukubuku_photo_ver": "Bubbles",
+        "p_soap_photo_ver": "Bubbles (Wash)",
+        "p_steam002_photo_ver": "Steam (Pot)",
+        "p_steam_black_photo_ver": "Smoke",
+        "p_steam001_photo_ver": "Steam (Onsen)",
+        "p_dance_star_photo_ver": "Starburst",
+        "p_soap_bubble01_photo_ver": "Bubbles (Bath)",
+        "p_powder_snow_photo_ver": "Snow (Large)",
+        "p_powder_snow2_photo_ver": "Snow (Small)",
+        "p_yuge_large_photo_ver": "Steam (Onsen Large)",
+        "p_smoke_dance_photo_ver": "Smoke (Dance)"
+    },
     "movementCube": {
         "label": "Movement Cube",
         "props": "Props",

+ 160 - 1
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Constants.cs

@@ -5,6 +5,7 @@ using System.Linq;
 using UnityEngine;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
+using wf;
 
 namespace COM3D2.MeidoPhotoStudio.Plugin
 {
@@ -34,7 +35,9 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         public static int MyRoomCustomBGIndex { get; private set; } = -1;
         public static readonly List<string> FaceBlendList;
         public static readonly List<string> BGList;
-        public static List<KeyValuePair<string, string>> MyRoomCustomBGList;
+        public static readonly List<KeyValuePair<string, string>> MyRoomCustomBGList;
+        public static readonly List<string> DoguList;
+        public static readonly List<string> OtherDoguList;
 
         static Constants()
         {
@@ -65,6 +68,7 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             InitializePoses();
             InitializeFaceBlends();
             InitializeBGs();
+            InitializeDogu();
         }
 
         public static void MakeDirectories()
@@ -226,6 +230,161 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             }
         }
 
+        public static void InitializeDogu()
+        {
+            InitializeDeskItems();
+            InitializePhotoBGItems();
+            // InitializeHandItems();
+        }
+
+        private static void InitializeDeskItems()
+        {
+            // enabled id
+            HashSet<int> enabledIDs = new HashSet<int>();
+            CsvCommonIdManager.ReadEnabledIdList(
+                CsvCommonIdManager.FileSystemType.Normal, true, "desk_item_enabled_id", ref enabledIDs
+            );
+            CsvCommonIdManager.ReadEnabledIdList(
+                CsvCommonIdManager.FileSystemType.Old, true, "desk_item_enabled_id", ref enabledIDs
+            );
+
+            List<string> com3d2DeskDogu = new List<string>(new[] {
+                "Mob_Man_Stand001", "Mob_Man_Stand002", "Mob_Man_Stand003", "Mob_Man_Sit001", "Mob_Man_Sit002",
+                "Mob_Man_Sit003", "Mob_Girl_Stand001", "Mob_Girl_Stand002", "Mob_Girl_Stand003", "Mob_Girl_Sit001",
+                "Mob_Girl_Sit002", "Mob_Girl_Sit003", "Salon:65", "Salon:63", "Salon:69"
+            });
+
+            Action<AFileSystemBase> GetDeskItems = fs =>
+            {
+                using (CsvParser csvParser = OpenCsvParser("desk_item_detail.nei", fs))
+                {
+                    for (int cell_y = 1; cell_y < csvParser.max_cell_y; cell_y++)
+                    {
+                        if (csvParser.IsCellToExistData(0, cell_y))
+                        {
+                            int cell = csvParser.GetCellAsInteger(0, cell_y);
+                            if (enabledIDs.Contains(cell))
+                            {
+                                string dogu = String.Empty;
+                                if (csvParser.IsCellToExistData(3, cell_y))
+                                {
+                                    dogu = csvParser.GetCellAsString(3, cell_y);
+                                }
+                                else if (csvParser.IsCellToExistData(4, cell_y))
+                                {
+                                    dogu = csvParser.GetCellAsString(4, cell_y);
+                                }
+
+                                if (!string.IsNullOrEmpty(dogu))
+                                {
+                                    com3d2DeskDogu.Add(dogu);
+                                }
+                            }
+                        }
+                    }
+                }
+            };
+
+            GetDeskItems(GameUty.FileSystem);
+            // GetDeskItems(GameUty.FileSystemOld);
+
+            OtherDoguList.AddRange(com3d2DeskDogu);
+        }
+
+        private static void InitializePhotoBGItems()
+        {
+            PhotoBGObjectData.Create();
+            List<PhotoBGObjectData> photoBGObjectList = PhotoBGObjectData.data;
+
+            List<string> particleList = new List<string>();
+
+            List<string> doguPrefabList = new List<string>();
+            List<string> doguAssetList = new List<string>();
+            List<string> directFileList = new List<string>();
+
+            foreach (PhotoBGObjectData photoBgObject in photoBGObjectList)
+            {
+                if (!string.IsNullOrEmpty(photoBgObject.create_prefab_name))
+                {
+                    List<string> list = photoBgObject.category == "パーティクル"
+                        ? particleList
+                        : doguPrefabList;
+                    list.Add(photoBgObject.create_prefab_name);
+                }
+                else if (!string.IsNullOrEmpty(photoBgObject.create_asset_bundle_name))
+                {
+                    doguAssetList.Add(photoBgObject.create_asset_bundle_name);
+                }
+                else if (!string.IsNullOrEmpty(photoBgObject.direct_file))
+                {
+                    directFileList.Add(photoBgObject.direct_file);
+                }
+            }
+
+            OtherDoguList.AddRange(new[] {
+                "Particle/pLineY", "Particle/pLineP02", "Particle/pHeart01",
+                "Particle/pLine_act2", "Particle/pstarY_act2"
+            });
+
+            OtherDoguList.AddRange(particleList);
+
+            DoguList.AddRange(doguPrefabList);
+            DoguList.AddRange(doguAssetList);
+            DoguList.AddRange(directFileList);
+
+            string ignoreListPath = Path.Combine(configPath, "mm_ignore_list.json");
+            string ignoreListJson = File.ReadAllText(ignoreListPath);
+            string[] bgList = JsonConvert.DeserializeObject<IEnumerable<string>>(ignoreListJson).ToArray();
+
+            // bg object extend
+            HashSet<string> doguHashSet = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase);
+            foreach (string bg in bgList)
+            {
+                doguHashSet.Add(bg);
+            }
+            foreach (string dogu in DoguList)
+            {
+                doguHashSet.Add(dogu);
+            }
+            foreach (string dogu in OtherDoguList)
+            {
+                doguHashSet.Add(dogu);
+            }
+
+            string[] com3d2BgList = GameUty.FileSystem.GetList("bg", AFileSystemBase.ListType.AllFile);
+            foreach (string path in com3d2BgList)
+            {
+                if (Path.GetExtension(path) == ".asset_bg" && !path.Contains("myroomcustomize"))
+                {
+                    string file = Path.GetFileNameWithoutExtension(path);
+                    if (!doguHashSet.Contains(file) && !file.EndsWith("_hit"))
+                    {
+                        DoguList.Add(file);
+                        doguHashSet.Add(file);
+                    }
+                }
+            }
+
+            // Get cherry picked dogu that I can't find in the game files
+            string doguExtendPath = Path.Combine(configPath, "mm_dogu_extend.json");
+            string doguExtendJson = File.ReadAllText(doguExtendPath);
+
+            DoguList.AddRange(JsonConvert.DeserializeObject<IEnumerable<string>>(doguExtendJson));
+
+            string[] cm3d2BgList = GameUty.FileSystemOld.GetList("bg", AFileSystemBase.ListType.AllFile);
+            foreach (string path in cm3d2BgList)
+            {
+                if (Path.GetExtension(path) == ".asset_bg")
+                {
+                    string file = Path.GetFileNameWithoutExtension(path);
+                    if (!doguHashSet.Contains(file) && !file.EndsWith("_not_optimisation"))
+                    {
+                        DoguList.Add(file);
+                    }
+                }
+            }
+        }
+
         private static CsvParser OpenCsvParser(string nei, AFileSystemBase fs)
         {
             try

+ 154 - 0
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/DragDogu.cs

@@ -0,0 +1,154 @@
+using System;
+using UnityEngine;
+
+namespace COM3D2.MeidoPhotoStudio.Plugin
+{
+    using static CustomGizmo;
+    public class DragDogu : BaseDrag
+    {
+        private GameObject dogu;
+        private Vector3 off;
+        private Vector3 off2;
+        private Vector3 mousePos2;
+        private float doguScale;
+        private Vector3 doguRot;
+        public event EventHandler Delete;
+        public bool DeleteMe { get; private set; }
+        public void Initialize(GameObject dogu)
+        {
+            this.dogu = dogu;
+            base.InitializeDragPoint(() => this.dogu.transform.position, () => Vector3.zero);
+            InitializeGizmo(this.dogu.transform, 1f, GizmoMode.World);
+        }
+
+        protected override void GetDragType()
+        {
+            bool holdShift = Utility.GetModKey(Utility.ModKey.Shift);
+            if (Input.GetKey(KeyCode.D))
+            {
+                // Actually delete
+                CurrentDragType = DragType.Select;
+                CurrentGizmoType = GizmoType.None;
+            }
+            else if (Input.GetKey(KeyCode.Z))
+            {
+                if (Utility.GetModKey(Utility.ModKey.Control)) CurrentDragType = DragType.MoveY;
+                else CurrentDragType = holdShift ? DragType.RotY : DragType.MoveXZ;
+                CurrentGizmoType = GizmoType.None;
+            }
+            else if (Input.GetKey(KeyCode.X))
+            {
+                CurrentDragType = holdShift ? DragType.RotLocalY : DragType.RotLocalXZ;
+                CurrentGizmoType = GizmoType.Rotate;
+            }
+            else if (Input.GetKey(KeyCode.C))
+            {
+                CurrentDragType = DragType.Scale;
+                CurrentGizmoType = GizmoType.None;
+            }
+            else
+            {
+                CurrentDragType = DragType.None;
+                CurrentGizmoType = GizmoType.None;
+            }
+        }
+
+        protected override void InitializeDrag()
+        {
+            if (CurrentDragType == DragType.Select)
+            {
+                this.DeleteMe = true;
+                this.Delete?.Invoke(this, EventArgs.Empty);
+                return;
+            }
+
+            base.InitializeDrag();
+
+            doguScale = dogu.transform.localScale.x;
+            doguRot = dogu.transform.localEulerAngles;
+            off = transform.position - Camera.main.ScreenToWorldPoint(
+                new Vector3(Input.mousePosition.x, Input.mousePosition.y, worldPoint.z)
+            );
+            off2 = new Vector3(
+                transform.position.x - dogu.transform.position.x,
+                transform.position.y - dogu.transform.position.y,
+                transform.position.z - dogu.transform.position.z
+            );
+        }
+
+        protected override void DoubleClick()
+        {
+            if (CurrentDragType == DragType.Scale) dogu.transform.localScale = new Vector3(1f, 1f, 1f);
+            if (CurrentDragType == DragType.RotLocalY || CurrentDragType == DragType.RotLocalXZ)
+                dogu.transform.rotation = new Quaternion(0f, 0f, 0f, 1f);
+        }
+
+        protected override void Drag()
+        {
+            Vector3 pos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, worldPoint.z)) + off - off2;
+
+            if (CurrentDragType == DragType.MoveXZ)
+            {
+                dogu.transform.position = new Vector3(pos.x, dogu.transform.position.y, pos.z);
+            }
+
+            if (CurrentDragType == DragType.MoveY)
+            {
+                dogu.transform.position = new Vector3(dogu.transform.position.x, pos.y, dogu.transform.position.z);
+            }
+
+            if (CurrentDragType == DragType.RotY)
+            {
+                Vector3 posOther = Input.mousePosition - mousePos;
+                dogu.transform.eulerAngles =
+                    new Vector3(dogu.transform.eulerAngles.x, doguRot.y - posOther.x / 3f, dogu.transform.eulerAngles.z);
+
+            }
+
+            if (CurrentDragType == DragType.RotLocalXZ)
+            {
+                Vector3 posOther = Input.mousePosition - mousePos;
+                Transform transform = Camera.main.transform;
+                Vector3 vector3_3 = transform.TransformDirection(Vector3.right);
+                Vector3 vector3_4 = transform.TransformDirection(Vector3.forward);
+                transform.TransformDirection(Vector3.forward);
+                if (mousePos2 != Input.mousePosition)
+                {
+                    dogu.transform.localEulerAngles = doguRot;
+                    dogu.transform.RotateAround(dogu.transform.position, new Vector3(vector3_3.x, 0.0f, vector3_3.z), posOther.y / 4f);
+                    dogu.transform.RotateAround(dogu.transform.position, new Vector3(vector3_4.x, 0.0f, vector3_4.z), (-posOther.x / 6.0f));
+                }
+                mousePos2 = Input.mousePosition;
+            }
+
+            if (CurrentDragType == DragType.RotLocalY)
+            {
+                Vector3 posOther = Input.mousePosition - mousePos;
+                Transform transform = Camera.main.transform;
+                Vector3 vector3_3 = transform.TransformDirection(Vector3.right);
+                transform.TransformDirection(Vector3.forward);
+                if (mousePos2 != Input.mousePosition)
+                {
+                    dogu.transform.localEulerAngles = doguRot;
+                    dogu.transform.localRotation = Quaternion.Euler(dogu.transform.localEulerAngles)
+                        * Quaternion.AngleAxis((-posOther.x / 2.2f), Vector3.up);
+                }
+
+                mousePos2 = Input.mousePosition;
+            }
+
+            if (CurrentDragType == DragType.Scale)
+            {
+                Vector3 posOther = Input.mousePosition - mousePos;
+                float scale = doguScale + posOther.y / 200f;
+                if (scale < 0.1f) scale = 0.1f;
+                dogu.transform.localScale = new Vector3(scale, scale, scale);
+            }
+        }
+
+        private void OnDestroy()
+        {
+            GameObject.Destroy(this.dogu);
+        }
+    }
+}

+ 8 - 0
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/GUI/Controls/MiscGUI.cs

@@ -32,5 +32,13 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         {
             GUILayout.Box(texture, textureBoxStyle, layoutOptions);
         }
+
+        public static void Header(string text, params GUILayoutOption[] layoutOptions)
+        {
+            GUIStyle style = new GUIStyle(GUI.skin.label);
+            style.padding = new RectOffset(7, 0, 0, 0);
+
+            GUILayout.Label(text, style, layoutOptions);
+        }
     }
 }

+ 98 - 0
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/GUI/Panes/BackgroundWindowPanes/PropsPane.cs

@@ -0,0 +1,98 @@
+using UnityEngine;
+
+namespace COM3D2.MeidoPhotoStudio.Plugin
+{
+    class PropsPane : BasePane
+    {
+        private EnvironmentManager environmentManager;
+        private Dropdown otherDoguDropdown;
+        private Dropdown doguDropdown;
+        private Button addDoguButton;
+        private Button addOtherDoguButton;
+        private Button nextDoguButton;
+        private Button prevDoguButton;
+        private Button nextOtherDoguButton;
+        private Button prevOtherDoguButton;
+
+        public PropsPane(EnvironmentManager environmentManager)
+        {
+            this.environmentManager = environmentManager;
+
+            this.doguDropdown = new Dropdown(Translation.GetArray("props1Dropdown", Constants.DoguList));
+
+            this.otherDoguDropdown = new Dropdown(Translation.GetArray("props2Dropdown", Constants.OtherDoguList));
+
+            this.addOtherDoguButton = new Button("+");
+            this.addOtherDoguButton.ControlEvent += (s, a) =>
+            {
+                string assetName = Constants.OtherDoguList[this.otherDoguDropdown.SelectedItemIndex];
+                this.environmentManager.SpawnObject(assetName);
+            };
+
+            this.addDoguButton = new Button("+");
+            this.addDoguButton.ControlEvent += (s, a) =>
+            {
+                string assetName = Constants.DoguList[this.doguDropdown.SelectedItemIndex];
+                this.environmentManager.SpawnObject(assetName);
+            };
+
+            this.nextDoguButton = new Button(">");
+            this.nextDoguButton.ControlEvent += (s, a) => this.doguDropdown.Step(1);
+
+
+            this.prevDoguButton = new Button("<");
+            this.prevDoguButton.ControlEvent += (s, a) => this.doguDropdown.Step(-1);
+
+            this.nextOtherDoguButton = new Button(">");
+            this.nextOtherDoguButton.ControlEvent += (s, a) => this.otherDoguDropdown.Step(1);
+
+            this.prevOtherDoguButton = new Button("<");
+            this.prevOtherDoguButton.ControlEvent += (s, a) => this.otherDoguDropdown.Step(-1);
+        }
+
+        protected override void ReloadTranslation()
+        {
+            this.doguDropdown.SetDropdownItems(
+                Translation.GetArray("props1Dropdown", Constants.DoguList),
+                this.doguDropdown.SelectedItemIndex
+            );
+
+            this.otherDoguDropdown.SetDropdownItems(
+                Translation.GetArray("props2Dropdown", Constants.OtherDoguList),
+                this.otherDoguDropdown.SelectedItemIndex
+            );
+        }
+
+        public override void Draw(params GUILayoutOption[] layoutOptions)
+        {
+            float arrowButtonSize = 30;
+            GUILayoutOption[] arrowLayoutOptions = {
+                GUILayout.Width(arrowButtonSize),
+                GUILayout.Height(arrowButtonSize)
+            };
+
+            float dropdownButtonHeight = arrowButtonSize;
+            float dropdownButtonWidth = 120f;
+            GUILayoutOption[] dropdownLayoutOptions = new GUILayoutOption[] {
+                GUILayout.Height(dropdownButtonHeight),
+                GUILayout.Width(dropdownButtonWidth)
+            };
+
+            MiscGUI.Header("Props 1");
+            GUILayout.BeginHorizontal();
+            this.doguDropdown.Draw(dropdownLayoutOptions);
+            this.prevDoguButton.Draw(arrowLayoutOptions);
+            this.nextDoguButton.Draw(arrowLayoutOptions);
+            this.addDoguButton.Draw(arrowLayoutOptions);
+            GUILayout.EndHorizontal();
+
+            MiscGUI.Header("Props 2");
+            GUILayout.BeginHorizontal();
+            this.otherDoguDropdown.Draw(dropdownLayoutOptions);
+            this.prevOtherDoguButton.Draw(arrowLayoutOptions);
+            this.nextOtherDoguButton.Draw(arrowLayoutOptions);
+            this.addOtherDoguButton.Draw(arrowLayoutOptions);
+            GUILayout.EndHorizontal();
+        }
+    }
+}

+ 197 - 0
COM3D2.MeidoPhotoStudio.Plugin/MeidoPhotoStudio/Managers/EnvironmentManager.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using UnityEngine;
+using UnityEngine.Rendering;
 
 namespace COM3D2.MeidoPhotoStudio.Plugin
 {
@@ -11,6 +12,15 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
         private GameObject bgObject;
         private Transform bg;
         private CameraInfo cameraInfo;
+        private List<DragDogu> doguList = new List<DragDogu>();
+        private DragType dragTypeOld = DragType.None;
+        private DragType currentDragType = DragType.None;
+        enum DragType
+        {
+            None, Move, Rotate, Scale, Delete, Other
+        }
+        private bool showGizmos = false;
+
         public void ChangeBackground(string assetName, bool creative = false)
         {
             if (creative)
@@ -66,6 +76,14 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
 
         public void Update()
         {
+            SetDragType();
+            if (Input.GetKeyDown(KeyCode.Space))
+            {
+                showGizmos = !showGizmos;
+                currentDragType = dragTypeOld = DragType.None;
+                UpdateDragType();
+            }
+
             if (Input.GetKey(KeyCode.Q))
             {
                 if (Input.GetKeyDown(KeyCode.S))
@@ -85,6 +103,33 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             }
         }
 
+        private void SetDragType()
+        {
+            if (Input.GetKey(KeyCode.Z) || Input.GetKey(KeyCode.X) || Input.GetKey(KeyCode.C)
+                || Input.GetKey(KeyCode.D)
+            )
+            {
+                currentDragType = DragType.Other;
+            }
+            else
+            {
+                currentDragType = DragType.None;
+            }
+
+            if (currentDragType != dragTypeOld) UpdateDragType();
+
+            dragTypeOld = currentDragType;
+        }
+
+        private void UpdateDragType()
+        {
+            bool dragPointActive = currentDragType == DragType.Other;
+            foreach (DragDogu dogu in doguList)
+            {
+                dogu.SetDragProp(showGizmos, dragPointActive, dragPointActive);
+            }
+        }
+
         private void SaveCameraInfo()
         {
             this.cameraInfo = new CameraInfo(GameMain.Instance.MainCamera);
@@ -106,6 +151,158 @@ namespace COM3D2.MeidoPhotoStudio.Plugin
             cameraMain.SetTargetPos(new Vector3(0f, 0.9f, 0f), true);
             cameraMain.SetDistance(3f, true);
         }
+
+        private GameObject GetDeploymentObject()
+        {
+            GameObject go = GameObject.Find("Deployment Object Parent");
+            if (go == null) go = new GameObject("Deployment Object Parent");
+            return go;
+        }
+
+        public void SpawnObject(string assetName)
+        {
+            // TODO: Add a couple more things to ignore list
+            GameObject dogu = null;
+            if (assetName.StartsWith("mirror"))
+            {
+                Material mirrorMaterial = new Material(Shader.Find("Mirror"));
+                dogu = GameObject.CreatePrimitive(PrimitiveType.Plane);
+                Renderer mirrorRenderer = dogu.GetComponent<Renderer>();
+                mirrorRenderer.material = mirrorMaterial;
+                mirrorRenderer.enabled = true;
+                MirrorReflection2 mirrorReflection = dogu.AddComponent<MirrorReflection2>();
+                mirrorReflection.m_TextureSize = 2048;
+
+                Vector3 localPosition = new Vector3(0f, 0.96f, 0f);
+                dogu.transform.Rotate(dogu.transform.right, 90f);
+
+                switch (assetName)
+                {
+                    case "mirror1":
+                        dogu.transform.localScale = new Vector3(0.2f, 0.4f, 0.2f);
+                        break;
+                    case "mirror2":
+                        dogu.transform.localScale = new Vector3(0.1f, 0.4f, 0.2f);
+                        break;
+                    case "mirror3":
+                        localPosition.y = 0.85f;
+                        dogu.transform.localScale = new Vector3(0.03f, 0.18f, 0.124f);
+                        break;
+                }
+                dogu.transform.localPosition = localPosition;
+            }
+            else if (assetName.IndexOf(':') >= 0)
+            {
+                string[] assetParts = assetName.Split(':');
+                GameObject obj = GameMain.Instance.BgMgr.CreateAssetBundle(assetParts[0]);
+                if (obj == null)
+                {
+                    obj = Resources.Load("BG/" + assetParts[0]) as GameObject;
+                }
+
+                GameObject bg = GameObject.Instantiate(obj);
+                int num = int.Parse(assetParts[1]);
+                dogu = bg.transform.GetChild(num).gameObject;
+                dogu.transform.SetParent(null);
+                GameObject.Destroy(bg);
+                bg.SetActive(false);
+            }
+            else
+            {
+                GameObject obj = GameMain.Instance.BgMgr.CreateAssetBundle(assetName);
+
+                if (obj == null) obj = Resources.Load("Prefab/" + assetName) as GameObject;
+
+                dogu = GameObject.Instantiate(obj) as GameObject;
+                dogu.transform.localPosition = Vector3.zero;
+
+                MeshRenderer[] meshRenderers = dogu.GetComponentsInChildren<MeshRenderer>();
+                for (int i = 0; i < meshRenderers.Length; i++)
+                {
+                    if (meshRenderers[i] != null)
+                    {
+                        meshRenderers[i].shadowCastingMode = ShadowCastingMode.Off;
+                    }
+                }
+
+                Collider collider = dogu.transform.GetComponent<Collider>();
+                if (collider != null) collider.enabled = false;
+                foreach (Transform transform in dogu.transform)
+                {
+                    collider = transform.GetComponent<Collider>();
+                    if (collider != null)
+                    {
+                        collider.enabled = false;
+                    }
+                }
+                #region particle system experiment
+                // if (asset.StartsWith("Particle/"))
+                // {
+                //     ParticleSystem particleSystem = go.GetComponent<ParticleSystem>();
+                //     if (particleSystem != null)
+                //     {
+                //         ParticleSystem.MainModule main;
+                //         main = particleSystem.main;
+                //         main.loop = true;
+                //         main.duration = Mathf.Infinity;
+
+                //         ParticleSystem[] particleSystems = particleSystem.GetComponents<ParticleSystem>();
+                //         foreach (ParticleSystem part in particleSystems)
+                //         {
+                //             ParticleSystem.EmissionModule emissionModule = part.emission;
+                //             ParticleSystem.Burst[] bursts = new ParticleSystem.Burst[emissionModule.burstCount];
+                //             emissionModule.GetBursts(bursts);
+                //             for (int i = 0; i < bursts.Length; i++)
+                //             {
+                //                 bursts[i].cycleCount = Int32.MaxValue;
+                //             }
+                //             emissionModule.SetBursts(bursts);
+                //             main = part.main;
+                //             main.loop = true;
+                //             main.duration = Mathf.Infinity;
+                //         }
+                //     }
+                // }
+                #endregion
+            }
+
+            if (dogu != null)
+            {
+                // TODO: Figure out why some props aren't centered properly
+                // Doesn't happen in MM but even after copy pasting the code, it doesn't work :/
+                GameObject deploymentObject = GetDeploymentObject();
+                GameObject finalDogu = new GameObject();
+
+                dogu.transform.SetParent(finalDogu.transform, true);
+                finalDogu.transform.SetParent(deploymentObject.transform, false);
+
+                finalDogu.transform.position = new Vector3(0f, 0f, 0.5f);
+
+                GameObject dragPoint = BaseDrag.MakeDragPoint(
+                    PrimitiveType.Cube, Vector3.one * 0.12f, BaseDrag.LightBlue
+                );
+
+                DragDogu dragDogu = dragPoint.AddComponent<DragDogu>();
+                dragDogu.Initialize(finalDogu);
+                dragDogu.Delete += (s, a) => DeleteDogu();
+                dragDogu.SetDragProp(showGizmos, false, false);
+                doguList.Add(dragDogu);
+            }
+        }
+
+        private void DeleteDogu()
+        {
+            doguList.RemoveAll(dragDogu =>
+                {
+                    if (dragDogu.DeleteMe)
+                    {
+                        GameObject.Destroy(dragDogu.gameObject);
+                        return true;
+                    }
+                    return false;
+                }
+            );
+        }
     }
 
     public struct CameraInfo