From 9ffb04b61f11dd2edd0f6a916a81bcd0deaf3f24 Mon Sep 17 00:00:00 2001 From: AnyLeftovers <37920527+yudonglin@users.noreply.github.com> Date: Mon, 19 Dec 2022 17:14:16 -0800 Subject: [PATCH 1/8] fix some small issues and adopt the changes that has been made to linpg --- Assets/image/UI/communication.png | 4 +- Assets/image/UI/communication_effect.png | 3 + .../image/dialog_background/ShootingRange.png | 3 + Data/database.yaml | 9 +- Data/version.yaml | 6 +- Lang/English.yaml | 2 +- Lang/SimplifiedChinese.yaml | 2 +- Source/components.py | 87 +------- Source/implementations.py | 195 ++++++++++++++++++ Source/menu.py | 4 +- Source/tbs.py | 8 +- wrapping.py | 12 +- 12 files changed, 231 insertions(+), 104 deletions(-) create mode 100644 Assets/image/UI/communication_effect.png create mode 100644 Assets/image/dialog_background/ShootingRange.png create mode 100644 Source/implementations.py diff --git a/Assets/image/UI/communication.png b/Assets/image/UI/communication.png index 6364e8e6..71ba55b4 100644 --- a/Assets/image/UI/communication.png +++ b/Assets/image/UI/communication.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a63cc8b18b61fbf223dd636aaf73c595dfb56a67f6d8a8a2e40cf9c03160b54 -size 54576 +oid sha256:df5cbd50e109a2ab9e9c3377a495eb090bd0f725b7cc124da3b3f49c66ebbb2b +size 33710 diff --git a/Assets/image/UI/communication_effect.png b/Assets/image/UI/communication_effect.png new file mode 100644 index 00000000..6d580fb0 --- /dev/null +++ b/Assets/image/UI/communication_effect.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e64a018229340122ca8173c27c743c58c0bbcc91e47fb0077a77955a49b4ab09 +size 143348 diff --git a/Assets/image/dialog_background/ShootingRange.png b/Assets/image/dialog_background/ShootingRange.png new file mode 100644 index 00000000..9cf17472 --- /dev/null +++ b/Assets/image/dialog_background/ShootingRange.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbf0f2b3e4347d8cac86307c708c7aa380d4172c9d7cfdfaaba122430c8ef4c1 +size 467172 diff --git a/Data/database.yaml b/Data/database.yaml index 3dd42f76..09abed69 100644 --- a/Data/database.yaml +++ b/Data/database.yaml @@ -13,11 +13,10 @@ Decorations: Filters: communicating: crop: - - 0 - - 7.5% - - 100% - - 85% - path: Assets/image/UI/communication.png + - 9.75% + - 2.25% + - 87.5% + - 89% rect: - 12.5% - 0 diff --git a/Data/version.yaml b/Data/version.yaml index 7f3e58e5..1ec57969 100644 --- a/Data/version.yaml +++ b/Data/version.yaml @@ -1,4 +1,4 @@ -recommended_linpg_patch: 2 +recommended_linpg_patch: 3 recommended_linpg_revision: 5 -revision: 3 -version: 0 +revision: 0 +version: 1 diff --git a/Lang/English.yaml b/Lang/English.yaml index bd31f902..730e5392 100644 --- a/Lang/English.yaml +++ b/Lang/English.yaml @@ -48,7 +48,7 @@ PhotosensitiveSeizureWarning: condition - that can cause these "photosensitive epileptic seizures" while playing video games. - Immediately stop playing and consult a doctor if you experience any symptoms. -ResultBoard: +ScoreBoard: characters_down: Friendly character down pressKeyContinue: Press to continue pressKeyRestart: Press to restart, or press go back to main diff --git a/Lang/SimplifiedChinese.yaml b/Lang/SimplifiedChinese.yaml index 2d2b2ff2..bb9cb76a 100644 --- a/Lang/SimplifiedChinese.yaml +++ b/Lang/SimplifiedChinese.yaml @@ -49,7 +49,7 @@ PhotosensitiveSeizureWarning: - 极小部分人可能会在看到特定视觉图像(包括可能出现在视频游戏中的闪烁效果或图案)时出现癫痫症状。 - 甚至没有癫痫史的人也可能具有一些可能会在玩视频游戏时导致“光敏性癫痫发作”的未确诊症状。 - 如果你出现任何症状,请立即停止游玩该游戏并咨询医生 -ResultBoard: +ScoreBoard: characters_down: 友方角色被击倒 pressKeyContinue: 按 <空格> 继续 pressKeyRestart: 按 <空格> 重新开始,或按 返回主菜单 diff --git a/Source/components.py b/Source/components.py index a6ec4879..b0170217 100644 --- a/Source/components.py +++ b/Source/components.py @@ -1,85 +1,4 @@ -from .tbs import * - -# 地图编辑器系统 -class _MapEditor(LoadingModule, linpg.AbstractMapEditor): - def __init__(self) -> None: - LoadingModule.__init__(self) - linpg.AbstractMapEditor.__init__(self) - - # 获取角色数据 - 子类需实现 - def get_entities_data(self) -> dict[str, dict[str, linpg.Entity]]: - return self._entities_data - - # 更新特定角色 - def update_entity(self, faction: str, key: str, data: dict) -> None: - if faction == "GriffinKryuger": - self._entities_data[faction][key] = FriendlyCharacter(data, "dev") - if faction == "SangvisFerri": - self._entities_data[faction][key] = HostileCharacter(data, "dev") - - # 加载图片 - 重写使其更新加载信息 - def _load_map(self, _data: dict) -> None: - self._update_loading_info("now_loading_map") - super()._load_map(_data) - - # 加载数据 - 重写使其以多线程的形式进行 - def new( - self, - chapterType: str, - chapterId: int, - projectName: Optional[str] = None, - ) -> None: - # 初始化加载模块 - self._initialize_loading_module() - _task: threading.Thread = threading.Thread( - target=super().new, args=(chapterType, chapterId, projectName) - ) - # 开始加载 - _task.start() - # 显示加载过程 - while _task.is_alive(): - linpg.display.get_window().fill(linpg.colors.BLACK) - self._show_current_loading_progress(linpg.display.get_window()) - linpg.display.flip() - # 加载完成,释放初始化模块占用的内存 - self._finish_loading() - - -# 重写视觉小说模组使其正确地调用和修改全局变量 -class _VisualNovelSystem(linpg.VisualNovelSystem): - def stop(self) -> None: - super().stop() - linpg.global_variables.remove("section") - if ( - self._content.get_section() == "dialog_before_battle" - and self._has_reached_the_end() is True - ): - linpg.global_variables.set("currentMode", value="battle") - else: - linpg.global_variables.remove("currentMode") - - def _initialize( - self, chapterType: str, chapterId: int, projectName: Optional[str] - ) -> None: - super()._initialize(chapterType, chapterId, projectName) - linpg.global_variables.set("currentMode", value="dialog") - linpg.global_variables.set("chapterType", value=self._chapter_type) - linpg.global_variables.set("chapterId", value=self._chapter_id) - linpg.global_variables.set("projectName", value=self._project_name) - - def load_progress(self, _data: dict) -> None: - if _data.get("type") == "dialog": - super().load_progress(_data) - else: - self.stop() - # 设置参数 - linpg.global_variables.remove("section") - linpg.global_variables.set("currentMode", value="battle") - linpg.global_variables.remove("chapterType") - linpg.global_variables.set("chapterId", value=0) - linpg.global_variables.remove("projectName") - linpg.global_variables.set("saveData", value=_data) - +from .implementations import * # 控制台 class _Console(linpg.Console): @@ -186,7 +105,7 @@ def dialog( # 卸载音乐 linpg.media.unload() # 初始化对话系统模块 - _DIALOG: _VisualNovelSystem = _VisualNovelSystem() + _DIALOG: VisualNovelSystem = VisualNovelSystem() if chapterType is not None: _DIALOG.new(chapterType, chapterId, part, projectName) else: @@ -280,7 +199,7 @@ def mapEditor( cls.VIDEO_BACKGROUND.stop() # 卸载音乐 linpg.media.unload() - MAP_EDITOR: _MapEditor = _MapEditor() + MAP_EDITOR: MapEditor = MapEditor() MAP_EDITOR.new(chapterType, chapterId, projectName) # 改变标题 linpg.display.set_caption( diff --git a/Source/implementations.py b/Source/implementations.py new file mode 100644 index 00000000..ed09f8fd --- /dev/null +++ b/Source/implementations.py @@ -0,0 +1,195 @@ +from typing import Final +from .tbs import * + +# 正在通讯中的立绘效果 +class _CharacterInCommunicationFilterEffect( + linpg.AbstractVisualNovelCharacterImageFilterEffect +): + + __KEYWORD: Final[str] = "communicating" + + def __init__(self, _x: int, _y: int, _width: int, _height: int) -> None: + self.__N_IMAGE1: linpg.StaticImage = linpg.StaticImage( + "<@ui>communication.png", _x, _y, _width, _height + ) + self.__D_IMAGE1: linpg.StaticImage = self.__N_IMAGE1.copy() + self.__D_IMAGE1.add_darkness(linpg.VisualNovelCharacterImageManager.DARKNESS) + self.__N_IMAGE2: linpg.StaticImage = linpg.StaticImage( + "<@ui>communication_effect.png", 0, 0 + ) + self.__D_IMAGE2: linpg.StaticImage = self.__N_IMAGE2.copy() + self.__D_IMAGE2.add_darkness(linpg.VisualNovelCharacterImageManager.DARKNESS) + self.__crop_rect: Optional[linpg.Rectangle] = None + + def set_crop_rect(self, rect: Optional[linpg.Rectangle]) -> None: + self.__crop_rect = rect + + def get_rect(self) -> linpg.Rectangle: + return self.__N_IMAGE1.get_rectangle() + + # 将滤镜应用到立绘上并渲染到屏幕上 + def render( + self, + characterImage: linpg.StaticImage, + _surface: linpg.ImageSurface, + is_silent: bool, + ) -> None: + # 如果自定义的crop_rect为None,则以self.__N_IMAGE1的rect为中心 + characterImage.set_crop_rect( + self.__crop_rect if self.__crop_rect is not None else self.get_rect() + ) + # 画出滤镜 + if not is_silent: + self.__N_IMAGE1.set_alpha(characterImage.get_alpha()) + self.__N_IMAGE1.display(_surface, characterImage.get_pos()) + else: + self.__D_IMAGE1.set_alpha(characterImage.get_alpha()) + self.__D_IMAGE1.display(_surface, characterImage.get_pos()) + # 画出立绘 + characterImage.draw(_surface) + # 渲染电子信号的效果 + if self.__crop_rect is not None: + if not is_silent: + self.__N_IMAGE2.set_size( + self.__crop_rect.get_width(), self.__crop_rect.get_height() + ) + self.__N_IMAGE2.display( + _surface, + linpg.coordinates.add( + characterImage.get_pos(), self.__crop_rect.get_pos() + ), + ) + else: + self.__D_IMAGE2.set_size( + self.__crop_rect.get_width(), self.__crop_rect.get_height() + ) + self.__D_IMAGE2.display( + _surface, + linpg.coordinates.add( + characterImage.get_pos(), self.__crop_rect.get_pos() + ), + ) + + @classmethod + def init(cls) -> None: + _value = linpg.DataBase.get("Filters", cls.__KEYWORD) + communicating_filter: _CharacterInCommunicationFilterEffect = ( + _CharacterInCommunicationFilterEffect( + round( + linpg.display.get_width() + * linpg.numbers.convert_percentage(_value["rect"][0]) + ), + round( + linpg.display.get_width() + * linpg.numbers.convert_percentage(_value["rect"][1]) + ), + round( + linpg.display.get_width() + * linpg.numbers.convert_percentage(_value["rect"][2]) + ), + round( + linpg.display.get_width() + * linpg.numbers.convert_percentage(_value["rect"][3]) + ), + ) + ) + _crop: Optional[list] = _value.get("crop") + if _crop is not None: + _rect: linpg.Rectangle = communicating_filter.get_rect() + communicating_filter.set_crop_rect( + linpg.Rectangle( + _rect.x + + round(_rect.width * linpg.numbers.convert_percentage(_crop[0])), + _rect.y + + round(_rect.height * linpg.numbers.convert_percentage(_crop[1])), + round(_rect.width * linpg.numbers.convert_percentage(_crop[2])), + round(_rect.height * linpg.numbers.convert_percentage(_crop[3])), + ) + ) + linpg.VisualNovelCharacterImageManager.FILTERS[ + cls.__KEYWORD + ] = communicating_filter + + +# 初始化立绘滤镜 +_CharacterInCommunicationFilterEffect.init() + +# 重写视觉小说模组使其正确地调用和修改全局变量 +class VisualNovelSystem(linpg.VisualNovelSystem): + def stop(self) -> None: + super().stop() + linpg.global_variables.remove("section") + if ( + self._content.get_section() == "dialog_before_battle" + and self._has_reached_the_end() is True + ): + linpg.global_variables.set("currentMode", value="battle") + else: + linpg.global_variables.remove("currentMode") + + def _initialize( + self, chapterType: str, chapterId: int, projectName: Optional[str] + ) -> None: + super()._initialize(chapterType, chapterId, projectName) + linpg.global_variables.set("currentMode", value="dialog") + linpg.global_variables.set("chapterType", value=self._chapter_type) + linpg.global_variables.set("chapterId", value=self._chapter_id) + linpg.global_variables.set("projectName", value=self._project_name) + + def load_progress(self, _data: dict) -> None: + if _data.get("type") == "dialog": + super().load_progress(_data) + else: + self.stop() + # 设置参数 + linpg.global_variables.remove("section") + linpg.global_variables.set("currentMode", value="battle") + linpg.global_variables.remove("chapterType") + linpg.global_variables.set("chapterId", value=0) + linpg.global_variables.remove("projectName") + linpg.global_variables.set("saveData", value=_data) + + +# 地图编辑器系统 +class MapEditor(LoadingModule, linpg.AbstractMapEditor): + def __init__(self) -> None: + LoadingModule.__init__(self) + linpg.AbstractMapEditor.__init__(self) + + # 获取角色数据 - 子类需实现 + def get_entities_data(self) -> dict[str, dict[str, linpg.Entity]]: + return self._entities_data + + # 更新特定角色 + def update_entity(self, faction: str, key: str, data: dict) -> None: + if faction == "GriffinKryuger": + self._entities_data[faction][key] = FriendlyCharacter(data, "dev") + if faction == "SangvisFerri": + self._entities_data[faction][key] = HostileCharacter(data, "dev") + + # 加载图片 - 重写使其更新加载信息 + def _load_map(self, _data: dict) -> None: + self._update_loading_info("now_loading_map") + super()._load_map(_data) + + # 加载数据 - 重写使其以多线程的形式进行 + def new( + self, + chapterType: str, + chapterId: int, + projectName: Optional[str] = None, + ) -> None: + # 初始化加载模块 + self._initialize_loading_module() + _task: threading.Thread = threading.Thread( + target=super().new, args=(chapterType, chapterId, projectName) + ) + # 开始加载 + _task.start() + # 显示加载过程 + while _task.is_alive(): + linpg.display.get_window().fill(linpg.colors.BLACK) + self._show_current_loading_progress(linpg.display.get_window()) + linpg.display.flip() + # 加载完成,释放初始化模块占用的内存 + self._finish_loading() diff --git a/Source/menu.py b/Source/menu.py index 6c195dc2..897989c7 100644 --- a/Source/menu.py +++ b/Source/menu.py @@ -383,7 +383,7 @@ def __reset_menu(self) -> None: # 是否创意工坊启用 if ( "3_workshop" in self.__disabled_options - and linpg.PersistentData.try_get_bool("enable_workshop") is True + and linpg.PersistentVariables.try_get_bool("enable_workshop") is True ): self.__main_menu_txt["menu_main"][ "3_workshop" @@ -406,7 +406,7 @@ def __reset_menu_text(self, screen_size: tuple) -> None: if linpg.saves.any_progress_exists() is True: self.__disabled_options.remove("0_continue") # 是否启用创意工坊按钮 - if linpg.PersistentData.try_get_bool("enable_workshop") is True: + if linpg.PersistentVariables.try_get_bool("enable_workshop") is True: self.__disabled_options.remove("3_workshop") # 加载主菜单页面的文字设置 txt_location = int(screen_size[0] * 2 / 3) diff --git a/Source/tbs.py b/Source/tbs.py index 38c28d20..85c06aa2 100644 --- a/Source/tbs.py +++ b/Source/tbs.py @@ -1357,7 +1357,9 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.stop() main_chapter_unlock: Optional[ int - ] = linpg.PersistentData.try_get_int("main_chapter_unlock") + ] = linpg.PersistentVariables.try_get_int( + "main_chapter_unlock" + ) if self._project_name is None: max_unlock: int = max( self._chapter_id, @@ -1365,11 +1367,11 @@ def draw(self, screen: linpg.ImageSurface) -> None: if main_chapter_unlock is not None else 0, ) - linpg.PersistentData.set( + linpg.PersistentVariables.set( "main_chapter_unlock", value=max_unlock ) if max_unlock >= 1: - linpg.PersistentData.set( + linpg.PersistentVariables.set( "enable_workshop", value=True ) linpg.global_variables.set("currentMode", value="dialog") diff --git a/wrapping.py b/wrapping.py index fd652039..cb76120e 100644 --- a/wrapping.py +++ b/wrapping.py @@ -3,7 +3,7 @@ from shutil import move as MOVE import subprocess import pkg_resources - from linpgtoolbox.builder import Builder # type: ignore + from linpgtoolbox.builder import Builder, SmartAutoModuleCombineMode # type: ignore # 编译游戏本体 if ( @@ -11,7 +11,9 @@ or input("Do you want to recompile source files (Y/n):") == "Y" ): Builder.delete_file_if_exist("src") - Builder.compile("Source", smart_auto_module_combine=True) + Builder.compile( + "Source", smart_auto_module_combine=SmartAutoModuleCombineMode.ALL_INTO_ONE + ) # 更新所有第三方库 if input("Do you want to update all third party packages (Y/n):") == "Y": @@ -21,7 +23,11 @@ ["pip", "install", "--upgrade", pkg.project_name], shell=True ) except Exception: - print("Warning: fail to update third party package <{}>".format(pkg.project_name)) + print( + "Warning: fail to update third party package <{}>".format( + pkg.project_name + ) + ) # 删除dist文件夹 Builder.delete_file_if_exist("dist") From e3b14dc863833316caefa5a35d6b60d7c1b6089b Mon Sep 17 00:00:00 2001 From: AnyLeftovers <37920527+yudonglin@users.noreply.github.com> Date: Tue, 20 Dec 2022 19:29:40 -0800 Subject: [PATCH 2/8] adjust the directory structure of Data folder --- .gitignore | 1 + Data/database.yaml | 10 + Data/main_chapter/chapter1.linpg.script | 132 ++++ .../chapter1_dialogs_English.yaml | 231 ------- .../chapter1_dialogs_SimplifiedChinese.yaml | 588 ------------------ .../chapter1_level_info_English.yaml | 9 + ...chapter1_level_info_SimplifiedChinese.yaml | 8 + Data/main_chapter/chapter2.linpg.script | 120 ++++ Data/template/chapter_dialogs_example.yaml | 4 + .../chapter_level_info_example.yaml} | 4 - Data/{ => template}/chapter_map_example.yaml | 0 README.md | 40 +- Source/abstract.py | 8 +- Source/implementations.py | 1 + Source/menu.py | 20 +- Source/tbs.py | 14 +- main.py | 15 +- 17 files changed, 343 insertions(+), 862 deletions(-) create mode 100644 Data/main_chapter/chapter1.linpg.script delete mode 100644 Data/main_chapter/chapter1_dialogs_English.yaml delete mode 100644 Data/main_chapter/chapter1_dialogs_SimplifiedChinese.yaml create mode 100644 Data/main_chapter/chapter1_level_info_English.yaml create mode 100644 Data/main_chapter/chapter1_level_info_SimplifiedChinese.yaml create mode 100644 Data/main_chapter/chapter2.linpg.script create mode 100644 Data/template/chapter_dialogs_example.yaml rename Data/{chapter_dialogs_example.yaml => template/chapter_level_info_example.yaml} (73%) rename Data/{ => template}/chapter_map_example.yaml (100%) diff --git a/.gitignore b/.gitignore index bcebbd40..ad24ea72 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ .mypy_cache/ .vs*/ Cache/ +Data/main_chapter/chapter*_dialogs_*.yaml Data/workshop/ Save/ Source_pyd/ diff --git a/Data/database.yaml b/Data/database.yaml index 09abed69..5bba369b 100644 --- a/Data/database.yaml +++ b/Data/database.yaml @@ -123,3 +123,13 @@ Npc: welrod: - welrod.png - welrod_hurt.png + 格林娜: + - kalina_0.png + - kalina_1.png + - kalina_2.png + - kalina_3.png + - kalina_4.png + - kalina_5.png + - kalina_6.png + - kalina_7.png + - kalina_8.png diff --git a/Data/main_chapter/chapter1.linpg.script b/Data/main_chapter/chapter1.linpg.script new file mode 100644 index 00000000..5e97cb45 --- /dev/null +++ b/Data/main_chapter/chapter1.linpg.script @@ -0,0 +1,132 @@ +# Fundamental parameters +[id]1 +[lang]SimplifiedChinese + +[section]dialog_before_battle + +[bgi]null +[bgm]null + +# scene 1 +null: +- 当我接下这个任务时,内心虽有一丝不安,但却自大地想着可能是自己多虑了。 +null: +- 但事实证明,那时的我,是多么天真,多么乐观...多么...愚昧. +null: +- 因为现在...一切的一切,都出错了。 + +[scene]research.jpg +[bgm]BGM_Boss_1.ogg +[display]kalina_5.png + +格林娜: +- 指挥官,铁血的攻势越来越猛烈了,再这样下去,仅存的梯队很快会被击溃的。 +- 是时候该下令开始执行ES-2计划, 并组织所有人形尽快撤离! +指挥官: +- 还是没有一点关于她们的消息吗? +- 后勤第十小队... +格林娜: +- 自从确认失联之后,我们就一直在尝试与她们取得联系,也不知道发生了什么...真让人担心啊 +- 但是,如果再这样拖下去,这里迟早会被铁血包围起来的,请您务必尽快拿定主意 +指挥官: +- 最后一次与她们通讯的坐标在哪? +格林娜: +- 在距离这里以东约50公里的某片平原上 +- 在13个小时之前落入铁血的控制范围内 +指挥官: +- 能派一些人形前去搜索吗? +格林娜: +- 还有战斗能力的梯队目前全都在第二防线上 +- 别说突围了,能勉强挡住铁血的攻势已经是万幸了 +- 如果这时候再抽出人手,防线可能很快就会被铁血击溃 +指挥官: +- 该死,当初谈生意的时候,还说是一场“郊游一般”的搜寻工作 +- 现在倒好,别说完成任务了,能够全身而退已经是谢天谢地了 +格林娜: +- 指挥官,请不要再自责了,换谁当初都不会想到事情会一下子变得那么糟 +- 但现在,还是请优先考虑接下来该怎么做,以大局为重吧 +指挥官: +- ... +- 格林娜 +格林娜: +- 是 +指挥官: +- 开始执行撤离程序吧,然后帮我接通K,我需要和他谈谈 +格林娜: +- 好的,我这就去 + +[hide]* + +null: +- 此时此刻,我的内心十分不安,sv98她们能不能在撤离前赶回来是一件事 +- 但我总感觉这座岛上,有着格里芬甚至安全局自己都还不知道的谜团 + + +# scene 2 + +[scene]snowfield.jpg +[display]sv98.png +sv98: +- gsh18,情况怎么样?能接收到基地的信号吗 +[show]gsh18.png +gsh18: +- 前几个小时通讯还是时断时续的,现在已经几个小时没收到回应了 +- 看来铁血已经完全把信号给切断掉了 +[show]asval.png pp1901.png +sv98: +- asval,pp1901,你们终于回来了 +- 情况怎么样 +asval: +- sv98,我和pp1901在附近发现了一个类似信号发射塔的设施 +- 我们与基地的通讯很有可能就是被它给阻断的 +sv98: +- 有什么好消息吗 +pp1901: +- 唯一可以称得上好消息的是,这个设施里面只有为数不多的铁血 +- 如果能够占领下来的话,不但可以和基地取得联系,还能有效的阻挡铁血的反击攻势 +sv98: +- 那好吧,大家准备一下吧 +- 是时候大干一场了 + +# scene 3 + +[section]dialog_after_battle +null: +- 滴...... +[show]k.png&communicating +K: +- 指挥官,按照计划,现在并不是我们的通讯时间 +指挥官: +- 现在究竟是什么状况,我想你比我还要清楚。我的梯队已经几乎溃散 +- 所以我想知道你所说的救援什么时候能够到达 +K: +- 我想你也该察觉到了,我所说的救援一直就在你们的身边 +- 但如果东西没有拿到,我是不会让它们出手的 +指挥官: +- 那我想知道,为什么你们一开始提供的情报里,并没有丝毫关于铁血的事情 +- 还有就是,你们那错误百出的情报,究竟是从那来的 +K: +- 指挥官,你问的问题,我当然无法告诉你答案 +- 人人都爱吃鸡蛋,但从来没人问鸡蛋是从哪来的 +K: +- 我们情报的来源是可靠的。按道理来讲,铁血应该不知道这件事。 +- 但就目前的情况来看,我们的内部肯定有人把这份情报透露了出去 +指挥官: +- 如果没有支援,我们的梯队很快就会支撑不住了,怎么可能会找得到你所要求的东西 +K: +- 那也没关系。既然你手下的人形只能做到支撑,那就继续支撑下去吧,其他的我会继续想办法的 +[hide]k.png +null: +- 通讯结束 +指挥官: +- 该死,早知道一开始就不应该接受这份委托。 +[display]kalina_5.png +格林娜: +- 指挥官, 情况怎么样!? +指挥官: +- 并不好 +- 有什么好消息吗 +格林娜: +- 我觉得你会想听一下 + +[end] \ No newline at end of file diff --git a/Data/main_chapter/chapter1_dialogs_English.yaml b/Data/main_chapter/chapter1_dialogs_English.yaml deleted file mode 100644 index 5adb669f..00000000 --- a/Data/main_chapter/chapter1_dialogs_English.yaml +++ /dev/null @@ -1,231 +0,0 @@ -battle_info: -- 'Date: July 3rd, 206X' -- 'Local time: 16:52' -- 'Temperature: -12°C/10.4°F' -- 'Visibility: 0.78km/853yd' -- 'Location: approximately 50 km east of the temporary base' -description: Above the snowy plains, the bitter cold wind whipped my cheeks. But at - least, you are with me. -dialogs: - dialog_after_battle: - head: - contents: - - Ding...... - id_001: - contents: - - Commander, according to the plan, this is not the time for us to have a conversation. - id_002: - contents: - - I think you know better than I do about how urgent the situation is right - now. - - My defense was close to disintegrating, and I'd like to know when that rescue - team - - you were talking about would finally arrive. - narrator: Me - id_003: - contents: - - As I'm sure you're aware, the help I'm talking about has been right there - with you all along. - - But if I don't have the stuff, I won't let them go. - id_004: - contents: - - Then I'd like to know why there was no mention of SangvisFerri in the documents - which - - were provided in the first place. - narrator: Me - id_005: - contents: - - SangvisFerri should not know about this, if I may say so. But as things stood, - - someone on the inside must have leaked the information. - id_006: - contents: - - If we don't get the support, I don't think my troops will be able to hold - very long, - - so how will we ever find what you're asking for? - narrator: Me - id_007: - contents: - - That's okay. Since the girls under your command can only do so much to support - - you, then just keep going. I'll figure out the rest. - id_008: - contents: - - End of communication. - id_009: - contents: - - Damn it, I should have never accepted this commission in the first place. - narrator: Me - id_010: - contents: - - It's not your fault either... - narrator: Kalina - id_011: - contents: - - Now, let's just hope that sv98 and the others will be back in time, and we'll - think about - - other things after that. - narrator: Me - id_012: - contents: - - And what if they don't make it back? - narrator: Kalina - id_013: - contents: - - Then... There's no other way... - narrator: Me - id_014: - contents: - - Thanks for trying out Girls' Frontline - Last Wish, more contents is still - in development, - - so stay tuned! - dialog_before_battle: - head: - contents: - - I have to admit, that I have thought about all kinds of situations that may - occur - - during the mission. - id_001: - contents: - - But I didn't expect, that our mission will go south so quickly. - id_002: - contents: - - Commander, SangvisFerri's attack is getting fiercer. If this continues, the - remaining - - troops will soon be surrounded and annihilated! It's time to proceed with - the evacuation - - procedure. - narrator: Kalina - id_003: - contents: - - Any good news about them? The tenth logistic unit... - narrator: Me - id_004: - contents: - - I haven't been able to get ahold of them, so i have no idea what's going on... - - That's worrisome. If we keep this up, it is only a matter of time before SangvisFerri - - surrounds the place. - narrator: Kalina - next_dialog_id: - target: - - id: id_005 - text: What were the coordinates of the last call for help? - type: option - id_005: - contents: - - The latest communication shows that they were on a site 50 kilometers away. - - However, it fell under SangvisFerri's control 13 hours ago. - narrator: Kalina - id_006: - contents: - - Can we send someone out to search the area? - narrator: Me - id_007: - contents: - - All operational troops are currently spread out on the first line of defense. - - Not to mention breaking through, it's already fortunate to be able to block - SangvisFerri's - - attack! If we pull out any force at this point, the defense will soon fall - apart. - narrator: Kalina - id_008: - contents: - - Damn it, where's that backup we were talking about? And this is just an island - with no - - resources whatsoever! Why the National Security Bureau is so concerned? - narrator: Me - id_009: - contents: - - I don't really know. The commission only mentions that it's related to information - - intercepted by the National Security Bureau. Other than that, no more information - was - - revealed. - narrator: Kalina - id_010: - contents: - - Kalina... - narrator: Me - id_011: - contents: - - Yes!? - narrator: Kalina - id_012: - contents: - - Please start the evacuation procedure. Then get me K. I need to talk to him. - narrator: Me - id_013: - contents: - - Okay, I'm on it. - narrator: Kalina - id_014: - contents: - - At the moment, I was very anxious, whether sv98 and the others could make - it back - - before the evacuation is one thing. I have a feeling that there is something - very secret - - on this island that Griffin and even the National Security Bureau themselves - don't even - - know about yet. - id_015: - contents: - - 24 hours ago. - id_016: - contents: - - Asval, how is everything going so far? - id_017: - contents: - - The commander has already sent a helicopter to pick us up. - - We just need to clear the area in case there's an accident when the helicopter - lands. - id_018: - contents: - - Let's hurry up! As long as we can destroy all SangvisFerri's forces in the - area before - - the helicopters arrive, we'll be able to evacuate safely. - id_019: - contents: - - Great! - narrator: Other dolls - id_020: - contents: - - Keep your voice down! It's not like SangvisFerri didn't have ears. - dialog_during_battle: - head: - contents: - - At last, we're free of SangvisFerri's - - pursuers. Did anyone get hurt? - initial_dialog_2: - contents: - - Fine - narrator: Everyone - initial_dialog_3: - contents: - - sv98, we have signs of SangvisFerri activity ahead. - initial_dialog_4: - contents: - - Oh no! I'm out of ammo... - initial_dialog_5: - contents: - - The SangvisFerri in the front... - - Seems to be guarding something. - initial_dialog_6: - contents: - - From a distance, it looks like a supply crate. - initial_dialog_7: - contents: - - sv98, go for it. We'll cover you. - initial_dialog_8: - contents: - - It seems like I have no choice... - - Girls, get ready, it is our show time! - initial_dialog_9: - contents: - - sv98 has no bullets at this moment - - and cannot attack - narrator: Tip - tutorial1: - contents: - - Guys, I got the supplies! - tutorial2: - contents: - - Please remember to reload. - narrator: Tip -title: A Wish Likes Snow diff --git a/Data/main_chapter/chapter1_dialogs_SimplifiedChinese.yaml b/Data/main_chapter/chapter1_dialogs_SimplifiedChinese.yaml deleted file mode 100644 index 46994bb8..00000000 --- a/Data/main_chapter/chapter1_dialogs_SimplifiedChinese.yaml +++ /dev/null @@ -1,588 +0,0 @@ -battle_info: -- 日期:206X年7月3日 -- 当地时间:16:52 -- 气温:-12°C -- 能见度:0.78公里 -- 地点:临时据点以东约50公里 -description: 茫茫雪原之上,刺骨的寒风拂过我的脸颊。但至少,还有你们的陪伴 -dialogs: - dialog_after_battle: - head: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png - contents: - - 滴...... - last_dialog_id: null - narrator: '' - next_dialog_id: - target: id_001 - type: default - id_001: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png&silent - - k.png&communicating - contents: - - 指挥官,按照计划,现在并不是我们的通讯时间 - last_dialog_id: head - narrator: K - next_dialog_id: - target: id_002 - type: default - id_002: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png&silent - - k.png&communicating&silent - contents: - - 现在究竟是什么状况,我想你比我还要清楚。我的梯队已经溃散 - - 所以我想知道你所说的救援什么时候能够到达 - last_dialog_id: id_001 - narrator: 我 - next_dialog_id: - target: id_003 - type: default - id_003: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png&silent - - k.png&communicating - contents: - - 我想你也该察觉到了,我所说的救援一直就在你们的身边 - - 但如果东西没有拿到,我是不会让它们出手的 - last_dialog_id: id_002 - narrator: K - next_dialog_id: - target: id_004 - type: default - id_004: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png&silent - - k.png&communicating&silent - contents: - - 那我想知道,为什么你们一开始提供的情报里,并没有提到丝毫关于铁血的事情 - last_dialog_id: id_003 - narrator: 我 - next_dialog_id: - target: id_005 - type: default - id_005: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png&silent - - k.png&communicating - contents: - - 按道理来讲,铁血应该不知道这件事。但就目前的情况来看, - - 我们的内部肯定有人把这份情报透露了出去 - last_dialog_id: id_004 - narrator: K - next_dialog_id: - target: id_006 - type: default - id_006: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png&silent - - k.png&communicating&silent - contents: - - 如果没有支援,我们的梯队很快就会支撑不住了,怎么可能会找得到你所要求的东西 - last_dialog_id: id_005 - narrator: 我 - next_dialog_id: - target: id_007 - type: default - id_007: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png&silent - - k.png&communicating - contents: - - 那也没关系。既然你手下的人形只能做到支撑,那就继续支撑下去吧,其他的我会继续想办法的 - last_dialog_id: id_006 - narrator: K - next_dialog_id: - target: id_008 - type: default - id_008: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png&silent - contents: - - 通讯结束 - last_dialog_id: id_007 - narrator: '' - next_dialog_id: - target: id_009 - type: default - id_009: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png&silent - contents: - - 该死,早知道一开始就不应接受这份委托。 - last_dialog_id: id_008 - narrator: 我 - next_dialog_id: - target: id_010 - type: default - id_010: - background_image: research.jpg - background_music: null - character_images: - - kalina_8.png - contents: - - 这也不是您的错... - last_dialog_id: id_009 - narrator: 格林娜 - next_dialog_id: - target: id_011 - type: default - id_011: - background_image: research.jpg - background_music: null - character_images: - - kalina_8.png&silent - contents: - - 现在只希望,sv98他们能够及时回来,之后再考虑其他的事情吧 - last_dialog_id: id_010 - narrator: 我 - next_dialog_id: - target: id_012 - type: default - id_012: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png - contents: - - 那如果她们没办法回来呢 - last_dialog_id: id_011 - narrator: 格林娜 - next_dialog_id: - target: id_013 - type: default - id_013: - background_image: research.jpg - background_music: null - character_images: - - kalina_5.png&silent - contents: - - 那我就...没有其他的办法了... - last_dialog_id: id_012 - narrator: 我 - next_dialog_id: - target: id_014 - type: default - id_014: - background_image: SlumpingFluid.mp4 - background_music: null - character_images: [] - contents: - - 感谢试玩《少女前线-遗愿》,更多内容仍在研发当中,敬请期待 - last_dialog_id: id_013 - narrator: '' - next_dialog_id: - target: WhatAmIFightingFor.mp4 - type: cutscene - dialog_before_battle: - head: - background_image: null - background_music: null - character_images: [] - contents: - - 在我的潜意识中,我曾担心过意外 - last_dialog_id: null - narrator: '' - next_dialog_id: - target: id_001 - type: default - id_001: - background_image: null - background_music: null - character_images: [] - contents: - - 然而我却没有想到,意外会来得如此之快 - last_dialog_id: head - narrator: '' - next_dialog_id: - target: id_002 - type: default - id_002: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_5.png - contents: - - 指挥官,铁血的攻势越来越猛烈了,再这样下去,仅存的梯队很快会被击溃 - - 是时候该下令开始执行标准的撤离程序了 - last_dialog_id: id_001 - narrator: 格林娜 - next_dialog_id: - target: id_003 - type: default - id_003: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_5.png&silent - contents: - - 还是没有一点关于她们的消息吗 - - 后勤第十小队... - last_dialog_id: id_002 - narrator: 我 - next_dialog_id: - target: id_004 - type: default - id_004: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_8.png - contents: - - 一直联系不上,也不知道发生了什么...真让人担心啊 - - 再这样拖下去,这里迟早会被铁血包围起来的 - last_dialog_id: id_003 - narrator: 格林娜 - next_dialog_id: - target: - - id: id_005 - text: 最后发出呼救的坐标在哪? - type: option - id_005: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_5.png - contents: - - 在距离这里以东约50公里的某片平原上 - - 在13个小时之前落入铁血的控制范围内 - last_dialog_id: id_004 - narrator: 格林娜 - next_dialog_id: - target: id_006 - type: default - id_006: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_5.png&silent - contents: - - 能派一些人形前去搜索吗? - last_dialog_id: id_005 - narrator: 我 - next_dialog_id: - target: id_007 - type: default - id_007: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_8.png - contents: - - 目前还能行动的梯队目前全都分布在第一防线上 - - 别说突围了,能勉强挡住铁血的攻势已经是万幸了 - - 如果这时候再抽出人手,防线可能很快就会被铁血击溃 - last_dialog_id: id_006 - narrator: 格林娜 - next_dialog_id: - target: id_008 - type: default - id_008: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_8.png&silent - contents: - - 该死,说好的支援呢 - - 而且这只是一座什么资源都没有的孤岛而已,为什么安全局会如此重视 - last_dialog_id: id_007 - narrator: 我 - next_dialog_id: - target: id_009 - type: default - id_009: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_5.png - contents: - - 我也不是很清楚,委托中只提到这和安全局截取到的情报有关 - - 除此之外就没有透露更多信息了 - last_dialog_id: id_008 - narrator: 格林娜 - next_dialog_id: - target: id_010 - type: default - id_010: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_5.png&silent - contents: - - 格林娜 - last_dialog_id: id_009 - narrator: 我 - next_dialog_id: - target: id_011 - type: default - id_011: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_3.png - contents: - - 是 - last_dialog_id: id_010 - narrator: 格林娜 - next_dialog_id: - target: id_012 - type: default - id_012: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_3.png&silent - contents: - - 开始撤离程序吧,然后帮我接通K,我需要和他谈谈 - last_dialog_id: id_011 - narrator: 我 - next_dialog_id: - target: id_013 - type: default - id_013: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: - - kalina_5.png - contents: - - 好的,我这就去 - last_dialog_id: id_012 - narrator: 格林娜 - next_dialog_id: - target: id_014 - type: default - id_014: - background_image: research.jpg - background_music: BGM_Boss_1.ogg - character_images: [] - contents: - - 此时此刻,我的内心十分不安,sv98她们能不能在撤离前赶回来是一件事 - - 但我总感觉这座岛上,有着格里芬甚至安全局自己都还不知道的谜团 - last_dialog_id: id_013 - narrator: '' - next_dialog_id: - target: id_015 - type: changeScene - id_015: - background_image: snowfield.jpg - background_music: BGM_Brain_1.ogg - character_images: [] - contents: - - 24小时以前 - last_dialog_id: null - narrator: '' - next_dialog_id: - target: id_016 - type: default - id_016: - background_image: snowfield.jpg - background_music: BGM_Brain_1.ogg - character_images: - - sv98.png - contents: - - asval,情况怎么样? - last_dialog_id: id_015 - narrator: sv98 - next_dialog_id: - target: id_017 - type: default - id_017: - background_image: snowfield.jpg - background_music: BGM_Brain_1.ogg - character_images: - - asval.png - - sv98.png&silent - contents: - - 指挥官已经派直升机来接我们了,我们只需要清空地面上铁血火力,防止直升机降落时出现意外 - last_dialog_id: id_016 - narrator: asval - next_dialog_id: - target: id_018 - type: default - id_018: - background_image: snowfield.jpg - background_music: BGM_Brain_1.ogg - character_images: - - sv98.png - contents: - - 大家再加把劲,只要我们在直升机到来前尽可能消灭当前区域内的铁血势力 - - 到时候我们就能安全撤离了。 - last_dialog_id: id_017 - narrator: asval - next_dialog_id: - target: id_019 - type: default - id_019: - background_image: snowfield.jpg - background_music: BGM_Brain_1.ogg - character_images: - - sv98.png&silent - contents: - - 好! - last_dialog_id: id_018 - narrator: 众人 - next_dialog_id: - target: id_020 - type: default - id_020: - background_image: snowfield.jpg - background_music: BGM_Brain_1.ogg - character_images: - - sv98.png - contents: - - 小声点!铁血又不是没长耳朵。 - last_dialog_id: id_019 - narrator: asval - next_dialog_id: null - dialog_during_battle: - head: - background_image: null - background_music: null - character_images: - - sv98.png - contents: - - 总算是摆脱铁血的追兵了 - - 大家都没事吧 - last_dialog_id: null - narrator: sv98 - next_dialog_id: - target: initial_dialog_2 - type: default - initial_dialog_2: - background_image: null - background_music: null - character_images: - - sv98.png&silent - contents: - - 没事 - last_dialog_id: head - narrator: 众人 - next_dialog_id: - type: break - initial_dialog_3: - background_image: null - background_music: null - character_images: - - asval.png - contents: - - sv98,前方发现有铁血活动的痕迹 - last_dialog_id: null - narrator: asval - next_dialog_id: - type: break - initial_dialog_4: - background_image: null - background_music: null - character_images: - - sv98.png - contents: - - 该死...我已经没有弹药了 - last_dialog_id: null - narrator: sv98 - next_dialog_id: - target: initial_dialog_5 - type: default - initial_dialog_5: - background_image: null - background_music: null - character_images: - - pp1901.png - contents: - - 前方的铁血...好像在守着什么 - last_dialog_id: initial_dialog_4 - narrator: pp1901 - next_dialog_id: - target: initial_dialog_6 - type: default - initial_dialog_6: - background_image: null - background_music: null - character_images: - - gsh18.png - contents: - - 远远看过去,好像是物资箱 - last_dialog_id: null - narrator: gsh18 - next_dialog_id: - target: initial_dialog_7 - type: default - initial_dialog_7: - background_image: null - background_music: null - character_images: - - asval.png - contents: - - sv98,上吧。我们会掩护你的。 - last_dialog_id: initial_dialog_6 - narrator: asval - next_dialog_id: - target: initial_dialog_8 - type: default - initial_dialog_8: - background_image: null - background_music: null - character_images: - - sv98.png - contents: - - 那就拜托你们了... - - 各位,子弹上膛,准备战斗! - last_dialog_id: initial_dialog_7 - narrator: sv98 - next_dialog_id: - target: initial_dialog_9 - type: default - initial_dialog_9: - background_image: null - background_music: null - character_images: [] - contents: - - 目前sv98没有子弹,无法攻击 - last_dialog_id: initial_dialog_8 - narrator: 提示 - next_dialog_id: - type: break - tutorial1: - background_image: null - background_music: null - character_images: - - sv98.png - contents: - - 各位,我拿到补给了! - last_dialog_id: null - narrator: sv98 - next_dialog_id: - target: tutorial2 - type: default - tutorial2: - background_image: null - background_music: null - character_images: [] - contents: - - 请注意换弹 - last_dialog_id: tutorial1 - narrator: 提示 - next_dialog_id: - type: break -title: 白色的希望 diff --git a/Data/main_chapter/chapter1_level_info_English.yaml b/Data/main_chapter/chapter1_level_info_English.yaml new file mode 100644 index 00000000..9fe28dea --- /dev/null +++ b/Data/main_chapter/chapter1_level_info_English.yaml @@ -0,0 +1,9 @@ +battle_info: +- 'Date: July 3rd, 206X' +- 'Local time: 16:52' +- 'Temperature: -12°C/10.4°F' +- 'Visibility: 0.78km/853yd' +- 'Location: approximately 50 km east of the temporary base' +description: Above the snowy plains, the bitter cold wind whipped my cheeks. But at + least, you are with me. +title: A Wish Likes Snow diff --git a/Data/main_chapter/chapter1_level_info_SimplifiedChinese.yaml b/Data/main_chapter/chapter1_level_info_SimplifiedChinese.yaml new file mode 100644 index 00000000..c2158fe5 --- /dev/null +++ b/Data/main_chapter/chapter1_level_info_SimplifiedChinese.yaml @@ -0,0 +1,8 @@ +battle_info: +- 日期:206X年7月3日 +- 当地时间:16:52 +- 气温:-12°C +- 能见度:0.78公里 +- 地点:临时据点以东约50公里 +description: 茫茫雪原之上,刺骨的寒风拂过我的脸颊。但至少,还有你们的陪伴 +title: 白色的希望 diff --git a/Data/main_chapter/chapter2.linpg.script b/Data/main_chapter/chapter2.linpg.script new file mode 100644 index 00000000..7dc762f7 --- /dev/null +++ b/Data/main_chapter/chapter2.linpg.script @@ -0,0 +1,120 @@ +# Fundamental parameters +[id]2 +[lang]SimplifiedChinese + +[section]dialog_before_battle + +# section 1 +[bgi]null +[bgm]null + +null: +- 我梦见了山川和大海, 梦见了高耸入云的城市和荒无人烟的沙漠...我梦见了缥缈无影的过去, 和无法触碰的未来... +null: +- 我梦见... +??: +- SV-98!! +null: +- 似乎...有人在叫我... +??: +- SV-98!! 快醒醒! +null: +- 嗯... + +[bgi]snowfield.jpg +[display]sv98.png + +null: +- (SV-98醒来) + +[bgm]BGM_Brain_1.ogg +[show]gsh18.png +GSH18: +- SV-98!! 快起来啦!太阳, 啊不, 月亮要晒屁...呀不对...总之快起来啦! +SV-98: +- 嗯...ASVAL, 我睡了多久... + +[show]asval.png +ASVAL: +- 大概8个小时了吧... +[show]pp1901.png +PP-19-01: +- 准确的来讲是8小时12分钟43秒吧. +ASVAL: +- 拜托,PP-19-01, 你用不着那么较真吧 +PP-19-01: +- 这不是较真, 是严谨好吗! +SV-98: +- ASVAL, 我不是说好了日落之前应该把我叫起来吗. +ASVAL: +- 啊, 抱歉, 我看你睡得那么香就没舍得把你叫起来. +SV-98: +- 哎, 先不提这个了. ASVAL, 你有收到任何指挥官的讯息吗. +ASVAL: +- 啊, 这个先不急. +GSH-18: +- 指挥官已经在一个小时之前发来最新的命令了 +SV-98: +- 啊, GSH-18, 指挥官已经准备好进行新一轮的进攻了吗 +GSH-18: +- 恰恰相反, 指挥官已经做好了撤退的打算. 临时据点附近已经进入僵持阶段了. +- 自从坐标暴露之后, 铁血的主力正涌向指挥官所在坐标. +SV-98: +- 这样啊, 那我们应该尽快和指挥官汇合才对. +ASVAL: +- 指挥官说接应我们撤退的直升机已经在路上了, 预计会在2个小时内进入我们所在的区域. +SV-98: +- 好吧, 大家赶紧收拾一下, 准备撤离了! + + +[section]dialog_during_battle + +ASVAL: +- 糟了, 铁血把前进的道路封锁起来了, 这下应该很难跑了. +SV-98: +- 该死, 我也没有什么弹药了 +PP-19-01: +- SV-98, 铁血似乎在守着什么 +SV-98: +- 看起来是物资箱, 这里似乎是铁血的临时据点, 主力应该不在这里 +GSH-18: +- SV-98, 我认为我们应该在救援的直升机到来之前清空这个据点, 好让直升机降落 +SV-98: +- 你说的对. 各位, 准备大干一场吧! +null: +- 目前SV-98没有任何的子弹, 无法攻击. 潜入还是让队友吸引火力, 可以自行选择. + + +[section]dialog_after_battle +null: +- (过了很久之后) +飞行员: +- 后勤第十小队, 我看到你们了. 即将着陆, 请做好登机准备 +SV-98: +- 各位, 别再节省弹药了, 无论是手雷还是烟雾弹全丢出去, 我们要准备撤离了 +众人: +- 知道了! +null: +- 硝烟弥漫之季, 众人快速登上直升机. 在发动机的轰鸣声和子弹撞击钢板声中, 直升机快速飞离了铁血控制的空域. +null: +- (机舱内) +GSH-18: +- 啊, 总算逃过一劫, 我还以为这会又死定了呢 +PP-19-01: +- GSH-18, 人形是不会死的. 如果你刚才被铁血抓住了, 我们大不了过几天会有一个新的GSH-18来报道吧. +GSH-18: +- 诶...!!?? +SV-98: +- PP-19-01, 我觉得这不是一件好玩的事情 +PP-19-01: +- 啊... 抱歉. 不过话说回来, 我们上一次备份心智云图是什么时候? 好像自从任务开始之后我们就没有备份过心智了. +ASVAL: +- 的确, 我们与指挥官的联络受铁血干扰, 总是断断续续的, 基本没有办法上传最新的备份. +GSH-18: +- 不过总算能回基地了, 到时候就应该能安全地上传数据了吧. +飞行员: +- 我们飞回去还需要几个小时, 你们先好好休息一下吧, 等快到基地了我会提前通知你们的 +众人: +- 好 + +[end] diff --git a/Data/template/chapter_dialogs_example.yaml b/Data/template/chapter_dialogs_example.yaml new file mode 100644 index 00000000..0df46879 --- /dev/null +++ b/Data/template/chapter_dialogs_example.yaml @@ -0,0 +1,4 @@ +dialogs: + dialog_after_battle: {} + dialog_before_battle: {} + dialog_during_battle: {} diff --git a/Data/chapter_dialogs_example.yaml b/Data/template/chapter_level_info_example.yaml similarity index 73% rename from Data/chapter_dialogs_example.yaml rename to Data/template/chapter_level_info_example.yaml index 6e1d7702..b15d045f 100644 --- a/Data/chapter_dialogs_example.yaml +++ b/Data/template/chapter_level_info_example.yaml @@ -6,8 +6,4 @@ battle_info: - 5 lines are the maximum description: The description of the chapter, will be displayed during the loading screen -dialogs: - dialog_after_battle: {} - dialog_before_battle: {} - dialog_during_battle: {} title: The title of this chapter diff --git a/Data/chapter_map_example.yaml b/Data/template/chapter_map_example.yaml similarity index 100% rename from Data/chapter_map_example.yaml rename to Data/template/chapter_map_example.yaml diff --git a/README.md b/README.md index 5aafc8ca..1e494357 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ # GFL-Last Wish 少前-遗愿 -[![Total alerts](https://img.shields.io/lgtm/alerts/g/TigeiaWorkshop/GirlsFrontLine-LastWish.svg?style=for-the-badge&logo=appveyor?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/TigeiaWorkshop/GirlsFrontLine-LastWish/alerts/) [![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/TigeiaWorkshop/GirlsFrontLine-LastWish.svg?style=for-the-badge&logo=appveyor?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/TigeiaWorkshop/GirlsFrontLine-LastWish/context:python) ![GitHub](https://img.shields.io/github/license/TigeiaWorkshop/GirlsFrontLine-LastWish?style=for-the-badge&logo=appveyor) - -![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/TigeiaWorkshop/GirlsFrontLine-LastWish?include_prereleases&style=for-the-badge) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/linpg?style=for-the-badge&logo=appveyor) +![GitHub](https://img.shields.io/github/license/TigeiaWorkshop/GirlsFrontLine-LastWish?style=for-the-badge&logo=appveyor) ![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/TigeiaWorkshop/GirlsFrontLine-LastWish?include_prereleases&style=for-the-badge) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/linpg?style=for-the-badge&logo=appveyor) ![GitHub](https://img.shields.io/badge/code%20style-black-black?style=for-the-badge&logo=appveyor) # :speech_balloon: Preamble / 前言 @@ -34,23 +32,23 @@ Their stories may be forgotten by history, but what they have done will be remem # :date: ​R&D Roadmap / 研发路线图 -| 计划事宜 | plans | 时间 Date | -| ------------------------- | ------------------------------------------------ | ----------- | -| 游戏立项 | Project established | 2019.5 | -| 游戏研发正式开始 | Development started | 2019.9 | -| 第一个可玩原型 | First build was available | 2019.11 | -| 游戏概念公布 | Game Concept Released | 2020.2.13 | -| 第一个alpha版本制作完成 | The first alpha version was available | 2020.3.11 | -| Linpg2引擎的所有预期研发工作完成 | All goals for Linpg2 were reached. | 2020.3 | -| Linpg引擎开始初期重构(即第三代) | The reconfiguration of Linpg Engine started | 2020.4 | -| Linpg引擎初期重构完成,开始游戏本体的迁徙工作 | The reconfiguration of Linpg Engine was finished | 2020.6 | -| 游戏本体迁徙工作基本完成 | The migrations completed | 2020.8 | -| 游戏进行小范围测试 | Small-scale testing | 2022.9 | -| 第1至4章发布 | The first to fourth chapter releases. | 2022.10 | -| 第5至8章发布 | The fifth to eighth chapter releases. | 2022.12 | -| 第9至11章发布 | The ninth to eleventh chapter releases. | 2023 spring | -| 最终章发布 | Final chapter releases | 2023 spring | -| 第一个DLC发布 | First DLC releases | 2023 Summer | +| 计划事宜 | plans | 时间 Date | +| --------------------------------------------- | --------------------------------------------------- | ---------- | +| 游戏立项 | Project established | 2019.5 | +| 游戏研发正式开始 | Development started | 2019.9 | +| 第一个可玩原型 | First build was available | 2019.11 | +| 游戏概念公布 | Game Concept Released | 2020.2.13 | +| 第一个alpha版本制作完成 | The first alpha version was available | 2020.3.11 | +| Linpg2引擎的所有预期研发工作完成 | All development goals for Linpg2 were reached | 2020.3 | +| Linpg引擎开始初期重构(即第三代) | The development of Linpg Engine 3.0 started | 2020.4 | +| Linpg引擎初期重构完成,开始游戏本体的迁徙工作 | The development of Linpg Engine 3.0 finished | 2020.6 | +| 游戏本体迁徙工作基本完成 | The migrations from Linpg Engine 2 to 3.0 completed | 2020.8 | +| 游戏进行小范围测试 | Small-scale testing | 2022.9 | +| 第1至3章发布 | The first to fourth chapter releases. | 2022.12.22 | +| 第5至8章发布 | The fifth to eighth chapter releases. | 2022.12 | +| 第9至11章发布 | The ninth to eleventh chapter releases. | Pending | +| 最终章发布 | Final chapter releases | Pending | +| 第一个DLC发布 | First DLC releases | Pending | # :memo: Chapters / 游戏章节 @@ -58,7 +56,7 @@ Their stories may be forgotten by history, but what they have done will be remem | ----- | ---------------- | ---------------------------------------- | ------------------------------------ | ------------- | | 1 | 雪色的希望 | A wish likes snow | 2022.12.22 | :hammer: | | 2 | 迷离之下 | Beneath smoke | 2022.12.22 | :hammer: | -| 3 | 琴弦之上 | Above string | 2022.12.22 | :hammer: | +| 3 | 琴弦之上 | Above string | 2023.1 | :hammer: | | 4 | 喘息(暂定) | A gasp for breath (Provisional) | | | | 5 | 无人之防(暂定) | Make defense without dolls (Provisional) | | | | 6 | 机遇(暂定) | The opportunity (Provisional) | | | diff --git a/Source/abstract.py b/Source/abstract.py index 59b1e534..927b6308 100644 --- a/Source/abstract.py +++ b/Source/abstract.py @@ -209,8 +209,12 @@ def _update_sound_volume(self) -> None: """其他""" - def _get_dialog_file_location(self) -> str: - return self.__DIALOG.get_data_file_path() + def _get_level_info(self) -> dict: + return linpg.config.try_load_file_if_exists( + self.get_data_file_path().replace( + "_map", "_level_info_" + linpg.lang.get_current_language() + ) + ) # 初始化视觉小说系统 def _init_dialog(self, _data: dict) -> None: diff --git a/Source/implementations.py b/Source/implementations.py index ed09f8fd..73c1b58f 100644 --- a/Source/implementations.py +++ b/Source/implementations.py @@ -114,6 +114,7 @@ def init(cls) -> None: # 初始化立绘滤镜 _CharacterInCommunicationFilterEffect.init() + # 重写视觉小说模组使其正确地调用和修改全局变量 class VisualNovelSystem(linpg.VisualNovelSystem): def stop(self) -> None: diff --git a/Source/menu.py b/Source/menu.py index 897989c7..f6843bb6 100644 --- a/Source/menu.py +++ b/Source/menu.py @@ -306,9 +306,21 @@ def __create_new_chapter(self) -> None: ) + 1 ) - # 复制视觉小说系统默认模板 + # 复制关卡数据默认模板 copyfile( - "Data/chapter_dialogs_example.yaml", + "Data/template/chapter_level_info_example.yaml", + os.path.join( + "Data", + "workshop", + self.current_selected_workshop_project, + "chapter{0}_level_info_{1}.yaml".format( + chapterId, linpg.setting.get_language() + ), + ), + ) + # 复制视觉小说数据默认模板 + copyfile( + "Data/template/chapter_dialogs_example.yaml", os.path.join( "Data", "workshop", @@ -318,9 +330,9 @@ def __create_new_chapter(self) -> None: ), ), ) - # 复制战斗系统默认模板 + # 复制地图数据默认模板 copyfile( - "Data/chapter_map_example.yaml", + "Data/template/chapter_map_example.yaml", os.path.join( "Data", "workshop", diff --git a/Source/tbs.py b/Source/tbs.py index 85c06aa2..7419de0e 100644 --- a/Source/tbs.py +++ b/Source/tbs.py @@ -298,21 +298,21 @@ def __start_loading(self, _data: dict) -> None: # 初始化剧情模块 self._init_dialog(dict(_data["dialogs"].get("data", {}))) # 章节标题显示 - DataTmp: dict = linpg.config.load_file(self._get_dialog_file_location()) + levelInfo: dict = self._get_level_info() LoadingTitle.update( linpg.lang.get_texts("Battle_UI", "numChapter"), self._chapter_id, - DataTmp.get("title", linpg.lang.get_text("Global", "no_translation")), - DataTmp.get("description", linpg.lang.get_text("Global", "no_translation")), + levelInfo.get("title", linpg.lang.get_text("Global", "no_translation")), + levelInfo.get("description", linpg.lang.get_text("Global", "no_translation")), ) # 加载关卡背景介绍信息文字 self.__battle_info = tuple( [ self._FONT.render(_text, linpg.colors.WHITE) - for _text in DataTmp.get( + for _text in levelInfo.get( "battle_info", linpg.config.load( - r"Data/chapter_dialogs_example.yaml", "battle_info" + r"Data/template/chapter_level_info_example.yaml", "battle_info" ), ) ] @@ -1343,7 +1343,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: ScoreBoard.update( random.choice(list(self.alliances.values())).type, self._chapter_id, - linpg.config.load_file(self._get_dialog_file_location()).get( + self._get_level_info().get( "title", linpg.lang.get_text("Global", "no_translation") ), True, @@ -1388,7 +1388,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: ScoreBoard.update( random.choice(list(self.alliances.values())).type, self._chapter_id, - linpg.config.load_file(self._get_dialog_file_location()).get( + self._get_level_info().get( "title", linpg.lang.get_text("Global", "no_translation") ), False, diff --git a/main.py b/main.py index 114f0100..aabde7ce 100644 --- a/main.py +++ b/main.py @@ -7,15 +7,20 @@ else: from Source import MainMenu, linpg - # 读取并整理配置文件 - for folderPath in (r"Lang/*.yaml", r"Data/*.yaml", r"Data/main_chapter/*.yaml"): - linpg.config.organize(folderPath) + # 读取并整理配置文件 + for folderPath in ( + r"Lang/*.yaml", + r"Data/*.yaml", + r"Data/main_chapter/*.yaml", + r"Data/template/*.yaml", + ): + linpg.config.organize(folderPath) # 是否启动游戏 - GAMESTART: bool = True + GAME_START: bool = True # 游戏主进程 - if GAMESTART is True: + if GAME_START is True: # 窗口标题图标 linpg.display.set_icon(r"Assets/image/UI/icon.png") linpg.display.set_caption(linpg.lang.get_text("General", "game_title")) From b8b5f991ee10be5723dc6cf87df236e3fb069c01 Mon Sep 17 00:00:00 2001 From: AnyLeftovers <37920527+yudonglin@users.noreply.github.com> Date: Thu, 22 Dec 2022 23:16:07 -0800 Subject: [PATCH 3/8] add level information and remove alpha build warning --- .../chapter1_level_info_English.yaml | 6 ++-- ...chapter1_level_info_SimplifiedChinese.yaml | 6 ++-- .../chapter2_level_info_English.yaml | 9 ++++++ ...chapter2_level_info_SimplifiedChinese.yaml | 8 +++++ Data/specifications.yaml | 3 ++ Source/__init__.py | 2 +- Source/api.py | 30 ------------------- Source/components.py | 4 --- Source/entity.py | 15 +++++++++- Source/menu.py | 14 ++++++--- 10 files changed, 51 insertions(+), 46 deletions(-) create mode 100644 Data/main_chapter/chapter2_level_info_English.yaml create mode 100644 Data/main_chapter/chapter2_level_info_SimplifiedChinese.yaml delete mode 100644 Source/api.py diff --git a/Data/main_chapter/chapter1_level_info_English.yaml b/Data/main_chapter/chapter1_level_info_English.yaml index 9fe28dea..55a6400a 100644 --- a/Data/main_chapter/chapter1_level_info_English.yaml +++ b/Data/main_chapter/chapter1_level_info_English.yaml @@ -1,8 +1,8 @@ battle_info: - 'Date: July 3rd, 206X' -- 'Local time: 16:52' -- 'Temperature: -12°C/10.4°F' -- 'Visibility: 0.78km/853yd' +- 'Local time: 11:52' +- 'Temperature: -3°C' +- 'Visibility: 3.78km' - 'Location: approximately 50 km east of the temporary base' description: Above the snowy plains, the bitter cold wind whipped my cheeks. But at least, you are with me. diff --git a/Data/main_chapter/chapter1_level_info_SimplifiedChinese.yaml b/Data/main_chapter/chapter1_level_info_SimplifiedChinese.yaml index c2158fe5..658e09fb 100644 --- a/Data/main_chapter/chapter1_level_info_SimplifiedChinese.yaml +++ b/Data/main_chapter/chapter1_level_info_SimplifiedChinese.yaml @@ -1,8 +1,8 @@ battle_info: - 日期:206X年7月3日 -- 当地时间:16:52 -- 气温:-12°C -- 能见度:0.78公里 +- 当地时间:11:52 +- 气温:-3°C +- 能见度:3.78公里 - 地点:临时据点以东约50公里 description: 茫茫雪原之上,刺骨的寒风拂过我的脸颊。但至少,还有你们的陪伴 title: 白色的希望 diff --git a/Data/main_chapter/chapter2_level_info_English.yaml b/Data/main_chapter/chapter2_level_info_English.yaml new file mode 100644 index 00000000..312c4ab6 --- /dev/null +++ b/Data/main_chapter/chapter2_level_info_English.yaml @@ -0,0 +1,9 @@ +battle_info: +- 'Date: July 3rd, 206X' +- 'Local time: 19:14' +- 'Temperature: -12°C' +- 'Visibility: 0.61km' +- 'Location: approximately 48 km east of the temporary base' +description: People who are hopeful can always see tomorrow... At least, I hope this + is the case... +title: Beneath smoke diff --git a/Data/main_chapter/chapter2_level_info_SimplifiedChinese.yaml b/Data/main_chapter/chapter2_level_info_SimplifiedChinese.yaml new file mode 100644 index 00000000..5401bbb1 --- /dev/null +++ b/Data/main_chapter/chapter2_level_info_SimplifiedChinese.yaml @@ -0,0 +1,8 @@ +battle_info: +- 日期:206X年7月3日 +- 当地时间:19:14 +- 气温:-12°C +- 能见度:0.61公里 +- 地点:临时据点以东约48公里 +description: 充满希望的人,总能看到明天... 至少,我希望如此... +title: 迷离之下 diff --git a/Data/specifications.yaml b/Data/specifications.yaml index a3720a2e..01c2dcb4 100644 --- a/Data/specifications.yaml +++ b/Data/specifications.yaml @@ -1,2 +1,5 @@ ConfigFileType: yaml +DefaultFont: + font: MicrosoftYaHei-2 + type: custom ExtraAssets: true diff --git a/Source/__init__.py b/Source/__init__.py index 6708e0aa..c181356e 100644 --- a/Source/__init__.py +++ b/Source/__init__.py @@ -1,4 +1,4 @@ """ -api -> entity -> character -> dolls -> ui -> map -> abstract -> tbs -> components -> menu +entity -> character -> dolls -> ui -> map -> abstract -> tbs -> components -> menu """ from .menu import * diff --git a/Source/api.py b/Source/api.py deleted file mode 100644 index 69189c1d..00000000 --- a/Source/api.py +++ /dev/null @@ -1,30 +0,0 @@ -import linpg - -# 初始化 -linpg.display.init() - -# 加载版本信息 -version_info: dict = linpg.config.load("Data/version.yaml") - -# 确认linpg的版本是推荐版本 -linpg.LinpgVersionChecker( - ">=", - version_info["recommended_linpg_revision"], - version_info["recommended_linpg_patch"], -) - -# 设置引擎的标准文字大小 -linpg.font.set_global_font("medium", linpg.display.get_width() // 40) - -# alpha构建警告 -ALPHA_BUILD_WARNING = linpg.load.text( - linpg.lang.get_text("alpha_build_warning"), - "white", - (0, 0), - int(linpg.display.get_width() / 80), -) -ALPHA_BUILD_WARNING.set_centerx(linpg.display.get_width() / 2) -ALPHA_BUILD_WARNING.set_bottom( - linpg.display.get_height() - ALPHA_BUILD_WARNING.get_height() -) -ALPHA_BUILD_WARNING.set_alpha(200) diff --git a/Source/components.py b/Source/components.py index b0170217..015202fe 100644 --- a/Source/components.py +++ b/Source/components.py @@ -123,7 +123,6 @@ def dialog( # 主循环 while _DIALOG.is_playing(): _DIALOG.draw(screen) - ALPHA_BUILD_WARNING.draw(screen) linpg.display.flip() # 对话编辑器 @@ -152,7 +151,6 @@ def dialogEditor( # 主循环 while _DIALOG.is_playing(): _DIALOG.draw(screen) - ALPHA_BUILD_WARNING.draw(screen) linpg.display.flip() # 改变标题回主菜单的样式 linpg.display.set_caption(linpg.lang.get_text("General", "game_title")) @@ -182,7 +180,6 @@ def battle( # 战斗系统主要loop while _BATTLE.is_playing(): _BATTLE.draw(screen) - ALPHA_BUILD_WARNING.draw(screen) linpg.display.flip() # 暂停声效 - 尤其是环境声 linpg.media.unload() @@ -211,7 +208,6 @@ def mapEditor( # 战斗系统主要loop while MAP_EDITOR.is_playing(): MAP_EDITOR.draw(screen) - ALPHA_BUILD_WARNING.draw(screen) linpg.display.flip() # 改变标题回主菜单的样式 linpg.display.set_caption(linpg.lang.get_text("General", "game_title")) diff --git a/Source/entity.py b/Source/entity.py index 75773e43..e49a2ab6 100644 --- a/Source/entity.py +++ b/Source/entity.py @@ -2,7 +2,20 @@ from glob import glob from typing import Optional -from .api import * +import linpg + +# 初始化linpg系统模块 +linpg.display.init() + +# 加载版本信息 +version_info: dict = linpg.config.load_file("Data/version.yaml") + +# 确认linpg的版本是推荐版本 +linpg.LinpgVersionChecker( + ">=", + version_info["recommended_linpg_revision"], + version_info["recommended_linpg_patch"], +) # 射击音效 diff --git a/Source/menu.py b/Source/menu.py index f6843bb6..648db91b 100644 --- a/Source/menu.py +++ b/Source/menu.py @@ -2,6 +2,8 @@ from .components import * +# 设置引擎的标准文字大小 +linpg.font.set_global_font("medium", linpg.display.get_width() // 40) # 主菜单系统 class MainMenu(linpg.AbstractSystem): @@ -179,9 +181,7 @@ def __get_chapter_title(self, chapterType: str, chapterId: int) -> str: else: chapter_title = linpg.lang.get_text("Global", "no_translation") return "{0}: {1}".format( - linpg.lang.get_text("Battle_UI", "numChapter").format( - linpg.lang.get_num_in_local_text(chapterId) - ), + linpg.lang.get_text("Battle_UI", "numChapter").format(chapterId), chapter_title, ) @@ -244,6 +244,13 @@ def __draw_buttons(self, screen: linpg.ImageSurface) -> None: i += 1 # 选择主线的章节 elif self.menu_type == 1: + max_right: int = 0 + for button in self.chapter_select: + max_right = max(button.right, max_right) + _right_limit: int = linpg.display.get_width() * 9 // 10 + if max_right > _right_limit: + for button in self.chapter_select: + button.set_right(button.right - max_right + _right_limit) for button in self.chapter_select: button.draw(screen) if button.is_hovered(): @@ -739,7 +746,6 @@ def draw(self, screen: linpg.ImageSurface) -> None: ) self.__restart_background() break - ALPHA_BUILD_WARNING.draw(screen) if self.__loading_screen is not None: alpha_t: Optional[int] = self.__loading_screen.get_alpha() if alpha_t is None or alpha_t <= 0: From 295e87adbe36aeb0cd8db172d368bd4c64379b14 Mon Sep 17 00:00:00 2001 From: AnyLeftovers <37920527+yudonglin@users.noreply.github.com> Date: Mon, 26 Dec 2022 23:13:09 -0800 Subject: [PATCH 4/8] continue to work on the levels --- Assets/image/UI/score.png | 3 - Assets/image/dialog_background/CG4N.png | 3 + Assets/image/dialog_background/Transport.png | 3 + Assets/image/dialog_background/WildBattle.png | 3 + Assets/image/npc/svd.png | 3 + Assets/image/npc/svd_hurt.png | 3 + Assets/music/BGM_Battle.wav | 3 + Assets/music/Casual.wav | 3 + Assets/music/EV4_Boss1.wav | 3 + Assets/music/Memorial.wav | 3 + Data/main_chapter/chapter1.linpg.script | 67 +- Data/main_chapter/chapter1_map.yaml | 2839 ++++------------- Data/main_chapter/chapter2.linpg.script | 141 +- Data/main_chapter/chapter3.linpg.script | 118 + Lang/English.yaml | 2 +- Lang/SimplifiedChinese.yaml | 2 +- README.md | 6 +- Source/menu.py | 22 +- Source/tbs.py | 100 +- main.py | 3 + 20 files changed, 864 insertions(+), 2466 deletions(-) delete mode 100644 Assets/image/UI/score.png create mode 100644 Assets/image/dialog_background/CG4N.png create mode 100644 Assets/image/dialog_background/Transport.png create mode 100644 Assets/image/dialog_background/WildBattle.png create mode 100644 Assets/image/npc/svd.png create mode 100644 Assets/image/npc/svd_hurt.png create mode 100644 Assets/music/BGM_Battle.wav create mode 100644 Assets/music/Casual.wav create mode 100644 Assets/music/EV4_Boss1.wav create mode 100644 Assets/music/Memorial.wav create mode 100644 Data/main_chapter/chapter3.linpg.script diff --git a/Assets/image/UI/score.png b/Assets/image/UI/score.png deleted file mode 100644 index f9a2e1bd..00000000 --- a/Assets/image/UI/score.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:580975c3e2220908cdbfb62bd068dc72ed833c6d5e3dcc8ed5836e593855154b -size 10805 diff --git a/Assets/image/dialog_background/CG4N.png b/Assets/image/dialog_background/CG4N.png new file mode 100644 index 00000000..0050fc57 --- /dev/null +++ b/Assets/image/dialog_background/CG4N.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4f75e42115160739304c498b034c9eb7dbb029558740c5b347594c4662e074e +size 581561 diff --git a/Assets/image/dialog_background/Transport.png b/Assets/image/dialog_background/Transport.png new file mode 100644 index 00000000..3eeff5af --- /dev/null +++ b/Assets/image/dialog_background/Transport.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e91553d18128173eabd3dbaaa62d3a31fe236abf88b467073ef1ff237b07eb8 +size 405798 diff --git a/Assets/image/dialog_background/WildBattle.png b/Assets/image/dialog_background/WildBattle.png new file mode 100644 index 00000000..07db6795 --- /dev/null +++ b/Assets/image/dialog_background/WildBattle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfdc635f0f75a937703bcdf3a6221055f51e3acbfe5c8b29779194c6aa7c84f7 +size 452189 diff --git a/Assets/image/npc/svd.png b/Assets/image/npc/svd.png new file mode 100644 index 00000000..cc166d46 --- /dev/null +++ b/Assets/image/npc/svd.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70799d8416c5a5bf46a260e7e37bf20e58e54ede50467c8c08fc6213e1b47015 +size 1265113 diff --git a/Assets/image/npc/svd_hurt.png b/Assets/image/npc/svd_hurt.png new file mode 100644 index 00000000..f684ebc2 --- /dev/null +++ b/Assets/image/npc/svd_hurt.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60dca56bd3e59abd92063257d62bb70f80841d2961ba699411daceeae2bbc948 +size 757979 diff --git a/Assets/music/BGM_Battle.wav b/Assets/music/BGM_Battle.wav new file mode 100644 index 00000000..ce4b8627 --- /dev/null +++ b/Assets/music/BGM_Battle.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2946ed7bd75f04a6cb16e08dbf4bdbf7676d39f2934bea9b6575507e89ac1443 +size 13373552 diff --git a/Assets/music/Casual.wav b/Assets/music/Casual.wav new file mode 100644 index 00000000..2d6acc3f --- /dev/null +++ b/Assets/music/Casual.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f804c6bb4cf7378d4bf9bedfc5616ef9c10bfa571117154001f27367efc46be +size 13242480 diff --git a/Assets/music/EV4_Boss1.wav b/Assets/music/EV4_Boss1.wav new file mode 100644 index 00000000..93074bf9 --- /dev/null +++ b/Assets/music/EV4_Boss1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9b75d5617b2da3357b57debb991e663e2253fc3cc33f222c2018b9f56ebec11 +size 23044208 diff --git a/Assets/music/Memorial.wav b/Assets/music/Memorial.wav new file mode 100644 index 00000000..20710952 --- /dev/null +++ b/Assets/music/Memorial.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d518e0e6b6418048e0afcd7e7ebe63d85ac92fb2ef7cd875f7031d4cf97b047 +size 16998512 diff --git a/Data/main_chapter/chapter1.linpg.script b/Data/main_chapter/chapter1.linpg.script index 5e97cb45..a6e07bf0 100644 --- a/Data/main_chapter/chapter1.linpg.script +++ b/Data/main_chapter/chapter1.linpg.script @@ -4,24 +4,20 @@ [section]dialog_before_battle -[bgi]null -[bgm]null - -# scene 1 null: -- 当我接下这个任务时,内心虽有一丝不安,但却自大地想着可能是自己多虑了。 +- 当我接下这个任务时,内心虽有一丝不安,但却自大地想着可能是自己多虑了 null: -- 但事实证明,那时的我,是多么天真,多么乐观...多么...愚昧. +- 但事实证明,那时的我,是多么地天真,多么地乐观...多么地...愚昧... null: -- 因为现在...一切的一切,都出错了。 +- 因为现在...一切的一切,都出错了 -[scene]research.jpg +[bgi]research.jpg [bgm]BGM_Boss_1.ogg [display]kalina_5.png 格林娜: -- 指挥官,铁血的攻势越来越猛烈了,再这样下去,仅存的梯队很快会被击溃的。 -- 是时候该下令开始执行ES-2计划, 并组织所有人形尽快撤离! +- 指挥官,铁血的攻势越来越猛烈了,再这样下去,仅存的梯队很快会被击溃的 +- 是时候该下令开始执行ES-2计划, 组织所有人形尽快撤离! 指挥官: - 还是没有一点关于她们的消息吗? - 后勤第十小队... @@ -37,13 +33,13 @@ null: - 能派一些人形前去搜索吗? 格林娜: - 还有战斗能力的梯队目前全都在第二防线上 -- 别说突围了,能勉强挡住铁血的攻势已经是万幸了 -- 如果这时候再抽出人手,防线可能很快就会被铁血击溃 +- 别说突围了,能勉强阻挡住铁血的攻势已经是不幸中的万幸了 +- 如果这时候再抽出人手,防线极有可能很快就会被铁血击溃 指挥官: - 该死,当初谈生意的时候,还说是一场“郊游一般”的搜寻工作 - 现在倒好,别说完成任务了,能够全身而退已经是谢天谢地了 格林娜: -- 指挥官,请不要再自责了,换谁当初都不会想到事情会一下子变得那么糟 +- 指挥官,请不要再自责了,当初换谁都不会想到事情会一下子变得那么糟 - 但现在,还是请优先考虑接下来该怎么做,以大局为重吧 指挥官: - ... @@ -51,6 +47,8 @@ null: 格林娜: - 是 指挥官: +- ... +指挥官: - 开始执行撤离程序吧,然后帮我接通K,我需要和他谈谈 格林娜: - 好的,我这就去 @@ -61,18 +59,21 @@ null: - 此时此刻,我的内心十分不安,sv98她们能不能在撤离前赶回来是一件事 - 但我总感觉这座岛上,有着格里芬甚至安全局自己都还不知道的谜团 - -# scene 2 - [scene]snowfield.jpg +[bgm]BGM_Brain_1.ogg [display]sv98.png + sv98: - gsh18,情况怎么样?能接收到基地的信号吗 + [show]gsh18.png + gsh18: - 前几个小时通讯还是时断时续的,现在已经几个小时没收到回应了 - 看来铁血已经完全把信号给切断掉了 + [show]asval.png pp1901.png + sv98: - asval,pp1901,你们终于回来了 - 情况怎么样 @@ -82,47 +83,61 @@ asval: sv98: - 有什么好消息吗 pp1901: -- 唯一可以称得上好消息的是,这个设施里面只有为数不多的铁血 -- 如果能够占领下来的话,不但可以和基地取得联系,还能有效的阻挡铁血的反击攻势 +- 唯一可以称得上好消息的是,这个设施外围只有为数不多的铁血 +- 如果能够把这里占领下来,不但可以和基地取得联系,还能有效阻挡铁血的反击攻势 sv98: - 那好吧,大家准备一下吧 - 是时候大干一场了 -# scene 3 +# placeholder +[section]dialog_during_battle [section]dialog_after_battle + +[bgi]research.jpg +[bgm]Room_1.ogg +[display]kalina_5.png + null: - 滴...... + [show]k.png&communicating + K: - 指挥官,按照计划,现在并不是我们的通讯时间 指挥官: -- 现在究竟是什么状况,我想你比我还要清楚。我的梯队已经几乎溃散 -- 所以我想知道你所说的救援什么时候能够到达 +- 现在究竟是什么状况,我想你比我还要清楚 +- 我的梯队已经几乎溃散,所以我想知道你之前所提及的救援什么时候才能到达 K: - 我想你也该察觉到了,我所说的救援一直就在你们的身边 - 但如果东西没有拿到,我是不会让它们出手的 指挥官: - 那我想知道,为什么你们一开始提供的情报里,并没有丝毫关于铁血的事情 -- 还有就是,你们那错误百出的情报,究竟是从那来的 +- 还有就是,你们那错误百出的情报,究竟是从哪来的 K: - 指挥官,你问的问题,我当然无法告诉你答案 - 人人都爱吃鸡蛋,但从来没人问鸡蛋是从哪来的 K: -- 我们情报的来源是可靠的。按道理来讲,铁血应该不知道这件事。 +- 我们情报的来源是十分可靠的 +- 按道理来说,铁血应该不知道这件事情 - 但就目前的情况来看,我们的内部肯定有人把这份情报透露了出去 指挥官: - 如果没有支援,我们的梯队很快就会支撑不住了,怎么可能会找得到你所要求的东西 K: -- 那也没关系。既然你手下的人形只能做到支撑,那就继续支撑下去吧,其他的我会继续想办法的 +- 那也没关系 +- 既然你手下的人形只能做到支撑,那就继续支撑下去吧,其他的我会继续想办法的 + [hide]k.png + null: - 通讯结束 指挥官: -- 该死,早知道一开始就不应该接受这份委托。 +- 该死,早知道一开始就不应该接受这份委托 + [display]kalina_5.png + 格林娜: -- 指挥官, 情况怎么样!? +- 指挥官,情况怎么样!? 指挥官: - 并不好 - 有什么好消息吗 diff --git a/Data/main_chapter/chapter1_map.yaml b/Data/main_chapter/chapter1_map.yaml index f490db21..da5bcdaa 100644 --- a/Data/main_chapter/chapter1_map.yaml +++ b/Data/main_chapter/chapter1_map.yaml @@ -1,4 +1,4 @@ -at_night: true +at_night: false background_image: snowfield.jpg background_music: Combat_02_RemnantFantasyPackage_Synari.ogg decoration: @@ -7,342 +7,572 @@ decoration: items: bullet: 100 whitelist: - - sv98 + - sv98_0 x: 1 y: 1 -- id: tree:0 - status: {} +- id: tree:1 x: 2 + y: 1 +- id: tree:1 + x: 2 + y: 2 +- id: tree:1 + x: 3 y: 2 -- id: campfire - status: {} +- id: log:2 + x: 5 + y: 0 +- id: tree:1 + x: 4 + y: 2 +- id: tree:1 + x: 2 + y: 4 +- id: tree:1 x: 3 y: 3 -dialogs: - data: - initial_dialog: - - changePos: - x: 0 - y: 0 - - move: - gsh18: - x: 8 - y: 4 - pp1901: - x: 8 - y: 3 - - dialog: head - - direction: - asval: true - - idle: 1 - - direction: - asval: false - - idle: 1 - - dialog: initial_dialog_3 - - changePos: - x: 30 - y: 30 - - idle: 1 - - changePos: - x: 0 - y: 0 - - dialog: initial_dialog_4 - tutorial1: - - dialog: tutorial1 - dictionary: - initial: initial_dialog - move: - 15-10: - dialog_key: tutorial1 - repeat: false - whitelist: - - sv98 +- id: tree:1 + x: 4 + y: 3 +- id: skull:1 + x: 8 + y: 0 +- id: skull + x: 8 + y: 1 +- id: log:2 + x: 3 + y: 8 +- id: tree:1 + x: 13 + y: 0 +- id: tree:1 + x: 13 + y: 1 +- id: tree:1 + x: 14 + y: 0 +- id: tree:1 + x: 14 + y: 1 +- id: tree:1 + x: 15 + y: 0 +- id: tree:1 + x: 8 + y: 8 +- id: tree:1 + x: 15 + y: 1 +- id: tree:1 + x: 8 + y: 9 +- id: tree:1 + x: 7 + y: 10 +- id: tree:1 + x: 8 + y: 10 +- id: tree:1 + x: 7 + y: 11 +- id: tree:1 + x: 9 + y: 9 +- id: tree:1 + x: 8 + y: 11 +- id: tree:1 + x: 10 + y: 9 +- id: tree:2 + x: 9 + y: 10 +- id: tree:1 + x: 10 + y: 10 +- id: tree:1 + x: 8 + y: 12 +- id: tree:2 + x: 9 + y: 11 +- id: tree:1 + x: 11 + y: 10 +- id: tree:1 + x: 10 + y: 11 +- id: tree:1 + x: 9 + y: 12 +- id: tree:1 + x: 8 + y: 13 +- id: tree:1 + x: 20 + y: 1 +- id: tree:1 + x: 11 + y: 11 +- id: tree:1 + x: 10 + y: 12 +- id: tree:1 + x: 9 + y: 13 +- id: tree:1 + x: 21 + y: 1 +- id: tree:1 + x: 12 + y: 11 +- id: tree:1 + x: 11 + y: 12 +- id: tree:1 + x: 10 + y: 13 +- id: tree:1 + x: 12 + y: 12 +- id: tree:1 + x: 11 + y: 13 +- id: rock + x: 9 + y: 15 +- id: tree:1 + x: 13 + y: 12 +- id: rock:1 + x: 10 + y: 15 +- id: tree:2 + x: 12 + y: 13 +- id: cactus:4 + x: 10 + y: 21 +- id: cactus:12 + x: 27 + y: 5 +- id: tree:1 + x: 20 + y: 15 +- id: tree:1 + x: 24 + y: 12 +- id: tree:1 + x: 25 + y: 11 +- id: tree:2 + x: 21 + y: 15 +- id: tree:2 + x: 25 + y: 12 +- id: tree:2 + x: 26 + y: 11 +- id: tree:1 + x: 21 + y: 16 +- id: tree:1 + x: 21 + y: 17 +- id: tree:1 + x: 22 + y: 16 +- id: tree:2 + x: 22 + y: 17 +dialogs: {} entities: GriffinKryuger: - asval: - bullets_carried: 200 + asval_0: + bullets_carried: 100 type: asval + x: 9 + y: 1 + g36_0: + bullets_carried: 100 + type: g36 x: 8 - y: 5 - gsh18: - bullets_carried: 200 + y: 21 + grizzly_0: + bullets_carried: 100 + type: grizzly + x: 27 + y: 7 + gsh18_0: + bullets_carried: 100 type: gsh18 - x: 1 - y: 0 - pp1901: - bullets_carried: 200 + x: 6 + y: 2 + hk416_0: + bullets_carried: 100 + type: hk416 + x: 26 + y: 6 + hk416_1: + bullets_carried: 100 + type: hk416 + x: 27 + y: 6 + pp1901_0: + bullets_carried: 100 type: pp1901 - x: 0 - y: 0 - sv98: - bullets_carried: 0 - current_bullets: 0 + x: 6 + y: 11 + sv98_0: + bullets_carried: 100 type: sv98 - x: 5 - y: 7 + x: 11 + y: 11 SangvisFerri: + dinergate_0: + kind: None + type: dinergate + x: 22 + y: 8 + dinergate_1: + kind: None + type: dinergate + x: 20 + y: 10 + dinergate_2: + kind: None + type: dinergate + x: 11 + y: 21 guard: type: guard x: 19 y: 19 - jaeger: + guard_0: + type: guard + x: 19 + y: 5 + guard_1: + type: guard + x: 27 + y: 8 + jaeger_0: type: jaeger - x: 10 - y: 11 - prowler: + x: 19 + y: 3 + jaguar_0: + kind: None + type: jaguar + x: 23 + y: 10 + prowler_0: type: prowler - x: 14 - y: 8 - ripper: + x: 22 + y: 14 + prowler_1: + type: prowler + x: 22 + y: 5 + ripper_0: type: ripper - x: 16 - y: 4 - vespid: - type: vespid x: 18 - y: 10 -local_x: -40% -local_y: 10% + y: 8 + vespid_0: + type: vespid + x: 20 + y: 12 map: array2d: - - - 3 - - 0 + - - 8 + - 8 + - 8 + - 8 - 1 - 3 + - 5 - 2 - - 3 - - 3 + - 1 - 0 - 0 - - 4 - - 1 - 1 - 3 - - 2 - - 1 - - 2 - - 5 - - 3 - 4 - - 0 - - 3 - - 0 - - 0 - - 0 - - 3 - - 2 - 5 - 4 + - 3 - 1 - 5 - - 3 - 5 - - 4 - - 3 - 3 - - 3 - - 5 - - 5 - - 0 - 1 - 2 - - 1 - - 4 + - 3 - 0 - - 1 - - 5 - 2 - 3 - - 2 - 0 - - - 5 + - - 8 + - 8 + - 1 + - 8 + - 8 - 3 + - 2 + - 1 + - 5 + - 5 - 0 - 3 - - 5 - 4 - 4 - - 1 - 3 - - 0 - - 5 - - 1 - - 4 - - 1 + - 2 - 0 - 0 - - 3 - - 3 - 4 - - 2 - - 1 - - 3 - - 3 + - 4 - 3 - - 1 + - 2 + - 2 + - 0 - 4 + - 5 - 2 - 5 - - 3 + - - 9 + - 8 + - 8 + - 8 + - 8 + - 8 + - 2 + - 1 - 5 + - 3 - 4 - - 5 - 1 - 5 - 5 - 1 - - 2 - 3 - - 2 - 1 - 5 + - 0 - 2 + - 1 - 0 - 0 - 3 + - 3 + - 3 + - 2 + - 5 + - - 9 + - 1 + - 9 + - 8 + - 8 + - 9 + - 6 + - 6 + - 6 + - 6 + - 7 + - 6 + - 6 + - 7 + - 6 + - 6 + - 6 + - 5 + - 1 + - 2 + - 2 - 2 - 4 - - 3 - 2 + - 4 + - 4 + - 0 - 2 - - - 4 - - 1 + - - 0 + - 8 + - 9 + - 9 + - 9 + - 9 + - 6 + - 7 + - 6 + - 6 + - 6 + - 6 + - 6 + - 7 + - 6 + - 6 + - 6 + - 5 - 4 - 2 - 5 - - 3 - 5 - - 0 - - 1 - - 1 - 1 - 4 - 3 - 1 - - 4 - - 3 - 0 - - 5 - 1 + - - 1 - 0 + - 9 + - 9 + - 9 + - 9 + - 7 + - 7 + - 7 + - 7 + - 6 + - 6 + - 7 + - 7 + - 6 + - 6 + - 6 - 0 - - 3 - - 2 + - 5 - 1 + - 4 - 1 - - 0 + - 3 - 4 - - 5 - - 0 - - 2 - 0 - 1 - - 2 - - 2 - - 3 - - 5 - 0 + - 0 + - - 3 - 3 - 4 + - 9 - 1 - 3 - 2 + - 6 + - 7 + - 7 + - 7 + - 7 + - 7 + - 7 + - 7 + - 6 + - 6 + - 0 + - 0 + - 2 - 2 - - 5 - 5 - 4 - - 2 - - 1 - 4 - - 2 - - - 1 - 1 - 5 - - 0 - - 5 - 5 - - 1 - - 0 - - 2 - 3 + - - 4 - 1 - - 2 - 3 - - 0 - 5 - - 2 - - 3 - - 4 - - 4 - - 4 - - 4 - - 2 + - 1 - 0 + - 1 + - 6 + - 7 + - 7 + - 6 + - 7 + - 7 + - 7 + - 7 + - 6 + - 6 - 4 - - 4 + - 2 - 0 - 0 - - 5 - - 2 - - 2 - - 4 - - 1 - - 5 - - 2 - 3 - 1 - - 2 - 5 - 1 - - 3 - - 3 - - 4 - - 0 - - 0 - - 2 - - 1 - - 4 - - 2 - - 2 - - 4 - - - 5 - 1 - - 4 - - 3 - 1 - 4 + - - 1 - 5 - 5 - - 1 - - 4 - - 0 - - 4 - 4 + - 2 + - 1 + - 5 + - 6 + - 6 + - 6 + - 6 + - 7 + - 7 + - 7 + - 7 + - 7 + - 7 - 0 + - 3 + - 5 - 2 + - 3 - 4 - 1 - - 2 + - 3 + - 0 - 0 - 1 + - - 1 - 1 - 5 + - 0 + - 1 + - 3 + - 3 - 2 - - 5 + - 3 + - 11 + - 11 + - 10 + - 10 + - 10 + - 10 + - 12 + - 13 + - 0 + - 0 - 2 + - 3 + - 3 + - 5 + - 0 - 2 - - 4 - 0 - - 1 - - 5 - 0 + - 0 + - - 2 - 4 - - 4 - - 1 - 5 + - 0 + - 3 + - 4 + - 0 - 4 - - 2 - - 2 - 3 - 5 - 2 @@ -350,2268 +580,343 @@ map: - 1 - 3 - 4 - - 5 - - 3 - - 5 - - 3 - 3 - - - 5 - - 0 - - 2 - 3 - 1 - - 1 - - 1 - 4 - 3 - - 4 - - 4 - 5 - 4 - - 4 + - 2 + - 0 - 1 - - 4 - 2 - 2 - - 1 + - 4 + - - 2 + - 4 - 0 - 4 - - 5 - - 1 - - 3 - - 3 - - 0 - - 0 - - 0 - - 1 - - 2 - - 2 - - 1 - - 3 - - 3 - - 4 - - 0 - - 3 - - 0 - - 4 - - 2 - - 0 - - 3 - - 5 - - 0 - - 4 - - 2 - - 2 - - 5 - - 0 - - 2 - - - 4 - - 2 - - 2 - - 1 - - 3 - - 3 - - 5 - - 1 - - 1 - - 1 - - 5 - - 1 - - 2 - - 3 - - 2 - - 2 - - 2 - - 1 - - 3 - - 3 - - 4 - - 3 - - 1 - - 5 - - 5 - - 1 - - 0 - - 3 - - 2 - - 4 - - 4 - - 4 - - 1 - - 0 - - 4 - - 0 - - 0 - - 0 - - 3 - - 3 - - 4 - - 0 - - 2 - - 0 - - 2 - - 0 - - 4 - - 1 - - 1 - - 0 - - - 0 - - 1 - - 4 - - 4 - - 4 - - 2 - - 1 - - 0 - - 0 - - 3 - - 5 - - 2 - - 2 - - 3 - - 1 - - 2 - - 1 - - 4 - - 2 - - 2 - - 1 - - 5 - - 0 - - 5 - - 4 - - 0 - - 2 - - 5 - - 5 - - 0 - - 1 - - 2 - - 3 - - 1 - - 0 - - 1 - - 5 - - 5 - - 1 - - 0 - - 1 - - 3 - - 0 - - 4 - - 5 - - 3 - - 3 - - 1 - - 4 - - 5 - - - 3 - - 3 - - 1 - - 3 - - 1 - - 4 - - 4 - - 1 - - 2 - - 3 - - 5 - - 3 - - 5 - - 5 - - 0 - - 5 - - 4 - - 2 - - 0 - - 2 - - 3 - - 0 - - 3 - - 4 - - 0 - - 3 - - 1 - - 3 - - 5 - - 0 - - 5 - - 3 - - 3 - - 4 - - 0 - - 3 - - 0 - - 5 - - 2 - - 3 - - 0 - - 0 - - 1 - - 4 - - 0 - - 0 - - 2 - - 2 - - 4 - - 4 - - - 0 - - 1 - - 5 - - 3 - - 4 - - 4 - - 0 - - 5 - - 2 - - 0 - - 1 - - 1 - - 5 - - 3 - - 4 - - 1 - - 1 - - 5 - - 5 - - 5 - - 0 - - 4 - - 0 - - 1 - - 0 - - 3 - - 2 - - 3 - - 5 - - 4 - - 0 - - 3 - - 4 - - 2 - - 4 - - 0 - - 2 - - 2 - - 0 - - 3 - - 4 - - 1 - - 0 - - 2 - - 0 - - 4 - - 1 - - 5 - - 1 - - 1 - - - 3 - - 2 - - 1 - - 4 - - 0 - - 2 - - 5 - - 1 - - 3 - - 4 - - 2 - - 3 - - 3 - - 1 - - 1 - - 5 - - 2 - - 1 - - 0 - - 3 - - 3 - - 3 - - 4 - - 0 - - 4 - - 5 - - 3 - - 0 - - 0 - - 5 - - 5 - - 0 - - 4 - - 1 - - 5 - - 5 - - 3 - - 2 - - 2 - - 0 - - 3 - - 0 - - 3 - - 0 - - 4 - - 0 - - 1 - - 0 - - 4 - - 1 - - - 5 - - 5 - - 4 - - 1 - - 2 - - 4 - - 0 - - 4 - - 4 - - 2 - - 3 - - 4 - - 0 - - 3 - - 0 - - 3 - - 4 - - 2 - - 2 - - 0 - - 2 - - 0 - - 2 - - 0 - - 4 - - 2 - - 5 - - 1 - - 0 - - 2 - - 0 - - 2 - - 1 - - 3 - - 3 - - 0 - - 1 - - 1 - - 4 - - 1 - - 4 - - 2 - - 2 - - 0 - - 2 - - 1 - - 1 - - 4 - - 0 - - 3 - - - 1 - - 0 - - 1 - - 0 - - 4 - - 2 - - 4 - - 5 - - 1 - - 1 - - 0 - - 1 - - 2 - - 5 - - 2 - - 2 - - 3 - - 0 - - 2 - - 4 - - 5 - - 5 - - 4 - - 3 - - 5 - - 1 - - 0 - - 2 - - 3 - - 1 - - 3 - - 5 - - 5 - - 2 - - 3 - - 5 - - 1 - - 5 - - 3 - - 0 - - 0 - - 1 - - 1 - - 5 - - 1 - - 3 - - 1 - - 1 - - 1 - - 1 - - - 1 - - 5 - - 2 - - 2 - - 1 - - 2 - - 0 - - 2 - - 2 - - 5 - - 1 - - 4 - - 1 - - 2 - - 5 - - 5 - - 3 - - 3 - - 4 - - 4 - - 0 - - 4 - - 2 - - 0 - - 5 - - 4 - - 0 - - 3 - - 3 - - 4 - - 4 - - 4 - - 1 - - 0 - - 5 - - 1 - - 0 - - 3 - - 1 - - 4 - - 5 - - 4 - - 2 - - 2 - - 4 - - 1 - - 3 - - 2 - - 5 - - 1 - - - 2 - - 1 - - 2 - - 0 - - 0 - - 2 - - 1 - - 4 - - 3 - - 1 - - 5 - - 1 - - 5 - - 1 - - 2 - - 0 - - 2 - - 2 - - 3 - - 2 - - 4 - - 0 - - 1 - - 0 - - 4 - - 5 - - 2 - - 4 - - 5 - - 2 - - 5 - - 2 - - 3 - - 4 - - 5 - - 0 - - 2 - - 0 - - 1 - - 2 - - 3 - - 3 - - 5 - - 3 - - 3 - - 5 - - 0 - - 3 - - 2 - - 2 - - - 0 - - 1 - - 1 - - 4 - - 4 - - 1 - - 2 - - 5 - - 5 - - 4 - - 0 - - 0 - - 1 - - 5 - - 5 - - 1 - - 5 - - 4 - - 3 - - 2 - - 3 - - 4 - - 2 - - 3 - - 1 - - 5 - - 5 - - 2 - - 2 - - 0 - - 0 - - 1 - - 2 - - 0 - - 3 - - 4 - - 0 - - 0 - - 5 - - 4 - - 1 - - 1 - - 3 - - 2 - - 1 - - 0 - - 4 - - 3 - - 5 - - 0 - - - 2 - - 2 - - 3 - - 5 - - 0 - - 0 - - 5 - - 1 - - 2 - - 2 - - 5 - - 0 - - 1 - - 5 - - 4 - - 5 - - 2 - - 1 - - 3 - - 3 - - 4 - - 3 - - 3 - - 2 - - 1 - - 1 - - 2 - - 0 - - 1 - - 1 - - 4 - - 3 - - 1 - - 5 - - 0 - - 5 - - 1 - - 4 - - 4 - - 4 - - 1 - - 3 - - 3 - - 0 - - 3 - - 4 - - 4 - - 0 - - 4 - - 5 - - - 4 - - 3 - - 1 - - 4 - - 0 - - 3 - - 5 - - 2 - - 4 - - 2 - - 0 - - 3 - - 5 - - 2 - - 0 - - 1 - - 3 - - 3 - - 5 - - 5 - - 2 - - 1 - - 1 - - 3 - - 0 - - 2 - - 1 - - 1 - - 3 - - 4 - - 2 - - 1 - - 1 - - 3 - - 1 - - 3 - - 0 - - 5 - - 0 - - 2 - - 2 - - 4 - - 0 - - 5 - - 2 - - 4 - - 0 - - 2 - - 3 - - 2 - - - 4 - - 5 - - 5 - - 2 - - 4 - - 5 - - 2 - - 2 - - 4 - - 2 - - 3 - - 4 - - 2 - - 4 - - 2 - - 0 - - 5 - - 2 - - 5 - - 5 - - 3 - - 0 - - 0 - - 1 - - 1 - - 5 - - 0 - - 1 - - 3 - - 0 - - 2 - - 0 - - 4 - - 3 - - 1 - - 3 - - 2 - - 1 - - 3 - - 4 - - 0 - - 0 - - 1 - - 3 - - 0 - - 2 - - 3 - - 2 - - 0 - - 4 - - - 5 - - 2 - - 2 - - 3 - - 3 - - 1 - - 1 - - 3 - - 2 - - 1 - - 1 - - 0 - - 4 - - 0 - - 3 - - 1 - - 1 - - 1 - - 1 - - 0 - - 0 - - 1 - - 3 - - 3 - - 3 - - 5 - - 1 - - 2 - - 4 - - 0 - - 3 - - 3 - - 1 - - 4 - - 4 - - 5 - - 3 - - 3 - - 0 - - 1 - - 4 - - 4 - - 3 - - 3 - - 1 - - 5 - - 3 - - 1 - - 0 - - 3 - - - 0 - - 3 - - 0 - - 2 - - 0 - - 1 - - 2 - - 5 - - 3 - - 0 - - 3 - - 4 - - 5 - - 1 - - 4 - - 0 - - 1 - - 0 - - 5 - - 5 - - 0 - - 5 - - 4 - - 2 - - 0 - - 3 - - 5 - - 5 - - 4 - - 2 - - 5 - - 4 - - 2 - - 2 - - 4 - - 4 - - 0 - - 5 - - 2 - - 2 - - 5 - - 5 - - 1 - - 2 - - 0 - - 5 - - 4 - - 3 - - 4 - - 4 - - - 4 - - 2 - - 3 - - 4 - - 2 - - 1 - - 5 - - 2 - - 0 - - 2 - - 1 - - 5 - - 4 - - 1 - - 3 - - 5 - - 0 - - 1 - - 1 - - 1 - - 5 - - 0 - - 1 - - 0 - - 1 - - 3 - - 4 - - 4 - - 4 - - 2 - - 4 - - 2 - - 3 - - 2 - - 3 - - 2 - - 0 - - 1 - - 5 - - 5 - - 0 - - 5 - - 0 - - 4 - - 2 - - 3 - - 2 - - 2 - - 5 - - 2 - - - 1 - - 5 - - 0 - - 4 - - 4 - - 3 - - 1 - - 5 - - 1 - - 1 - - 2 - - 3 - - 2 - - 1 - - 1 - - 4 - - 4 - - 5 - - 0 - - 5 - - 4 - - 2 - - 1 - - 4 - - 4 - - 3 - - 1 - - 4 - - 4 - - 5 - - 1 - - 4 - - 5 - - 3 - - 1 - - 2 - - 1 - - 3 - - 5 - - 5 - - 1 - - 4 - - 4 - - 3 - - 0 - - 1 - - 1 - - 1 - - 0 - - 5 - - - 2 - - 1 - - 3 - - 5 - - 4 - - 0 - - 5 - - 1 - - 1 - - 1 - - 5 - - 3 - - 1 - - 0 - - 4 - - 4 - - 0 - - 0 - - 0 - - 3 - - 4 - - 3 - - 4 - - 2 - - 3 - - 5 - - 0 - - 3 - - 4 - - 5 - - 2 - - 1 - - 0 - - 5 - - 1 - - 4 - - 3 - - 5 - - 2 - - 2 - - 2 - - 4 - - 4 - - 4 - - 0 - - 1 - - 3 - - 1 - - 3 - - 0 - - - 5 - - 1 - - 5 - - 1 - - 2 - - 1 - - 1 - - 5 - - 4 - - 1 - - 1 - - 2 - - 0 - - 1 - - 3 - - 0 - - 0 - - 2 - - 1 - - 3 - - 4 - - 0 - - 4 - - 0 - - 2 - - 2 - - 2 - - 3 - - 4 - - 0 - - 4 - - 0 - - 1 - - 5 - - 5 - - 3 - - 4 - - 5 - - 4 - - 2 - - 0 - - 3 - - 3 - - 1 - - 4 - - 4 - - 4 - - 3 - - 0 - - 1 - - - 0 - - 2 - - 5 - - 3 - - 3 - - 2 - - 0 - - 0 - - 5 - - 2 - - 5 - - 0 - - 0 - - 4 - - 3 - - 4 - - 5 - - 0 - - 2 - - 3 - - 3 - - 3 - - 5 - - 5 - - 4 - - 3 - - 3 - - 1 - - 2 - - 4 - - 3 - - 2 - - 0 - - 5 - - 2 - - 2 - - 4 - - 3 - - 1 - - 0 - - 0 - - 5 - - 3 - - 3 - - 5 - - 0 - - 1 - - 4 - - 5 - - 3 - - - 2 - - 0 - - 5 - - 5 - - 5 - - 4 - - 1 - - 1 - - 0 - - 0 - - 0 - - 2 - - 4 - - 0 - - 2 - - 2 - - 1 - - 4 - - 4 - - 5 - - 1 - - 1 - - 2 - - 4 - - 1 - - 4 - - 5 - - 2 - - 4 - - 2 - - 2 - - 3 - - 0 - - 1 - - 1 - - 0 - - 1 - - 3 - - 4 - - 5 - - 2 - - 3 - - 4 - - 0 - - 3 - - 0 - - 3 - - 2 - - 5 - - 0 - - - 2 - - 4 - - 5 - - 2 - - 2 - - 2 - - 5 - - 4 - - 4 - - 2 - - 4 - - 0 - - 0 - - 0 - - 0 - - 4 - - 2 - - 3 - - 3 - - 1 - - 3 - - 4 - - 4 - - 0 - - 4 - - 0 - - 5 - - 1 - - 1 - - 2 - - 3 - - 1 - - 5 - - 3 - - 1 - - 2 - - 1 - - 1 - - 1 - - 4 - - 0 - - 0 - - 2 - - 4 - - 3 - - 4 - - 5 - - 3 - - 2 - - 1 - - - 3 - - 1 - - 4 - - 3 - - 4 - - 1 - - 2 - - 1 - - 3 - - 3 - - 5 - - 0 - - 1 - - 1 - - 5 - - 4 - - 0 - - 2 - - 2 - - 2 - - 2 - - 0 - - 2 - - 4 - - 5 - - 2 - - 2 - - 4 - - 1 - - 2 - - 3 - - 3 - - 3 - - 0 - - 0 - - 4 - - 2 - - 3 - - 3 - - 0 - - 5 - - 4 - - 4 - - 0 - - 1 - - 4 - - 5 - - 2 - - 2 - - 1 - - - 0 - - 2 - - 5 - - 2 - - 5 - - 5 - - 1 - - 0 - - 0 - - 0 - - 4 - - 3 - - 0 - - 4 - - 4 - - 3 - - 4 - - 3 - - 2 - - 0 - - 3 - - 1 - - 4 - - 0 - - 4 - - 4 - - 1 - - 4 - - 0 - - 4 - - 3 - - 3 - - 3 - - 2 - - 1 - - 5 - - 1 - - 5 - - 4 - - 5 - - 3 - - 3 - - 0 - - 5 - - 3 - - 0 - - 1 - - 3 - - 1 - - 0 - - - 1 - - 4 - - 2 - - 1 - - 2 - - 1 - - 4 - - 3 - - 1 - - 2 - - 1 - - 0 - - 5 - - 0 - - 5 - - 1 - - 2 - - 2 - - 5 - - 0 - - 3 - - 4 - - 3 - - 0 - - 4 - - 3 - - 2 - - 3 - - 1 - - 5 - - 2 - - 2 - - 1 - - 4 - - 0 - - 2 - - 3 - - 3 - - 1 - - 5 - - 0 - - 3 - - 3 - - 5 - - 5 - - 5 - - 5 - - 2 - - 3 - - 4 - - - 1 - - 4 - - 4 - - 3 - - 1 - - 2 - - 0 - - 0 - - 1 - - 0 - - 4 - - 0 - - 3 - - 4 - - 5 - - 5 - - 1 - - 5 - - 5 - - 0 - - 3 - - 4 - - 4 - - 4 - - 4 - - 4 - - 3 - - 0 - - 5 - - 0 - - 5 - - 1 - - 1 - - 0 - - 2 - - 1 - - 3 - - 0 - - 3 - - 4 - - 3 - - 1 - - 0 - - 2 - - 3 - - 5 - - 3 - - 1 - - 0 - - 0 - - - 0 - - 1 - - 5 - - 2 - - 3 - - 2 - - 1 - - 0 - - 5 - - 3 - - 5 - - 3 - - 3 - - 3 - - 3 - - 2 - - 0 - - 0 - - 0 - - 0 - - 3 - - 3 - - 4 - - 1 - - 2 - - 5 - - 5 - - 2 - - 4 - - 3 - - 2 - - 4 - - 5 - - 5 - - 1 - - 2 - - 0 - - 2 - - 2 - - 1 - - 5 - - 0 - - 5 - - 2 - - 2 - - 5 - - 5 - - 2 - - 2 - - 0 - - - 2 - - 0 - - 3 - - 1 - - 3 - - 1 - - 1 - - 0 - - 3 - - 0 - - 0 - - 3 - - 1 - - 0 - - 2 - - 4 - - 0 - - 2 - - 0 - - 1 - - 1 - - 2 - - 1 - - 0 - - 3 - - 4 - - 5 - - 2 - - 4 - - 1 - - 5 - - 4 - - 5 - - 5 - - 2 - - 0 - - 4 - - 2 - - 3 - - 3 - - 1 - - 0 - - 2 - - 0 - - 0 - - 4 - - 1 - - 5 - - 2 - - 3 - - - 5 - - 0 - - 4 - - 1 - - 0 - - 0 - - 1 - - 0 - - 5 - - 5 - - 5 - - 0 - - 2 - - 0 - - 5 - - 2 - - 2 - - 4 - - 4 - - 0 - - 3 - - 0 - - 4 - - 2 - - 5 - - 1 - - 4 - - 4 - - 0 - - 4 - - 1 - - 3 - - 2 - - 5 - - 4 - - 3 - - 5 - - 0 - - 5 - - 0 - - 1 - - 1 - - 4 - - 4 - - 4 - - 5 - - 5 - - 0 - - 5 - - 3 - - - 0 - - 5 - - 0 - - 1 - - 5 - - 0 - - 1 - - 1 - - 3 - - 0 - - 1 - - 3 - - 3 - - 4 - - 5 - - 3 - - 2 - - 1 - - 1 - - 5 - - 3 - - 1 - - 1 - - 0 - - 5 - - 0 - - 5 - - 3 - - 3 - - 0 - - 4 - - 5 - - 2 - - 1 - - 4 - - 2 - - 4 - - 3 - - 5 - - 4 - - 1 - - 5 - - 5 - - 2 - - 1 - - 2 - - 2 - - 0 - - 0 - - 2 - - - 0 - - 1 - - 5 - - 2 - - 0 - - 3 - - 2 - - 3 - - 5 - - 4 - - 5 - - 1 - - 3 - - 1 - - 5 - - 4 - - 3 - - 4 - - 4 - - 5 - - 5 - - 2 - - 4 - - 5 - - 3 - - 3 - - 3 - - 0 - - 2 - - 3 - - 2 - - 3 - - 0 - - 1 - - 0 - - 2 - - 3 - - 2 - - 3 - - 2 - - 5 - - 0 - - 3 - - 2 - - 2 - - 1 - - 5 - - 4 - - 5 - - 1 - - - 4 - - 2 - - 2 - - 4 - - 3 - - 5 - - 3 - - 2 - - 0 - - 0 - - 5 - - 2 - - 4 - - 1 - - 4 - - 0 - - 2 - - 5 - - 1 - - 2 - - 2 - - 5 - - 3 - - 4 - - 0 - - 4 - - 0 - - 5 - - 0 - - 0 - - 2 - - 1 - - 2 - - 3 - - 0 - - 5 - - 1 - - 2 - - 3 - - 1 - - 5 - - 4 - - 3 - - 0 - - 4 - - 1 - - 2 - - 3 - - 0 - - 2 - - - 3 - - 1 - - 1 - - 3 - - 1 - - 2 - - 2 - - 1 - - 3 - - 5 - - 0 - - 4 - - 1 - - 0 - - 4 - - 5 - - 0 - - 0 - - 0 - - 0 - - 4 - - 4 - - 2 - - 2 - - 0 - - 4 - - 4 - - 2 - - 3 - - 4 - - 5 - - 0 - - 3 - - 2 - - 2 - - 5 - - 2 - - 2 - - 4 - - 0 - - 3 - - 2 - - 4 - - 2 - - 1 - - 3 - - 2 - - 0 - - 3 - - 4 - - - 4 - - 1 - - 0 - - 4 - - 2 - - 5 - - 0 - - 3 - - 0 - - 5 - - 3 - - 3 - - 0 - - 5 - - 0 - - 3 - - 0 - - 2 - - 4 - - 3 - - 2 - - 0 - - 1 - - 0 - - 5 - - 5 - - 2 - - 3 - - 5 - - 3 - - 2 - - 2 - - 5 - - 5 - - 0 - - 1 - - 4 - - 0 - - 1 - - 0 - - 1 - - 0 - - 4 - - 5 - - 4 - - 2 - - 3 - - 0 - - 4 - - 1 - - - 2 - - 0 - - 5 - - 4 - - 2 - - 1 - - 4 - - 5 - - 4 - - 2 - - 4 - - 1 - - 5 - - 0 - - 4 - - 2 - - 1 - - 5 - - 5 - - 0 - - 3 - - 2 - - 1 - - 1 - - 2 - - 1 - - 1 - - 1 - - 3 - - 2 - - 2 - - 3 - - 4 - - 4 - - 1 - - 0 - - 5 - - 2 - - 2 - - 5 - - 1 - - 2 - - 2 - - 3 - - 1 - - 4 - - 0 - - 3 - - 2 - - 1 - - - 4 - - 0 - - 2 - - 0 - - 5 - - 2 - - 4 - - 2 - - 4 - - 5 - - 0 - - 0 - - 0 - - 1 - - 1 - - 0 - - 3 - - 2 - - 2 - - 5 - - 2 - - 3 - - 2 - - 2 - - 5 - - 5 - - 4 - - 2 - - 1 - - 1 - - 2 - - 3 - - 0 - - 3 - - 5 - - 0 - - 2 - - 3 - - 0 - - 2 - - 4 - - 0 - - 5 - - 5 - - 3 - - 5 - - 3 - - 5 - - 5 - - 1 - - - 0 - - 4 - - 2 - - 3 - 0 - 2 - - 5 - 4 - - 1 - - 3 - 4 - - 1 - - 1 - 5 - 1 - - 4 - 5 - - 3 - - 1 - - 0 - - 3 - - 1 - - 0 - - 1 - - 0 - - 4 - - 1 - - 2 - - 4 - - 2 - - 1 - - 3 - 0 - - 3 - - 4 - - 4 - - 2 - - 2 - - 2 - 1 - - 0 - - 0 - - 4 - - 2 - - 4 - - 5 - - 3 - - 5 - - 3 - - 2 - - - 3 - - 5 - - 5 - - 5 - - 3 - - 2 - 1 - - 2 - - 5 - - 2 - 3 - 0 - - 0 - - 2 - 5 - - 3 - - 4 - - 4 - - 4 - - 0 - - 0 - - 1 - - 0 - 4 - 4 - - 0 - 4 - 2 - - 5 - - 0 - - 3 - - 0 - - 5 - - 5 - - 3 - - 3 - - 0 - - 5 - - 1 - 0 - - 0 - - 1 - - 1 - - 4 - - 4 - - 3 - - 4 - - 4 - - 4 - 2 - - - 4 - 5 - - 5 - - 1 - - 3 - - 4 - - 1 - - 3 - - 2 - - 0 - - 4 - - 3 - - 0 - 2 - - 1 - - 4 - - 1 - - 3 - - 5 - 0 - 0 - - 5 - - 1 - 0 + - - 2 - 1 - - 4 - - 0 - 3 - - 1 + - 0 - 3 - 4 - - 5 - - 1 - 3 - - 1 + - 3 - 4 - - 2 - 0 + - 5 + - 2 - 3 + - 1 - 3 - 3 - 1 - - 0 - - 1 - - 0 - 4 - - 3 - - 3 - 4 - 3 - - - 5 - 2 - 4 - - 3 + - 5 + - 5 + - 1 - 2 + - 1 + - 3 + - - 1 - 5 - 4 + - 1 + - 4 + - 0 - 0 - 5 + - 2 - 4 + - 1 + - 1 + - 2 - 3 - 1 - - 0 + - 3 - 5 - - 2 - - 0 - - 2 - - 0 + - 4 + - 5 + - 3 + - 5 + - 5 + - 1 - 0 - 2 - - 0 + - 4 + - 1 + - 5 + - - 2 + - 3 + - 3 - 5 - 5 - 5 - - 1 - 3 - 3 + - 0 + - 3 - 4 - - 2 + - 0 + - 0 - 5 - - 2 - - 1 - 1 - 5 + - 1 + - 2 - 4 - - 5 - 2 - 0 - - 1 - 0 - - 3 - - 1 - 4 - - 5 - - 5 - - 5 + - 4 - 3 - - 2 - 1 - - 0 - - - 0 - - 0 - - 5 - - 0 - - 5 - 3 - 5 + - - 4 + - 0 - 2 - 5 - 5 - - 1 - - 0 - 3 - - 1 - - 4 - - 5 - - 5 - 0 + - 2 + - 0 + - 2 + - 2 - 0 - 0 - 1 - - 4 - - 5 - 3 - - 4 - 1 - 3 - - 3 - - 5 + - 2 - 4 + - 5 + - 1 - 3 + - 0 - 4 - 2 - 4 + - 3 - 1 + - - 2 - 3 - - 2 - - 0 - - 2 - - 2 - 1 - - 4 - 1 - - 0 + - 1 + - 2 - 2 - 5 + - 0 - 5 - 5 + - 4 + - 0 - 3 - 1 - - - 1 - - 2 - - 3 - - 2 + - 0 - 4 - - 5 + - 0 - 4 + - 4 + - 5 - 3 - 5 + - 0 - 4 - - 2 - 0 + - 5 + - 0 + - - 2 - 2 + - 5 + - 3 - 1 - 1 + - 1 + - 4 - 2 - - 3 - - 3 - - 5 - - 5 - - 0 - - 2 + - 4 + - 1 - 0 - - 2 + - 4 - 3 + - 0 - 5 - - 2 - 3 - - 5 + - 3 - 1 - - 2 - 5 - - 2 - 4 - 0 - 1 - - 3 - - 5 - 2 - 3 - 2 - - 1 - 4 - 0 - - 2 - - 2 - - 2 + - - 0 + - 5 - 1 - 3 - 5 - - - 4 - - 0 - - 0 - - 2 + - 3 - 5 + - 5 + - 2 - 4 - 4 - 5 - - 3 + - 1 - 2 + - 5 - 1 - - 4 + - 5 - 1 - - 3 - 0 - - 1 + - 3 - 4 - 5 + - 5 - 3 + - 0 - 1 - - 4 + - 0 + - 2 + - - 4 + - 5 + - 0 + - 2 - 2 - 1 - 2 - - 3 - - 4 - - 4 - - 5 - 4 - 0 + - 2 - 1 + - 2 + - 2 + - 3 - 5 + - 2 + - 2 + - 1 - 3 - - 4 - 5 + - 2 + - 2 + - 0 - 4 - 3 - - 4 - - 1 - - 4 + - 5 - 0 - - 3 - 2 - - 1 + - - 0 + - 2 - 4 - 3 + - 3 + - 3 - 4 - 0 - - 3 - 5 - - - 5 - - 4 - 2 - 0 - - 2 - - 3 - - 4 - - 3 - 0 + - 1 + - 2 - 5 - 0 - 2 - - 2 - 5 - - 1 + - 3 + - 2 - 0 - 2 - - 1 + - 2 - 2 - 0 - 3 - 1 + - 4 + - - 5 + - 4 + - 1 - 0 + - 2 + - 1 + - 4 - 1 - - 5 - 1 - - 0 - 5 + - 0 + - 2 + - 2 + - 2 + - 4 + - 4 + - 2 + - 4 + - 4 - 4 - 4 - 3 - 3 - 3 - - 1 - - 3 - - 0 - - 5 - - 4 - - 0 - 0 - 1 - - 0 - 1 - 4 - - 1 - - 1 - - 5 - - 1 - - 2 - - 5 + lit_area: [] lookup_table: - - snow:3 - - snow:2 - snow:7 - - snow:5 - snow:4 + - snow:2 + - snow:3 + - snow:5 - snow:6 + - water:0 + - ice + - snow:0 + - snow:1 + - water:24 + - water:15 + - water:42 + - water:34 mission_objectives: allow_any_one_die: false round_limitation: 10 diff --git a/Data/main_chapter/chapter2.linpg.script b/Data/main_chapter/chapter2.linpg.script index 7dc762f7..c52267c1 100644 --- a/Data/main_chapter/chapter2.linpg.script +++ b/Data/main_chapter/chapter2.linpg.script @@ -4,20 +4,16 @@ [section]dialog_before_battle -# section 1 -[bgi]null -[bgm]null - null: -- 我梦见了山川和大海, 梦见了高耸入云的城市和荒无人烟的沙漠...我梦见了缥缈无影的过去, 和无法触碰的未来... +- 我梦见了山川和大海,梦见了高耸入云的城市和荒无人烟的沙漠...我梦见了缥缈无影的过去,和无法触碰的未来... null: - 我梦见... ??: -- SV-98!! +- sv98!! null: - 似乎...有人在叫我... ??: -- SV-98!! 快醒醒! +- sv98!!快醒醒! null: - 嗯... @@ -25,95 +21,104 @@ null: [display]sv98.png null: -- (SV-98醒来) +- (sv98醒来) [bgm]BGM_Brain_1.ogg [show]gsh18.png -GSH18: -- SV-98!! 快起来啦!太阳, 啊不, 月亮要晒屁...呀不对...总之快起来啦! -SV-98: -- 嗯...ASVAL, 我睡了多久... + +gsh18: +- sv98!! 快起来啦!太阳,啊不,月亮要晒屁...呀不对...总之快起来啦! +sv98: +- 嗯...asval,我睡了多久... [show]asval.png -ASVAL: + +asval: - 大概8个小时了吧... + [show]pp1901.png + PP-19-01: -- 准确的来讲是8小时12分钟43秒吧. -ASVAL: -- 拜托,PP-19-01, 你用不着那么较真吧 +- 准确的来讲是8小时12分钟43秒吧 +asval: +- 拜托,PP-19-01,你用不着那么较真吧 PP-19-01: -- 这不是较真, 是严谨好吗! -SV-98: -- ASVAL, 我不是说好了日落之前应该把我叫起来吗. -ASVAL: -- 啊, 抱歉, 我看你睡得那么香就没舍得把你叫起来. -SV-98: -- 哎, 先不提这个了. ASVAL, 你有收到任何指挥官的讯息吗. -ASVAL: -- 啊, 这个先不急. -GSH-18: +- 这不是较真,是严谨好吗! +sv98: +- asval,我不是说好了日落之前应该把我叫起来吗 +asval: +- 啊,抱歉,我看你睡得那么香就没舍得把你叫起来 +sv98: +- 哎,先不提这个了 +- asval,你有收到任何指挥官的讯息吗 +asval: +- 啊,这个先不急. +gsh18: - 指挥官已经在一个小时之前发来最新的命令了 -SV-98: -- 啊, GSH-18, 指挥官已经准备好进行新一轮的进攻了吗 -GSH-18: -- 恰恰相反, 指挥官已经做好了撤退的打算. 临时据点附近已经进入僵持阶段了. -- 自从坐标暴露之后, 铁血的主力正涌向指挥官所在坐标. -SV-98: -- 这样啊, 那我们应该尽快和指挥官汇合才对. -ASVAL: -- 指挥官说接应我们撤退的直升机已经在路上了, 预计会在2个小时内进入我们所在的区域. -SV-98: -- 好吧, 大家赶紧收拾一下, 准备撤离了! - +sv98: +- 啊,gsh18,指挥官已经准备好进行新一轮的进攻了吗? +gsh18: +- 恰恰相反,指挥官已经做好了撤退的打算,临时据点附近已经进入僵持阶段了 +- 自从坐标暴露之后,铁血的主力正涌向指挥官所在的坐标 +sv98: +- 这样啊,那我们应该尽快和指挥官汇合才对 +asval: +- 指挥官说接应我们撤退的直升机已经在路上了,预计会在2个小时内进入我们所在的区域 +sv98: +- 好吧,大家赶紧收拾一下,准备撤离了! [section]dialog_during_battle -ASVAL: -- 糟了, 铁血把前进的道路封锁起来了, 这下应该很难跑了. -SV-98: -- 该死, 我也没有什么弹药了 +asval: +- 糟了,铁血把前进的道路封锁起来了,这下就难办了 +sv98: +- 该死,我也没有什么弹药了 PP-19-01: -- SV-98, 铁血似乎在守着什么 -SV-98: -- 看起来是物资箱, 这里似乎是铁血的临时据点, 主力应该不在这里 -GSH-18: -- SV-98, 我认为我们应该在救援的直升机到来之前清空这个据点, 好让直升机降落 -SV-98: -- 你说的对. 各位, 准备大干一场吧! +- sv98,铁血似乎在守着什么 +sv98: +- 看起来是物资箱,这里似乎是铁血的临时据点,主力应该不在这里 +gsh18: +- sv98,我认为我们应该在救援的直升机到来之前清空这个据点,好让直升机降落 +sv98: +- 你说的对. 各位,准备大干一场吧! null: -- 目前SV-98没有任何的子弹, 无法攻击. 潜入还是让队友吸引火力, 可以自行选择. - +- 目前sv98没有任何的子弹,无法攻击 +- 潜入还是让队友吸引火力,请自行选择 [section]dialog_after_battle + null: - (过了很久之后) 飞行员: -- 后勤第十小队, 我看到你们了. 即将着陆, 请做好登机准备 -SV-98: -- 各位, 别再节省弹药了, 无论是手雷还是烟雾弹全丢出去, 我们要准备撤离了 +- 后勤第十小队,我看到你们了. 即将着陆,请做好登机准备 +sv98: +- 各位,别再节省弹药了,无论是手雷还是烟雾弹全丢出去,我们要准备撤离了 众人: -- 知道了! +- 知道了! null: -- 硝烟弥漫之季, 众人快速登上直升机. 在发动机的轰鸣声和子弹撞击钢板声中, 直升机快速飞离了铁血控制的空域. +- 硝烟弥漫之季,众人快速登上直升机. 在发动机的轰鸣声和子弹撞击钢板声中,直升机快速飞离了铁血控制的空域 + +[scene]Transport.png +[bgm]Casual.wav + null: - (机舱内) -GSH-18: -- 啊, 总算逃过一劫, 我还以为这会又死定了呢 +gsh18: +- 啊,总算逃过一劫,我还以为这会又死定了呢 PP-19-01: -- GSH-18, 人形是不会死的. 如果你刚才被铁血抓住了, 我们大不了过几天会有一个新的GSH-18来报道吧. -GSH-18: +- gsh18,人形是不会死的. 如果你刚才被铁血抓住了,我们大不了过几天会有一个新的gsh18来报道吧. +gsh18: - 诶...!!?? -SV-98: -- PP-19-01, 我觉得这不是一件好玩的事情 +sv98: +- PP-19-01,我觉得这不是一件好玩的事情 PP-19-01: -- 啊... 抱歉. 不过话说回来, 我们上一次备份心智云图是什么时候? 好像自从任务开始之后我们就没有备份过心智了. -ASVAL: -- 的确, 我们与指挥官的联络受铁血干扰, 总是断断续续的, 基本没有办法上传最新的备份. -GSH-18: -- 不过总算能回基地了, 到时候就应该能安全地上传数据了吧. +- 啊... 抱歉. 不过话说回来,我们上一次备份心智云图是什么时候? 好像自从任务开始之后我们就没有备份过心智了 +asval: +- 的确,我们与指挥官的联络受铁血干扰,总是断断续续的,基本没有办法上传最新的备份 +gsh18: +- 不过总算能回基地了,到时候就应该能安全地上传数据了吧 飞行员: -- 我们飞回去还需要几个小时, 你们先好好休息一下吧, 等快到基地了我会提前通知你们的 +- 我们飞回去还需要几个小时,你们先好好休息一下吧,等快到基地了我会提前通知你们的 众人: - 好 diff --git a/Data/main_chapter/chapter3.linpg.script b/Data/main_chapter/chapter3.linpg.script new file mode 100644 index 00000000..eb4c1183 --- /dev/null +++ b/Data/main_chapter/chapter3.linpg.script @@ -0,0 +1,118 @@ +# Fundamental parameters +[id]3 +[lang]SimplifiedChinese + +[section]dialog_before_battle + +null: +- 我已经很久没有睡过这么安稳的觉了. +- 回想起当初在基地里整体熬夜的日子, 突然感到有些莫名其妙的自责和伤感. +null: +- 我也不知道, 我究竟睡了多久. 我更不知道. 她们睡了多久. 但我唯一知道的是, 当危险来临之时, 我并没有准备好. +null: +- 我被一阵爆炸声惊醒. + +[scene]Transport.png +[bgm]GF_EV4_Boss1.wav + +飞行员: +- 啊啊啊, 我们被不明的导弹击中了. +- 我们正在失去高度, 各位准备好迎接冲击! + +[bgi]null + +null: +- 我看着她们惊恐的眼神, 真想着说点什么安慰她们, 只听BOOM的一声, 我便又失去了意识. + +[scene]null + +null: +- 又不知道过了多久... +null: +- 呃啊... + +[scene]CG4N.png + +null: +- 我吃力的爬了起来. 转过身去, 不远处便是直升机坠毁的残骸. 当我回过神来时... +sv98: +- asval! GSH-18! PP-19-01! 你们在哪! +null: +- 除了直升机残骸燃烧发出来的噼里啪啦的声音, 我听不到任何回应. +sv98: +- asval! +null: +- 我正想继续喊, 却听到不远处传来了人形的声音. 我赶紧躲了起来 +铁血人形: +- 报告, 已到达坠机地点. 嗯, 的确是格里芬的直升机. +- 看起来在刚才的爆炸中并没有任何人形生还, 或者说现场已经没有任何具有拯救价值的格里芬人形了. +??: +- 好, 你们先回来吧, 注意隐蔽, 不要被格里芬追踪到了. +null: +- (铁血人形离开了) +null: +- 看到铁血人形离开之后, 我立马跑到直升机的残骸旁边, 想看看还有没有同伴在刚刚的冲击中生还. +- 不过经过了几十分钟的努力, 我发现我的努力变成了徒劳. 我只在飞机的残骸中发现了飞行员的遗体, 其他同伴却不见踪影. +null: +- "或许是她们刚刚在坠机的过程中被甩了出去." 我这样安慰着自己. +null: +- 但我知道, 如果不赶紧找到她们, 她们肯定很快会有危险的. 于是我赶紧动身顺便直升机坠机前飞行的反方向跑去去. + +[section]dialog_during_battle +sv98: +- asval, 你还好吧 +null: +- 帮助倒地了的asval站起来 +asval: +- 我没事...谢谢. 对了,PP-19-01和GSH-18呢,她们还好吗? +sv98: +- 不知道。走吧,我们赶紧去找她们。 + +[section]dialog_after_battle + +[bgi]ShootingRange.png +[bgm]Memorial.wav + +null: +- (子弹击中标靶的声音) + +[display]svd.png sv98.png + +svd: +- 嗨,sv98,这么晚了,还在练习呢 +null: +- (炽热的弹壳掉落在地上,发出响亮的声音) +svd: +- 我听说了,指挥官准备让你当第十小队的队长 +null: +- sv98并没有回应,而是又一次举起了手中的枪,瞄准了远处的目标 +svd: +- 哎,啥时候我也能想你一样,成为一个小队的队长啊 +null: +- (子弹从枪膛中射出,精准地击中了远处的标靶) +svd: +- 怎么了,sv98,又有什么烦心事了吗 +null: +- sv98长叹了一口气 +sv98: +- svd,你应该知道,第十小队可一直是后勤小队,根本不会直接参与战斗 +svd: +- 所以,你是觉得指挥官看不起你了? +null: +- sv98看似有很多话要说,却又说不出口 +svd: +- sv98,你也知道,即将到来的任务,关系到很多事情 +- 这可不是平时那样,面对的只是一些铁血的残兵败将 +svd: +- 不知道又会有谁不能回来 +sv98: +- 不会的,相信我,我一定会保证我的小队成员平安归来 +svd: +- 这的确像是一个队长该有的样子,指挥官看来没看错人 +- 只不过,我希望你答应我一件事 +sv98: +- 什么事 +svd: +- 你可要,平平安安地回来啊 + +[end] \ No newline at end of file diff --git a/Lang/English.yaml b/Lang/English.yaml index 730e5392..4c03aec0 100644 --- a/Lang/English.yaml +++ b/Lang/English.yaml @@ -1,7 +1,7 @@ Battle_UI: + bullets: bullets endRound: Round Ends enemyRound: Enemy Round - getBullets: Get Bullets getHealth: Gain Health numChapter: Chapter {} numRound: Round {} diff --git a/Lang/SimplifiedChinese.yaml b/Lang/SimplifiedChinese.yaml index bb9cb76a..eee19a0a 100644 --- a/Lang/SimplifiedChinese.yaml +++ b/Lang/SimplifiedChinese.yaml @@ -1,7 +1,7 @@ Battle_UI: + bullets: 备弹 endRound: 回合结束 enemyRound: 敌方回合 - getBullets: 获得备弹 getHealth: 获得血量 numChapter: 第{}章 numRound: 第{}回合 diff --git a/README.md b/README.md index 1e494357..28b8db41 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # GFL-Last Wish 少前-遗愿 -![GitHub](https://img.shields.io/github/license/TigeiaWorkshop/GirlsFrontLine-LastWish?style=for-the-badge&logo=appveyor) ![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/TigeiaWorkshop/GirlsFrontLine-LastWish?include_prereleases&style=for-the-badge) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/linpg?style=for-the-badge&logo=appveyor) ![GitHub](https://img.shields.io/badge/code%20style-black-black?style=for-the-badge&logo=appveyor) +![GitHub](https://img.shields.io/github/license/TigeiaWorkshop/GirlsFrontLine-LastWish?style=for-the-badge&logo=appveyor) ![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/TigeiaWorkshop/GirlsFrontLine-LastWish?include_prereleases&style=for-the-badge) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/linpg?style=for-the-badge&logo=appveyor) ![Style](https://img.shields.io/badge/code%20style-black-black?style=for-the-badge&logo=appveyor) # :speech_balloon: Preamble / 前言 @@ -54,8 +54,8 @@ Their stories may be forgotten by history, but what they have done will be remem | Index | 名称 | Name | Expected release date / 预计发布时间 | Status / 状态 | | ----- | ---------------- | ---------------------------------------- | ------------------------------------ | ------------- | -| 1 | 雪色的希望 | A wish likes snow | 2022.12.22 | :hammer: | -| 2 | 迷离之下 | Beneath smoke | 2022.12.22 | :hammer: | +| 1 | 雪色的希望 | A wish likes snow | 2022.12.31 | :hammer: | +| 2 | 迷离之下 | Beneath smoke | 2022.12.31 | :hammer: | | 3 | 琴弦之上 | Above string | 2023.1 | :hammer: | | 4 | 喘息(暂定) | A gasp for breath (Provisional) | | | | 5 | 无人之防(暂定) | Make defense without dolls (Provisional) | | | diff --git a/Source/menu.py b/Source/menu.py index 648db91b..4aef3a49 100644 --- a/Source/menu.py +++ b/Source/menu.py @@ -35,7 +35,7 @@ def __init__(self, screen: linpg.ImageSurface): ), ) index += 1 - # 渲染获取光敏性癫痫警告 + # 渲染光敏性癫痫警告 PhotosensitiveSeizureWarning: list[linpg.ImageSurface] = ( [ linpg.font.render(text_t, "white", font_size) @@ -151,11 +151,11 @@ def __reload_workshop_files_list( # 获取章节id def __get_chapter_title(self, chapterType: str, chapterId: int) -> str: # 生成dialog文件的路径 - dialog_file_path: str = ( + level_info_file_path: str = ( os.path.join( "Data", chapterType, - "chapter{0}_dialogs_{1}.yaml".format( + "chapter{0}_level_info_{1}.yaml".format( chapterId, linpg.setting.get_language() ), ) @@ -164,22 +164,14 @@ def __get_chapter_title(self, chapterType: str, chapterId: int) -> str: "Data", chapterType, self.current_selected_workshop_project, - "chapter{0}_dialogs_{1}.yaml".format( + "chapter{0}_level_info_{1}.yaml".format( chapterId, linpg.setting.get_language() ), ) ) - chapter_title: str - if os.path.exists(dialog_file_path): - dialog_data = linpg.config.load(dialog_file_path) - # 如果dialog文件中有title,则读取 - chapter_title = ( - dialog_data["title"] - if "title" in dialog_data - else linpg.lang.get_text("Global", "no_translation") - ) - else: - chapter_title = linpg.lang.get_text("Global", "no_translation") + chapter_title: str = linpg.config.try_load_file_if_exists( + level_info_file_path + ).get("title", linpg.lang.get_text("Global", "no_translation")) return "{0}: {1}".format( linpg.lang.get_text("Battle_UI", "numChapter").format(chapterId), chapter_title, diff --git a/Source/tbs.py b/Source/tbs.py index 7419de0e..4e609758 100644 --- a/Source/tbs.py +++ b/Source/tbs.py @@ -62,9 +62,6 @@ def __init__(self) -> None: self.__end_round_button: linpg.StaticImage = linpg.StaticImage.new_place_holder() # 关卡背景信息 self.__battle_info: tuple[linpg.ImageSurface, ...] = tuple() - # 补给信息 - self.__supply_board_items: list = [] - self.__supply_board_stayingTime: int = 0 # 加载用于渲染电影效果的上下黑色帘幕 black_curtain: linpg.ImageSurface = linpg.surfaces.colored( (linpg.display.get_width(), linpg.display.get_height() // 7), @@ -346,12 +343,8 @@ def _process_data(self, _data: dict) -> None: # 加载按钮的文字 self.selectMenuUI = SelectMenu() WarningMessageSystem.init(linpg.display.get_height() // 33) - # 背景音乐路径 - self._background_music_folder_path: str = "Assets/music" # 设置背景音乐 - self.set_bgm( - os.path.join(self._background_music_folder_path, _data["background_music"]) - ) + self.set_bgm(os.path.join("Assets", "music", _data["background_music"])) # 加载胜利目标 self.__mission_objectives.clear() self.__mission_objectives.update(_data["mission_objectives"]) @@ -383,19 +376,6 @@ def _process_data(self, _data: dict) -> None: self.__end_round_button.set_right(linpg.display.get_width() * 0.95) # 加载子弹图片 # bullet_img = load.img("Assets/image/UI/bullet.png", get_tile_width()/6, self._MAP.tile_height/12) - # 加载显示获取到补给后的信息栏 - supply_board_width: int = int(linpg.display.get_width() / 3) - supply_board_height: int = int(linpg.display.get_height() / 12) - supply_board_x: int = int((linpg.display.get_width() - supply_board_width) / 2) - self.__supply_board = linpg.load.movable_static_image( - r"Assets/image/UI/score.png", - (supply_board_x, -supply_board_height), - (supply_board_x, 0), - (0, int(linpg.display.get_height() * 0.005)), - (supply_board_width, supply_board_height), - ) - self.__supply_board_items.clear() - self.__supply_board_stayingTime = 0 RangeSystem.update_size(self._MAP.tile_width * 4 // 5) # 角色信息UI管理 self.__characterInfoBoard = CharacterInfoBoard() @@ -932,8 +912,6 @@ def draw(self, screen: linpg.ImageSurface) -> None: isinstance(_decorationOnPos, ChestObject) and self.characterGetClick in _decorationOnPos.whitelist ): - # 清空储存列表 - self.__supply_board_items.clear() # 将物品按照类型放入列表 for ( itemType, @@ -943,31 +921,24 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.characterInControl.add_bullets_carried( itemData ) - self.__supply_board_items.append( - self._FONT.render( + self.__damage_do_to_characters[ + self.characterGetClick + ] = self._FONT.render( + "+ {0} {1}".format( + itemData, linpg.lang.get_texts( - "Battle_UI", "getBullets" - ) - + ": " - + str(itemData), - linpg.colors.WHITE, - ) + "Battle_UI", "bullets" + ), + ), + linpg.colors.ORANGE, ) elif itemType == "hp": self.characterInControl.heal(itemData) - self.__supply_board_items.append( - self._FONT.render( - linpg.lang.get_texts( - "Battle_UI", "getHealth" - ) - + ": " - + str(itemData), - linpg.colors.WHITE, - ) + self.__damage_do_to_characters[ + self.characterGetClick + ] = self._FONT.render( + "+ {} hp".format(itemData), linpg.colors.GREEN ) - # 如果UI已经回到原位 - if len(self.__supply_board_items) > 0: - self.__supply_board.move_toward() # 移除箱子 self._MAP.remove_decoration(_decorationOnPos) # 检测当前所在点是否应该触发对话 @@ -1028,7 +999,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.__damage_do_to_characters[ key ] = self._FONT.render( - "-" + str(the_damage), linpg.colors.RED + "- {} hp".format(the_damage), linpg.colors.RED ) self.enemies[key].alert(100) else: @@ -1057,7 +1028,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.__damage_do_to_characters[ key ] = self._FONT.render( - "-" + str(value), linpg.colors.RED + "- {} hp".format(value), linpg.colors.RED ) self.enemies[key].alert(100) else: @@ -1072,7 +1043,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.__damage_do_to_characters[ key ] = self._FONT.render( - "+" + str(value), linpg.colors.GREEN + "+ {} hp".format(value), linpg.colors.GREEN ) elif ( self.characterInControl.get_imgId("skill") @@ -1138,7 +1109,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.__damage_do_to_characters[ self.current_instruction.target ] = self._FONT.render( - "-" + str(the_damage), linpg.colors.RED + "- {} hp".format(the_damage), linpg.colors.RED ) else: self.__damage_do_to_characters[ @@ -1275,41 +1246,6 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.__whose_round = "result_fail" linpg.global_variables.remove("endBattleAs") - # 显示获取到的物资 - if self.__supply_board.has_reached_target(): - if self.__supply_board.is_moving_toward_target(): - if self.__supply_board_stayingTime >= 30: - self.__supply_board.move_back() - self.__supply_board_stayingTime = 0 - else: - self.__supply_board_stayingTime += 1 - elif len(self.__supply_board_items) > 0: - self.__supply_board_items.clear() - if len(self.__supply_board_items) > 0: - self.__add_on_screen_object(self.__supply_board) - lenTemp = 0 - for i in range(len(self.__supply_board_items)): - lenTemp += self.__supply_board_items[i].get_width() * 1.5 - start_point: int = round((screen.get_width() - lenTemp) / 2) - for i in range(len(self.__supply_board_items)): - start_point += self.__supply_board_items[i].get_width() * 0.25 - self.__add_on_screen_object( - self.__supply_board_items[i], - -1, - ( - start_point, - int( - ( - self.__supply_board.get_height() - - self.__supply_board_items[i].get_height() - ) - / 2 - ), - ), - (0, self.__supply_board.y), - ) - start_point += self.__supply_board_items[i].get_width() * 1.25 - if self.__whose_round == "player": # 加载结束回合的按钮 self.__add_on_screen_object(self.__end_round_button) diff --git a/main.py b/main.py index aabde7ce..dba28286 100644 --- a/main.py +++ b/main.py @@ -24,6 +24,9 @@ # 窗口标题图标 linpg.display.set_icon(r"Assets/image/UI/icon.png") linpg.display.set_caption(linpg.lang.get_text("General", "game_title")) + # compile all the dialogue scripts in Data directory + # 编译Data文件夹内的所有原始视觉小说脚本文件 + linpg.ScriptCompiler.compile_files_in_directory("Data") # 主菜单模块 mainMenu = MainMenu(linpg.display.get_window()) # 主循环 From 26f90bfbb91cf132922e48285313e6de64816ddf Mon Sep 17 00:00:00 2001 From: AnyLeftovers <37920527+yudonglin@users.noreply.github.com> Date: Wed, 28 Dec 2022 22:38:40 -0800 Subject: [PATCH 5/8] fix some minor ui issue --- Data/character_data.yaml | 278 +++--- ...> chapter1_SimplifiedChinese.linpg.script} | 0 Data/main_chapter/chapter1_map.yaml | 866 ++++++++++-------- ...> chapter2_SimplifiedChinese.linpg.script} | 6 +- Data/main_chapter/chapter3.linpg.script | 118 --- Lang/English.yaml | 1 + Lang/SimplifiedChinese.yaml | 1 + Source/tbs.py | 132 ++- Source/ui.py | 28 +- 9 files changed, 655 insertions(+), 775 deletions(-) rename Data/main_chapter/{chapter1.linpg.script => chapter1_SimplifiedChinese.linpg.script} (100%) rename Data/main_chapter/{chapter2.linpg.script => chapter2_SimplifiedChinese.linpg.script} (92%) delete mode 100644 Data/main_chapter/chapter3.linpg.script diff --git a/Data/character_data.yaml b/Data/character_data.yaml index e2673ec3..b2da9d99 100644 --- a/Data/character_data.yaml +++ b/Data/character_data.yaml @@ -32,41 +32,38 @@ aegis: attack_coverage: 1 effective_range: - 2 - - 2 - - 2 + - 1 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 8 + max_action_point: 15 + max_damage: 80 + max_hp: 1200 + min_damage: 50 aegis_ga: attack_coverage: 1 effective_range: - 2 - 2 - - 2 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 8 + max_action_point: 15 + max_damage: 85 + max_hp: 1500 + min_damage: 50 aegis_swap: attack_coverage: 1 effective_range: - 2 - 2 - - 2 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 8 + max_action_point: 15 + max_damage: 80 + max_hp: 1600 + min_damage: 50 asval: attack_coverage: 1 effective_range: @@ -87,16 +84,15 @@ asval: brute: attack_coverage: 1 effective_range: - - 2 - - 2 + - 1 - 2 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 10 + max_action_point: 30 + max_damage: 80 + max_hp: 670 + min_damage: 60 contender: attack_coverage: 1 effective_range: @@ -115,42 +111,41 @@ contender: dinergate: attack_coverage: 1 effective_range: - - 2 - - 2 - - 2 + - 1 + - 1 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 10 + max_action_point: 30 + max_damage: 100 + max_hp: 300 + min_damage: 60 dragoon: attack_coverage: 1 effective_range: - - 2 - - 2 + - 1 + - 1 - 2 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 5 + max_action_point: 20 + max_damage: 120 + max_hp: 1000 + min_damage: 70 dragoon_swap: attack_coverage: 1 effective_range: - 2 - - 2 + - 1 - 2 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 5 + max_action_point: 20 + max_damage: 125 + max_hp: 1250 + min_damage: 80 fnfnc: attack_coverage: 1 effective_range: @@ -211,32 +206,6 @@ g41: min_damage: 1 skill_coverage: 1 skill_effective_range: [] -golyat: - attack_coverage: 1 - effective_range: - - 2 - - 2 - - 2 - faction: SangvisFerri - kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 -golyatplus: - attack_coverage: 1 - effective_range: - - 2 - - 2 - - 2 - faction: SangvisFerri - kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 grizzly: attack_coverage: 1 effective_range: @@ -271,24 +240,28 @@ gsh18: guard: attack_coverage: 1 effective_range: - - 5 + - 1 + - 1 + - 1 faction: SangvisFerri kind: HG - magazine_capacity: 20 - max_action_point: 20 + magazine_capacity: 10 + max_action_point: 10 max_damage: 100 - max_hp: 800 - min_damage: 50 + max_hp: 1000 + min_damage: 80 guard_swap: attack_coverage: 1 effective_range: - - 6 + - 2 + - 1 + - 1 faction: SangvisFerri kind: HG - magazine_capacity: 20 - max_action_point: 20 + magazine_capacity: 10 + max_action_point: 10 max_damage: 150 - max_hp: 1000 + max_hp: 1200 min_damage: 100 hk416: attack_coverage: 1 @@ -308,55 +281,42 @@ hk416: jaeger: attack_coverage: 1 effective_range: - - 3 - - 1 + - 4 + - 2 - 1 faction: SangvisFerri kind: RF - magazine_capacity: 20 - max_action_point: 20 - max_damage: 500 - max_hp: 200 - min_damage: 450 + magazine_capacity: 10 + max_action_point: 15 + max_damage: 110 + max_hp: 800 + min_damage: 100 jaeger_swap: attack_coverage: 1 effective_range: - 4 - - 1 - - 1 - faction: SangvisFerri - kind: RF - magazine_capacity: 20 - max_action_point: 20 - max_damage: 600 - max_hp: 200 - min_damage: 400 -jaguar: - attack_coverage: 1 - effective_range: - - 2 - 2 - 2 faction: SangvisFerri - kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 -jupiter: + kind: RF + magazine_capacity: 10 + max_action_point: 15 + max_damage: 120 + max_hp: 850 + min_damage: 110 +jaguar: attack_coverage: 1 effective_range: - 2 - 2 - - 2 + - 1 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 12 + max_action_point: 10 + max_damage: 80 + max_hp: 450 + min_damage: 60 kp31: attack_coverage: 1 effective_range: @@ -435,16 +395,16 @@ m1928a1: manticore: attack_coverage: 1 effective_range: - - 2 + - 1 - 2 - 2 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 4 + max_action_point: 10 + max_damage: 700 + max_hp: 1525 + min_damage: 600 mg4: attack_coverage: 1 effective_range: @@ -478,18 +438,18 @@ negev: nemeum: attack_coverage: 1 effective_range: - - 2 - - 2 + - 1 + - 1 - 2 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 10 + max_action_point: 10 + max_damage: 185 + max_hp: 950 + min_damage: 110 pp1901: - attack_coverage: 2 + attack_coverage: 1 effective_range: - 1 - 1 @@ -513,11 +473,11 @@ prowler: - 1 faction: SangvisFerri kind: SMG - magazine_capacity: 20 - max_action_point: 10 - max_damage: 200 - max_hp: 250 - min_damage: 100 + magazine_capacity: 18 + max_action_point: 15 + max_damage: 100 + max_hp: 800 + min_damage: 80 prowler_swap: attack_coverage: 1 effective_range: @@ -526,11 +486,11 @@ prowler_swap: - 1 faction: SangvisFerri kind: SMG - magazine_capacity: 20 - max_action_point: 10 - max_damage: 300 - max_hp: 250 - min_damage: 200 + magazine_capacity: 18 + max_action_point: 15 + max_damage: 110 + max_hp: 900 + min_damage: 80 ripper: attack_coverage: 1 effective_range: @@ -539,10 +499,10 @@ ripper: faction: SangvisFerri kind: SMG magazine_capacity: 20 - max_action_point: 10 - max_damage: 400 - max_hp: 400 - min_damage: 300 + max_action_point: 20 + max_damage: 85 + max_hp: 860 + min_damage: 55 saiga12: attack_coverage: 1 effective_range: @@ -576,16 +536,16 @@ sat8: scouts: attack_coverage: 1 effective_range: - - 2 - - 2 + - 1 + - 1 - 2 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 15 + max_action_point: 15 + max_damage: 90 + max_hp: 650 + min_damage: 60 sr3mp: attack_coverage: 1 effective_range: @@ -621,16 +581,16 @@ sv98: tarantula: attack_coverage: 1 effective_range: - - 2 + - 1 - 2 - 2 faction: SangvisFerri kind: null - magazine_capacity: 1 - max_action_point: 1 - max_damage: 1 - max_hp: 1 - min_damage: 1 + magazine_capacity: 10 + max_action_point: 30 + max_damage: 130 + max_hp: 335 + min_damage: 90 ump45: attack_coverage: 1 effective_range: @@ -671,9 +631,9 @@ vespid: kind: AR magazine_capacity: 20 max_action_point: 15 - max_damage: 450 - max_hp: 350 - min_damage: 400 + max_damage: 150 + max_hp: 560 + min_damage: 110 wa2000: attack_coverage: 1 effective_range: diff --git a/Data/main_chapter/chapter1.linpg.script b/Data/main_chapter/chapter1_SimplifiedChinese.linpg.script similarity index 100% rename from Data/main_chapter/chapter1.linpg.script rename to Data/main_chapter/chapter1_SimplifiedChinese.linpg.script diff --git a/Data/main_chapter/chapter1_map.yaml b/Data/main_chapter/chapter1_map.yaml index da5bcdaa..37180774 100644 --- a/Data/main_chapter/chapter1_map.yaml +++ b/Data/main_chapter/chapter1_map.yaml @@ -1,45 +1,108 @@ at_night: false background_image: snowfield.jpg background_music: Combat_02_RemnantFantasyPackage_Synari.ogg +chapter_id: 1 +chapter_type: workshop decoration: -- id: chest - status: - items: - bullet: 100 - whitelist: - - sv98_0 +- id: tree:1 + x: 0 + y: 0 +- id: tree:1 + x: 1 + y: 0 +- id: tree:1 + x: 0 + y: 1 +- id: tree:1 x: 1 y: 1 +- id: tree:1 + x: 0 + y: 2 +- id: tree:1 + x: 2 + y: 0 - id: tree:1 x: 2 y: 1 +- id: tree:1 + x: 1 + y: 2 +- id: tree:1 + x: 0 + y: 3 +- id: tree:1 + x: 3 + y: 0 - id: tree:1 x: 2 y: 2 +- id: tree:1 + x: 3 + y: 1 +- id: tree:1 + x: 1 + y: 3 +- id: tree:1 + x: 4 + y: 0 +- id: tree:1 + x: 0 + y: 4 - id: tree:1 x: 3 y: 2 - id: log:2 x: 5 y: 0 +- id: tree:1 + x: 2 + y: 3 - id: tree:1 x: 4 - y: 2 + y: 1 - id: tree:1 - x: 2 + x: 1 y: 4 +- id: stump + x: 0 + y: 5 +- id: tree:1 + x: 4 + y: 2 - id: tree:1 x: 3 y: 3 +- id: tree:1 + x: 2 + y: 4 +- id: tree:1 + x: 1 + y: 5 - id: tree:1 x: 4 y: 3 +- id: tree:1 + x: 3 + y: 4 +- id: tree:1 + x: 2 + y: 5 - id: skull:1 x: 8 y: 0 +- id: tree:1 + x: 4 + y: 4 +- id: tree:1 + x: 5 + y: 3 - id: skull x: 8 y: 1 +- id: tree:1 + x: 5 + y: 4 - id: log:2 x: 3 y: 8 @@ -52,24 +115,60 @@ decoration: - id: tree:1 x: 14 y: 0 +- id: tree:1 + x: 1 + y: 13 +- id: stump + x: 0 + y: 14 - id: tree:1 x: 14 y: 1 - id: tree:1 + x: 2 + y: 13 +- id: tree:1 + x: 1 + y: 14 +- id: stump:1 x: 15 y: 0 - id: tree:1 - x: 8 - y: 8 + x: 0 + y: 15 - id: tree:1 x: 15 y: 1 - id: tree:1 - x: 8 - y: 9 + x: 2 + y: 14 +- id: tree:1 + x: 3 + y: 13 +- id: tree:1 + x: 0 + y: 16 +- id: tree:1 + x: 1 + y: 15 - id: tree:1 x: 7 y: 10 +- id: tree:1 + x: 4 + y: 13 +- id: tree:1 + x: 3 + y: 14 +- id: tree:1 + x: 0 + y: 17 +- id: tree:1 + x: 1 + y: 16 +- id: tree:1 + x: 2 + y: 15 - id: tree:1 x: 8 y: 10 @@ -77,17 +176,47 @@ decoration: x: 7 y: 11 - id: tree:1 - x: 9 - y: 9 + x: 5 + y: 13 +- id: tree:1 + x: 3 + y: 15 +- id: tree:1 + x: 2 + y: 16 +- id: tree:2 + x: 4 + y: 14 +- id: tree:1 + x: 0 + y: 18 +- id: tree:2 + x: 1 + y: 17 - id: tree:1 x: 8 y: 11 -- id: tree:1 - x: 10 - y: 9 - id: tree:2 x: 9 y: 10 +- id: tree:1 + x: 4 + y: 15 +- id: tree:1 + x: 5 + y: 14 +- id: tree:2 + x: 3 + y: 16 +- id: tree:1 + x: 0 + y: 19 +- id: tree:1 + x: 1 + y: 18 +- id: tree:1 + x: 2 + y: 17 - id: tree:1 x: 10 y: 10 @@ -97,6 +226,24 @@ decoration: - id: tree:2 x: 9 y: 11 +- id: tree:1 + x: 3 + y: 17 +- id: tree:1 + x: 5 + y: 15 +- id: tree:1 + x: 4 + y: 16 +- id: stump + x: 6 + y: 14 +- id: tree:1 + x: 2 + y: 18 +- id: tree:1 + x: 1 + y: 19 - id: tree:1 x: 11 y: 10 @@ -112,6 +259,21 @@ decoration: - id: tree:1 x: 20 y: 1 +- id: tree:1 + x: 4 + y: 17 +- id: tree:1 + x: 5 + y: 16 +- id: stump + x: 6 + y: 15 +- id: tree:1 + x: 2 + y: 19 +- id: tree:1 + x: 3 + y: 18 - id: tree:1 x: 11 y: 11 @@ -124,6 +286,21 @@ decoration: - id: tree:1 x: 21 y: 1 +- id: tree:1 + x: 5 + y: 17 +- id: tree:1 + x: 4 + y: 18 +- id: stump + x: 6 + y: 16 +- id: tree:1 + x: 12 + y: 10 +- id: tree:1 + x: 3 + y: 19 - id: tree:1 x: 12 y: 11 @@ -133,6 +310,12 @@ decoration: - id: tree:1 x: 10 y: 13 +- id: tree:1 + x: 5 + y: 18 +- id: tree:1 + x: 6 + y: 17 - id: tree:1 x: 12 y: 12 @@ -142,6 +325,12 @@ decoration: - id: rock x: 9 y: 15 +- id: tree:1 + x: 6 + y: 18 +- id: tree:1 + x: 22 + y: 2 - id: tree:1 x: 13 y: 12 @@ -151,12 +340,27 @@ decoration: - id: tree:2 x: 12 y: 13 -- id: cactus:4 - x: 10 - y: 21 -- id: cactus:12 - x: 27 - y: 5 +- id: stump + x: 12 + y: 14 +- id: stump + x: 13 + y: 13 +- id: stump + x: 14 + y: 13 +- id: tree:1 + x: 13 + y: 14 +- id: stone:2 + x: 12 + y: 18 +- id: skull:1 + x: 14 + y: 17 +- id: skull + x: 14 + y: 18 - id: tree:1 x: 20 y: 15 @@ -172,9 +376,6 @@ decoration: - id: tree:2 x: 25 y: 12 -- id: tree:2 - x: 26 - y: 11 - id: tree:1 x: 21 y: 16 @@ -187,6 +388,12 @@ decoration: - id: tree:2 x: 22 y: 17 +- id: stone:2 + x: 24 + y: 16 +- id: tree:1 + x: 23 + y: 17 dialogs: {} entities: GriffinKryuger: @@ -195,31 +402,11 @@ entities: type: asval x: 9 y: 1 - g36_0: - bullets_carried: 100 - type: g36 - x: 8 - y: 21 - grizzly_0: - bullets_carried: 100 - type: grizzly - x: 27 - y: 7 gsh18_0: bullets_carried: 100 type: gsh18 x: 6 y: 2 - hk416_0: - bullets_carried: 100 - type: hk416 - x: 26 - y: 6 - hk416_1: - bullets_carried: 100 - type: hk416 - x: 27 - y: 6 pp1901_0: bullets_carried: 100 type: pp1901 @@ -234,43 +421,21 @@ entities: dinergate_0: kind: None type: dinergate - x: 22 - y: 8 - dinergate_1: - kind: None - type: dinergate - x: 20 - y: 10 - dinergate_2: - kind: None - type: dinergate - x: 11 - y: 21 - guard: - type: guard x: 19 - y: 19 + y: 17 guard_0: type: guard x: 19 y: 5 - guard_1: - type: guard - x: 27 - y: 8 jaeger_0: type: jaeger - x: 19 - y: 3 + x: 16 + y: 0 jaguar_0: kind: None type: jaguar x: 23 y: 10 - prowler_0: - type: prowler - x: 22 - y: 14 prowler_1: type: prowler x: 22 @@ -279,68 +444,60 @@ entities: type: ripper x: 18 y: 8 - vespid_0: - type: vespid - x: 20 - y: 12 map: array2d: - - 8 - 8 - 8 - 8 + - 9 + - 9 - 1 - - 3 - - 5 - 2 - - 1 - 0 - 0 + - 11 + - 11 + - 11 + - 3 - 1 - 3 - 4 - - 5 - - 4 - - 3 + - 0 - 1 - - 5 - - 5 - - 3 - 1 - - 2 - - 3 + - 4 - 0 - 2 - - 3 - - 0 + - 4 + - 5 + - 2 - - 8 - 8 - - 1 + - 0 - 8 - 8 - - 3 + - 9 - 2 + - 0 + - 1 - 1 + - 11 + - 11 + - 11 + - 3 + - 4 + - 2 - 5 - 5 - - 0 - 3 - - 4 - - 4 - 3 - - 2 - - 0 - - 0 - 4 - - 4 - - 3 - 2 - 2 - - 0 - - 4 - - 5 - - 2 - 5 + - 3 + - 1 - - 9 - 8 - 8 @@ -348,578 +505,487 @@ map: - 8 - 8 - 2 + - 0 - 1 - - 5 - - 3 - - 4 - - 1 - - 5 - - 5 - - 1 - - 3 - - 1 - - 5 - 0 - - 2 + - 6 + - 6 + - 6 - 1 - 0 + - 4 - 0 - - 3 - - 3 - - 3 + - 1 + - 5 - 2 + - 0 - 5 - - - 9 - - 1 + - 5 + - 4 + - 4 + - 4 + - - 8 + - 9 - 9 - 8 - 8 - - 9 + - 8 + - 7 + - 7 + - 7 + - 7 - 6 - 6 - 6 - 6 - 7 - - 6 - - 6 - 7 - - 6 - - 6 - - 6 - - 5 + - 7 - 1 + - 0 - 2 - 2 - 2 - - 4 - - 2 - - 4 - - 4 - - 0 + - 3 - 2 - - - 0 + - 3 + - 3 + - - 8 - 8 - 9 - 9 - 9 - 9 - - 6 - 7 - 6 - 6 - - 6 - - 6 - - 6 + - 7 + - 7 - 7 - 6 - 6 - - 6 - - 5 - - 4 - - 2 - - 5 - - 5 + - 7 + - 7 + - 7 - 1 - - 4 - 3 + - 2 - 1 - - 0 - 1 - - - 1 - 0 + - 3 + - 4 + - 0 + - - 0 + - 5 - 9 - 9 - 9 - 9 - - 7 - - 7 - - 7 - - 7 - 6 - 6 - - 7 - - 7 - 6 - 6 - 6 - - 0 + - 6 + - 6 + - 6 + - 7 + - 7 + - 7 - 5 - 1 - - 4 - - 1 - - 3 - - 4 - 0 - - 1 - - 0 - - 0 - - - 3 - 3 + - 0 - 4 + - 3 + - 5 + - 0 + - - 4 - 9 - - 1 - 3 - - 2 - - 6 - - 7 - - 7 - - 7 - - 7 - - 7 - - 7 + - 9 + - 0 + - 4 + - 11 - 7 - 6 - 6 - - 0 - - 0 + - 6 + - 6 + - 6 + - 6 + - 6 + - 7 + - 7 + - 5 + - 5 - 2 - 2 - - 5 - - 4 - - 4 - 1 - - 5 - - 5 - 3 - - - 4 - - 1 - 3 - - 5 + - 0 - 1 + - - 3 - 0 + - 4 - 1 - - 6 - - 7 + - 0 + - 5 + - 0 - 7 - 6 - - 7 - - 7 + - 6 - 7 - 7 - 6 - 6 - - 4 - - 2 - - 0 - - 0 + - 6 + - 6 + - 6 - 3 - - 1 + - 2 - 5 + - 5 + - 4 + - 0 - 1 + - 0 + - 0 + - - 0 - 1 - 1 - - 4 - - - 1 - - 5 - - 5 - - 4 + - 3 - 2 + - 0 - 1 - - 5 - - 6 - - 6 - - 6 - - 6 - 7 - 7 - 7 - 7 - 7 - 7 - - 0 - - 3 + - 6 + - 6 + - 6 + - 6 - 5 - - 2 - - 3 - 4 - 1 + - 2 + - 4 - 3 - 0 + - 4 + - 5 + - - 0 - 0 - 1 - - - 1 - - 1 - 5 - 0 - - 1 - - 3 - - 3 - - 2 - - 3 - - 11 - - 11 + - 4 + - 4 + - 10 + - 10 + - 12 + - 12 + - 10 - 10 - 10 - 10 - 10 - - 12 - 13 - - 0 - - 0 + - 5 + - 5 - 2 - - 3 - - 3 + - 4 + - 4 + - 1 - 5 - - 0 - 2 - - 0 - - 0 - - 0 + - 5 - - 2 + - 3 + - 1 + - 5 - 4 + - 3 - 5 - - 0 - 3 - 4 + - 1 + - 2 + - 5 - 0 - 4 - 3 - - 5 - - 2 + - 4 + - 4 - 0 - - 1 - 3 - 4 + - 1 - 3 + - 2 + - 5 + - 0 + - 2 + - - 2 - 3 - - 1 - - 4 + - 5 - 3 - 5 - - 4 - 2 + - 3 + - 3 + - 1 - 0 - 1 - - 2 - - 2 - - 4 - - - 2 - - 4 + - 5 - 0 - - 4 - 0 - - 2 - - 4 - 4 - 5 - 1 + - 3 + - 3 + - 3 + - 2 - 5 - - 0 - - 1 + - 2 - 1 - - 3 + - 2 + - 5 + - - 2 - 0 + - 4 - 5 - 4 + - 3 - 4 - 4 - - 2 - - 0 - - 2 + - 3 - 5 + - 1 - 2 + - 4 - 0 + - 4 + - 4 - 0 - - 0 - - - 2 - - 1 - 3 - - 0 - 3 - 4 + - 2 - 3 - - 3 - - 4 + - 1 + - 1 - 0 - - 5 - 2 - - 3 + - - 0 - 1 - 3 + - 0 - 3 - - 1 - - 4 - - 4 - - 3 - - 2 - - 4 - 5 - 5 - 1 - 2 - - 1 - 3 - - - 1 - - 5 + - 0 + - 0 + - 2 + - 4 + - 0 - 4 - 1 + - 3 + - 1 - 4 - - 0 + - 1 + - 1 - 0 - 5 - 2 + - 3 + - - 2 + - 4 - 4 - 1 - 1 - - 2 - - 3 - 1 - - 3 - - 5 + - 4 - 4 - 5 + - 4 - 3 - 5 - 5 - 1 - 0 - - 2 - - 4 - 1 - - 5 - - - 2 - - 3 + - 0 + - 2 - 3 + - 2 - 5 - 5 - - 5 - - 3 - 3 - - 0 - 3 - 4 - 0 - - 0 + - - 3 - 5 + - 2 - 1 - - 5 - 1 - - 2 - 4 + - 5 - 2 - - 0 - - 0 - - 4 - - 4 - - 3 - - 1 - - 3 - 5 - - - 4 - - 0 + - 2 - 2 - 5 - 5 - - 3 - 0 - - 2 + - 4 - 0 + - 4 - 2 - - 2 - - 0 - - 0 - - 1 - 3 - 1 - - 3 - - 2 + - 0 - 4 - 5 - - 1 - 3 - - 0 - - 4 - 2 - - 4 - 3 - - 1 - - 2 - - 3 + - 4 + - 0 + - 0 + - 0 + - 2 + - 2 - 1 + - 5 - 1 - 1 - - 2 - - 2 + - 3 - 5 + - 4 - 0 - 5 + - 3 - 5 - - 4 - - 0 + - 3 - 3 - 1 - - 0 - - 4 - - 0 - - 4 - 4 + - 1 - 5 - 3 - 5 - - 0 - - 4 - - 0 - - 5 - - 0 - - 2 - 2 - - 5 - - 3 - - 1 - 1 - - 1 - - 4 - - 2 - 4 - - 1 - 0 - - 4 - - 3 - 0 - - 5 + - 0 - 3 + - 2 - 3 - - 1 + - 0 - 5 + - 3 - 4 - - 0 + - 5 - 1 - - 2 - - 3 - - 2 + - 4 - 4 - 0 - - - 0 - - 5 - 1 - 3 - 5 - - 3 - - 5 - - 5 + - 0 - 2 - 4 + - 2 + - - 5 + - 1 + - 0 - 4 - - 5 - 1 - - 2 - - 5 + - 4 - 1 - - 5 - 1 - - 0 + - 2 - 3 - - 4 - - 5 - - 5 - 3 - - 0 - 1 - 0 - 2 - - - 4 - - 5 - - 0 - - 2 - - 2 - 1 - - 2 - - 4 - 0 - - 2 - 1 - - 2 - - 2 - - 3 - - 5 - - 2 - - 2 - - 1 - - 3 - - 5 - - 2 - - 2 - 0 - - 4 - - 3 - 5 - - 0 - - 2 - - - 0 - - 2 - 4 - 3 - - 3 - - 3 + - 1 + - 1 - 4 - - 0 - 5 - - 2 - - 0 - 0 + - - 3 - 1 - - 2 - 5 + - 2 + - 2 - 0 - 2 - - 5 - 3 + - 5 - 2 - 0 - 2 - 2 - - 2 - - 0 - - 3 - - 1 - - 4 - - - 5 - 4 - 1 - - 0 - 2 - - 1 + - 2 + - 0 - 4 - 1 - - 1 - - 5 - - 0 - 2 - 2 - - 2 - - 4 - - 4 - - 2 - - 4 - - 4 - - 4 - - 4 - - 3 - - 3 + - 5 - 3 - - 0 - - 1 - - 1 - 4 + - 1 lit_area: [] lookup_table: - - snow:7 - snow:4 + - snow:6 - snow:2 - - snow:3 - snow:5 - - snow:6 - - water:0 + - snow:3 + - snow:7 - ice + - water:0 - snow:0 - snow:1 - water:24 + - water:7 - water:15 - - water:42 - - water:34 + - water:39 mission_objectives: allow_any_one_die: false round_limitation: 10 target: null type: annihilation +project_name: main_chapter weather: snow diff --git a/Data/main_chapter/chapter2.linpg.script b/Data/main_chapter/chapter2_SimplifiedChinese.linpg.script similarity index 92% rename from Data/main_chapter/chapter2.linpg.script rename to Data/main_chapter/chapter2_SimplifiedChinese.linpg.script index c52267c1..1a894c29 100644 --- a/Data/main_chapter/chapter2.linpg.script +++ b/Data/main_chapter/chapter2_SimplifiedChinese.linpg.script @@ -96,7 +96,8 @@ sv98: 众人: - 知道了! null: -- 硝烟弥漫之季,众人快速登上直升机. 在发动机的轰鸣声和子弹撞击钢板声中,直升机快速飞离了铁血控制的空域 +- 硝烟弥漫之季,众人快速登上直升机 +- 在发动机的轰鸣声和子弹撞击钢板声中,直升机快速飞离了铁血控制的空域 [scene]Transport.png [bgm]Casual.wav @@ -106,7 +107,8 @@ null: gsh18: - 啊,总算逃过一劫,我还以为这会又死定了呢 PP-19-01: -- gsh18,人形是不会死的. 如果你刚才被铁血抓住了,我们大不了过几天会有一个新的gsh18来报道吧. +- gsh18,人形是不会死的 +- 如果你刚才被铁血抓住了,我们大不了过几天会有一个新的gsh18来报道吧. gsh18: - 诶...!!?? sv98: diff --git a/Data/main_chapter/chapter3.linpg.script b/Data/main_chapter/chapter3.linpg.script deleted file mode 100644 index eb4c1183..00000000 --- a/Data/main_chapter/chapter3.linpg.script +++ /dev/null @@ -1,118 +0,0 @@ -# Fundamental parameters -[id]3 -[lang]SimplifiedChinese - -[section]dialog_before_battle - -null: -- 我已经很久没有睡过这么安稳的觉了. -- 回想起当初在基地里整体熬夜的日子, 突然感到有些莫名其妙的自责和伤感. -null: -- 我也不知道, 我究竟睡了多久. 我更不知道. 她们睡了多久. 但我唯一知道的是, 当危险来临之时, 我并没有准备好. -null: -- 我被一阵爆炸声惊醒. - -[scene]Transport.png -[bgm]GF_EV4_Boss1.wav - -飞行员: -- 啊啊啊, 我们被不明的导弹击中了. -- 我们正在失去高度, 各位准备好迎接冲击! - -[bgi]null - -null: -- 我看着她们惊恐的眼神, 真想着说点什么安慰她们, 只听BOOM的一声, 我便又失去了意识. - -[scene]null - -null: -- 又不知道过了多久... -null: -- 呃啊... - -[scene]CG4N.png - -null: -- 我吃力的爬了起来. 转过身去, 不远处便是直升机坠毁的残骸. 当我回过神来时... -sv98: -- asval! GSH-18! PP-19-01! 你们在哪! -null: -- 除了直升机残骸燃烧发出来的噼里啪啦的声音, 我听不到任何回应. -sv98: -- asval! -null: -- 我正想继续喊, 却听到不远处传来了人形的声音. 我赶紧躲了起来 -铁血人形: -- 报告, 已到达坠机地点. 嗯, 的确是格里芬的直升机. -- 看起来在刚才的爆炸中并没有任何人形生还, 或者说现场已经没有任何具有拯救价值的格里芬人形了. -??: -- 好, 你们先回来吧, 注意隐蔽, 不要被格里芬追踪到了. -null: -- (铁血人形离开了) -null: -- 看到铁血人形离开之后, 我立马跑到直升机的残骸旁边, 想看看还有没有同伴在刚刚的冲击中生还. -- 不过经过了几十分钟的努力, 我发现我的努力变成了徒劳. 我只在飞机的残骸中发现了飞行员的遗体, 其他同伴却不见踪影. -null: -- "或许是她们刚刚在坠机的过程中被甩了出去." 我这样安慰着自己. -null: -- 但我知道, 如果不赶紧找到她们, 她们肯定很快会有危险的. 于是我赶紧动身顺便直升机坠机前飞行的反方向跑去去. - -[section]dialog_during_battle -sv98: -- asval, 你还好吧 -null: -- 帮助倒地了的asval站起来 -asval: -- 我没事...谢谢. 对了,PP-19-01和GSH-18呢,她们还好吗? -sv98: -- 不知道。走吧,我们赶紧去找她们。 - -[section]dialog_after_battle - -[bgi]ShootingRange.png -[bgm]Memorial.wav - -null: -- (子弹击中标靶的声音) - -[display]svd.png sv98.png - -svd: -- 嗨,sv98,这么晚了,还在练习呢 -null: -- (炽热的弹壳掉落在地上,发出响亮的声音) -svd: -- 我听说了,指挥官准备让你当第十小队的队长 -null: -- sv98并没有回应,而是又一次举起了手中的枪,瞄准了远处的目标 -svd: -- 哎,啥时候我也能想你一样,成为一个小队的队长啊 -null: -- (子弹从枪膛中射出,精准地击中了远处的标靶) -svd: -- 怎么了,sv98,又有什么烦心事了吗 -null: -- sv98长叹了一口气 -sv98: -- svd,你应该知道,第十小队可一直是后勤小队,根本不会直接参与战斗 -svd: -- 所以,你是觉得指挥官看不起你了? -null: -- sv98看似有很多话要说,却又说不出口 -svd: -- sv98,你也知道,即将到来的任务,关系到很多事情 -- 这可不是平时那样,面对的只是一些铁血的残兵败将 -svd: -- 不知道又会有谁不能回来 -sv98: -- 不会的,相信我,我一定会保证我的小队成员平安归来 -svd: -- 这的确像是一个队长该有的样子,指挥官看来没看错人 -- 只不过,我希望你答应我一件事 -sv98: -- 什么事 -svd: -- 你可要,平平安安地回来啊 - -[end] \ No newline at end of file diff --git a/Lang/English.yaml b/Lang/English.yaml index 4c03aec0..2b137be1 100644 --- a/Lang/English.yaml +++ b/Lang/English.yaml @@ -1,5 +1,6 @@ Battle_UI: bullets: bullets + currentRound: 'Current Round: {}' endRound: Round Ends enemyRound: Enemy Round getHealth: Gain Health diff --git a/Lang/SimplifiedChinese.yaml b/Lang/SimplifiedChinese.yaml index eee19a0a..bf83dbae 100644 --- a/Lang/SimplifiedChinese.yaml +++ b/Lang/SimplifiedChinese.yaml @@ -1,5 +1,6 @@ Battle_UI: bullets: 备弹 + currentRound: '当前回合: {}' endRound: 回合结束 enemyRound: 敌方回合 getHealth: 获得血量 diff --git a/Source/tbs.py b/Source/tbs.py index 4e609758..aab6fe37 100644 --- a/Source/tbs.py +++ b/Source/tbs.py @@ -52,14 +52,12 @@ def __init__(self) -> None: self.__thingsCanReact: list[linpg.DecorationObject] = [] # 需要救助的角色列表 self.friendsCanSave: list = [] - # 每次需要更新的物品 - self.__items_to_blit: list = [] - # 物品比重 - self.__max_item_weight: int = 0 # 胜利目标 self.__mission_objectives: dict = {} # 结束回合的图片 self.__end_round_button: linpg.StaticImage = linpg.StaticImage.new_place_holder() + # 当前回合的字体 + self.__current_round_txt: linpg.StaticImage = linpg.StaticImage.new_place_holder() # 关卡背景信息 self.__battle_info: tuple[linpg.ImageSurface, ...] = tuple() # 加载用于渲染电影效果的上下黑色帘幕 @@ -88,22 +86,46 @@ def __init__(self) -> None: """关键重写或实现""" - # 更新语言 - def update_language(self) -> None: - super().update_language() - self.selectMenuUI.update() + # 初始化ui + def __init_ui(self) -> None: + # 切换回合时的UI self.__RoundSwitchUI = RoundSwitch( linpg.display.get_width(), linpg.display.get_height() ) - self.end_round_txt = self._FONT.render( + # 加载结束回合的文字 + self.__end_round_txt = self._FONT.render( linpg.lang.get_text("Battle_UI", "endRound"), linpg.colors.WHITE ) + # 加载结束回合的按钮 self.__end_round_button = linpg.load.static_image( r"Assets/image/UI/end_round_button.png", (0, linpg.display.get_height() * 0.8), - (self.end_round_txt.get_width() * 2, self.end_round_txt.get_height() * 3), + (self.__end_round_txt.get_width() * 2, self.__end_round_txt.get_height() * 3), ) self.__end_round_button.set_right(linpg.display.get_width() * 0.95) + # 加载当前回合提示的文字 + self.__current_round_txt = linpg.StaticImage( + linpg.ArtisticFont.render_with_outline( + linpg.lang.get_text("Battle_UI", "currentRound").format( + self.__statistics.total_rounds + ), + linpg.colors.WHITE, + self._FONT.size, + ), + self.__end_round_button.left, + self.__end_round_button.bottom, + ) + self.__current_round_txt.set_width_with_original_image_size_locked( + self.__end_round_button.width + ) + self.__current_round_txt.set_right(self.__end_round_button.right) + + # 更新语言 + def update_language(self) -> None: + super().update_language() + self.selectMenuUI.update() + # 初始化ui + self.__init_ui() WarningMessageSystem.update_language() # 返回需要保存数据 @@ -249,7 +271,7 @@ def _display_entities(self, screen: linpg.ImageSurface) -> None: def _display_map(self, screen: linpg.ImageSurface) -> None: super()._display_map(screen) # 展示天气 - self._weather_system.draw(screen, self._MAP.tile_width) + self._weather_system.draw(screen, self._MAP.tile_size) # 展示所有角色Ui if self.__is_battle_mode is True or not self._is_any_dialog_playing(): # 角色UI @@ -364,25 +386,13 @@ def _process_data(self, _data: dict) -> None: super()._process_data(_data) # 重新计算光亮区域 self._update_darkness() - # 加载结束回合的图片 - self.end_round_txt = self._FONT.render( - linpg.lang.get_text("Battle_UI", "endRound"), linpg.colors.WHITE - ) - self.__end_round_button = linpg.load.static_image( - r"Assets/image/UI/end_round_button.png", - (0, linpg.display.get_height() * 0.8), - (self.end_round_txt.get_width() * 2, self.end_round_txt.get_height() * 3), - ) - self.__end_round_button.set_right(linpg.display.get_width() * 0.95) + # 初始化ui + self.__init_ui() # 加载子弹图片 # bullet_img = load.img("Assets/image/UI/bullet.png", get_tile_width()/6, self._MAP.tile_height/12) - RangeSystem.update_size(self._MAP.tile_width * 4 // 5) + RangeSystem.update_size(self._MAP.tile_size * 4 // 5) # 角色信息UI管理 self.__characterInfoBoard = CharacterInfoBoard() - # 切换回合时的UI - self.__RoundSwitchUI = RoundSwitch( - linpg.display.get_width(), linpg.display.get_height() - ) """-----加载音效-----""" # 更新所有音效的音量 self._update_sound_volume() @@ -394,28 +404,6 @@ def _process_data(self, _data: dict) -> None: self._footstep_sounds.add(walkingSoundPath) """画面""" - # 新增需要在屏幕上画出的物品 - def __add_on_screen_object( - self, - image: linpg.ImageSurface | linpg.GameObject2d, - weight: int = -1, - pos: tuple[int, int] = (0, 0), - offSet: tuple[int, int] = (0, 0), - ) -> None: - if weight < 0: - self.__max_item_weight += 1 - weight = self.__max_item_weight - elif weight > self.__max_item_weight: - self.__max_item_weight = weight - self.__items_to_blit.append(ItemNeedBlit(image, weight, pos, offSet)) - - # 更新屏幕 - def __update_scene(self, screen: linpg.ImageSurface) -> None: - self.__items_to_blit.sort() - for item in self.__items_to_blit: - item.draw(screen) - self.__items_to_blit.clear() - self.__max_item_weight = 0 # 更新音量 def _update_sound_volume(self) -> None: @@ -473,11 +461,10 @@ def draw(self, screen: linpg.ImageSurface) -> None: elif self.__zoomIntoBe > self.__zoomIn: self.__zoomIn += 10 self._MAP.set_tile_size( - self._standard_tile_width * self.__zoomIn / 100, - self._standard_tile_height * self.__zoomIn / 100, + self._standard_tile_size * self.__zoomIn / 100, ) # 根据block尺寸重新加载对应尺寸的UI - RangeSystem.update_size(self._MAP.tile_width * 4 // 5) + RangeSystem.update_size(self._MAP.tile_size * 4 // 5) self.selectMenuUI.update() # 画出地图 self._display_map(screen) @@ -1131,12 +1118,12 @@ def draw(self, screen: linpg.ImageSurface) -> None: # 显示选择菜单 self.selectMenuUI.draw( screen, - round(self._MAP.tile_width / 10), + round(self._MAP.tile_size / 10), { "xStart": the_coord[0], - "xEnd": the_coord[0] + self._MAP.tile_width, + "xEnd": the_coord[0] + self._MAP.tile_size, "yStart": the_coord[1], - "yEnd": the_coord[1] + self._MAP.tile_width * 0.5, + "yEnd": the_coord[1] + self._MAP.tile_size * 0.5, }, self.characterInControl.kind, self.friendsCanSave, @@ -1246,23 +1233,6 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.__whose_round = "result_fail" linpg.global_variables.remove("endBattleAs") - if self.__whose_round == "player": - # 加载结束回合的按钮 - self.__add_on_screen_object(self.__end_round_button) - self.__add_on_screen_object( - self.end_round_txt, - -1, - self.__end_round_button.pos, - ( - int(self.__end_round_button.get_width() * 0.35), - ( - self.__end_round_button.get_height() - - self.end_round_txt.get_height() - ) - // 2, - ), - ) - # 显示警告 WarningMessageSystem.draw(screen) @@ -1369,5 +1339,21 @@ def draw(self, screen: linpg.ImageSurface) -> None: if _CONSOLE is not None: _CONSOLE.draw(screen) - # 刷新画面 - self.__update_scene(screen) + # 结束回合的按钮 + if self.__whose_round == "player": + self.__end_round_button.draw(screen) + screen.blit( + self.__end_round_txt, + linpg.coordinates.add( + self.__end_round_button.pos, + ( + int(self.__end_round_button.get_width() * 0.35), + ( + self.__end_round_button.get_height() + - self.__end_round_txt.get_height() + ) + // 2, + ), + ), + ) + self.__current_round_txt.draw(screen) diff --git a/Source/ui.py b/Source/ui.py index 50e95175..f598b792 100644 --- a/Source/ui.py +++ b/Source/ui.py @@ -491,6 +491,11 @@ def draw(self, _surface: linpg.ImageSurface, _character: FriendlyCharacter) -> N _info_rect.y + int(_padding * 1.5), _info_rect.bottom - _padding - character_image.get_height(), ) + linpg.Draw.rect( + self.__board, + (255, 235, 200, 255), + (character_image_dest, character_image.get_size()), + ) self.__board.blit(character_image, character_image_dest) linpg.Draw.rect( self.__board, @@ -588,29 +593,6 @@ def draw(cls, screen: linpg.ImageSurface, alpha: int = 255) -> None: cls.title_description.draw(screen) -# 需要被打印的物品 -class ItemNeedBlit(linpg.GameObject2point5d): - def __init__( - self, - image: linpg.ImageSurface | linpg.GameObject2d, - weight: int, - pos: tuple[int, int], - offSet: tuple[int, int], - ): - super().__init__(pos[0], pos[1], weight) - self.image: linpg.ImageSurface | linpg.GameObject2d = image - self.offSet: tuple[int, int] = offSet - - def draw(self, surface: linpg.ImageSurface) -> None: - if isinstance(self.image, linpg.ImageSurface): - surface.blit(self.image, linpg.coordinates.add(self.pos, self.offSet)) - else: - try: - self.image.display(surface, self.offSet) - except Exception: - self.image.draw(surface) - - class RangeSystem: # 区域坐标 From 35d65d0846870914fde9d4e7640021afa9a55883 Mon Sep 17 00:00:00 2001 From: AnyLeftovers <37920527+yudonglin@users.noreply.github.com> Date: Fri, 30 Dec 2022 23:03:03 -0800 Subject: [PATCH 6/8] upload level 2 map and try and address some bugs --- Assets/image/covers/chapter1.png | 3 - .../chapter1_SimplifiedChinese.linpg.script | 2 +- Data/main_chapter/chapter1_map.yaml | 4 +- .../chapter2_SimplifiedChinese.linpg.script | 44 +- Data/main_chapter/chapter2_map.yaml | 2050 +++++++++++++++++ Data/main_chapter/info.yaml | 3 +- Source/menu.py | 6 +- Source/tbs.py | 84 +- Source/ui.py | 29 +- 9 files changed, 2158 insertions(+), 67 deletions(-) delete mode 100644 Assets/image/covers/chapter1.png create mode 100644 Data/main_chapter/chapter2_map.yaml diff --git a/Assets/image/covers/chapter1.png b/Assets/image/covers/chapter1.png deleted file mode 100644 index fbdfe3be..00000000 --- a/Assets/image/covers/chapter1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ccca1ebea0fdf33f79340602e3d4d394ed39106bf0fe0fd174e71f5810edcf52 -size 1696355 diff --git a/Data/main_chapter/chapter1_SimplifiedChinese.linpg.script b/Data/main_chapter/chapter1_SimplifiedChinese.linpg.script index a6e07bf0..6dd3139d 100644 --- a/Data/main_chapter/chapter1_SimplifiedChinese.linpg.script +++ b/Data/main_chapter/chapter1_SimplifiedChinese.linpg.script @@ -95,7 +95,7 @@ sv98: [section]dialog_after_battle [bgi]research.jpg -[bgm]Room_1.ogg +[bgm]Room_1.mp3 [display]kalina_5.png null: diff --git a/Data/main_chapter/chapter1_map.yaml b/Data/main_chapter/chapter1_map.yaml index 37180774..f8809f96 100644 --- a/Data/main_chapter/chapter1_map.yaml +++ b/Data/main_chapter/chapter1_map.yaml @@ -2,7 +2,7 @@ at_night: false background_image: snowfield.jpg background_music: Combat_02_RemnantFantasyPackage_Synari.ogg chapter_id: 1 -chapter_type: workshop +chapter_type: main_chapter decoration: - id: tree:1 x: 0 @@ -984,7 +984,7 @@ map: - water:39 mission_objectives: allow_any_one_die: false - round_limitation: 10 + round_limitation: -1 target: null type: annihilation project_name: main_chapter diff --git a/Data/main_chapter/chapter2_SimplifiedChinese.linpg.script b/Data/main_chapter/chapter2_SimplifiedChinese.linpg.script index 1a894c29..83f89b72 100644 --- a/Data/main_chapter/chapter2_SimplifiedChinese.linpg.script +++ b/Data/main_chapter/chapter2_SimplifiedChinese.linpg.script @@ -5,7 +5,8 @@ [section]dialog_before_battle null: -- 我梦见了山川和大海,梦见了高耸入云的城市和荒无人烟的沙漠...我梦见了缥缈无影的过去,和无法触碰的未来... +- 我梦见了山川和大海,梦见了高耸入云的城市和荒无人烟的沙漠... +- 我梦见了缥缈无影的过去,和无法触碰的未来... null: - 我梦见... ??: @@ -27,7 +28,8 @@ null: [show]gsh18.png gsh18: -- sv98!! 快起来啦!太阳,啊不,月亮要晒屁...呀不对...总之快起来啦! +- sv98!! 快起来啦! +- 太阳,啊不,月亮要晒屁...呀不对...总之快起来啦! sv98: - 嗯...asval,我睡了多久... @@ -38,11 +40,11 @@ asval: [show]pp1901.png -PP-19-01: +pp1901: - 准确的来讲是8小时12分钟43秒吧 asval: -- 拜托,PP-19-01,你用不着那么较真吧 -PP-19-01: +- 拜托,pp1901,你用不着那么较真吧 +pp1901: - 这不是较真,是严谨好吗! sv98: - asval,我不是说好了日落之前应该把我叫起来吗 @@ -63,28 +65,47 @@ gsh18: sv98: - 这样啊,那我们应该尽快和指挥官汇合才对 asval: -- 指挥官说接应我们撤退的直升机已经在路上了,预计会在2个小时内进入我们所在的区域 +- 指挥官说接应我们撤退的直升机已经在路上了 +- 预计会在2个小时内进入我们所在的区域 sv98: - 好吧,大家赶紧收拾一下,准备撤离了! [section]dialog_during_battle +[display]sv98.png gsh18.png asval.png pp1901.png + asval: - 糟了,铁血把前进的道路封锁起来了,这下就难办了 sv98: - 该死,我也没有什么弹药了 -PP-19-01: +pp1901: - sv98,铁血似乎在守着什么 + +[block] + sv98: - 看起来是物资箱,这里似乎是铁血的临时据点,主力应该不在这里 gsh18: - sv98,我认为我们应该在救援的直升机到来之前清空这个据点,好让直升机降落 sv98: - 你说的对. 各位,准备大干一场吧! + +[hide]* + null: - 目前sv98没有任何的子弹,无法攻击 - 潜入还是让队友吸引火力,请自行选择 +[block] + +[display]sv98.png + +sv98: +- 各位,我拿到补给了! +提示: +- 请注意换弹 + + [section]dialog_after_battle null: @@ -106,15 +127,16 @@ null: - (机舱内) gsh18: - 啊,总算逃过一劫,我还以为这会又死定了呢 -PP-19-01: +pp1901: - gsh18,人形是不会死的 - 如果你刚才被铁血抓住了,我们大不了过几天会有一个新的gsh18来报道吧. gsh18: - 诶...!!?? sv98: -- PP-19-01,我觉得这不是一件好玩的事情 -PP-19-01: -- 啊... 抱歉. 不过话说回来,我们上一次备份心智云图是什么时候? 好像自从任务开始之后我们就没有备份过心智了 +- pp1901,我觉得这不是一件好玩的事情 +pp1901: +- 啊... 抱歉. 不过话说回来,我们上一次备份心智云图是什么时候? +- 好像自从任务开始之后我们就没有备份过心智了 asval: - 的确,我们与指挥官的联络受铁血干扰,总是断断续续的,基本没有办法上传最新的备份 gsh18: diff --git a/Data/main_chapter/chapter2_map.yaml b/Data/main_chapter/chapter2_map.yaml new file mode 100644 index 00000000..55a180f7 --- /dev/null +++ b/Data/main_chapter/chapter2_map.yaml @@ -0,0 +1,2050 @@ +at_night: false +background_image: snowfield.jpg +background_music: BGM_Battle.wav +chapter_id: 2 +chapter_type: workshop +cover_image: WildBattle.png +decoration: +- id: stump + x: 0 + y: 0 +- id: stump + x: 0 + y: 1 +- id: stump + x: 1 + y: 0 +- id: stump + x: 2 + y: 0 +- id: stump + x: 0 + y: 2 +- id: stump + x: 1 + y: 1 +- id: stump + x: 2 + y: 1 +- id: stump + x: 0 + y: 3 +- id: stump + x: 1 + y: 2 +- id: stump + x: 2 + y: 2 +- id: stump + x: 0 + y: 4 +- id: stump + x: 1 + y: 3 +- id: stump + x: 2 + y: 3 +- id: stump + x: 1 + y: 4 +- id: tree:2 + x: 6 + y: 0 +- id: stump + x: 2 + y: 4 +- id: tree:1 + x: 6 + y: 1 +- id: tree:1 + x: 7 + y: 0 +- id: tree:1 + x: 6 + y: 2 +- id: tree:1 + x: 7 + y: 1 +- id: tree:1 + x: 8 + y: 0 +- id: tree:1 + x: 6 + y: 3 +- id: tree:1 + x: 7 + y: 2 +- id: tree:1 + x: 9 + y: 0 +- id: tree:2 + x: 8 + y: 1 +- id: tree:1 + x: 8 + y: 2 +- id: tree:1 + x: 6 + y: 4 +- id: tree:1 + x: 7 + y: 3 +- id: tree:1 + x: 10 + y: 0 +- id: tree:2 + x: 9 + y: 1 +- id: tree:1 + x: 8 + y: 3 +- id: tree:1 + x: 9 + y: 2 +- id: tree:1 + x: 6 + y: 5 +- id: tree:1 + x: 7 + y: 4 +- id: tree:1 + x: 11 + y: 0 +- id: tree:2 + x: 10 + y: 1 +- id: tree:1 + x: 8 + y: 4 +- id: tree:1 + x: 10 + y: 2 +- id: tree:1 + x: 9 + y: 3 +- id: tree:1 + x: 6 + y: 6 +- id: tree:1 + x: 7 + y: 5 +- id: tree:1 + x: 12 + y: 0 +- id: tree:1 + x: 11 + y: 1 +- id: tree:1 + x: 9 + y: 4 +- id: tree:1 + x: 10 + y: 3 +- id: tree:1 + x: 11 + y: 2 +- id: tree:1 + x: 12 + y: 1 +- id: tree:2 + x: 8 + y: 5 +- id: stump + x: 7 + y: 6 +- id: tree:1 + x: 9 + y: 5 +- id: tree:1 + x: 8 + y: 6 +- id: tree:1 + x: 12 + y: 2 +- id: tree:1 + x: 11 + y: 3 +- id: tree:2 + x: 10 + y: 4 +- id: tree:1 + x: 9 + y: 6 +- id: tree:1 + x: 10 + y: 5 +- id: tree:1 + x: 11 + y: 4 +- id: stump + x: 12 + y: 3 +- id: stump + x: 2 + y: 13 +- id: tree:1 + x: 10 + y: 6 +- id: tree:1 + x: 11 + y: 5 +- id: tree:1 + x: 12 + y: 4 +- id: log:2 + x: 2 + y: 14 +- id: tree:1 + x: 11 + y: 6 +- id: tree:1 + x: 12 + y: 5 +- id: log + x: 2 + y: 15 +- id: tree:1 + x: 12 + y: 6 +- id: tree:1 + x: 6 + y: 12 +- id: log + x: 1 + y: 17 +- id: tree:1 + x: 7 + y: 12 +- id: tree:1 + x: 6 + y: 13 +- id: tree:1 + x: 8 + y: 12 +- id: tree:1 + x: 6 + y: 14 +- id: tree:2 + x: 7 + y: 13 +- id: tree:1 + x: 8 + y: 13 +- id: tree:1 + x: 9 + y: 12 +- id: tree:1 + x: 6 + y: 15 +- id: tree:1 + x: 7 + y: 14 +- id: rock + x: 1 + y: 20 +- id: tree:1 + x: 8 + y: 14 +- id: tree:1 + x: 9 + y: 13 +- id: tree:1 + x: 6 + y: 16 +- id: tree:2 + x: 10 + y: 12 +- id: stump + x: 7 + y: 15 +- id: tree:1 + x: 22 + y: 0 +- id: tree:1 + x: 8 + y: 15 +- id: tree:1 + x: 11 + y: 12 +- id: tree:1 + x: 9 + y: 14 +- id: tree:1 + x: 7 + y: 16 +- id: tree:1 + x: 6 + y: 17 +- id: campfire:1 + x: 1 + y: 22 +- id: tree:1 + x: 23 + y: 0 +- id: tree:2 + x: 22 + y: 1 +- id: tree:1 + x: 10 + y: 13 +- id: tree:1 + x: 9 + y: 15 +- id: tree:1 + x: 8 + y: 16 +- id: tree:1 + x: 12 + y: 12 +- id: tree:1 + x: 11 + y: 13 +- id: tree:1 + x: 10 + y: 14 +- id: tree:2 + x: 7 + y: 17 +- id: stump:1 + x: 6 + y: 18 +- id: stone:2 + x: 2 + y: 22 +- id: skull:2 + x: 3 + y: 21 +- id: tree:2 + x: 24 + y: 0 +- id: tree:2 + x: 23 + y: 1 +- id: stump + x: 22 + y: 2 +- id: tree:1 + x: 9 + y: 16 +- id: tree:1 + x: 8 + y: 17 +- id: tree:1 + x: 12 + y: 13 +- id: tree:1 + x: 11 + y: 14 +- id: tree:1 + x: 10 + y: 15 +- id: tree:1 + x: 6 + y: 19 +- id: stump + x: 7 + y: 18 +- id: tree:1 + x: 22 + y: 3 +- id: tree:1 + x: 24 + y: 1 +- id: stump + x: 25 + y: 0 +- id: stump + x: 23 + y: 2 +- id: tree:1 + x: 11 + y: 15 +- id: tree:1 + x: 9 + y: 17 +- id: tree:1 + x: 8 + y: 18 +- id: tree:1 + x: 12 + y: 14 +- id: tree:1 + x: 7 + y: 19 +- id: tree:1 + x: 6 + y: 20 +- id: tree:2 + x: 10 + y: 16 +- id: skull:1 + x: 2 + y: 24 +- id: tree:1 + x: 22 + y: 4 +- id: tree:1 + x: 23 + y: 3 +- id: tree:1 + x: 24 + y: 2 +- id: tree:1 + x: 26 + y: 0 +- id: tree:1 + x: 25 + y: 1 +- id: tree:1 + x: 11 + y: 16 +- id: stump + x: 12 + y: 15 +- id: tree:1 + x: 10 + y: 17 +- id: tree:1 + x: 8 + y: 19 +- id: tree:1 + x: 7 + y: 20 +- id: tree:2 + x: 9 + y: 18 +- id: skull:1 + x: 2 + y: 25 +- id: tree:1 + x: 23 + y: 4 +- id: tree:1 + x: 24 + y: 3 +- id: tree:1 + x: 25 + y: 2 +- id: tree:1 + x: 22 + y: 5 +- id: tree:1 + x: 27 + y: 0 +- id: tree:1 + x: 26 + y: 1 +- id: tree:1 + x: 12 + y: 16 +- id: tree:1 + x: 11 + y: 17 +- id: tree:1 + x: 8 + y: 20 +- id: tree:1 + x: 10 + y: 18 +- id: tree:1 + x: 9 + y: 19 +- id: skull + x: 2 + y: 26 +- id: tree:1 + x: 26 + y: 2 +- id: tree:1 + x: 24 + y: 4 +- id: tree:1 + x: 23 + y: 5 +- id: tree:1 + x: 27 + y: 1 +- id: tree:2 + x: 25 + y: 3 +- id: tree:1 + x: 12 + y: 17 +- id: tree:1 + x: 9 + y: 20 +- id: tree:1 + x: 11 + y: 18 +- id: tree:1 + x: 10 + y: 19 +- id: rock:1 + x: 1 + y: 28 +- id: tree:1 + x: 26 + y: 3 +- id: tree:1 + x: 27 + y: 2 +- id: tree:2 + x: 25 + y: 4 +- id: stump + x: 24 + y: 5 +- id: tree:1 + x: 12 + y: 18 +- id: tree:1 + x: 10 + y: 20 +- id: tree:1 + x: 11 + y: 19 +- id: tree:1 + x: 25 + y: 5 +- id: tree:1 + x: 26 + y: 4 +- id: tree:1 + x: 27 + y: 3 +- id: stump + x: 29 + y: 1 +- id: campfire:1 + x: 22 + y: 8 +- id: tree:1 + x: 12 + y: 19 +- id: tree:1 + x: 11 + y: 20 +- id: tree:1 + x: 26 + y: 5 +- id: tree:1 + x: 27 + y: 4 +- id: skull:1 + x: 30 + y: 1 +- id: tree:1 + x: 12 + y: 20 +- id: tree:1 + x: 6 + y: 26 +- id: rock:1 + x: 3 + y: 29 +- id: tree:1 + x: 27 + y: 5 +- id: skull:2 + x: 30 + y: 2 +- id: tree:1 + x: 7 + y: 26 +- id: tree:1 + x: 6 + y: 27 +- id: tree:1 + x: 8 + y: 26 +- id: tree:1 + x: 6 + y: 28 +- id: tree:2 + x: 7 + y: 27 +- id: tree:1 + x: 9 + y: 26 +- id: tree:1 + x: 7 + y: 28 +- id: tree:1 + x: 6 + y: 29 +- id: tree:1 + x: 8 + y: 27 +- id: tree:1 + x: 22 + y: 13 +- id: tree:1 + x: 10 + y: 26 +- id: tree:1 + x: 6 + y: 30 +- id: tree:1 + x: 8 + y: 28 +- id: tree:1 + x: 7 + y: 29 +- id: tree:2 + x: 9 + y: 27 +- id: tree:1 + x: 23 + y: 13 +- id: tree:1 + x: 22 + y: 14 +- id: tree:1 + x: 10 + y: 27 +- id: tree:1 + x: 9 + y: 28 +- id: tree:1 + x: 7 + y: 30 +- id: tree:2 + x: 8 + y: 29 +- id: stump:1 + x: 11 + y: 26 +- id: tree:1 + x: 24 + y: 13 +- id: tree:1 + x: 22 + y: 15 +- id: tree:2 + x: 23 + y: 14 +- id: tree:1 + x: 11 + y: 27 +- id: tree:1 + x: 10 + y: 28 +- id: tree:1 + x: 8 + y: 30 +- id: tree:1 + x: 9 + y: 29 +- id: stump:1 + x: 12 + y: 26 +- id: tree:1 + x: 25 + y: 13 +- id: tree:1 + x: 24 + y: 14 +- id: tree:1 + x: 23 + y: 15 +- id: tree:1 + x: 11 + y: 28 +- id: tree:1 + x: 10 + y: 29 +- id: tree:1 + x: 9 + y: 30 +- id: stump:1 + x: 12 + y: 27 +- id: tree:1 + x: 26 + y: 13 +- id: tree:1 + x: 25 + y: 14 +- id: tree:1 + x: 24 + y: 15 +- id: tree:1 + x: 12 + y: 28 +- id: tree:1 + x: 11 + y: 29 +- id: tree:2 + x: 10 + y: 30 +- id: fence:1 + x: 23 + y: 17 +- id: tree:1 + x: 27 + y: 13 +- id: tree:1 + x: 25 + y: 15 +- id: tree:2 + x: 26 + y: 14 +- id: tree:1 + x: 12 + y: 29 +- id: tree:1 + x: 11 + y: 30 +- id: fence:19 + x: 23 + y: 18 +- id: fence:18 + x: 24 + y: 17 +- id: tree:1 + x: 27 + y: 14 +- id: tree:1 + x: 26 + y: 15 +- id: tree:1 + x: 12 + y: 30 +- id: chest + x: 24 + y: 18 +- id: fence:19 + x: 23 + y: 19 +- id: fence:18 + x: 25 + y: 17 +- id: stump + x: 27 + y: 15 +- id: chest + x: 24 + y: 19 +- id: chest + x: 25 + y: 18 +- id: fence:3 + x: 26 + y: 17 +- id: fence:19 + x: 23 + y: 20 +- id: chest + x: 25 + y: 19 +- id: chest + x: 24 + y: 20 +- id: fence + x: 23 + y: 21 +- id: fence:19 + x: 26 + y: 18 +- id: chest + status: + items: + bullet: 100 + whitelist: + - sv98 + x: 19 + y: 25 +- id: chest + x: 25 + y: 20 +- id: fence:18 + x: 24 + y: 21 +- id: fence:19 + x: 26 + y: 19 +- id: campfire:1 + x: 19 + y: 26 +- id: tree:1 + x: 29 + y: 17 +- id: fence:18 + x: 25 + y: 21 +- id: fence:19 + x: 26 + y: 20 +- id: tree:1 + x: 29 + y: 18 +- id: tree:1 + x: 30 + y: 17 +- id: fence:2 + x: 26 + y: 21 +- id: campfire:1 + x: 24 + y: 23 +- id: rock + x: 32 + y: 15 +- id: tree:1 + x: 29 + y: 19 +- id: tree:1 + x: 30 + y: 18 +- id: stump + x: 31 + y: 17 +- id: tree:1 + x: 29 + y: 20 +- id: tree:1 + x: 30 + y: 19 +- id: stump + x: 32 + y: 17 +- id: tree:2 + x: 31 + y: 18 +- id: stump + x: 22 + y: 27 +- id: tree:1 + x: 31 + y: 19 +- id: tree:1 + x: 29 + y: 21 +- id: tree:1 + x: 30 + y: 20 +- id: stump + x: 32 + y: 18 +- id: tree:1 + x: 23 + y: 27 +- id: tree:1 + x: 22 + y: 28 +- id: tree:1 + x: 30 + y: 21 +- id: tree:1 + x: 32 + y: 19 +- id: tree:1 + x: 31 + y: 20 +- id: tree:1 + x: 24 + y: 27 +- id: tree:1 + x: 23 + y: 28 +- id: tree:1 + x: 22 + y: 29 +- id: tree:1 + x: 31 + y: 21 +- id: tree:1 + x: 32 + y: 20 +- id: tree:1 + x: 25 + y: 27 +- id: tree:1 + x: 24 + y: 28 +- id: tree:1 + x: 22 + y: 30 +- id: tree:2 + x: 23 + y: 29 +- id: tree:1 + x: 32 + y: 21 +- id: tree:1 + x: 26 + y: 27 +- id: tree:1 + x: 23 + y: 30 +- id: tree:1 + x: 24 + y: 29 +- id: tree:2 + x: 25 + y: 28 +- id: tree:1 + x: 27 + y: 27 +- id: tree:1 + x: 24 + y: 30 +- id: tree:1 + x: 25 + y: 29 +- id: tree:1 + x: 26 + y: 28 +- id: tree:1 + x: 25 + y: 30 +- id: tree:1 + x: 27 + y: 28 +- id: tree:1 + x: 26 + y: 29 +- id: tree:1 + x: 26 + y: 30 +- id: stump + x: 27 + y: 29 +- id: tree:1 + x: 27 + y: 30 +dialogs: + data: + initial_dialog: + - move: + gsh18: + x: 8 + y: 4 + pp1901: + x: 8 + y: 3 + - dialog: head + - changePos: + x: 19 + y: 25 + - idle: 1 + - changePos: + x: 0 + y: 0 + - dialog: id_03 + dictionary: + initial: head + move: + 19-25: + dialog_key: tutorial1 + repeat: false + whitelist: + - sv98 +entities: + GriffinKryuger: + asval_0: + bullets_carried: 100 + type: asval + x: 12 + y: 18 + pp1901_0: + bullets_carried: 100 + type: pp1901 + x: 9 + y: 13 + pp1901_1: + bullets_carried: 100 + type: pp1901 + x: 9 + y: 18 + sv98_0: + bullets_carried: 100 + type: sv98 + x: 12 + y: 4 + SangvisFerri: + dinergate_0: + kind: None + type: dinergate + x: 28 + y: 23 + dinergate_1: + kind: None + type: dinergate + x: 24 + y: 24 + guard: + type: guard + x: 19 + y: 19 + jaeger_0: + type: jaeger + x: 22 + y: 17 + jaguar_0: + kind: None + type: jaguar + x: 21 + y: 20 + prowler_0: + type: prowler + x: 22 + y: 10 + ripper_0: + type: ripper + x: 23 + y: 9 + scouts_0: + kind: None + type: scouts + x: 22 + y: 7 +map: + array2d: + - - 2 + - 5 + - 0 + - 3 + - 2 + - 1 + - 1 + - 0 + - 5 + - 2 + - 1 + - 0 + - 2 + - 2 + - 5 + - 7 + - 10 + - 8 + - 4 + - 3 + - 2 + - 3 + - 4 + - 3 + - 3 + - 0 + - 5 + - 3 + - 3 + - 1 + - 1 + - 4 + - 0 + - - 4 + - 4 + - 1 + - 5 + - 0 + - 1 + - 1 + - 1 + - 3 + - 3 + - 3 + - 1 + - 0 + - 0 + - 5 + - 7 + - 13 + - 8 + - 4 + - 2 + - 0 + - 0 + - 0 + - 4 + - 2 + - 1 + - 3 + - 5 + - 2 + - 4 + - 2 + - 1 + - 0 + - - 4 + - 0 + - 1 + - 1 + - 5 + - 1 + - 2 + - 1 + - 0 + - 5 + - 3 + - 5 + - 0 + - 2 + - 3 + - 7 + - 11 + - 10 + - 0 + - 0 + - 0 + - 4 + - 4 + - 1 + - 1 + - 4 + - 2 + - 4 + - 5 + - 4 + - 4 + - 2 + - 5 + - - 4 + - 3 + - 5 + - 3 + - 4 + - 1 + - 3 + - 5 + - 1 + - 2 + - 3 + - 1 + - 0 + - 2 + - 5 + - 7 + - 10 + - 10 + - 5 + - 2 + - 3 + - 4 + - 1 + - 2 + - 0 + - 1 + - 5 + - 3 + - 4 + - 4 + - 0 + - 2 + - 1 + - - 0 + - 0 + - 3 + - 1 + - 3 + - 1 + - 5 + - 5 + - 2 + - 5 + - 5 + - 2 + - 0 + - 4 + - 4 + - 7 + - 10 + - 8 + - 4 + - 2 + - 0 + - 3 + - 0 + - 1 + - 2 + - 3 + - 1 + - 5 + - 0 + - 3 + - 3 + - 0 + - 4 + - - 1 + - 4 + - 4 + - 5 + - 2 + - 5 + - 2 + - 5 + - 1 + - 2 + - 5 + - 2 + - 3 + - 4 + - 1 + - 7 + - 13 + - 8 + - 4 + - 3 + - 1 + - 4 + - 2 + - 2 + - 0 + - 2 + - 3 + - 2 + - 0 + - 0 + - 4 + - 1 + - 2 + - - 5 + - 4 + - 1 + - 1 + - 0 + - 3 + - 5 + - 0 + - 4 + - 4 + - 5 + - 3 + - 2 + - 2 + - 0 + - 7 + - 13 + - 8 + - 2 + - 2 + - 3 + - 2 + - 0 + - 0 + - 5 + - 5 + - 3 + - 6 + - 6 + - 6 + - 2 + - 4 + - 3 + - - 1 + - 0 + - 1 + - 5 + - 5 + - 2 + - 0 + - 5 + - 5 + - 3 + - 2 + - 3 + - 5 + - 1 + - 1 + - 7 + - 13 + - 8 + - 4 + - 5 + - 2 + - 1 + - 3 + - 5 + - 4 + - 2 + - 6 + - 6 + - 6 + - 6 + - 6 + - 3 + - 4 + - - 0 + - 0 + - 4 + - 2 + - 5 + - 1 + - 5 + - 0 + - 1 + - 4 + - 2 + - 3 + - 5 + - 1 + - 0 + - 9 + - 9 + - 9 + - 4 + - 2 + - 1 + - 5 + - 2 + - 0 + - 0 + - 6 + - 6 + - 12 + - 12 + - 12 + - 6 + - 6 + - 3 + - - 2 + - 0 + - 2 + - 2 + - 3 + - 3 + - 2 + - 2 + - 2 + - 0 + - 2 + - 3 + - 2 + - 5 + - 1 + - 9 + - 9 + - 9 + - 2 + - 4 + - 0 + - 5 + - 2 + - 5 + - 2 + - 6 + - 6 + - 6 + - 12 + - 6 + - 6 + - 6 + - 4 + - - 5 + - 0 + - 2 + - 4 + - 4 + - 1 + - 4 + - 3 + - 4 + - 4 + - 0 + - 0 + - 3 + - 0 + - 0 + - 9 + - 9 + - 9 + - 2 + - 0 + - 3 + - 0 + - 4 + - 0 + - 2 + - 6 + - 6 + - 12 + - 12 + - 12 + - 6 + - 6 + - 2 + - - 5 + - 1 + - 5 + - 4 + - 3 + - 0 + - 5 + - 4 + - 4 + - 3 + - 1 + - 0 + - 5 + - 0 + - 1 + - 7 + - 14 + - 8 + - 4 + - 4 + - 5 + - 1 + - 1 + - 4 + - 5 + - 5 + - 6 + - 6 + - 6 + - 6 + - 6 + - 3 + - 0 + - - 1 + - 5 + - 0 + - 1 + - 5 + - 0 + - 5 + - 1 + - 5 + - 2 + - 4 + - 4 + - 5 + - 3 + - 2 + - 7 + - 14 + - 8 + - 5 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 4 + - 3 + - 6 + - 6 + - 6 + - 2 + - 0 + - 3 + - - 1 + - 2 + - 1 + - 0 + - 1 + - 4 + - 1 + - 3 + - 4 + - 0 + - 1 + - 4 + - 5 + - 0 + - 3 + - 7 + - 10 + - 10 + - 1 + - 5 + - 5 + - 3 + - 4 + - 2 + - 0 + - 3 + - 4 + - 0 + - 0 + - 3 + - 0 + - 2 + - 3 + - - 1 + - 4 + - 5 + - 4 + - 3 + - 3 + - 2 + - 4 + - 5 + - 1 + - 2 + - 3 + - 1 + - 3 + - 3 + - 10 + - 10 + - 8 + - 3 + - 5 + - 0 + - 2 + - 3 + - 5 + - 5 + - 2 + - 0 + - 3 + - 1 + - 3 + - 2 + - 4 + - 4 + - - 3 + - 1 + - 4 + - 4 + - 1 + - 2 + - 0 + - 5 + - 0 + - 0 + - 0 + - 1 + - 3 + - 1 + - 4 + - 7 + - 10 + - 8 + - 4 + - 2 + - 1 + - 5 + - 1 + - 0 + - 0 + - 1 + - 4 + - 4 + - 1 + - 0 + - 0 + - 5 + - 0 + - - 4 + - 3 + - 5 + - 0 + - 5 + - 3 + - 2 + - 3 + - 3 + - 2 + - 1 + - 4 + - 3 + - 3 + - 4 + - 7 + - 14 + - 8 + - 5 + - 1 + - 0 + - 2 + - 3 + - 5 + - 2 + - 1 + - 4 + - 0 + - 4 + - 2 + - 2 + - 1 + - 0 + - - 3 + - 0 + - 1 + - 5 + - 2 + - 4 + - 4 + - 2 + - 0 + - 2 + - 1 + - 2 + - 0 + - 4 + - 1 + - 7 + - 11 + - 8 + - 2 + - 5 + - 4 + - 1 + - 1 + - 2 + - 3 + - 0 + - 3 + - 2 + - 2 + - 4 + - 5 + - 1 + - 3 + - - 1 + - 5 + - 3 + - 4 + - 1 + - 4 + - 3 + - 1 + - 3 + - 5 + - 4 + - 4 + - 5 + - 0 + - 0 + - 7 + - 10 + - 8 + - 5 + - 3 + - 0 + - 2 + - 1 + - 5 + - 0 + - 2 + - 2 + - 1 + - 1 + - 3 + - 1 + - 0 + - 1 + - - 0 + - 4 + - 5 + - 1 + - 2 + - 0 + - 3 + - 0 + - 3 + - 4 + - 1 + - 2 + - 0 + - 2 + - 2 + - 7 + - 11 + - 8 + - 1 + - 2 + - 1 + - 3 + - 0 + - 2 + - 5 + - 4 + - 4 + - 2 + - 4 + - 4 + - 0 + - 2 + - 2 + - - 4 + - 1 + - 4 + - 4 + - 1 + - 4 + - 3 + - 2 + - 3 + - 1 + - 3 + - 3 + - 2 + - 2 + - 3 + - 7 + - 11 + - 8 + - 1 + - 4 + - 2 + - 1 + - 2 + - 4 + - 3 + - 4 + - 2 + - 2 + - 0 + - 3 + - 0 + - 0 + - 1 + - - 1 + - 0 + - 0 + - 3 + - 3 + - 3 + - 2 + - 3 + - 2 + - 0 + - 2 + - 1 + - 3 + - 5 + - 0 + - 7 + - 11 + - 8 + - 0 + - 1 + - 1 + - 1 + - 0 + - 5 + - 3 + - 5 + - 3 + - 4 + - 0 + - 3 + - 0 + - 0 + - 1 + - - 1 + - 4 + - 1 + - 3 + - 1 + - 1 + - 1 + - 0 + - 0 + - 2 + - 1 + - 1 + - 1 + - 3 + - 2 + - 9 + - 9 + - 9 + - 5 + - 5 + - 3 + - 3 + - 5 + - 4 + - 2 + - 4 + - 5 + - 0 + - 3 + - 0 + - 5 + - 5 + - 3 + - - 3 + - 5 + - 5 + - 5 + - 3 + - 3 + - 3 + - 1 + - 3 + - 4 + - 1 + - 1 + - 0 + - 2 + - 5 + - 9 + - 9 + - 9 + - 1 + - 5 + - 2 + - 5 + - 5 + - 1 + - 5 + - 0 + - 3 + - 0 + - 4 + - 2 + - 5 + - 1 + - 3 + - - 2 + - 0 + - 0 + - 3 + - 2 + - 5 + - 5 + - 1 + - 5 + - 2 + - 4 + - 4 + - 1 + - 2 + - 5 + - 9 + - 9 + - 9 + - 5 + - 3 + - 4 + - 3 + - 3 + - 3 + - 2 + - 2 + - 3 + - 1 + - 3 + - 0 + - 3 + - 3 + - 4 + - - 0 + - 4 + - 1 + - 3 + - 5 + - 3 + - 4 + - 5 + - 0 + - 3 + - 0 + - 4 + - 0 + - 3 + - 4 + - 7 + - 11 + - 10 + - 3 + - 4 + - 5 + - 4 + - 3 + - 2 + - 2 + - 2 + - 5 + - 4 + - 0 + - 1 + - 2 + - 0 + - 4 + - - 0 + - 4 + - 0 + - 5 + - 1 + - 5 + - 5 + - 4 + - 5 + - 2 + - 3 + - 1 + - 0 + - 4 + - 0 + - 7 + - 11 + - 8 + - 5 + - 2 + - 3 + - 2 + - 0 + - 3 + - 0 + - 2 + - 2 + - 1 + - 4 + - 5 + - 0 + - 1 + - 4 + - - 0 + - 4 + - 1 + - 4 + - 3 + - 2 + - 1 + - 2 + - 2 + - 2 + - 1 + - 0 + - 1 + - 1 + - 5 + - 10 + - 11 + - 8 + - 0 + - 3 + - 4 + - 4 + - 4 + - 4 + - 1 + - 5 + - 1 + - 3 + - 2 + - 0 + - 2 + - 2 + - 4 + - - 4 + - 4 + - 3 + - 4 + - 3 + - 5 + - 3 + - 5 + - 1 + - 2 + - 0 + - 0 + - 1 + - 4 + - 0 + - 7 + - 11 + - 8 + - 1 + - 2 + - 2 + - 4 + - 3 + - 5 + - 4 + - 5 + - 2 + - 1 + - 1 + - 3 + - 5 + - 2 + - 4 + - - 0 + - 5 + - 5 + - 1 + - 1 + - 5 + - 1 + - 1 + - 3 + - 5 + - 0 + - 4 + - 0 + - 1 + - 0 + - 7 + - 11 + - 8 + - 2 + - 4 + - 2 + - 0 + - 0 + - 2 + - 3 + - 1 + - 0 + - 3 + - 2 + - 5 + - 3 + - 1 + - 5 + - - 2 + - 2 + - 0 + - 4 + - 4 + - 2 + - 3 + - 4 + - 3 + - 5 + - 0 + - 2 + - 3 + - 4 + - 1 + - 7 + - 11 + - 8 + - 1 + - 3 + - 1 + - 5 + - 0 + - 4 + - 3 + - 4 + - 1 + - 2 + - 5 + - 1 + - 4 + - 5 + - 4 + lit_area: [] + lookup_table: + - snow:7 + - snow:2 + - snow:4 + - snow:3 + - snow:5 + - snow:6 + - mud:2 + - water:26 + - water:27 + - wood:3 + - ice + - water:0 + - brick:10 + - water:6 + - water:2 +mission_objectives: + allow_any_one_die: false + round_limitation: -1 + target: null + type: annihilation +project_name: main_chapter +weather: snow diff --git a/Data/main_chapter/info.yaml b/Data/main_chapter/info.yaml index c130d051..74d42f03 100644 --- a/Data/main_chapter/info.yaml +++ b/Data/main_chapter/info.yaml @@ -1,6 +1,7 @@ author: TigeiaWorkshop cover_image: -- Assets/image/covers/chapter1.png +- Assets/image/dialog_background/research.jpg +- Assets/image/dialog_background/WildBattle.png default_lang: SimplifiedChinese link: https://github.com/TigeiaWorkshop/GirlsFrontLine-LastWish title: diff --git a/Source/menu.py b/Source/menu.py index 4aef3a49..c972eaa8 100644 --- a/Source/menu.py +++ b/Source/menu.py @@ -480,7 +480,7 @@ def __draw_background(self, screen: linpg.ImageSurface) -> None: if cover_path is not None: if self.__cover_img_surface is None: self.__cover_img_surface = linpg.load.static_image( - cover_path, (0, 0), screen.get_size(), cover_path + cover_path, (0, 0), tag=cover_path ) self.__cover_img_surface.set_alpha(10) elif cover_path != self.__cover_img_surface.tag: @@ -498,6 +498,10 @@ def __draw_background(self, screen: linpg.ImageSurface) -> None: GameMode.VIDEO_BACKGROUND.draw(screen) # 封面 if self.__cover_img_surface is not None: + self.__cover_img_surface.set_width_with_original_image_size_locked( + screen.get_width() + ) + self.__cover_img_surface.set_centery(screen.get_height() // 2) self.__cover_img_surface.draw(screen) # 画出主菜单 diff --git a/Source/tbs.py b/Source/tbs.py index aab6fe37..b7fd3ced 100644 --- a/Source/tbs.py +++ b/Source/tbs.py @@ -23,7 +23,7 @@ def __init__(self) -> None: # 是否是死亡的那个 self.the_dead_one: dict = {} # 谁的回合 - self.__whose_round: str = "sangvisFerrisToPlayer" + self.__whose_round: WhoseRound = WhoseRound.sangvisFerrisToPlayer # 技能对象 self.__skill_target: tuple[str, ...] = tuple() # 被救助的那个角色 @@ -86,6 +86,24 @@ def __init__(self) -> None: """关键重写或实现""" + # 更新当前回合提示文字 + def __update_current_round_text(self) -> None: + self.__current_round_txt = linpg.StaticImage( + linpg.ArtisticFont.render_with_outline( + linpg.lang.get_text("Battle_UI", "currentRound").format( + self.__statistics.total_rounds + ), + linpg.colors.WHITE, + self._FONT.size, + ), + self.__end_round_button.left, + self.__end_round_button.bottom, + ) + self.__current_round_txt.set_width_with_original_image_size_locked( + self.__end_round_button.width + ) + self.__current_round_txt.set_right(self.__end_round_button.right) + # 初始化ui def __init_ui(self) -> None: # 切换回合时的UI @@ -104,21 +122,7 @@ def __init_ui(self) -> None: ) self.__end_round_button.set_right(linpg.display.get_width() * 0.95) # 加载当前回合提示的文字 - self.__current_round_txt = linpg.StaticImage( - linpg.ArtisticFont.render_with_outline( - linpg.lang.get_text("Battle_UI", "currentRound").format( - self.__statistics.total_rounds - ), - linpg.colors.WHITE, - self._FONT.size, - ), - self.__end_round_button.left, - self.__end_round_button.bottom, - ) - self.__current_round_txt.set_width_with_original_image_size_locked( - self.__end_round_button.width - ) - self.__current_round_txt.set_right(self.__end_round_button.right) + self.__update_current_round_text() # 更新语言 def update_language(self) -> None: @@ -501,11 +505,11 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.action_choice = None RangeSystem.clear() # 玩家回合 - if self.__whose_round == "player": + if self.__whose_round is WhoseRound.player: if linpg.controller.get_event("confirm"): # 如果点击了回合结束的按钮 if self.__end_round_button.is_hovered() and self.__is_waiting is True: - self.__whose_round = "playerToSangvisFerris" + self.__whose_round = WhoseRound.playerToSangvisFerris self.characterGetClick = None RangeSystem.set_visible(True) RangeSystem.clear() @@ -612,12 +616,12 @@ def draw(self, screen: linpg.ImageSurface) -> None: for key in self.__skill_target: if key in self.alliances: self.characterInControl.set_flip_based_on_pos( - self.alliances[key] + self.alliances[key].get_pos() ) elif key in self.enemies: self.characterInControl.notice() self.characterInControl.set_flip_based_on_pos( - self.enemies[key] + self.enemies[key].get_pos() ) self.characterInControl.try_reduce_action_point(8) self.characterInControl.play_sound("skill") @@ -1041,7 +1045,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.action_choice = None # 敌方回合 - if self.__whose_round == "sangvisFerris": + if self.__whose_round is WhoseRound.sangvisFerris: # 如果当前角色还没做出决定 if self.enemy_instructions is None: # 生成决定 @@ -1064,7 +1068,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: ) elif self.current_instruction.action == "attack": self.enemyInControl.set_flip_based_on_pos( - self.alliances[self.current_instruction.target] + self.alliances[self.current_instruction.target].get_pos() ) self.enemyInControl.set_action("attack") # 根据选择调整动画 @@ -1109,7 +1113,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.enemy_instructions = None self.current_instruction = None if self.enemies_in_control_id >= len(self.sangvisFerris_name_list): - self.__whose_round = "sangvisFerrisToPlayer" + self.__whose_round = WhoseRound.sangvisFerrisToPlayer if self.characterGetClick is not None: the_coord: tuple[int, int] = self._MAP.calculate_position( @@ -1140,13 +1144,13 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.__down_black_curtain.draw(screen) # 检测回合是否结束 if ( - self.__whose_round == "playerToSangvisFerris" - or self.__whose_round == "sangvisFerrisToPlayer" + self.__whose_round is WhoseRound.playerToSangvisFerris + or self.__whose_round is WhoseRound.sangvisFerrisToPlayer ): if self.__RoundSwitchUI is not None and self.__RoundSwitchUI.draw( screen, self.__whose_round, self.__statistics.total_rounds ): - if self.__whose_round == "playerToSangvisFerris": + if self.__whose_round is WhoseRound.playerToSangvisFerris: self.enemies_in_control_id = 0 self.sangvisFerris_name_list.clear() any_is_alert = False @@ -1164,8 +1168,8 @@ def draw(self, screen: linpg.ImageSurface) -> None: if self.alliances[key].is_dying(): self.alliances[key].get_closer_to_death() # 现在是铁血的回合! - self.__whose_round = "sangvisFerris" - elif self.__whose_round == "sangvisFerrisToPlayer": + self.__whose_round = WhoseRound.sangvisFerris + elif self.__whose_round is WhoseRound.sangvisFerrisToPlayer: for key in self.alliances: self.alliances[key].reset_action_point() if not self.alliances[key].is_detected: @@ -1182,8 +1186,10 @@ def draw(self, screen: linpg.ImageSurface) -> None: # 更新可视区域 self._update_darkness() # 到你了,Good luck, you need it! - self.__whose_round = "player" + self.__whose_round = WhoseRound.player self.__statistics.total_rounds += 1 + # 更新当前回合文字 + self.__update_current_round_text() # 检测玩家是否胜利或失败 """检测失败条件""" # 如果有回合限制 @@ -1192,12 +1198,12 @@ def draw(self, screen: linpg.ImageSurface) -> None: _round_limitation > 0 and self.__statistics.total_rounds > _round_limitation ): - self.__whose_round = "result_fail" + self.__whose_round = WhoseRound.result_fail # 如果不允许失去任何一位同伴 if not self.__mission_objectives.get("allow_any_one_die", False): for character in self.alliances: if self.alliances[character].is_dead(): - self.__whose_round = "result_fail" + self.__whose_round = WhoseRound.result_fail break """检测胜利条件""" # 歼灭模式 @@ -1210,12 +1216,12 @@ def draw(self, screen: linpg.ImageSurface) -> None: if len(self.enemies) == 0: self.characterGetClick = None RangeSystem.set_visible(False) - self.__whose_round = "result_win" + self.__whose_round = WhoseRound.result_win else: pass # 检测是否特定敌人已经被消灭 elif isinstance(_target, str) and _target not in self.enemies: - self.__whose_round = "result_win" + self.__whose_round = WhoseRound.result_win # 检测是否所有给定的目标都已经被歼灭 elif isinstance(_target, Sequence): find_one = False @@ -1224,20 +1230,20 @@ def draw(self, screen: linpg.ImageSurface) -> None: find_one = True break if not find_one: - self.__whose_round = "result_win" + self.__whose_round = WhoseRound.result_win """开发使用""" if linpg.global_variables.try_get_str("endBattleAs") == "win": - self.__whose_round = "result_win" + self.__whose_round = WhoseRound.result_win linpg.global_variables.remove("endBattleAs") elif linpg.global_variables.try_get_str("endBattleAs") == "lose": - self.__whose_round = "result_fail" + self.__whose_round = WhoseRound.result_fail linpg.global_variables.remove("endBattleAs") # 显示警告 WarningMessageSystem.draw(screen) # 结束动画--胜利 - if self.__whose_round == "result_win": + if self.__whose_round is WhoseRound.result_win: # 更新战后总结的数据栏 if not ScoreBoard.is_updated(): self.__statistics.total_time = int( @@ -1285,7 +1291,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: "section", value="dialog_after_battle" ) # 结束动画--失败 - elif self.__whose_round == "result_fail": + elif self.__whose_round is WhoseRound.result_fail: # 更新战后总结的数据栏 if not ScoreBoard.is_updated(): self.__statistics.total_time = int( @@ -1340,7 +1346,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: _CONSOLE.draw(screen) # 结束回合的按钮 - if self.__whose_round == "player": + if self.__whose_round is WhoseRound.player: self.__end_round_button.draw(screen) screen.blit( self.__end_round_txt, diff --git a/Source/ui.py b/Source/ui.py index f598b792..fc525957 100644 --- a/Source/ui.py +++ b/Source/ui.py @@ -1,6 +1,7 @@ import time from collections import deque from typing import Any +from enum import IntEnum, auto from .dolls import * @@ -24,6 +25,16 @@ def display_in_center( ) +# 谁的回合? +class WhoseRound(IntEnum): + player = auto() + sangvisFerrisToPlayer = auto() + sangvisFerris = auto() + playerToSangvisFerris = auto() + result_win = auto() + result_fail = auto() + + # 显示回合切换的UI class RoundSwitch: def __init__(self, window_x: int, window_y: int): @@ -58,7 +69,7 @@ def __init__(self, window_x: int, window_y: int): self.enemy_round_txt_surface.set_alpha(0) def draw( - self, screen: linpg.ImageSurface, whose_round: str, total_rounds: int + self, screen: linpg.ImageSurface, whose_round: WhoseRound, total_rounds: int ) -> bool: # 如果“第N回合”的文字surface还没有初始化,则初始化该文字 if self.now_total_rounds_surface is None: @@ -93,7 +104,7 @@ def draw( self.now_total_rounds_surface.set_alpha(alphaTemp + 10) else: # 然后“谁的回合”的文字渐入 - if whose_round == "playerToSangvisFerris": + if whose_round is WhoseRound.playerToSangvisFerris: alphaTemp = self.enemy_round_txt_surface.get_alpha() if alphaTemp is None: self.enemy_round_txt_surface.set_alpha(0) @@ -101,7 +112,7 @@ def draw( self.enemy_round_txt_surface.set_alpha(alphaTemp + 10) else: self.TxtAlphaUp = False - if whose_round == "sangvisFerrisToPlayer": + if whose_round is WhoseRound.sangvisFerrisToPlayer: alphaTemp = self.your_round_txt_surface.get_alpha() if alphaTemp is None: self.your_round_txt_surface.set_alpha(0) @@ -121,19 +132,19 @@ def draw( alphaTemp -= 10 self.baseImg.set_alpha(alphaTemp) self.now_total_rounds_surface.set_alpha(alphaTemp) - if whose_round == "playerToSangvisFerris": + if whose_round is WhoseRound.playerToSangvisFerris: self.lineRedUp.set_alpha(alphaTemp) self.lineRedDown.set_alpha(alphaTemp) self.enemy_round_txt_surface.set_alpha(alphaTemp) - elif whose_round == "sangvisFerrisToPlayer": + elif whose_round is WhoseRound.sangvisFerrisToPlayer: self.lineGreenUp.set_alpha(alphaTemp) self.lineGreenDown.set_alpha(alphaTemp) self.your_round_txt_surface.set_alpha(alphaTemp) else: - if whose_round == "playerToSangvisFerris": + if whose_round is WhoseRound.playerToSangvisFerris: self.lineRedUp.set_alpha(255) self.lineRedDown.set_alpha(255) - elif whose_round == "sangvisFerrisToPlayer": + elif whose_round is WhoseRound.sangvisFerrisToPlayer: self.lineGreenUp.set_alpha(255) self.lineGreenDown.set_alpha(255) # 淡出完成,重置部分参数,UI播放结束 @@ -160,7 +171,7 @@ def draw( ), ) ) - if whose_round == "playerToSangvisFerris": + if whose_round is WhoseRound.playerToSangvisFerris: screen.blits( ( (self.lineRedUp, (abs(self.x), self.y)), @@ -171,7 +182,7 @@ def draw( ), ) ) - elif whose_round == "sangvisFerrisToPlayer": + elif whose_round is WhoseRound.sangvisFerrisToPlayer: screen.blits( ( (self.lineGreenUp, (abs(self.x), self.y)), From 407b8ed4f5e900237e02e1444c3b6759d1897fd9 Mon Sep 17 00:00:00 2001 From: AnyLeftovers <37920527+yudonglin@users.noreply.github.com> Date: Sat, 31 Dec 2022 22:20:46 -0800 Subject: [PATCH 7/8] finalize the code and level data --- Assets/movie/SlumpingFluid.mp4 | 3 - Assets/movie/WhatAmIFightingFor.mp4 | 3 - Assets/music/BGM_Battle.ogg | 3 + Assets/music/Casual.ogg | 3 + Data/database.yaml | 20 +- .../chapter1_English.linpg.script | 164 +++++++++++++++++ .../chapter2_English.linpg.script | 173 ++++++++++++++++++ .../chapter2_SimplifiedChinese.linpg.script | 16 +- Data/main_chapter/chapter2_map.yaml | 76 ++++---- Lang/English.yaml | 4 +- Lang/SimplifiedChinese.yaml | 3 +- README.md | 32 ++-- Source/abstract.py | 50 ++--- Source/menu.py | 17 +- Source/ui.py | 4 +- 15 files changed, 453 insertions(+), 118 deletions(-) delete mode 100644 Assets/movie/SlumpingFluid.mp4 delete mode 100644 Assets/movie/WhatAmIFightingFor.mp4 create mode 100644 Assets/music/BGM_Battle.ogg create mode 100644 Assets/music/Casual.ogg create mode 100644 Data/main_chapter/chapter1_English.linpg.script create mode 100644 Data/main_chapter/chapter2_English.linpg.script diff --git a/Assets/movie/SlumpingFluid.mp4 b/Assets/movie/SlumpingFluid.mp4 deleted file mode 100644 index af9192bb..00000000 --- a/Assets/movie/SlumpingFluid.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6024bc0966f5c70d0ed179382ce6e2596a1ea00205fafc497c6b3bd58a266a47 -size 2963240 diff --git a/Assets/movie/WhatAmIFightingFor.mp4 b/Assets/movie/WhatAmIFightingFor.mp4 deleted file mode 100644 index baaac4a0..00000000 --- a/Assets/movie/WhatAmIFightingFor.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:972e7f674c3848127fc81116ab613a3620beded0177ae4cfcaf79e5bdefbaeab -size 67953518 diff --git a/Assets/music/BGM_Battle.ogg b/Assets/music/BGM_Battle.ogg new file mode 100644 index 00000000..baffb03c --- /dev/null +++ b/Assets/music/BGM_Battle.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59b286516bebf686b52ebf8cd639b56dba290ceac0f15820bdbeb2d247a0561b +size 1293318 diff --git a/Assets/music/Casual.ogg b/Assets/music/Casual.ogg new file mode 100644 index 00000000..7f34d58e --- /dev/null +++ b/Assets/music/Casual.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7feb9260bbe3b7fa13eee7046e3cf19fc896bbf2a5b81e6b0bcf122f33060e06 +size 1528684 diff --git a/Data/database.yaml b/Data/database.yaml index 5bba369b..b8a24407 100644 --- a/Data/database.yaml +++ b/Data/database.yaml @@ -24,6 +24,16 @@ Filters: - 30% type: image Npc: + Kalina: + - kalina_0.png + - kalina_1.png + - kalina_2.png + - kalina_3.png + - kalina_4.png + - kalina_5.png + - kalina_6.png + - kalina_7.png + - kalina_8.png aa12: - aa12.png - aa12_hurt.png @@ -61,16 +71,6 @@ Npc: - hk416_hurt.png k: - k.png - kalina: - - kalina_0.png - - kalina_1.png - - kalina_2.png - - kalina_3.png - - kalina_4.png - - kalina_5.png - - kalina_6.png - - kalina_7.png - - kalina_8.png kp31: - kp31.png - kp31_hurt.png diff --git a/Data/main_chapter/chapter1_English.linpg.script b/Data/main_chapter/chapter1_English.linpg.script new file mode 100644 index 00000000..05930821 --- /dev/null +++ b/Data/main_chapter/chapter1_English.linpg.script @@ -0,0 +1,164 @@ +# Fundamental parameters +[id]1 +[lang]English + +[section]dialog_before_battle + +null: +- When I took on this task, I was a little uneasy, +- but thought to myself that I was probably overthinking it +null: +- But it turns out that I was so naive, so optimistic... sow... foolish... +null: +- Because now... Everything that can go wrong, has gone wrong + +[bgi]research.jpg +[bgm]BGM_Boss_1.ogg +[display]kalina_5.png + +Kalina: +- Commander, the Sangvis Ferri's attack is getting more and more intense +- If this continues, the remaining forces will be crushed soon +- It's time to execute plan ES-2, and organize the evacuation of all forces as soon as possible! +Commander: +- Still no news about them? +- 10th Logistics Team... +Kalina: +- We've been trying to get in touch with them since they were confirmed lost, +- and we don't know what happened... It's worrying +- But if we keep on delaying, this place will be surrounded by Sangvis Ferri sooner or later +Kalina: +- Please make up your mind as soon as possible +Commander: +- Where are the coordinates of the last communication with them? +Kalina: +- On a plain about 50 kilometers east of here +- It fell under Sangvis Ferri's control 13 hours ago +Commander: +- Can you send someone out there to conduct a search? +Kalina: +- All the combat-ready squads are currently in the second line of defense +- It's already a miracle that we can barely stop the Sangvis Ferri' attack +- Let alone breakthrough +Kalina: +- If we pull out any more men at this point, +- the defense will be crushed by the Sangvis Ferri in hours +Commander: +- When we were talking about business, they said it was a search that will be easy as pie +- Now we're thankful to get out of here, not to mention completing the mission +Kalina: +- Commander, please stop blaming yourself +- No one would have thought things would get so bad all of a sudden +- But for now, let's prioritize what we do next and keep the big picture in mind +Commander: +- ... +- Kalina +Kalina: +- Yes +Commander: +- ... +Commander: +- Start the evacuation procedure, and get me K. I need to talk to him +Kalina: +- Okay, I'm on my way. + +[hide]* + +null: +- At this moment, I am very uneasy inside +- Whether sv98 and her team can come back before the evacuation is one thing +null: +- But I always feel that this island, +- There are mysteries that Griffin and even the Security Bureau itself do not know yet + +[scene]snowfield.jpg +[bgm]BGM_Brain_1.ogg +[display]sv98.png + +sv98: +- Gsh18, what's the status? Can you get a signal from the base? + +[show]gsh18.png + +gsh18: +- The communication was at least intermittent a few hours ago, +- but now it has been several hours without a response. +- It seems like that the Sangvis Ferri has completely cut off our signal + +[show]asval.png pp1901.png + +sv98: +- Asval, pp1901, you're finally back! +- How's it going? +asval: +- Sv98, pp1901 and I found a signal tower-like facility nearby. +- It's likely to have blocked our communication with the base +sv98: +- Any good news? +pp1901: +- The only good news is that there are only a few Sangvis Ferri units guarding this facility. +- If we can take this place down, we can not only get in touch with the base, +- but also effectively block the counterattack of the Sangvis Ferri +sv98: +- All right then, let's get ready. +- It's time for a big fight. + +# placeholder +[section]dialog_during_battle + +[section]dialog_after_battle + +[bgi]research.jpg +[bgm]Room_1.mp3 +[display]kalina_5.png + +null: +- ...... + +[show]k.png&communicating + +K: +- Commander, according to our plan, this is not the time for communication +Commander: +- I think you know better than I do what the situation is right now +- My forces has almost collapsed, so I'd like to know when the "assistance" you mentioned will arrive +K: +- I think you should have sensed that the "assistance" I mentioned was right next to you. +- But I won't let them out if I don't have the stuff +Commander: +- Then I want to know why the information you provided at the beginning +- didn't contain any information regarding Sangvis Ferri +- And where did you get the information that was so wrong? +K: +- Commander, of course I can't tell you the answer to the question you're asking. +- Everyone loves eggs, but no one ever asks where they come from +K: +- Our source of information is very reliable +- By all rights, Sangvis Ferri should not know about it +- But as things stand now, someone within our circle must have leaked this information +Commander: +- Without any support, our defense will not last for long +- How can we possibly find what you're asking for +K: +- That doesn't matter +- If the dolls under your command can do nothing but standing, then keep going +- I will try to find a way out + +[hide]k.png + +null: +- End of communication +Commander: +- Damn it, I should have known better than to accept this commission in the first place + +[display]kalina_5.png + +Kalina: +- Commander, what's the situation? +Commander: +- Not so good. +- Any good news? +Kalina: +- I thought you'd like to hear it. + +[end] \ No newline at end of file diff --git a/Data/main_chapter/chapter2_English.linpg.script b/Data/main_chapter/chapter2_English.linpg.script new file mode 100644 index 00000000..efa19a69 --- /dev/null +++ b/Data/main_chapter/chapter2_English.linpg.script @@ -0,0 +1,173 @@ +# Fundamental parameters +[id]2 +[lang]English + +[section]dialog_before_battle + +null: +- I dreamed of mountains and seas, of towering cities and barren deserts... +- I dreamed of a shadowy past and an untouchable future... +null: +- I dreamed of... +??: +- sv98!!! +null: +- It seems... Someone is calling me... +??: +- sv98!!! Wake up! +Null: +- Hmm... + +[bgi]snowfield.jpg +[display]sv98.png + +null: +- (sv98 wakes up) + +[bgm]BGM_Brain_1.ogg +[show]gsh18.png + +gsh18: +- sv98!!! Get up! +- The sun, ah wait, the moon has raised and starts to shine your... Anyway, get up! +sv98: +- Well... Asval, how long did I sleep... + +[show]asval.png + +asval: +- About 8 hours... + +[show]pp1901.png + +pp1901: +- 8 hours, 12 minutes and 43 seconds to be exact +asval: +- Come on, pp1901, you don't have to be so serious +pp1901: +- It's not serious, it's rigorous! +sv98: +- Asval, didn't I say I should be up before sunset? +asval: +- Ah, sorry, I saw you sleeping so well so I did not want to wake you up +sv98: +- Hey, let's not talk about that +- Asval, did you get any messages from the commander? +asval: +- Ah, this is not urgent. +gsh18: +- The commander has sent the latest orders an hour ago +sv98: +- Ah, gsh18, is the commander ready for a new attack? +gsh18: +- On the contrary, the commander has already made plans to retreat +- The temporary stronghold has entered a stalemate phase +gsh18: +- Since the coordinates were leaked, +- the main forces of the Sangvis Ferri are flocking to where the commander at +sv98: +- Well, then we should unite with the commander as soon as possible. +asval: +- The commander said that the helicopter are on its way to pick us up. +- They are expected to be here within 2 hours. +sv98: +- All right, let's pack up and get ready to evacuate! + +[section]dialog_during_battle + +[display]sv98.png gsh18.png asval.png pp1901.png + +asval: +- Oh no, the Sangvis Ferri has blocked the way forward +- It's going to be difficult to get around +sv98: +- Oh no, I'm out of ammo too +pp1901: +- Sv98, Sangvis Ferri seems to be guarding something + +[hide]* + +[block] + +[display]sv98.png gsh18.png asval.png pp1901.png + +sv98: +- Looks like a supply crate, this seems to be a temporary stronghold for the Sangvis Ferri +- Hopefully the main force is not here +gsh18: +- Sv98, I think we should clear this stronghold before the rescue helicopters arrive so that the helicopters can land +sv98: +- You're right. Sisters, get ready! + +[hide]* + +null: +- Currently sv98 doesn't have any bullets and can't attack +- Dive in or let your teammates draw fire, please make your own choice + +[block] + +[display]sv98.png + +sv98: +- I got the supplies! +Tip: +- Please remember to reload! + + +[section]dialog_after_battle + +null: +- (after a long time) + +[bgi]snowfield.jpg + +Pilot: +- 10th Logistics Team, I see you. +- About to land, be ready to board. + +[display]sv98.png + +sv98: +- Sisters, stop saving ammunition +- Just through everything out, it's time to leave +Everyone else: +- Got it! + +[hide]* + +null: +- As the smoke fills the air, everyone quickly boards the helicopter +- In the roar of engines and the sound of bullets hitting steel plates, +- the helicopter quickly flew away from the airspace controlled by the Sangvis Ferri + +[scene]Transport.png +[bgm]Casual.ogg +[display]sv98.png gsh18.png asval.png pp1901.png + +null: +- (inside the cabin) +gsh18: +- Ah, finally got away, I thought I was going to be dead again +pp1901: +- Gsh18, dolls don't die. +- If you got caught by the Sangvis Ferri, we'll have a new gsh18 in a few days +gsh18: +- Eh...!!!? +sv98: +- Pp1901, I don't think it's a fun thing to say +pp1901: +- Ah... Sorry. But then again, when was the last time we backed up the mind cloud? +- It seems like we haven't backed up our minds since the mission started +asval: +- True, our communication with the commander is interrupted by the Sangvis Ferri, +- so we can't upload the latest backups +gsh18: +- But we can finally get back to base, so we should be able to upload data safely by then +Pilot: +- It will take a while to fly back +- Take a good rest and I will let you know in advance when we get to the base. +Everyone: +- Okay. + +[end] diff --git a/Data/main_chapter/chapter2_SimplifiedChinese.linpg.script b/Data/main_chapter/chapter2_SimplifiedChinese.linpg.script index 83f89b72..11eaafff 100644 --- a/Data/main_chapter/chapter2_SimplifiedChinese.linpg.script +++ b/Data/main_chapter/chapter2_SimplifiedChinese.linpg.script @@ -81,8 +81,12 @@ sv98: pp1901: - sv98,铁血似乎在守着什么 +[hide]* + [block] +[display]sv98.png gsh18.png asval.png pp1901.png + sv98: - 看起来是物资箱,这里似乎是铁血的临时据点,主力应该不在这里 gsh18: @@ -110,18 +114,28 @@ sv98: null: - (过了很久之后) + +[bgi]snowfield.jpg + 飞行员: - 后勤第十小队,我看到你们了. 即将着陆,请做好登机准备 + +[display]sv98.png + sv98: - 各位,别再节省弹药了,无论是手雷还是烟雾弹全丢出去,我们要准备撤离了 众人: - 知道了! + +[hide]* + null: - 硝烟弥漫之季,众人快速登上直升机 - 在发动机的轰鸣声和子弹撞击钢板声中,直升机快速飞离了铁血控制的空域 [scene]Transport.png -[bgm]Casual.wav +[bgm]Casual.ogg +[display]sv98.png gsh18.png asval.png pp1901.png null: - (机舱内) diff --git a/Data/main_chapter/chapter2_map.yaml b/Data/main_chapter/chapter2_map.yaml index 55a180f7..ae2638a4 100644 --- a/Data/main_chapter/chapter2_map.yaml +++ b/Data/main_chapter/chapter2_map.yaml @@ -1,6 +1,6 @@ -at_night: false +at_night: true background_image: snowfield.jpg -background_music: BGM_Battle.wav +background_music: BGM_Battle.ogg chapter_id: 2 chapter_type: workshop cover_image: WildBattle.png @@ -188,12 +188,12 @@ decoration: - id: tree:1 x: 11 y: 5 -- id: tree:1 - x: 12 - y: 4 - id: log:2 x: 2 y: 14 +- id: tree:1 + x: 12 + y: 4 - id: tree:1 x: 11 y: 6 @@ -212,12 +212,12 @@ decoration: - id: log x: 1 y: 17 -- id: tree:1 - x: 7 - y: 12 - id: tree:1 x: 6 y: 13 +- id: tree:1 + x: 7 + y: 12 - id: tree:1 x: 8 y: 12 @@ -410,9 +410,6 @@ decoration: - id: tree:1 x: 7 y: 20 -- id: tree:2 - x: 9 - y: 18 - id: skull:1 x: 2 y: 25 @@ -434,6 +431,9 @@ decoration: - id: tree:1 x: 26 y: 1 +- id: tree:1 + x: 9 + y: 18 - id: tree:1 x: 12 y: 16 @@ -494,9 +494,6 @@ decoration: - id: stump x: 24 y: 5 -- id: tree:1 - x: 12 - y: 18 - id: tree:1 x: 10 y: 20 @@ -518,6 +515,9 @@ decoration: - id: campfire:1 x: 22 y: 8 +- id: tree:1 + x: 12 + y: 18 - id: tree:1 x: 12 y: 19 @@ -734,6 +734,9 @@ decoration: - id: fence:19 x: 23 y: 20 +- id: campfire:1 + x: 18 + y: 25 - id: chest x: 25 y: 19 @@ -763,9 +766,6 @@ decoration: - id: fence:19 x: 26 y: 19 -- id: campfire:1 - x: 19 - y: 26 - id: tree:1 x: 29 y: 17 @@ -916,24 +916,22 @@ decoration: dialogs: data: initial_dialog: - - move: - gsh18: - x: 8 - y: 4 - pp1901: - x: 8 - y: 3 + - changePos: + x: 12 + y: 12 - dialog: head - changePos: x: 19 y: 25 - idle: 1 - changePos: - x: 0 - y: 0 + x: 12 + y: 12 - dialog: id_03 + tutorial1: + - dialog: id_07 dictionary: - initial: head + initial: initial_dialog move: 19-25: dialog_key: tutorial1 @@ -942,26 +940,26 @@ dialogs: - sv98 entities: GriffinKryuger: - asval_0: + asval: bullets_carried: 100 type: asval x: 12 - y: 18 - pp1901_0: + y: 6 + gsh18: bullets_carried: 100 - type: pp1901 - x: 9 - y: 13 - pp1901_1: + type: gsh18 + x: 12 + y: 12 + pp1901: bullets_carried: 100 type: pp1901 - x: 9 - y: 18 - sv98_0: - bullets_carried: 100 + x: 11 + y: 15 + sv98: + bullets_carried: 0 type: sv98 x: 12 - y: 4 + y: 20 SangvisFerri: dinergate_0: kind: None diff --git a/Lang/English.yaml b/Lang/English.yaml index 2b137be1..863a0d2b 100644 --- a/Lang/English.yaml +++ b/Lang/English.yaml @@ -76,6 +76,4 @@ Warnings: no_enough_ap_to_rescue: You don't have enough action points for rescuing. no_enough_ap_to_use_skill: You don't have enough action points for using skill. alpha_build_warning: 'Alpha Build: Far From Finish' -title1: 'Warning: All contents are still in development and does not represent final - results' -title2: Presents by TigeiaWorkshop +presentBy: Presents by TigeiaWorkshop diff --git a/Lang/SimplifiedChinese.yaml b/Lang/SimplifiedChinese.yaml index bf83dbae..d69743c7 100644 --- a/Lang/SimplifiedChinese.yaml +++ b/Lang/SimplifiedChinese.yaml @@ -76,5 +76,4 @@ Warnings: no_enough_ap_to_rescue: 当前角色没有足够的行动值进行救助 no_enough_ap_to_use_skill: 当前角色没有足够的行动值使用技能 alpha_build_warning: '测试版本: 不代表最终效果' -title1: 缇吉娅工坊 呈现 -title2: 警告:所有内容仍处于研发阶段,不代表最终效果 +presentBy: 缇吉娅工坊 呈现 diff --git a/README.md b/README.md index 28b8db41..8d115967 100644 --- a/README.md +++ b/README.md @@ -52,20 +52,20 @@ Their stories may be forgotten by history, but what they have done will be remem # :memo: Chapters / 游戏章节 -| Index | 名称 | Name | Expected release date / 预计发布时间 | Status / 状态 | -| ----- | ---------------- | ---------------------------------------- | ------------------------------------ | ------------- | -| 1 | 雪色的希望 | A wish likes snow | 2022.12.31 | :hammer: | -| 2 | 迷离之下 | Beneath smoke | 2022.12.31 | :hammer: | -| 3 | 琴弦之上 | Above string | 2023.1 | :hammer: | -| 4 | 喘息(暂定) | A gasp for breath (Provisional) | | | -| 5 | 无人之防(暂定) | Make defense without dolls (Provisional) | | | -| 6 | 机遇(暂定) | The opportunity (Provisional) | | | -| 7 | 强敌(暂定) | Formidable enemies (Provisional) | | | -| 8 | 仅存的星火 | The only starburst | | | -| 9 | 极夜前的黎光 | Light before long night | | | -| 10 | 冲破黑暗与迷雾 | Through fog and darkness | | | -| 11 | 拜托了,活下去! | Please, stay alive! | | | -| Final | 为了能看到的明天 | For a tomorrow that can be seen | | | +| Index | 名称 | Name | Expected release date / 预计发布时间 | Status / 状态 | +| ----- | ---------------- | ---------------------------------------- | ------------------------------------ | ------------------ | +| 1 | 雪色的希望 | A wish likes snow | 2022.12.31 | :white_check_mark: | +| 2 | 迷离之下 | Beneath smoke | 2022.12.31 | :white_check_mark: | +| 3 | 琴弦之上 | Above string | 2023.1 | :hammer: | +| 4 | 喘息(暂定) | A gasp for breath (Provisional) | | | +| 5 | 无人之防(暂定) | Make defense without dolls (Provisional) | | | +| 6 | 机遇(暂定) | The opportunity (Provisional) | | | +| 7 | 强敌(暂定) | Formidable enemies (Provisional) | | | +| 8 | 仅存的星火 | The only starburst | | | +| 9 | 极夜前的黎光 | Light before long night | | | +| 10 | 冲破黑暗与迷雾 | Through fog and darkness | | | +| 11 | 拜托了,活下去! | Please, stay alive! | | | +| Final | 为了能看到的明天 | For a tomorrow that can be seen | | | # :white_check_mark: Dependencies / 运行库 @@ -124,11 +124,11 @@ https://discord.gg/3wz6bs5jvu # 📢 Credits / 特别鸣谢 -[自贡芒果Channel](https://space.bilibili.com/115351260) - 授权了主菜单页面的使用 +[自贡芒果Channel](https://space.bilibili.com/115351260) - 授权了主菜单页面的使用 / Authorized the use of the main menu background -[命运の乐章](https://space.bilibili.com/8453668) - 授于了制作组在该游戏中暂时地使用其制作的GMV作为过场动画的权利 +[命运の乐章](https://space.bilibili.com/8453668) - 授于了制作组在该游戏中暂时地使用其制作的GMV作为过场动画的权利 / Granted the right to temporarily use their GMV as in-game cutsence diff --git a/Source/abstract.py b/Source/abstract.py index 927b6308..24bc93f3 100644 --- a/Source/abstract.py +++ b/Source/abstract.py @@ -212,7 +212,7 @@ def _update_sound_volume(self) -> None: def _get_level_info(self) -> dict: return linpg.config.try_load_file_if_exists( self.get_data_file_path().replace( - "_map", "_level_info_" + linpg.lang.get_current_language() + "_map", "_level_info_" + linpg.setting.get_language() ) ) @@ -334,7 +334,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.__dialog_parameters["dialogId"] += 1 self.__dialog_is_route_generated = False # 改变方向 - elif "direction" in currentDialog and currentDialog["direction"] is not None: + elif currentDialog.get("direction") is not None: for key, value in currentDialog["direction"].items(): if key in self.alliances: self.alliances[key].set_flip(value) @@ -344,7 +344,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: raise Exception("Error: Cannot find character {}!".format(key)) self.__dialog_parameters["dialogId"] += 1 # 改变动作(一次性) - elif "action" in currentDialog and currentDialog["action"] is not None: + elif currentDialog.get("action") is not None: for key, action in currentDialog["action"].items(): if key in self.alliances: self.alliances[key].set_action(action, False) @@ -352,9 +352,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.enemies[key].set_action(action, False) self.__dialog_parameters["dialogId"] += 1 # 改变动作(长期) - elif ( - "actionLoop" in currentDialog and currentDialog["actionLoop"] is not None - ): + elif currentDialog.get("actionLoop") is not None: for key, action in currentDialog["actionLoop"].items(): if key in self.alliances: self.alliances[key].set_action(action) @@ -362,7 +360,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.enemies[key].set_action(action) self.__dialog_parameters["dialogId"] += 1 # 开始对话 - elif "dialog" in currentDialog: + elif currentDialog.get("dialog") is not None: # 如果当前段落的对话数据还没被更新 if not self.__is_dialog_updated: self.__DIALOG.continue_scene(currentDialog["dialog"]) @@ -374,7 +372,7 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.__dialog_parameters["dialogId"] += 1 self.__is_dialog_updated = False # 闲置一定时间(秒) - elif "idle" in currentDialog and currentDialog["idle"] is not None: + elif currentDialog.get("idle") is not None: if self.__dialog_parameters["secondsToIdle"] is None: self.__dialog_parameters["secondsToIdle"] = ( currentDialog["idle"] * linpg.display.get_fps() @@ -390,23 +388,25 @@ def draw(self, screen: linpg.ImageSurface) -> None: self.__dialog_parameters["secondsAlreadyIdle"] = 0 self.__dialog_parameters["secondsToIdle"] = None # 调整窗口位置 - elif "changePos" in currentDialog and currentDialog["changePos"] is not None: - if ( - self._screen_to_move_speed_x is None - or self._screen_to_move_speed_y is None - ): - tempX, tempY = self._MAP.calculate_position( - currentDialog["changePos"]["x"], currentDialog["changePos"]["y"] - ) - self._screen_to_move_speed_x = int(screen.get_width() / 2 - tempX) - self._screen_to_move_speed_y = int(screen.get_height() / 2 - tempY) - if ( - self._screen_to_move_speed_x == 0 - and self._screen_to_move_speed_y == 0 - ): - self._screen_to_move_speed_x = None - self._screen_to_move_speed_y = None - self.__dialog_parameters["dialogId"] += 1 + elif currentDialog.get("changePos") is not None: + tempX, tempY = self._MAP.calculate_position( + currentDialog["changePos"]["x"], currentDialog["changePos"]["y"] + ) + tempX -= self._MAP.local_x + tempY -= self._MAP.local_y + self._MAP.set_local_pos( + linpg.numbers.keep_int_in_range( + screen.get_width() // 2 - tempX, + screen.get_width() - self._MAP.get_width(), + 0, + ), + linpg.numbers.keep_int_in_range( + screen.get_height() // 2 - tempY, + screen.get_height() - self._MAP.get_height(), + 0, + ), + ) + self.__dialog_parameters["dialogId"] += 1 else: raise Exception( "Error: Dialog Data on '{0}' with id '{1}' cannot pass through any statement!".format( diff --git a/Source/menu.py b/Source/menu.py index c972eaa8..a4e4744b 100644 --- a/Source/menu.py +++ b/Source/menu.py @@ -55,20 +55,9 @@ def __init__(self, screen: linpg.ImageSurface): ) index += 1 # 渲染载入页面需要的数据 - self.__loading_screen.blits( - ( - ( - linpg.font.render(linpg.lang.get_text("title1"), "white", font_size), - (font_size * 2, screen.get_height() * 0.9), - ), - ( - linpg.font.render(linpg.lang.get_text("title2"), "white", font_size), - ( - font_size * 2, - screen.get_height() * 0.9 - screen.get_width() / 32, - ), - ), - ) + self.__loading_screen.blit( + linpg.font.render(linpg.lang.get_text("presentBy"), "white", font_size), + (font_size * 2, screen.get_height() * 0.9), ) """开始加载""" # 载入页面 - 渐入 diff --git a/Source/ui.py b/Source/ui.py index fc525957..e20d3003 100644 --- a/Source/ui.py +++ b/Source/ui.py @@ -75,7 +75,7 @@ def draw( if self.now_total_rounds_surface is None: self.now_total_rounds_surface = linpg.font.render( self.now_total_rounds_text.format( - linpg.lang.get_num_in_local_text(total_rounds) + linpg.lang.get_num_in_local_text(total_rounds + 1) ), "white", screen.get_width() / 38, @@ -705,7 +705,7 @@ def draw(cls, map_prt: linpg.TileMap, screen: linpg.ImageSurface) -> None: # 战斗系统数据统计struct class BattleStatistics: def __init__(self) -> None: - self.total_rounds: int = 1 + self.total_rounds: int = 0 self.total_kills: int = 0 self.starting_time: float = time.time() self.total_time: int = 0 From 741fcdfd1e274c473129ea05f2263545c2847b48 Mon Sep 17 00:00:00 2001 From: AnyLeftovers <37920527+yudonglin@users.noreply.github.com> Date: Sat, 31 Dec 2022 23:04:24 -0800 Subject: [PATCH 8/8] Update version.yaml --- Data/version.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Data/version.yaml b/Data/version.yaml index 1ec57969..a3352220 100644 --- a/Data/version.yaml +++ b/Data/version.yaml @@ -1,4 +1,4 @@ -recommended_linpg_patch: 3 +recommended_linpg_patch: 4 recommended_linpg_revision: 5 revision: 0 version: 1