From c5cbf263ee02771980895aae2e54977b0f623351 Mon Sep 17 00:00:00 2001 From: cakipaul Date: Fri, 10 Jan 2025 17:53:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=E9=85=8D=E9=9F=B3=E4=B8=8E?= =?UTF-8?q?=20npc=20=E7=BB=93=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- asset/dialogue/c01.dialogue | 22 ++-- asset/dialogue/c02.csv | 2 +- asset/dialogue/c02.dialogue | 81 ++++++------- asset/dialogue/c02.en.translation | Bin 3754 -> 3762 bytes asset/dialogue/c02.zh_Hans.translation | Bin 8462 -> 8462 bytes asset/dialogue/i_18n_test.gd | 13 +- asset/dialogue/inspect_content.csv | 10 +- asset/dialogue/inspect_content.en.translation | Bin 0 -> 486 bytes .../inspect_content.zh_Hans.translation | Bin 830 -> 830 bytes asset/dialogue/item_description.dialogue | 2 +- asset/dialogue/names.en.translation | Bin 810 -> 810 bytes asset/dialogue/names.zh_Hans.translation | Bin 926 -> 926 bytes asset/dialogue/npc.csv | 3 + asset/dialogue/npc.dialogue | 15 +++ asset/dialogue/npc.en.translation | Bin 0 -> 446 bytes asset/dialogue/npc.zh_Hans.translation | Bin 0 -> 554 bytes config/archive/assembled_archive.gd | 9 +- project.godot | 4 +- scene/dialog/balloon.tscn | 1 - scene/entity/ambush.gd | 113 ++++++++++++++++-- scene/entity/ambush.tscn | 3 + scene/entity/local_inspectable.gd | 2 +- scene/entity/npc.gd | 59 ++++++++- scene/entity/npc.tscn | 4 + scene/ground/scene/c02/s01_街道.tscn | 4 + scene/ground/scene/c02/s02_走道.tscn | 7 +- scene/ground/scene/c02/s03_院子切换.tscn | 23 ++-- scene/main.gd | 1 + scene/main.tscn | 1 - 29 files changed, 282 insertions(+), 97 deletions(-) create mode 100644 asset/dialogue/inspect_content.en.translation create mode 100644 asset/dialogue/npc.csv create mode 100644 asset/dialogue/npc.dialogue create mode 100644 asset/dialogue/npc.en.translation create mode 100644 asset/dialogue/npc.zh_Hans.translation diff --git a/asset/dialogue/c01.dialogue b/asset/dialogue/c01.dialogue index 44353fa5..c55301a2 100644 --- a/asset/dialogue/c01.dialogue +++ b/asset/dialogue/c01.dialogue @@ -6,7 +6,7 @@ ???: “......” [ID:dialog_dots] => END -~ c01_s01_oldman +~ c01_s01_老人 (一个老人正在喂食笼子里的老鼠) [ID:c01_老人喂食] 老人: “这么多年......还是找不到......” [ID:c01_老人喂食_1] 老人: “它们说......等它们吃饱了......” [ID:c01_老人喂食_2] @@ -15,12 +15,12 @@ ???: “......” [ID:dialog_dots] => END -~ c01_s03_feature +~ c01_s03_恶鬼 “在这儿吗......” [ID:c01_在这儿吗] => END -~ c01_s04_begin +~ c01_s04_车夫对话1 吕萍: “又是这个梦” [ID:c01_吕萍与车夫_01] 吕萍: “这个星期已经第三次了” [ID:c01_吕萍与车夫_02] 吕萍: “我到底是怎么了” [ID:c01_吕萍与车夫_03] @@ -35,19 +35,19 @@ 车夫: “哈哈,小姐你坐好了,跑了“ [ID:c01_吕萍与车夫_12] => END -~ c01_s04_animation1 +~ c01_s04_车夫对话2 车夫: “小姐,你这是回家过年是哇?” [ID:c01_吕萍与车夫_13] => END -~ c01_s04_animation2 +~ c01_s04_车夫对话3 吕萍: “哦,不是的......” [ID:c01_吕萍与车夫_14] => END -~ c01_s04_animation3 +~ c01_s04_车夫对话4 车夫: “啊?不会是工作吧” [ID:c01_吕萍与车夫_15] => END -~ c01_s04_animation4 +~ c01_s04_车夫对话5 车夫: “这不行的,你这小年夜还要安排工作啊” [ID:c01_吕萍与车夫_16] 车夫: “你看我,拉完你这一趟,我也要准备收工了” [ID:c01_吕萍与车夫_17] 车夫: “工作什么的,今天肯定要统统结束掉的,你说对哇” [ID:c01_吕萍与车夫_18] @@ -56,19 +56,19 @@ 车夫: “时间也差不多” [ID:c01_吕萍与车夫_21] => END -~ c01_s04_animation5 +~ c01_s04_车夫对话6 吕萍: “......” [ID:c01_吕萍与车夫_22] => END -~ c01_s04_animation6 +~ c01_s04_车夫对话7 吕萍: “是到了吗,师傅” [ID:c01_吕萍与车夫_23] => END -~ c01_s04_animation7 +~ c01_s04_车夫对话8 车夫: “到了,芦昌路26弄3号,就是这里” [ID:c01_吕萍与车夫_24] => END -~ c01_s04_animation8 +~ c01_s04_车夫对话9 车夫: “嗯,钱正好,那么我先跑了” [ID:c01_吕萍与车夫_25] 吕萍: “好的,谢谢师傅” [ID:c01_吕萍与车夫_26] 车夫: “哎哟,谢什么” [ID:c01_吕萍与车夫_27] diff --git a/asset/dialogue/c02.csv b/asset/dialogue/c02.csv index 4957230f..6a1dbf64 100644 --- a/asset/dialogue/c02.csv +++ b/asset/dialogue/c02.csv @@ -37,7 +37,7 @@ c02_张胖子_招呼吕萍1,“老方,小朋友又不懂,和她讲这些干 c02_张胖子_招呼吕萍2,“小蝶啊,回头记得带妈妈来叔叔这儿买肉啊”,,张胖子,,[#anonymous] c02_张胖子_招呼吕萍3,“外面没的买,叔叔这里多的是”,,张胖子,,[#anonymous] c02_张胖子_招呼吕萍4,“这些人是在跟我说话吗”,,吕萍,, -c02_张胖子_招呼吕萍5,“来来来,过来,过来”,,张胖子,,[#anonymous] +c02_张胖子_招呼吕萍5,“来来来,过来,过来”,"""come on, come on""",张胖子,,[#anonymous] c02_张胖子_招呼吕萍6,“悄悄和你讲,让你妈妈来我这里买肉,给你们家便宜点”,,张胖子,,[#anonymous] c02_张胖子_招呼吕萍7,“不行到时候我给你们把肉送到家里去,好哇”,,张胖子,,[#anonymous] c02_张胖子_招呼吕萍8,“呃,不用......不用了......”,,吕萍,, diff --git a/asset/dialogue/c02.dialogue b/asset/dialogue/c02.dialogue index 031dc0fa..cf6ecfb2 100644 --- a/asset/dialogue/c02.dialogue +++ b/asset/dialogue/c02.dialogue @@ -1,5 +1,5 @@ #场景一 -~ c02_s01_menpai +~ c02_s01_门口 ##孤寂的氛围 [#wave] [#shake] (芦昌路26弄3号) [ID:c02_芦昌路26] “这是梦里的那栋楼” [ID:c02_吕萍_01_梦楼] @@ -20,46 +20,46 @@ #=> END #场景二 -~ c02_s02_tianqi +~ c02_s02_天冷 吕萍: “冷飕飕的,早知道多穿一件出来了” [ID:c02_吕萍_天冷] => END #场景三 -~ c02_s03_tianqi +~ c02_s03_天暗 吕萍: “天色变暗了” [ID:c02_吕萍_天暗] => END -~ c02_s03_mimi +~ c02_s03_井旁咪咪1 吕萍: “这么冷的天,怎么这树的叶子还这么茂盛” [ID:c02_吕萍_井旁01] ...[#wait=2] [ID:c02_吕萍_井旁音效] 吕萍: “咪咪?” [ID:c02_吕萍_井旁02] 吕萍: “好多老鼠” [ID:c02_吕萍_井旁03] => END -~ c02_s03_shushu +~ c02_s03_去去 吕萍: “去,去” [ID:c02_吕萍_去去] => END -~ c02_s03_mimi2 +~ c02_s03_咪咪2 吕萍: “你好乖啊” [ID:c02_吕萍_好乖] (咕噜咕噜) [ID:c02_咕噜] => END -~ c02_s03_mimi2_2 +~ c02_s03_咪咪3 吕萍: “诶?怎么走了” [ID:c02_吕萍_怎么走了] => END -~ c02_s03_xiaomaotou +~ c02_s03_小猫头1 吕萍: “这是什么东西?” [ID:c02_吕萍_这是什么] => END -~ c02_s03_xiaomaotou_2 +~ c02_s03_小猫头2 吕萍: “嘶......我的头又开始痛了” [ID:c02_吕萍_头痛] => END #场景四 -~ c02_s04_fartherandgirl +~ c02_s04_小蝶与陆仁 小蝶: “爸爸,我昨晚听到有大老鼠在床边叫” [#anonymous] [ID:c02_小蝶与陆仁_01] 陆仁: “囡囡不怕哦,你把妈妈给你做的娃娃放在床边” [#anonymous] [ID:c02_小蝶与陆仁_02] 陆仁: “老鼠就不敢过来了” [#anonymous] [ID:c02_小蝶与陆仁_03] @@ -71,7 +71,7 @@ => END -~ c02_s04_lvping_02 +~ c02_s04_眼花了 吕萍: “我刚才眼花了吗” [ID:c02_吕萍_眼花了1] 吕萍: “这些人从哪儿来的” [ID:c02_吕萍_眼花了2] 吕萍: “......” [ID:c02_吕萍_眼花了3] @@ -79,52 +79,48 @@ => END -~ c02_s04_lishi_01 +~ c02_s04_吕萍问李氏 吕萍: “你好,请问陆先生住在这里吗” [ID:c02_吕萍问李氏_1] 李氏: “啊?你爸妈忙的又没空管你啦” [#anonymous] [ID:c02_吕萍问李氏_2] 李氏: “死了滚,生意都被你家抢没了” [#anonymous] [ID:c02_吕萍问李氏_3] 吕萍: “她在说什么......” [ID:c02_吕萍问李氏_4] => END -~ c02_s04_lishi_02 +~ c02_s04_李氏吐槽 李氏: “册那,都趁早死死掉算了” [#anonymous] [ID:c02_李氏_吐槽] => END -~ c02_s04_xiazi +~ c02_s04_吕萍问方瞎子 吕萍: “呃......你好,请问......” [ID:c02_吕萍问方瞎子_1] 方瞎子: “祸福在己,当自求;兴衰有数,莫强留” [#anonymous] [ID:c02_吕萍问方瞎子_2] 吕萍: “......” [ID:c02_dialog_dots] => END! -~ c02_s04_pangzi_01 +~ c02_s04_张胖子方瞎子 张胖子: “老方,小朋友又不懂,和她讲这些干嘛” [#anonymous] [ID:c02_张胖子_招呼吕萍1] 张胖子: “小蝶啊,回头记得带妈妈来叔叔这儿买肉啊” [#anonymous] [ID:c02_张胖子_招呼吕萍2] 张胖子: “外面没的买,叔叔这里多的是” [#anonymous] [ID:c02_张胖子_招呼吕萍3] 吕萍: “这些人是在跟我说话吗” [ID:c02_张胖子_招呼吕萍4] => END! -~ c02_s04_pangzi_02 -张胖子: “来来来,过来,过来” [#anonymous] [ID:c02_张胖子_招呼吕萍5] -=> END - -~ c02_s04_pangzi_03 +~ c02_s04_张胖子卖肉 张胖子: “悄悄和你讲,让你妈妈来我这里买肉,给你们家便宜点” [#anonymous] [ID:c02_张胖子_招呼吕萍6] 张胖子: “不行到时候我给你们把肉送到家里去,好哇” [#anonymous] [ID:c02_张胖子_招呼吕萍7] 吕萍: “呃,不用......不用了......” [ID:c02_张胖子_招呼吕萍8] => END -~ c02_s04_boy +~ c02_s04_小男孩与猫和绳子 小男孩: “喂,那只成天跟着你的小猫去哪里啦” [ID:c02_小男孩_问猫1] 小男孩: “好可爱的,也抱来给我们摸摸呗” [ID:c02_小男孩_问猫2] 吕萍: “猫?你说的是那只黑色的猫吗?” [ID:c02_小男孩_问猫3] 小男孩: “对啊对啊,哦对了,你有绳子嘛” [ID:c02_小男孩_问猫4] => END -~ c02_s04_boy01 +~ c02_s04_小男孩要绳子 小男孩: “对了,你有绳子嘛” [ID:c02_小男孩_绳子] => END -~ c02_s04_boy02 +~ c02_s04_小男孩要玩 小男孩: “嘿嘿,一会儿我们要在常年青下玩游戏,这次就叫上你吧” [ID:c02_小男孩_玩游戏] => END @@ -164,61 +160,61 @@ => END -~ c02_s08_fangjian1 +~ c02_s08_房间没尽头1 吕萍: “房间怎么还没有到头” [ID:c02_吕萍_房间没尽头] => END -~ c02_s08_zhitiao2 +~ c02_s08_房间没尽头_头痛 吕萍: “头好痛” [ID:c02_吕萍_头好痛] => END -~ c02_s08_fangjian2 +~ c02_s08_房间没尽头2 吕萍: “......” [ID:c02_dialog_dots] 吕萍: “这......到底是怎么回事” [ID:c02_吕萍_做梦吗1] 吕萍: “我是在......做梦吗?” [ID:c02_吕萍_做梦吗2] => END -~ c02_s08_xiaodie01 +~ c02_s08_小蝶1 ## 复用: c02_小蝶与陆仁_04 小蝶: “爸爸,什么时候让妈妈教我唱歌呀” [#anonymous] [ID:c02_小蝶陆仁_教唱歌1] 陆仁: “妈妈嗓子坏了,爸爸教你唱吧” [#anonymous] [ID:c02_小蝶陆仁_教唱歌2] 陆仁: “走吧,去把药喝了” [#anonymous] [ID:c02_小蝶陆仁_教唱歌3] => END -~ c02_s08_xiaodie02 +~ c02_s08_小蝶2 ## tfd98f18577 小蝶: “妈妈,爸爸什么时候能让我出去玩呀” [#anonymous] [ID:c02_小蝶_出去玩] => END -~ c02_s08_xiaodie03 +~ c02_s08_小蝶3 ## 复用: c02_小蝶与陆仁_01 小蝶: “妈妈,我房间里好像有一只大老鼠” [#anonymous] [ID:c02_小蝶_大老鼠1] ## t56894aa36d 小蝶: “妈妈,我怕” [#anonymous] [ID:c02_小蝶_大老鼠2] => END -~ c02_s08_jiewei01 +~ c02_s08_小蝉喊醒醒1 小蝉: “小蝶” [#anonymous] [ID:c02_小蝉_呼唤1] => END -~ c02_s08_jiewei02 +~ c02_s08_小蝉喊醒醒2 小蝉: “醒醒” [#anonymous] [ID:c02_小蝉_呼唤2] => END -~ c02_s08_jiewei03 +~ c02_s08_不要吵1 吕萍: “太吵了,不要吵了” [ID:c02_吕萍_不要吵1] => END -~ c02_s08_jiewei04 +~ c02_s08_不要吵2 吕萍: “不要再说了!” [ID:c02_吕萍_不要吵2] => END -~ c02_s08_jiewei05 +~ c02_s08_不要吵3 吕萍: “不要!” [ID:c02_吕萍_不要吵3] => END # 场景十 -~ c02_s10_boy01 +~ c02_s08_吕萍对话小弟弟1 吕萍: “你是刚刚门口那个小弟弟” [ID:c02_吕萍男孩_对话01] 男孩: “小蝶,你终于还是回来了” [ID:c02_吕萍男孩_对话02] 吕萍: “我们认识吗?” [ID:c02_吕萍男孩_对话03] @@ -239,31 +235,30 @@ 男孩: “你现在在这里一定要小心” [ID:c02_吕萍男孩_对话18] => END -~ c02_s10_boy02 +~ c02_s08_吕萍对话小弟弟2 吕萍: “诶?等一下” [ID:c02_吕萍男孩_对话19] => END -~ c02_s10_boy03 +~ c02_s08_吕萍对话小弟弟3 男孩: “去1014” [ID:c02_吕萍男孩_对话20] => END -~ c02_s10_cat +~ c02_s08_吕萍又见咪咪 吕萍: “咪咪?又是你” [ID:c02_吕萍_又是咪咪] => END -~ c02_s10_men +~ c02_s08_吕萍见墙 吕萍: “这是......一面墙?” [ID:c02_吕萍_一面墙] => END - # 场景十二 -~ c02_s12_kaitou +~ c02_s08_吕萍见地道 吕萍: “这是......通到什么地方去的” [ID:c02_吕萍_地道] => END -~ c02_s13_fartherandmother +~ c02_s13_陆仁通话 陆仁: “你也不要太担心了,柜子我上了把锁” [ID:c02_陆仁_对话1] 陆仁: “回头我再去问问看,说不定就是楼里的人偷的” [#wait=2] [ID:c02_陆仁_对话2] 陆仁: “你不要管他们怎么说,病确实是治好了,我们自己心里知道就可以了” [ID:c02_陆仁_对话3] @@ -279,6 +274,6 @@ #=> END -~ c02_s15_boy +~ c02_s15_男孩说回来了 男孩: “你终于还是回来了” [ID:c02_男孩_终于回来了] => END diff --git a/asset/dialogue/c02.en.translation b/asset/dialogue/c02.en.translation index 4ff31d6eb8f1fec77b04088cdeabee9ac0da2d86..3036c9656932c092448830ab00281e9226e36aac 100644 GIT binary patch delta 1001 zcmZwFPe>F|90%}yxsJQDvx>;_e1uIwH0)`xe`>9*S+-i{T57dfP5;)W(pFn->(bsL zB3JTzkSl9I^D7-{;t7DL`3E>_B>le82kau|S`+YyZ--E}@v!;cn7aLji zopE;}`*JfIsS>?DpO39O{x0j&VR(Mdj-u!s<}9!(8O%^V-6+K zQwr_*c{g+trpBYYCEc)A|0&FU-X-N<9=*!l#^aUp7gRpBcy3Or<<=S)Fi!*673Etv^TIkGzc@mMVCUy z3VlxwB1yVKp`G7bQDD0rk`rrgPOClGvSU)^Uy0I8c zh<%DX-nHuGcGx->9SVI*8izx=N1^XYW0=u-{a#5UuieIDDC%+6iL!37{V+ogYePOX z!&*^i*z6YK1{YJ(PUQ>!THREdM8@E$0ZG614?iB0`emBRN`2K@J;@rEj!SvLbK4!M zU!lF5_-637b5dHSbVBMYf8#^iJ}c$FX>J^Lm`Be@>GZwSTt@0EFL^-Q!^niWIIYn8 yq$zl$hZH&;n_Ws^F>JF7_#5Vt^U{n)wMpkTnrowadTR8;RyyfbYP&ICYy1PJFP)tL delta 999 zcmZwFOH30{6b9g4Dbsd3g%HzRZVZlY9P5Kod;nT3g0-SRv4C1pM|{xnfskm@o!uE@ zq(uG&absN?HyT+~SH|d4!p0bPx-^lbk{G%$QIAO{xgmEknREW{oSEFoylQ#g@^S;K zciX0OxrI$^qE7Vqd_K13@+YmuZj}6-^`h*rh%0OS|NKb1zS@bm^<4BTG&Oho<0LAi zg9`2YaW^~wQ{%B6lCG=Ozl-yqwoCcvN3RPBI2vc$kk>4>6D6t-qpT&wIcd&2#rh|1 z{5%>1mbjqMCQ=9K02gNz%1N^*ke*d&lynR)=*brqYLbqlLc1pv+8=Nvd&5pncah60rWU-?tQE~`Np_JI` z%}V$89eQ;SY@Lh!QtExtcclB^knU3G2hujo>bz;Uq|rBSa|&fW!8%aYE!GY*>@XXJ z@GNUZqhYg~NElq)kaoQH{rt1Bavf6!&-O|BWoYd2WvO4GscTYSSF7)^=H+8jUM#s? zqf)<0doI2jymLfKtCZ%X-uoLL()O^F|Dw4G*byGfNa@VI?EF=!_fGPFwohUz!o`q6 v?~|rcB8@9_CO)^^g{6qiPUCNcM^8yJ8r3FUw=mw2#B@We5vXZqIMe$NCl-}_ diff --git a/asset/dialogue/c02.zh_Hans.translation b/asset/dialogue/c02.zh_Hans.translation index a08ee5e5970ba1204863f95bc2a99ffff5dca219..0719eb6a9993676a0315ea6c3d0e8c157d3aad4e 100644 GIT binary patch delta 18 ZcmeBk>T}v4&B$tGW>Q(YS%LALJODTJ1>FDu delta 18 ZcmeBk>T}v4&B$6_nv+zpS%LALJODl327Lek diff --git a/asset/dialogue/i_18n_test.gd b/asset/dialogue/i_18n_test.gd index 23198e86..b4f19867 100644 --- a/asset/dialogue/i_18n_test.gd +++ b/asset/dialogue/i_18n_test.gd @@ -3,14 +3,13 @@ extends Node2D # Called when the node enters the scene tree for the first time. func _ready() -> void: - print(tr("获得")) print("loaded_locales:", TranslationServer.get_loaded_locales()) print("locale:", TranslationServer.get_locale()) - print(tr("“时辰将至,锁魂障眼,自欺欺人” #tag1 #tag2", "t86c8af3834")) - print(tr("老人", "c01_吕萍_001_喃喃自语")) - print(tr("c01_吕萍_001_喃喃自语")) + print(tr("阅读")) + print(tr("阅读")) + print(tr("c02_张胖子_招呼吕萍5")) TranslationServer.set_locale("en") print("locale:", TranslationServer.get_locale()) - print(tr("老人", "c01_吕萍_001_喃喃自语")) - print(tr("c01_吕萍_001_喃喃自语")) - print(tr("“时辰将至,锁魂障眼,自欺欺人” #tag1 #tag2", "t86c8af3834")) + print(tr("ui_阅读")) + print(tr("c02_张胖子_招呼吕萍5")) + diff --git a/asset/dialogue/inspect_content.csv b/asset/dialogue/inspect_content.csv index fa0f0915..714d1171 100644 --- a/asset/dialogue/inspect_content.csv +++ b/asset/dialogue/inspect_content.csv @@ -1,5 +1,5 @@ -keys,zh_Hans,_character,_notes,_tags -t344c97cf2c,据闻奉贤县分水墩又有七人染受鼠疫,病状可怖,闻医官药治无用,免职。,,, -tdb119a3714,有地方人称鼠疫为妖邪作祟,甚为惊骇,一时人心惶惶,竟有聚众滋闹之事,政府以防疫事宜关系紧要,拟赴分水墩一带调查防疫事宜云。,,, -ta750647b12,《申报》,,, -t736cca4563,民国五年一月十三日,,, +keys,zh_Hans,_character,_notes,_tags,en +t344c97cf2c,据闻奉贤县分水墩又有七人染受鼠疫,病状可怖,闻医官药治无用,免职。,,,, +tdb119a3714,有地方人称鼠疫为妖邪作祟,甚为惊骇,一时人心惶惶,竟有聚众滋闹之事,政府以防疫事宜关系紧要,拟赴分水墩一带调查防疫事宜云。,,,, +ta750647b12,《申报》,,,, +t736cca4563,民国五年一月十三日,,,, diff --git a/asset/dialogue/inspect_content.en.translation b/asset/dialogue/inspect_content.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..b026c138894317e27e0f9b210956ad46414ae9a9 GIT binary patch literal 486 zcmWFv4svFI0u~_648&|eEDFT_1tpoenN_JNAw`LK#W{&3nfZA@VF&;zG|!)=GRO9- zHcX5dngggv0*H%Ji}Op1l2hYz@{<#D;!E=5i<49HQW^M=#fj;u z#SH8~4p>Jj12>SFkyxA&Uy_)Vlghvg END! +=> END ~ Prop 小猫玩具的脑袋 [ID:prop_小猫玩具的脑袋] diff --git a/asset/dialogue/names.en.translation b/asset/dialogue/names.en.translation index 03d5511e6c5c8706ce5ab8b6985d42f970fa7ac1..5c44e0f618cd9761200580f389c4dd12c5e4c51c 100644 GIT binary patch delta 18 ZcmZ3*wu)_oG$U(eZb6ReW(7trCIB}91qlEE delta 18 ZcmZ3*wu)_oG$U(vMQK{`W(7trCIC1}1w#M; diff --git a/asset/dialogue/names.zh_Hans.translation b/asset/dialogue/names.zh_Hans.translation index 1c69e475dbe31574df22024260b0f3f89596273e..b1a8396e45ded613dcfb9f9f64cbd1cd0d691c27 100644 GIT binary patch delta 18 ZcmbQoK97BaG$U(bPGWK8W(CGNCIB|c1&ROw delta 18 ZcmbQoK97BaG$U(nTB1SfW(CGNCIB?P1vvl! diff --git a/asset/dialogue/npc.csv b/asset/dialogue/npc.csv new file mode 100644 index 00000000..1c0327b2 --- /dev/null +++ b/asset/dialogue/npc.csv @@ -0,0 +1,3 @@ +keys,zh_Hans,_character,_notes,_tags,en +c02_张胖子_招呼吕萍5,“来来来,过来,过来”,张胖子,,[#anonymous], +c02_吕萍问方瞎子_2,“祸福在己,当自求;兴衰有数,莫强留”,方瞎子,,[#anonymous], diff --git a/asset/dialogue/npc.dialogue b/asset/dialogue/npc.dialogue new file mode 100644 index 00000000..5adb4241 --- /dev/null +++ b/asset/dialogue/npc.dialogue @@ -0,0 +1,15 @@ +~ 张胖子_01_匿名 +张胖子: “来来来,过来,过来” [#anonymous] [ID:c02_张胖子_招呼吕萍5] +=> END + +~ 张胖子_01 +张胖子: “来来来,过来,过来” [ID:c02_张胖子_招呼吕萍5] +=> END + +~ 方瞎子_01_匿名 +方瞎子: “祸福在己,当自求;兴衰有数,莫强留” [#anonymous] [ID:c02_吕萍问方瞎子_2] +=> END + +~ 方瞎子_01 +方瞎子: “祸福在己,当自求;兴衰有数,莫强留” [ID:c02_吕萍问方瞎子_2] +=> END diff --git a/asset/dialogue/npc.en.translation b/asset/dialogue/npc.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..0f9db1298b584131f44ba7ff5555e2f774dabb32 GIT binary patch literal 446 zcma)(Jxc>Y5QfKZgCCt>AsDc-N)an7!6Kz_+Ao`RxUBB&g`Ew8ovls&hNVBrQt$`Z zsqZ9rVqqXJJj~2{v$O16aa~+eqjkhJun7*p)j0dgKl1HOvQdJ~zK*cx(#F@p)6v(* zXTSB9iQ8y81c{}dB*!My&IXffBaS1}{@-uWR!ki@6^q!Cg|<-4PB85t9a$NfY=?nq z59M&;?m0Jx-XuBsSk8}$OMaYT60Lv}Fq?GV>;3mqb618lrc>>O7A{1$rgXsuP<=Pj oO=_xs7wiI^r(C?fzaae9tv{uQ=Qh`TQT528O zEoNW`a=#n=oKyy0AUCNrIXkrkDgd&nxTGjEFCC(-IJqdZpadw$ zz`zK^%0LV@$x2@zn@{6Y3rvi27&Jj@fdFTKumUAPfdQgHR#s)idjNxr0Th}FKnxNG zf&Wkd3SAHrB(4C&JU|Sx1B4wOyjTIG7?hwGCf?6b-USk~f?|*v@<1E|#E%;0Je#`| zg5K}xd9lA8$c8f>HOvL6c)oPU^JV={=d5_TeIror>E6jN+E+c>*z|tS?5C|;UM$@3 fY) void: + if Engine.is_editor_hint(): + return + _load_archive() + if one_shot and played: + if GlobalConfig.DEBUG: + print("Ambush already played, key=", _get_key()) + return area2d.body_entered.connect(_entered) +func _get_key() -> String: + var ground_loader = get_node_or_null("../../..") as GroundLoader + if ground_loader: + return ground_loader.current_scene + "_" + name + return name + + +func _save_archive(): + if Engine.is_editor_hint(): + return + ArchiveManager.archive.ambush_data[_get_key()] = {"played": played} + + +func _load_archive(): + if Engine.is_editor_hint(): + return + var key = _get_key() + if ArchiveManager.archive.ambush_data.has(key): + var data = ArchiveManager.archive.ambush_data[key] + if data.has("played"): + played = data.played + + func _entered(_body): print("ambush body_entered!") - if one_shot and played: - queue_free() - return - # hook_cg - if hook_cg != "": - CgManager.play_cg(hook_cg) + if not one_shot: + var time = Time.get_ticks_msec() + var time_left = freeze_time - (time - played_time) * 0.001 + if time_left > 0: + if GlobalConfig.DEBUG: + print("Ambush freeze time not reached, time left=", time_left) + return + played_time = time + # hook_animation + if hook_animation: + $AnimationPlayer.play(hook_animation) + # hook_dialogue + if hook_dialogue_title: + if lock_player_on_playing_dialogue: + SceneManager.freeze_player(0.0, "") + DialogueManager.show_dialogue_balloon(dialogue_res, hook_dialogue_title) + DialogueManager.dialogue_ended.connect(_on_dialogue_ended, CONNECT_ONE_SHOT) if one_shot: - queue_free() + played = true + return + + +func _on_dialogue_ended(_res): + if GlobalConfig.DEBUG: + print("Ambush dialogue ended") + if lock_player_on_playing_dialogue: + SceneManager.release_player() + + +func _get(property: StringName) -> Variant: + if property == "hook_dialogue_title": + return hook_dialogue_title + return null + + +func _set(property: StringName, value: Variant) -> bool: + if property == "hook_dialogue_title": + hook_dialogue_title = value + return true + return false + + +func _get_property_list() -> Array[Dictionary]: + return [ + { + "name": "hook_dialogue_title", + "type": TYPE_STRING, + "hint": PROPERTY_HINT_ENUM_SUGGESTION, + "hint_string": ",".join(dialogue_res.titles.keys()) + } + ] diff --git a/scene/entity/ambush.tscn b/scene/entity/ambush.tscn index b73af64d..2c239c92 100644 --- a/scene/entity/ambush.tscn +++ b/scene/entity/ambush.tscn @@ -8,9 +8,12 @@ size = Vector2(40, 70) [node name="Ambush" type="Node2D"] script = ExtResource("1_rxgbr") +hook_dialogue_title = "" [node name="Area2D" type="Area2D" parent="."] unique_name_in_owner = true [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] shape = SubResource("RectangleShape2D_iwrfx") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] diff --git a/scene/entity/local_inspectable.gd b/scene/entity/local_inspectable.gd index 5f2254ad..bb5de249 100644 --- a/scene/entity/local_inspectable.gd +++ b/scene/entity/local_inspectable.gd @@ -146,7 +146,7 @@ func _get_property_list() -> Array[Dictionary]: # only show notes_ properties in { "name": "note_key", "type": TYPE_STRING, - "hint": PROPERTY_HINT_ENUM, + "hint": PROPERTY_HINT_ENUM_SUGGESTION, "hint_string": ",".join(filted_titles) } ] diff --git a/scene/entity/npc.gd b/scene/entity/npc.gd index 2f42551f..957fd358 100644 --- a/scene/entity/npc.gd +++ b/scene/entity/npc.gd @@ -1,17 +1,34 @@ +@tool extends AnimatedSprite2D -@export var dialogs := [] +@export var anonymous_title_suffix := "_匿名" +@export var character_name := "" +@export var anonymous := true: + set(val): + anonymous = val + if is_node_ready() and not Engine.is_editor_hint(): + ArchiveManager.archive.npc_anonymous_states[character_name] = val @onready var speaking_animation = %SpeakingAnimationPlayer @onready var speaking_sign = %SpeakingSign2D as Node2D @onready var sign_mark = %Sign as Sign @onready var area2d = %Area2D as Area2D -var dialog_played := false +var dialogue_title := "" +var dialogue_res = preload("res://asset/dialogue/npc.dialogue") + + +func _init() -> void: + if Engine.is_editor_hint(): + return + if character_name and ArchiveManager.archive.npc_anonymous_states.has(character_name): + anonymous = ArchiveManager.archive.npc_anonymous_states[character_name] # Called when the node enters the scene tree for the first time. func _ready() -> void: + if animation: + play() area2d.body_entered.connect(_reset) area2d.body_exited.connect(_on_cancel) sign_mark.interacted.connect(_on_interacted) @@ -19,8 +36,18 @@ func _ready() -> void: func _on_interacted() -> void: - %Sfx.play() - print("npc interacted") + # %Sfx.play() + speaking_animation.play("speaking") + # play dialogue + if dialogue_title: + # 适配匿名效果 + if anonymous and not dialogue_title.ends_with(anonymous_title_suffix): + dialogue_title += anonymous_title_suffix + elif not anonymous and dialogue_title.ends_with(anonymous_title_suffix): + dialogue_title = dialogue_title.substr( + 0, dialogue_title.length() - anonymous_title_suffix.length() + ) + DialogueManager.show_dialogue_balloon(dialogue_res, dialogue_title) func _on_cancel(_body = null): @@ -29,3 +56,27 @@ func _on_cancel(_body = null): func _reset(_body = null): speaking_animation.play("speaking") + + +func _get(property: StringName) -> Variant: + if property == "dialogue_title": + return dialogue_title + return null + + +func _set(property: StringName, value: Variant) -> bool: + if property == "dialogue_title": + dialogue_title = value + return true + return false + + +func _get_property_list() -> Array[Dictionary]: + return [ + { + "name": "dialogue_title", + "type": TYPE_STRING, + "hint": PROPERTY_HINT_ENUM_SUGGESTION, + "hint_string": ",".join(dialogue_res.titles.keys()) + } + ] diff --git a/scene/entity/npc.tscn b/scene/entity/npc.tscn index 4a113ed5..63fc0c3b 100644 --- a/scene/entity/npc.tscn +++ b/scene/entity/npc.tscn @@ -78,15 +78,19 @@ size = Vector2(61, 112.75) [node name="Npc" type="AnimatedSprite2D"] sprite_frames = ExtResource("3_1e8sl") animation = &"c02_张胖子_idle" +frame_progress = 0.311606 script = ExtResource("1_jegr2") +dialogue_title = "" [node name="Sfx" parent="." instance=ExtResource("3_4d53s")] unique_name_in_owner = true [node name="Sign" parent="." instance=ExtResource("4_nokx4")] unique_name_in_owner = true +modulate = Color(1, 1, 1, 0) offset_top = -60.0 offset_bottom = -60.0 +show_sign = false [node name="SpeakingAnimationPlayer" type="AnimationPlayer" parent="."] unique_name_in_owner = true diff --git a/scene/ground/scene/c02/s01_街道.tscn b/scene/ground/scene/c02/s01_街道.tscn index 59fd9ea9..5c3d6cde 100644 --- a/scene/ground/scene/c02/s01_街道.tscn +++ b/scene/ground/scene/c02/s01_街道.tscn @@ -43,6 +43,10 @@ note_key = "c02_s01_menpai" [node name="Ambush" parent="Ground/DeployLayer" index="4" instance=ExtResource("6_vgxa0")] position = Vector2(135, 56) +hook_animation = null +lock_player_on_playing_dialogue = null +hook_dialogue_res = null +hook_dialogue_title = "" [node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] texture = null diff --git a/scene/ground/scene/c02/s02_走道.tscn b/scene/ground/scene/c02/s02_走道.tscn index df4de6d1..ccb17289 100644 --- a/scene/ground/scene/c02/s02_走道.tscn +++ b/scene/ground/scene/c02/s02_走道.tscn @@ -45,7 +45,6 @@ target_portal = "left" [node name="几张卫生宣传画" parent="Ground/DeployLayer" index="2" instance=ExtResource("3_fy0o1")] position = Vector2(275, -30) -dialogue = null editor_filter = "c01" [node name="鼠疫海报" parent="Ground/DeployLayer" index="3" instance=ExtResource("12_0fckv")] @@ -67,7 +66,11 @@ shape = SubResource("RectangleShape2D_0xrg2") [node name="Ambush" parent="Ground/DeployLayer" index="5" instance=ExtResource("6_70vqn")] position = Vector2(502, 56) -hook_cg = "c02_胖子说话" +one_shot = null +freeze_time = null +hook_animation = null +lock_player_on_playing_dialogue = null +hook_dialogue_res = null [node name="HdEntity" parent="Ground/DeployLayer" index="6" node_paths=PackedStringArray("sprite_ref") instance=ExtResource("10_3c313")] position = Vector2(147, 75) diff --git a/scene/ground/scene/c02/s03_院子切换.tscn b/scene/ground/scene/c02/s03_院子切换.tscn index 042a014a..0387149a 100644 --- a/scene/ground/scene/c02/s03_院子切换.tscn +++ b/scene/ground/scene/c02/s03_院子切换.tscn @@ -6,7 +6,6 @@ [ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="3_6x7xl"] [ext_resource type="Texture2D" uid="uid://bb3f72fla7mvs" path="res://asset/art/scene/c02/s03_院子切换/bg_院子1楼(黄昏无人).png" id="3_78bcp"] [ext_resource type="Texture2D" uid="uid://dqsl8rcues8hs" path="res://asset/art/scene/c02/s03_院子切换/n_院子1楼(黄昏无人).png" id="4_nef6w"] -[ext_resource type="PackedScene" uid="uid://wyj4qdjyn4ql" path="res://scene/entity/old/inspectable.tscn" id="5_0xh53"] [ext_resource type="PackedScene" uid="uid://bnf3lkcbpx1ar" path="res://scene/entity/ambush.tscn" id="6_gg4jv"] [ext_resource type="Texture2D" uid="uid://0yip10ue5r4x" path="res://asset/art/scene/c02/s04_院子现实版/fg_楼梯.png" id="7_icddm"] [ext_resource type="PackedScene" uid="uid://cw3q5pvciumil" path="res://scene/entity/interactable.tscn" id="8_vdelk"] @@ -25,6 +24,10 @@ bgm = "" diffuse_texture = ExtResource("3_78bcp") normal_texture = ExtResource("4_nef6w") +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ec3g1"] +resource_local_to_scene = true +size = Vector2(40, 70) + [node name="S03" type="Node2D"] [node name="Ground" parent="." instance=ExtResource("1_lheeb")] @@ -42,18 +45,23 @@ visible = false [node name="Npc" parent="Ground/DeployLayer" index="2" instance=ExtResource("2_r5smg")] position = Vector2(465, 23) +frame_progress = 0.94813 +character_name = "张胖子" +dialogue_title = "张胖子_01" [node name="Note" parent="Ground/DeployLayer" index="3" instance=ExtResource("3_6x7xl")] position = Vector2(268, -36) -[node name="Inspectable" parent="Ground/DeployLayer" index="4" instance=ExtResource("5_0xh53")] -position = Vector2(376, 36) +[node name="Ambush" parent="Ground/DeployLayer" index="4" instance=ExtResource("6_gg4jv")] +position = Vector2(343, 33) +freeze_time = 15.0 +hook_dialogue_res = "c02" +hook_dialogue_title = "c02_s04_张胖子卖肉" -[node name="Ambush" parent="Ground/DeployLayer" index="5" instance=ExtResource("6_gg4jv")] -position = Vector2(567, 28) -hook_cg = "c02_胖子说话" +[node name="CollisionShape2D" parent="Ground/DeployLayer/Ambush/Area2D" index="0"] +shape = SubResource("RectangleShape2D_ec3g1") -[node name="Interactable" parent="Ground/DeployLayer" index="6" instance=ExtResource("8_vdelk")] +[node name="Interactable" parent="Ground/DeployLayer" index="5" instance=ExtResource("8_vdelk")] position = Vector2(1072, 22) collision_mask = 1 @@ -81,3 +89,4 @@ scale = Vector2(1.08, 1.08) color = Color(0.368627, 0.447059, 0.882353, 1) [editable path="Ground"] +[editable path="Ground/DeployLayer/Ambush"] diff --git a/scene/main.gd b/scene/main.gd index 43fec8fa..28be6f77 100644 --- a/scene/main.gd +++ b/scene/main.gd @@ -12,3 +12,4 @@ func _ready() -> void: $UILayer.layer = GlobalConfig.CANVAS_LAYER_UI %ColorRectTop.visible = true %ColorRectBottom.visible = true + diff --git a/scene/main.tscn b/scene/main.tscn index fab6e548..62ca54cf 100644 --- a/scene/main.tscn +++ b/scene/main.tscn @@ -74,7 +74,6 @@ metadata/_edit_use_anchors_ = true [node name="PropHUD" parent="UILayer" instance=ExtResource("4_t7gb2")] scale = Vector2(0.24, 0.24) -item_key = null metadata/_edit_use_anchors_ = true [node name="Journal" parent="." instance=ExtResource("10_durpa")]