extends Node var galleryPath = OS.get_user_data_dir() + "/gallery.json"; var galleryObject = {} func _ready(): Init(); func Init(): var fileObj = File.new(); if not (fileObj.file_exists(galleryPath)): CreateGallery(); else : fileObj.open(galleryPath, File.READ); var content = fileObj.get_as_text(); Deserialize(content); fileObj.close(); func CreateGallery(): galleryObject = { "musics":["Menu", ], "backgrounds":[], "images":[] } SaveToFile(); func Deserialize(fileContent): galleryObject = str2var(fileContent); func SaveToFile(): var fileObj = File.new() fileObj.open(galleryPath, File.WRITE) var content = var2str(galleryObject); fileObj.store_string(content) fileObj.close() func AddMusic(content): content = str(content); if content == "99": return ; var key = ""; for i in GetMusicSettings(): if str(content, ".ogg") in i.path: key = i.name break; if not key in galleryObject["musics"]: galleryObject["musics"].push_back(key); SaveToFile(); CheckForGreatCollector(); func AddBackground(content): if not content in galleryObject["backgrounds"]: galleryObject["backgrounds"].push_back(content); SaveToFile(); CheckForGreatCollector(); func AddImage(content): if not content in galleryObject["images"]: galleryObject["images"].push_back(content); SaveToFile(); CheckForGreatCollector(); func HaveMusic(content)->bool: return content in galleryObject["musics"]; func HaveBackground(content)->bool: return content in galleryObject["backgrounds"]; func HaveImage(content)->bool: return content in galleryObject["images"]; func GetMusicSettings(): var music = [ {"name":"Menu", "path":"res://resources/audio/bgm/1.ogg"}, {"name":"First", "path":"res://resources/audio/bgm/2.ogg"}, {"name":"Restaurant", "path":"res://resources/audio/bgm/3.ogg"}, {"name":"Dating", "path":"res://resources/audio/bgm/4.ogg"}, {"name":"Funny Scene", "path":"res://resources/audio/bgm/5.ogg"}, {"name":"Murderer Theme", "path":"res://resources/audio/bgm/6.ogg"}, {"name":"Romantic Scene", "path":"res://resources/audio/bgm/8.ogg"}, {"name":"Intimate Scene", "path":"res://resources/audio/bgm/9.ogg"}, {"name":"Worried Theme", "path":"res://resources/audio/bgm/10.ogg"}, {"name":"Ending", "path":"res://resources/audio/FuckGallery/12.ogg"}, {"name":"You Died", "path":"res://resources/audio/bgm/13.ogg"}, {"name":"Do Not Worry", "path":"res://resources/audio/FuckGallery/14.ogg"}, {"name":"Think", "path":"res://resources/audio/bgm/15.ogg"}, {"name":"Strange Girl", "path":"res://resources/audio/bgm/16.ogg"}, {"name":"Silent Ambient", "path":"res://resources/audio/FuckGallery/17.ogg"}, {"name":"Dark Ambient", "path":"res://resources/audio/FuckGallery/18.ogg"}, {"name":"Sadness", "path":"res://resources/audio/FuckGallery/19.ogg"}, {"name":"Searching", "path":"res://resources/audio/FuckGallery/20.ogg"}, {"name":"Agatha Theme", "path":"res://resources/audio/FuckGallery/21.ogg"}, {"name":"Dana Theme", "path":"res://resources/audio/FuckGallery/22.ogg"}, {"name":"Linda Theme", "path":"res://resources/audio/FuckGallery/23.ogg"}, {"name":"Hugh Theme", "path":"res://resources/audio/bgm/24.ogg"}, {"name":"Train One", "path":"res://resources/audio/bgm/25.ogg"}, {"name":"Fight Scene", "path":"res://resources/audio/FuckGallery/26.ogg"}, {"name":"Fight Track", "path":"res://resources/audio/bgm/27.ogg"}, {"name":"BigCity", "path":"res://resources/audio/bgm/BigCity.ogg"}, {"name":"Triptych", "path":"res://resources/audio/bgm/29.ogg"}, ] var easterEgg = HaveMusic("Survive"); if easterEgg: music.insert(25, {"name":"Survive", "path":"res://resources/audio/bgm/Survive.ogg"}); music.insert(26, {"name":"Survive (Eng)", "path":"res://resources/audio/bgm/Survive (Eng).ogg"}); return music; func GetBackgroundsSettings(): var bg = [ {"name":"Scene_alt1", "path":"res://resources/graphics/Gallery/Backgrounds/Scene_alt1.webp"}, {"name":"Scene2", "path":"res://resources/graphics/Gallery/Backgrounds/Scene2.webp"}, {"name":"Scene2_1", "path":"res://resources/graphics/Gallery/Backgrounds/Scene2_1.webp"}, {"name":"Scene2_2", "path":"res://resources/graphics/Gallery/Backgrounds/Scene2_2.webp"}, {"name":"Scene4", "path":"res://resources/graphics/Gallery/Backgrounds/Scene4.webp"}, {"name":"Scene6", "path":"res://resources/graphics/Gallery/Backgrounds/Scene6.webp"}, {"name":"Scene7", "path":"res://resources/graphics/Gallery/Backgrounds/Scene7.webp"}, {"name":"Scene8", "path":"res://resources/graphics/Gallery/Backgrounds/Scene8.webp"}, {"name":"Scene9", "path":"res://resources/graphics/Gallery/Backgrounds/Scene9.webp"}, {"name":"Scene12", "path":"res://resources/graphics/Gallery/Backgrounds/Scene12.webp"}, {"name":"Kamin", "path":"res://resources/graphics/Gallery/Backgrounds/Kamin.webp"}, {"name":"Podval", "path":"res://resources/graphics/Gallery/Backgrounds/Podval.webp"}, {"name":"Garaj", "path":"res://resources/graphics/Gallery/Backgrounds/Garaj.webp"}, {"name":"Vtoroi_etaj", "path":"res://resources/graphics/Gallery/Backgrounds/Vtoroi_etaj.webp"}, {"name":"Tretii_etaj", "path":"res://resources/graphics/Gallery/Backgrounds/Tretii_etaj.webp"}, {"name":"DomikVnutri", "path":"res://resources/graphics/Gallery/Backgrounds/DomikVnutri.webp"}, {"name":"Pristan", "path":"res://resources/graphics/Gallery/Backgrounds/Pristan.webp"}, {"name":"Room_Agatha", "path":"res://resources/graphics/Gallery/Backgrounds/Room_Agatha.webp"}, {"name":"Room_Dana", "path":"res://resources/graphics/Gallery/Backgrounds/Room_Dana.webp"}, {"name":"Room_Emiliya", "path":"res://resources/graphics/Gallery/Backgrounds/Room_Emiliya.webp"}, {"name":"Room_Linda", "path":"res://resources/graphics/Gallery/Backgrounds/Room_Linda.webp"}, {"name":"Blood_floor", "path":"res://resources/graphics/Gallery/Backgrounds/Blood_floor.webp"}, {"name":"Mayak", "path":"res://resources/graphics/Gallery/Backgrounds/Mayak.webp"}, {"name":"Mayak_Back", "path":"res://resources/graphics/Gallery/Backgrounds/Mayak_Back.webp"}, {"name":"Panorama", "path":"res://resources/graphics/Gallery/Backgrounds/Panorama.webp"}, {"name":"PoliceStation", "path":"res://resources/graphics/Gallery/Backgrounds/PoliceStation.webp"}, {"name":"Room_Martin", "path":"res://resources/graphics/Gallery/Backgrounds/Room_Martin.webp"}, {"name":"Sarai", "path":"res://resources/graphics/Gallery/Backgrounds/Sarai.webp"}, {"name":"Stol", "path":"res://resources/graphics/Gallery/Backgrounds/Stol.webp"}, {"name":"Train_video", "path":"res://resources/graphics/Gallery/Backgrounds/Train_video.webp"}, {"name":"ChapterSelector", "path":"res://resources/graphics/Gallery/Backgrounds/ChapterSelector.webp"}, {"name":"Hospital", "path":"", "multiB":["Hospital_Pink", "Hospital_Blue", "Hospital_Green", "Hospital_Purple", "Hospital_Orange", "Hospital_Black", "Hospital_Loser"]}, ] return bg; func GetImagesSettings(): var im = [ {"name":"Black_Death_1", "path":"res://resources/graphics/Gallery/Images/Black_Death_1.webp"}, {"name":"Death_fall", "path":"res://resources/graphics/Gallery/Images/Death_fall.webp"}, {"name":"Death_knife", "path":"res://resources/graphics/Gallery/Images/Death_knife.webp"}, {"name":"Green_Death_1", "path":"res://resources/graphics/Gallery/Images/Green_Death_1.webp"}, {"name":"Purple_Death_1", "path":"res://resources/graphics/Gallery/Images/Purple_Death_1.webp"}, {"name":"Roman_black", "path":"res://resources/graphics/Gallery/Images/Roman_black.webp"}, {"name":"Roman_blue", "path":"res://resources/graphics/Gallery/Images/Roman_blue.webp"}, {"name":"Roman_green", "path":"res://resources/graphics/Gallery/Images/Roman_green.webp"}, {"name":"Roman_pink", "path":"res://resources/graphics/Gallery/Images/Roman_pink.webp"}, {"name":"Roman_violet", "path":"res://resources/graphics/Gallery/Images/Roman_violet.webp"}, {"name":"Roman_Orange", "path":"res://resources/graphics/Gallery/Images/Roman_Orange.webp"}, {"name":"Emiliya_sex", "path":"res://resources/graphics/Gallery/Images/Emiliya_sex.webp"}, {"name":"Agatha_sex", "path":"res://resources/graphics/Gallery/Images/Agatha_sex.webp"}, {"name":"Amanda_sex", "path":"res://resources/graphics/Gallery/Images/Amanda_sex.webp"}, {"name":"Amanda_Suicide", "path":"res://resources/graphics/Gallery/Images/Amanda_Suicide.webp"}, {"name":"Linda_sex", "path":"res://resources/graphics/Gallery/Images/Linda_sex.webp"}, {"name":"Dana_sex", "path":"res://resources/graphics/Gallery/Images/Dana_sex.webp"}, {"name":"Renata_sex", "path":"res://resources/graphics/Gallery/Images/Renata_sex.webp"}, {"name":"Emiliya_Go_Away", "path":"res://resources/graphics/Gallery/Images/Emiliya_Go_Away.webp"}, {"name":"Final_Amanda", "path":"res://resources/graphics/Gallery/Images/Final_Amanda.webp"}, {"name":"Final_Emiliya", "path":"res://resources/graphics/Gallery/Images/Final_Emiliya.webp"}, {"name":"Death_shot_epilogue", "path":"res://resources/graphics/Gallery/Images/Death_shot_epilogue.webp"}, {"name":"Death_shot_girl", "path":"", "multi":["Death_shot_girl_blue", "Death_shot_girl_pink"]}, {"name":"Pistol", "path":"res://resources/graphics/Gallery/Images/Pistol.webp"}, {"name":"Vzriv2", "path":"", "multi":["Vzriv2_Gray", "Vzriv2_White", "Vzriv2_Red", "Vzriv2_Blue_M", ]}, {"name":"Death_Stairs", "path":"res://resources/graphics/Gallery/Images/Death_Stairs.webp"}, {"name":"Death_Poison", "path":"", "multi":["Death_Poison_Green", "Death_Poison_Black", "Death_Poison_Hugh", "Death_Poison_Purple"]}, {"name":"Death_Boy_Electricity", "path":"res://resources/graphics/Gallery/Images/Death_Boy_Electricity.webp"}, {"name":"WoundedDead", "path":"", "multi":["WoundedDead_Red", "WoundedDead_White", "WoundedDead_Blue", "WoundedDead_Gray"]}, {"name":"Car", "path":"res://resources/graphics/Gallery/Images/Car.webp"}, {"name":"Death_Car", "path":"res://resources/graphics/Gallery/Images/Death_Car.webp"}, {"name":"Amanda_before_sex", "path":"res://resources/graphics/Gallery/Images/Amanda_before_sex.webp"}, {"name":"Death_shot", "path":"res://resources/graphics/Gallery/Images/Death_shot.webp"}, {"name":"Kofta", "path":"res://resources/graphics/Gallery/Images/Kofta.webp"}, {"name":"Death_Electro", "path":"res://resources/graphics/Gallery/Images/Death_Electro.webp"}, ] return im; func GetDlcsSettings()->Array: var dlcs = [ {"name":"AgathaDLC", "path":"res://resources/graphics/Gallery/DLC/AgathaDLC.webp"}, {"name":"AmandaDLC", "path":"res://resources/graphics/Gallery/DLC/AmandaDLC.webp"}, {"name":"DanaDLC", "path":"res://resources/graphics/Gallery/DLC/DanaDLC.webp"}, {"name":"EmiliyaDLC", "path":"res://resources/graphics/Gallery/DLC/EmiliyaDLC.webp"}, {"name":"LindaDLC", "path":"res://resources/graphics/Gallery/DLC/LindaDLC.webp"}, {"name":"RenataDLC", "path":"res://resources/graphics/Gallery/DLC/RenataDLC.webp"}, ] return dlcs; var musicGC = []; var backgroundsGC = []; var imagesGC = []; func CheckForGreatCollector(): if musicGC.size() == 0: var temp = GetMusicSettings(); for i in temp: musicGC.push_back(i["name"]); temp = GetBackgroundsSettings(); for i in temp: backgroundsGC.push_back(i["name"]); temp = GetImagesSettings(); for i in temp: imagesGC.push_back(i["name"]); for i in musicGC: if not HaveMusic(i): return ; for i in backgroundsGC: if not HaveBackground(i): return ; for i in imagesGC: if not HaveImage(i): return ; # Steam.set_achievement("Great_Collector");