commit dd53b6f08a9920c52e698c2b185876e19138b70a Author: iisaev Date: Wed Oct 21 15:10:30 2026 +0300 init mod diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..3030c1a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,30 @@ +# Line endings: LF everywhere, on every OS, whatever core.autocrlf says. +* text=auto eol=lf + +# cmd.exe misreads labels and goto in LF batch files, so they stay CRLF. +*.bat text eol=crlf +*.cmd text eol=crlf + +# Binaries: never converted, never diffed as text. +*.png binary +*.jpg binary +*.jpeg binary +*.webp binary +*.svg text +*.ogg binary +*.wav binary +*.mp3 binary +*.ttf binary +*.otf binary +*.woff binary +*.woff2 binary +*.dll binary +*.so binary +*.dylib binary +*.pdb binary +*.exe binary +*.zip binary +*.pck binary +*.moc3 binary +*.res binary +*.scn binary diff --git a/characters/rpg_demo_characters.json b/characters/rpg_demo_characters.json new file mode 100644 index 0000000..1b2f3c6 --- /dev/null +++ b/characters/rpg_demo_characters.json @@ -0,0 +1,52 @@ +{ + "Kind": "character", + "Items": [ + { + "Id": "rpg_hero", + "Name": "rpg_demo/character/hero", + "Image": "characters/village/hero", + "Level": 1, + "Point": 1, + "Health": 24, + "Defence": 0, + "Attack": 6, + "Actions": [ + "physics/attack", + "physics/defence" + ] + }, + { + "Id": "rpg_slime", + "Name": "rpg_demo/character/slime", + "Image": "characters/village/slime", + "Behaviour": "base", + "Level": 1, + "Point": 1, + "Health": 8, + "Defence": 0, + "Attack": 2, + "Exp": 3, + "RecruitmentChance": 0, + "Actions": [ + "physics/attack" + ] + }, + { + "Id": "rpg_wolf", + "Name": "rpg_demo/character/wolf", + "Image": "characters/village/wolf", + "Behaviour": "base", + "Level": 2, + "Point": 1, + "Health": 22, + "Defence": 0, + "Attack": 4, + "Exp": 12, + "RecruitmentChance": 0, + "Actions": [ + "physics/attack", + "physics/defence" + ] + } + ] +} diff --git a/locale/en.properties b/locale/en.properties new file mode 100644 index 0000000..34ce4d0 --- /dev/null +++ b/locale/en.properties @@ -0,0 +1,8 @@ +mod_rpg_demo_game_name = RPG Demo +mod_rpg_demo_game_desc = Content of the RPG demo: a village, the elder's house and a forest with a wolf by the cave. Maps, events and scenarios only. +rpg_demo/map/village = Village by the Grey Forest +rpg_demo/map/elder_house = Elder's house +rpg_demo/map/forest = Grey Forest +rpg_demo/character/hero = Hero +rpg_demo/character/slime = Slime +rpg_demo/character/wolf = Wolf diff --git a/locale/ru.properties b/locale/ru.properties new file mode 100644 index 0000000..18c7567 --- /dev/null +++ b/locale/ru.properties @@ -0,0 +1,8 @@ +mod_rpg_demo_game_name = RPG-демо +mod_rpg_demo_game_desc = Содержимое RPG-демо: деревня, дом старосты и лес с волком у пещеры. Только карты, события и сценарии. +rpg_demo/map/village = Деревня у Серого леса +rpg_demo/map/elder_house = Дом старосты +rpg_demo/map/forest = Серый лес +rpg_demo/character/hero = Герой +rpg_demo/character/slime = Слизень +rpg_demo/character/wolf = Волк diff --git a/locale/scenarios_en.properties b/locale/scenarios_en.properties new file mode 100644 index 0000000..b132815 --- /dev/null +++ b/locale/scenarios_en.properties @@ -0,0 +1,19 @@ +rpg_demo/chest/empty = Empty. You already took everything. +rpg_demo/elder/quest_1 = "So you came. Listen: a wolf has settled by the cave in the forest. Kills goats, howls at night, looks at me funny." +rpg_demo/elder/quest_2 = "Go east, past the pond, along the path. Drive it off, and so be it, I will stop waking you up." +rpg_demo/elder/thanks_1 = "The wolf is gone? Well, well. I did not believe in you, and you went and ruined it." +rpg_demo/elder/thanks_2 = "Off you go. Now you may sleep till noon. Not a minute longer." +rpg_demo/chest/forest = A chest in the forest. Inside: dried mushrooms and someone's lost hope. You take the mushrooms. +rpg_demo/chest/house = In the chest: old socks and a note saying "Don't touch". Too late. +rpg_demo/door/locked = Locked. Behind the door someone is trying very hard to pretend nobody is home. +rpg_demo/merchant/line1 = "The shop is closed. Out of goods, out of conscience. Come back when they bring both." +rpg_demo/slime/line1 = A slime blocks the path and gurgles defiantly. +rpg_demo/sign/village = "East: the Grey Forest. West: also a forest, but we don't go there." +rpg_demo/villager/line1 = "They say there are slimes in the forest. Small ones, but it's insulting when they crawl into your boot." +rpg_demo/wolf/line1 = A wolf sits by the cave. It looks you over the way it looks at the elder's goats. +rpg_demo/wolf/line2 = "Grrr." +rpg_demo/house/enter = The house smells of herbs, wax and, a little, of the elder. +rpg_demo/forest/enter = The Grey Forest. It is quiet the way it is only quiet where someone is being eaten. +rpg_demo/intro/title = The Village by the Grey Forest +rpg_demo/intro/line1 = Morning. The roosters went hoarse before dawn, and the elder has already sent the boy for you three times. +rpg_demo/intro/controls = Walk with WASD or the arrows. Talk, open and read with E or F. diff --git a/locale/scenarios_ru.properties b/locale/scenarios_ru.properties new file mode 100644 index 0000000..30ef3d1 --- /dev/null +++ b/locale/scenarios_ru.properties @@ -0,0 +1,19 @@ +rpg_demo/chest/empty = Пусто. Ты уже всё забрал. +rpg_demo/elder/quest_1 = — Явился. Слушай: у пещеры в лесу поселился волк. Режет коз, воет по ночам, на меня смотрит косо. +rpg_demo/elder/quest_2 = — Иди на восток, мимо пруда, по тропе. Прогони его — и я, так и быть, перестану тебя будить. +rpg_demo/elder/thanks_1 = — Волка нет? Ну надо же. Я в тебя не верил, а ты взял и всё испортил. +rpg_demo/elder/thanks_2 = — Ступай. Теперь можешь спать до полудня. Не дольше. +rpg_demo/chest/forest = Сундук в лесу. Внутри — сухие грибы и чья-то потерянная надежда. Грибы ты берёшь. +rpg_demo/chest/house = В сундуке — старые носки и записка: «Не трогай». Поздно. +rpg_demo/door/locked = Заперто. За дверью кто-то очень старательно делает вид, что его нет. +rpg_demo/merchant/line1 = — Лавка закрыта. Товар закончился, совесть тоже. Приходи, когда привезут и то, и другое. +rpg_demo/slime/line1 = Слизень перегородил тропу и булькает с вызовом. +rpg_demo/sign/village = «На восток — Серый лес. На запад — тоже лес, но мы туда не ходим». +rpg_demo/villager/line1 = — Говорят, в лесу слизни. Мелкие, а обидно, когда в сапог заползают. +rpg_demo/wolf/line1 = У пещеры сидит волк. Он оглядывает тебя, как старостину козу. +rpg_demo/wolf/line2 = — Р-р-р. +rpg_demo/house/enter = В доме пахнет травами, воском и немного — старостой. +rpg_demo/forest/enter = Серый лес. Здесь тихо так, как бывает тихо только там, где кого-то едят. +rpg_demo/intro/title = Деревня у Серого леса +rpg_demo/intro/line1 = Утро. Петухи охрипли ещё до рассвета, а староста уже трижды присылал за тобой мальчишку. +rpg_demo/intro/controls = Ходить — WASD или стрелки. Говорить, открывать, читать — E или F. diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..e48a6fc --- /dev/null +++ b/manifest.json @@ -0,0 +1,9 @@ +{ + "id": "rpg_demo_game", + "name": "RPG Demo", + "version": "1.0.0", + "author": "ct", + "description": "Content of the RPG demo (collection rpg_demo): a village, the elder's house and a forest with a wolf at the cave, made of rpg_map files over the village_pack tileset. Shows teleports, talking NPCs, events that change with story flags, chests, a map monster with a win flag and random encounters in the forest. Only data and scenarios, no C#.", + "category": "story", + "depends": ["rpg>=1", "village_pack>=1", "characters_base>=1", "dialog_base>=1"] +} diff --git a/maps/rpg_elder_house.json b/maps/rpg_elder_house.json new file mode 100644 index 0000000..9629a97 --- /dev/null +++ b/maps/rpg_elder_house.json @@ -0,0 +1,105 @@ +{ + "Kind": "rpg_map", + "Items": [ + { + "Id": "rpg_elder_house", + "Name": "rpg_demo/map/elder_house", + "Tileset": "village", + "Width": 12, + "Height": 10, + "Zoom": 2, + "Layers": { + "Back": [ + "7 7 7 7 7 7 7 7 7 7 7 7", + "7 7 7 7 7 7 7 7 7 7 7 7", + "7 7 7 7 7 7 7 7 7 7 7 7", + "7 7 7 7 7 7 7 7 7 7 7 7", + "7 7 7 7 6 6 6 6 7 7 7 7", + "7 7 7 7 6 6 6 6 7 7 7 7", + "7 7 7 7 6 6 6 6 7 7 7 7", + "7 7 7 7 7 7 7 7 7 7 7 7", + "7 7 7 7 7 7 7 7 7 7 7 7", + "7 7 7 7 7 7 7 7 7 7 7 7" + ], + "Main": [ + "16 16 16 16 16 16 16 16 16 16 16 16", + "16 16 16 17 16 16 16 16 17 16 16 16", + "16 31 31 . . . . . . . 31 16", + "16 . . . . . . . . . . 16", + "16 . . . . . . . . . . 16", + "16 . . . . . . . . . . 16", + "16 . . . . . . . . . . 16", + "16 . . . . . . . . . . 16", + "16 . . . . . . . . . . 16", + "16 16 16 16 16 16 18 16 16 16 16 16" + ], + "Front": [ + ". . . . . . . . . . . .", + ". . . . . . . . . . . .", + ". . . . . . . . . . . .", + ". . . . . . . . . . . .", + ". . . . . . . . . . . .", + ". . . . . . . . . . . .", + ". . . . . . . . . . . .", + ". . . . . . . . . . . .", + ". . . . . . . . . . . .", + ". . . . . . . . . . . ." + ] + }, + "Collision": [], + "Spawn": { + "X": 6, + "Y": 8, + "Dir": "Up" + }, + "Events": [ + { + "Id": "exit", + "X": 6, + "Y": 9, + "Trigger": "Touch", + "Teleport": { + "Map": "rpg_village", + "X": 6, + "Y": 7, + "Dir": "Down" + } + }, + { + "Id": "elder_quest", + "X": 6, + "Y": 3, + "Sprite": "village/elder", + "Dir": "Down", + "Scenario": "rpg_demo/events/elder_quest", + "Condition": "rpg_wolf_dead != 1" + }, + { + "Id": "elder_thanks", + "X": 6, + "Y": 3, + "Sprite": "village/elder", + "Dir": "Down", + "Scenario": "rpg_demo/events/elder_thanks", + "Condition": "rpg_wolf_dead == 1" + }, + { + "Id": "chest", + "X": 9, + "Y": 7, + "Tile": 14, + "Scenario": "rpg_demo/events/house_chest", + "Condition": "rpg_house_chest != 1" + }, + { + "Id": "chest_open", + "X": 9, + "Y": 7, + "Tile": 15, + "Scenario": "rpg_demo/events/chest_empty", + "Condition": "rpg_house_chest == 1" + } + ] + } + ] +} diff --git a/maps/rpg_forest.json b/maps/rpg_forest.json new file mode 100644 index 0000000..2a519cf --- /dev/null +++ b/maps/rpg_forest.json @@ -0,0 +1,154 @@ +{ + "Kind": "rpg_map", + "Items": [ + { + "Id": "rpg_forest", + "Name": "rpg_demo/map/forest", + "Tileset": "village", + "Width": 28, + "Height": 18, + "Zoom": 2, + "Layers": { + "Back": [ + "24 24 24 24 24 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 26 24 24", + "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", + "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", + "24 24 24 26 24 24 24 24 24 24 24 24 3 3 3 3 3 24 24 24 24 24 24 24 24 24 24 24", + "24 26 24 24 26 24 24 24 24 24 24 24 3 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24", + "24 26 24 24 24 24 24 24 24 24 24 24 3 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", + "24 24 24 24 24 24 24 24 24 24 24 24 3 24 24 24 26 24 24 24 24 24 24 24 24 24 24 24", + "24 24 24 24 24 24 24 24 24 24 24 24 3 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24", + " 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3", + "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", + "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 26 24 24 24 24 24", + "24 24 26 24 24 24 24 24 24 24 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", + "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", + "24 24 24 24 24 24 24 24 24 24 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", + "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", + "24 24 26 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", + "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24", + "24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24" + ], + "Main": [ + " . . . . . . . . . . . . . . . . . . . . . . . . . . . .", + " 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8", + " 8 . . . . . . . . . . . . . . . . . . . . . . . . . . 8", + " 8 . . . . . . 8 . . . . . . . . . . . . . . 11 . . . . 8", + " 8 . . 8 . . . . . . . . . . . . . . . . . . . . . . . 8", + " 8 . . . . . . . . 25 . . . . . . . . . . . 8 . . . . . 8", + " 8 . . . . 8 . . . . . . . . 8 . . . . . . . . . 11 11 11 8", + " 8 . . . . . . . . . . . . . . . . 25 . . . . . . 11 11 11 8", + " . . . . . . . . . . . . . . . . . . . . . . . . . . 27 8", + " 8 . . . . . . . . . . . . . . . . . . . . . . . 11 11 11 8", + " 8 . . . . . 8 . . . . . . . . 11 . . . 8 . . . . 11 11 11 8", + " 8 . . . . . . . . . 8 . . . . . . . . . . . . . . . . 8", + " 8 . . . 8 . . . . . . . . . . . 8 . . . . . . 8 . . . 8", + " 8 . . . . . . . . . . . . . . . . . . . 25 . . . . . . 8", + " 8 . 25 . . . . . 8 . . . . . . . . . . . . . . . . . . 8", + " 8 . . . . . . . . . . . . . . . . . 8 . . . . . . 8 . 8", + " 8 . . . . . . . . . . . . . . . . . . . . . . . . . . 8", + " 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8" + ], + "Front": [ + " 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . 9 . . . . . . . . . . . . . . . . . . . 9", + " 9 . . 9 . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . 9 . . . . . 9", + " 9 . . . . 9 . . . . . . . . 9 . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . 22 22 . . 9 . . . . . . . . . . . . 9 . . . . . . . 9", + " 9 . . . . . . . . . 9 . . . . . . . . . . . . . . . . 9", + " 9 . . . 9 . . . . . . . . . . . 9 . . . . . . 9 . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . 9 . . 22 22 22 . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . 9 . . . . . . 9 . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9", + " . . . . . . . . . . . . . . . . . . . . . . . . . . . ." + ] + }, + "Collision": [ + "............................", + "............................", + "............................", + "............................", + "............................", + "............................", + "............................", + "............................", + "..........................#.", + "............................", + "............................", + "............................", + "............................", + "............................", + "............................", + "............................", + "............................", + "............................" + ], + "Spawn": { + "X": 1, + "Y": 8, + "Dir": "Right" + }, + "Events": [ + { + "Id": "to_village", + "X": 0, + "Y": 8, + "Trigger": "Touch", + "Teleport": { + "Map": "rpg_village", + "X": 30, + "Y": 9, + "Dir": "Left" + } + }, + { + "Id": "wolf_boss", + "X": 25, + "Y": 8, + "Sprite": "village/wolf", + "Dir": "Left", + "Scenario": "rpg_demo/events/wolf_boss", + "Condition": "rpg_wolf_dead != 1" + }, + { + "Id": "chest", + "X": 16, + "Y": 3, + "Tile": 14, + "Scenario": "rpg_demo/events/forest_chest", + "Condition": "rpg_forest_chest != 1" + }, + { + "Id": "chest_open", + "X": 16, + "Y": 3, + "Tile": 15, + "Scenario": "rpg_demo/events/chest_empty", + "Condition": "rpg_forest_chest == 1" + }, + { + "Id": "slime", + "X": 10, + "Y": 8, + "Sprite": "village/slime", + "Scenario": "rpg_demo/events/slime", + "Condition": "rpg_path_slime != 1" + } + ], + "Encounters": { + "Steps": 28, + "Groups": [ + "rpg_slime", + "rpg_slime,rpg_slime" + ] + } + } + ] +} diff --git a/maps/rpg_village.json b/maps/rpg_village.json new file mode 100644 index 0000000..95c0baa --- /dev/null +++ b/maps/rpg_village.json @@ -0,0 +1,157 @@ +{ + "Kind": "rpg_map", + "Items": [ + { + "Id": "rpg_village", + "Name": "rpg_demo/map/village", + "Tileset": "village", + "Width": 32, + "Height": 18, + "Zoom": 2, + "Layers": { + "Back": [ + " 1 0 0 0 0 0 0 0 1 2 0 0 0 2 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 0 0", + " 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 2 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0", + " 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 1 0 0 0 0 0 0 0 0 1 2 2 0 0", + " 1 0 0 1 1 0 1 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 2 2 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 1 0 0 0 0 0 0", + " 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0", + " 0 0 0 0 0 0 3 0 0 0 1 6 6 6 6 6 6 6 6 6 0 3 0 0 1 0 0 0 0 0 0 0", + " 0 2 0 1 1 0 3 0 0 0 1 6 6 6 6 6 6 6 6 6 0 3 1 0 2 2 0 0 0 0 0 1", + " 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3", + " 0 2 0 1 0 1 1 0 0 0 0 6 6 6 6 6 6 6 6 6 0 0 1 0 0 0 0 1 0 2 0 0", + " 0 0 0 0 0 1 0 1 0 0 0 6 6 6 6 6 6 6 6 6 0 2 0 0 0 1 0 1 1 0 0 0", + " 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 2 1 0 30 30 30 30 30 30 30 0 0", + " 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 3 1 0 2 0 0 0 0 5 5 5 5 5 5 5 0 0", + " 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 3 2 0 0 2 0 0 0 5 5 5 5 5 5 5 0 0", + " 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 3 1 0 0 0 0 0 0 5 5 5 5 5 5 5 0 0", + " 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 2 0 0 0 5 5 5 5 5 5 5 0 0", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 0" + ], + "Main": [ + " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", + " 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8", + " 8 . . . 19 19 19 19 19 19 . . . . . . . . . 19 19 19 19 19 19 . . . . . . 8", + " 8 . . . 19 19 19 19 19 19 . . . . . . . . . 19 19 19 19 19 19 . . . . . . 8", + " 8 . . . 20 20 20 20 20 20 . . . . . . . . . 20 20 20 20 20 20 . . 10 . . . 8", + " 8 . . . 16 17 16 16 17 16 . . . . . . . . . 16 17 16 16 17 16 . . . . . . 8", + " 8 . . . 16 16 18 16 16 16 . . . . . . . . . 16 16 18 16 16 16 . . . 10 . . 8", + " 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8", + " 8 . . . . . . . . . . . 28 . . . . . 28 . . . . . . . . . . . . 8", + " 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", + " 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8", + " 8 . . . . . . . . 10 . . . . . . . . . 31 31 . . . . . . . . . . 8", + " 8 . . . . . . . . . . . . . 23 . . . . . . . . . . . . . . . . 8", + " 8 . 12 12 12 12 12 12 12 . . . . . . . . . . . . . . . . . . . . . . 8", + " 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8", + " 8 . . 10 . . . . . . 10 . . . . . . . . . . . . . . . . . . . . 8", + " 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8", + " 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 . 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8" + ], + "Front": [ + " 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . 29 . . . . . 29 . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9", + " 9 . . . . . . . . . . . . . . . . . . . 22 . . . . . . . . . . 9", + " 9 9 9 9 22 22 9 9 9 9 9 9 9 9 9 . 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9", + " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ." + ] + }, + "Collision": [ + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "................................", + "...............#................" + ], + "Spawn": { + "X": 15, + "Y": 14, + "Dir": "Up" + }, + "Events": [ + { + "Id": "door_elder", + "X": 6, + "Y": 6, + "Trigger": "Touch", + "Teleport": { + "Map": "rpg_elder_house", + "X": 6, + "Y": 8, + "Dir": "Up" + } + }, + { + "Id": "door_merchant", + "X": 21, + "Y": 6, + "Trigger": "Action", + "Solid": true, + "Scenario": "rpg_demo/events/locked_door" + }, + { + "Id": "to_forest", + "X": 31, + "Y": 9, + "Trigger": "Touch", + "Teleport": { + "Map": "rpg_forest", + "X": 1, + "Y": 8, + "Dir": "Right" + } + }, + { + "Id": "sign", + "X": 16, + "Y": 11, + "Tile": 13, + "Scenario": "rpg_demo/events/village_sign" + }, + { + "Id": "villager", + "X": 9, + "Y": 10, + "Sprite": "village/villager", + "Dir": "Down", + "Scenario": "rpg_demo/events/villager" + }, + { + "Id": "merchant", + "X": 22, + "Y": 8, + "Sprite": "village/merchant", + "Dir": "Left", + "Scenario": "rpg_demo/events/merchant" + } + ] + } + ] +} diff --git a/mod.png b/mod.png new file mode 100644 index 0000000..335c077 Binary files /dev/null and b/mod.png differ diff --git a/scenarios/rpg_demo/events/chest_empty.scenario b/scenarios/rpg_demo/events/chest_empty.scenario new file mode 100644 index 0000000..ad75d6c --- /dev/null +++ b/scenarios/rpg_demo/events/chest_empty.scenario @@ -0,0 +1,2 @@ +ptext "Пусто. Ты уже всё забрал." key=rpg_demo/chest/empty +end diff --git a/scenarios/rpg_demo/events/elder_quest.scenario b/scenarios/rpg_demo/events/elder_quest.scenario new file mode 100644 index 0000000..246932c --- /dev/null +++ b/scenarios/rpg_demo/events/elder_quest.scenario @@ -0,0 +1,4 @@ +text "— Явился. Слушай: у пещеры в лесу поселился волк. Режет коз, воет по ночам, на меня смотрит косо." key=rpg_demo/elder/quest_1 +text "— Иди на восток, мимо пруда, по тропе. Прогони его — и я, так и быть, перестану тебя будить." key=rpg_demo/elder/quest_2 +flag rpg_quest_taken 1 +end diff --git a/scenarios/rpg_demo/events/elder_thanks.scenario b/scenarios/rpg_demo/events/elder_thanks.scenario new file mode 100644 index 0000000..3796e17 --- /dev/null +++ b/scenarios/rpg_demo/events/elder_thanks.scenario @@ -0,0 +1,3 @@ +text "— Волка нет? Ну надо же. Я в тебя не верил, а ты взял и всё испортил." key=rpg_demo/elder/thanks_1 +text "— Ступай. Теперь можешь спать до полудня. Не дольше." key=rpg_demo/elder/thanks_2 +end diff --git a/scenarios/rpg_demo/events/forest_chest.scenario b/scenarios/rpg_demo/events/forest_chest.scenario new file mode 100644 index 0000000..4b57866 --- /dev/null +++ b/scenarios/rpg_demo/events/forest_chest.scenario @@ -0,0 +1,3 @@ +ptext "Сундук в лесу. Внутри — сухие грибы и чья-то потерянная надежда. Грибы ты берёшь." key=rpg_demo/chest/forest +flag rpg_forest_chest 1 +end diff --git a/scenarios/rpg_demo/events/house_chest.scenario b/scenarios/rpg_demo/events/house_chest.scenario new file mode 100644 index 0000000..c046447 --- /dev/null +++ b/scenarios/rpg_demo/events/house_chest.scenario @@ -0,0 +1,3 @@ +ptext "В сундуке — старые носки и записка: «Не трогай». Поздно." key=rpg_demo/chest/house +flag rpg_house_chest 1 +end diff --git a/scenarios/rpg_demo/events/locked_door.scenario b/scenarios/rpg_demo/events/locked_door.scenario new file mode 100644 index 0000000..6f1bd3c --- /dev/null +++ b/scenarios/rpg_demo/events/locked_door.scenario @@ -0,0 +1,2 @@ +ptext "Заперто. За дверью кто-то очень старательно делает вид, что его нет." key=rpg_demo/door/locked +end diff --git a/scenarios/rpg_demo/events/merchant.scenario b/scenarios/rpg_demo/events/merchant.scenario new file mode 100644 index 0000000..eccfec4 --- /dev/null +++ b/scenarios/rpg_demo/events/merchant.scenario @@ -0,0 +1,2 @@ +text "— Лавка закрыта. Товар закончился, совесть тоже. Приходи, когда привезут и то, и другое." key=rpg_demo/merchant/line1 +end diff --git a/scenarios/rpg_demo/events/slime.scenario b/scenarios/rpg_demo/events/slime.scenario new file mode 100644 index 0000000..db5be01 --- /dev/null +++ b/scenarios/rpg_demo/events/slime.scenario @@ -0,0 +1,3 @@ +ptext "Слизень перегородил тропу и булькает с вызовом." key=rpg_demo/slime/line1 +action rpg.battle enemies=rpg_slime win_flag=rpg_path_slime +end diff --git a/scenarios/rpg_demo/events/village_sign.scenario b/scenarios/rpg_demo/events/village_sign.scenario new file mode 100644 index 0000000..5098fff --- /dev/null +++ b/scenarios/rpg_demo/events/village_sign.scenario @@ -0,0 +1,2 @@ +ptext "«На восток — Серый лес. На запад — тоже лес, но мы туда не ходим»." key=rpg_demo/sign/village +end diff --git a/scenarios/rpg_demo/events/villager.scenario b/scenarios/rpg_demo/events/villager.scenario new file mode 100644 index 0000000..3a82c7d --- /dev/null +++ b/scenarios/rpg_demo/events/villager.scenario @@ -0,0 +1,2 @@ +text "— Говорят, в лесу слизни. Мелкие, а обидно, когда в сапог заползают." key=rpg_demo/villager/line1 +end diff --git a/scenarios/rpg_demo/events/wolf_boss.scenario b/scenarios/rpg_demo/events/wolf_boss.scenario new file mode 100644 index 0000000..b0b198e --- /dev/null +++ b/scenarios/rpg_demo/events/wolf_boss.scenario @@ -0,0 +1,4 @@ +ptext "У пещеры сидит волк. Он оглядывает тебя, как старостину козу." key=rpg_demo/wolf/line1 +text "— Р-р-р." key=rpg_demo/wolf/line2 +action rpg.battle enemies=rpg_wolf,rpg_slime win_flag=rpg_wolf_dead +end diff --git a/scenarios/rpg_demo/rpg_elder_house_enter.scenario b/scenarios/rpg_demo/rpg_elder_house_enter.scenario new file mode 100644 index 0000000..2ad74c2 --- /dev/null +++ b/scenarios/rpg_demo/rpg_elder_house_enter.scenario @@ -0,0 +1,7 @@ +scene: rpg_elder_house +priority: 10 +is_one_run: true +save_allowed: true +--- +ptext "В доме пахнет травами, воском и немного — старостой." key=rpg_demo/house/enter +end diff --git a/scenarios/rpg_demo/rpg_forest_enter.scenario b/scenarios/rpg_demo/rpg_forest_enter.scenario new file mode 100644 index 0000000..43495bd --- /dev/null +++ b/scenarios/rpg_demo/rpg_forest_enter.scenario @@ -0,0 +1,7 @@ +scene: rpg_forest +priority: 10 +is_one_run: true +save_allowed: true +--- +ptext "Серый лес. Здесь тихо так, как бывает тихо только там, где кого-то едят." key=rpg_demo/forest/enter +end diff --git a/scenarios/rpg_demo/rpg_village_intro.scenario b/scenarios/rpg_demo/rpg_village_intro.scenario new file mode 100644 index 0000000..24f1fc0 --- /dev/null +++ b/scenarios/rpg_demo/rpg_village_intro.scenario @@ -0,0 +1,11 @@ +scene: rpg_village +priority: 10 +is_one_run: true +save_allowed: true +--- +# A new game: the hero joins the party here, the elder's quest starts in his house. +action party.add id=rpg_hero +title "Деревня у Серого леса" key=rpg_demo/intro/title +ptext "Утро. Петухи охрипли ещё до рассвета, а староста уже трижды присылал за тобой мальчишку." key=rpg_demo/intro/line1 +ptext "Ходить — WASD или стрелки. Говорить, открывать, читать — E или F." key=rpg_demo/intro/controls +end diff --git a/scenes/rpg_elder_house.json b/scenes/rpg_elder_house.json new file mode 100644 index 0000000..633e6f2 --- /dev/null +++ b/scenes/rpg_elder_house.json @@ -0,0 +1,5 @@ +{ + "name": "rpg_elder_house", + "defaultBackground": "village/meadow", + "defaultAmbient": "" +} diff --git a/scenes/rpg_forest.json b/scenes/rpg_forest.json new file mode 100644 index 0000000..3fc2e37 --- /dev/null +++ b/scenes/rpg_forest.json @@ -0,0 +1,5 @@ +{ + "name": "rpg_forest", + "defaultBackground": "village/forest", + "defaultAmbient": "" +} diff --git a/scenes/rpg_village.json b/scenes/rpg_village.json new file mode 100644 index 0000000..67b89f8 --- /dev/null +++ b/scenes/rpg_village.json @@ -0,0 +1,5 @@ +{ + "name": "rpg_village", + "defaultBackground": "village/meadow", + "defaultAmbient": "" +}