Next Run · Mod
Hướng dẫn mod Next Run
Mô tả chi tiết hệ thống mod, cấu trúc file và component. Lưu link này để tra cứu khi tạo và xuất bản mod.
1. Tổng quan
Tài liệu mô tả hệ thống mod trong Next Run: cài đặt, tạo và chia sẻ.
- Đọc phần 2 ít nhất 1 lần để hiểu mod.
- Dùng phần 3 và 4 làm tài liệu tham khảo.
- Xem ví dụ từ game trên Steam Workshop: https://steamcommunity.com/app/1295870/workshop/.
- File game phiên bản 1.1.0: https://clarusvictoria.com/files/next_run_files_examples_1.1.0.zip.
2. Hệ thống mod
Sau khi nhấn Chơi và Tạo game, game quét thư mục Mods. Mỗi thư mục con có modinfo.json là một mod.
2.1. Steam Workshop, cài và xuất bản
Nếu chơi qua Steam, menu Chơi có bảng Mod với các nút:
- Steam Workshop
- Thư mục mod
- Xuất bản
- Hướng dẫn
2.1.1. Steam Workshop
Mở Workshop trong Steam. Đăng ký để tải. Lớn thì mất thời gian. Trạng thái hiển trong Steam.
2.1.2. Thư mục mod
Mở thư mục mod của game.
2.1.3. Xuất bản
Game quét Mods và xuất bản lên Steam Workshop.
- Mod mới: tự tạo steam_id.
- Mod có: cập nhật.
- Nút thay đổi khi đang tải.
- Chỉ xuất khi có thay đổi.
- Sửa modinfo.json không tính là thay đổi.
- Mod xuất bản cho mọi người. Cũng có thể chia sẻ trực tiếp bằng copy thư mục.
2.1.4. Hướng dẫn
Link đến hướng dẫn này.
2.2. File JSON
Dữ liệu và văn bản dùng JSON. Dữ liệu trong ngoặc {}.
Cú pháp JSON:
- https://en.wikipedia.org/wiki/JSON
- https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/JSON
Tham khảo file game.
2.3. Cấu trúc file
Mỗi mod có cấu trúc như game. File thêm hoặc sửa nội dung. JSON sửa từng phần. File khác (png, ogg) thay thế hoàn toàn.
Ví dụ: tạo data/game.json sửa Warrior, chỉ Warrior đổi. Thêm portrait_warrior_front.png thay hình.
Có file bắt buộc và tùy chọn:
- Tên thư mục (bất kỳ, không phải tên mod)
- modinfo.json
- preview.png
- data/
- icons/
- sounds/
- texts/
- tiles/
Xem ví dụ và mod có. Chi tiết bên dưới.
2.3.1. modinfo.json
File metadata mod. Một số dùng cho Steam Workshop.
- title - tên mod, hiển trên Steam.
- version - phiên bản.
- description - mô tả.
- tags - tag để tìm trong Workshop.
- order - thứ tự tải. Mod order lớn ghi đè nhỏ.
- steam_id - tự tạo khi xuất bản.
- created_time - thời gian tạo.
- changed_time - thời gian sửa.
- Có thể thêm trường khác, chỉ dùng nội bộ. Tác giả xác định qua Steam.
2.3.2. preview.png
Hình mod cho Workshop. 256x256 hoặc 512x512. Vuông. PNG trong suốt hoặc JPG.
2.3.3. data
Thư mục data JSON. Sửa hoặc thêm thực thể. Chỉ tạo file và trường cần. Chi tiết ở phần 3.
2.3.4. icons
Thư mục icon. Hầu hết hình trừ GUI và tile. Nhiều kích thước và lớp. PNG trong suốt.
2.3.5. sounds
Thư mục âm thanh và nhạc. Thêm hoặc thay. Định dạng OGG.
2.3.6. texts
Thư mục văn bản bản địa hóa. Mỗi file 1 ngôn ngữ, chuẩn IETF BCP-47. 13 ngôn ngữ: ruRU.json, trTR.json, jaJP.json, koKR.json, zhTW.json, zhCN.json, plPL.json, ptBR.json, itIT.json, esES.json, frFR.json, deDE.json, enUS.json.
2.3.7. tiles
Thư mục tile. PNG trong suốt. Kích thước 256x384. Nhiều lớp: đất, vật, rừng, núi, đường.
2.4. Đồng bộ mod
Mod tự đồng bộ với Workshop mỗi khi chơi.
Nếu bạn là tác giả: không đồng bộ, không ghi đè.
Tạo mod từ mod người khác, trước khi khởi động lại:
- Đổi tên thư mục.
- Xóa trong modinfo.json: author, created_time, steam_id, changed_time.
2.5. Hợp nhất dữ liệu
JSON mod không thay mà hợp nhất.
Thứ tự:
- File gốc là nền.
- Mod xếp chồng theo order.
Mỗi trường xử lý riêng. Ví dụ hideIfZero:true muốn false phải ghi rõ false.
List trong list.json hợp nhất. List đơn giản (RndGoodEvents, RndEvents) thay hoàn toàn.
3. Component
Next Run dùng ECS. Game gồm thực thể (entity). Entity là container component. Chỉ có id. Dữ liệu trong component. Tất cả trong JSON.
Ví dụ JSON:
3.1. Button
Giao diện nút.
- panel = string, panel mặc định. Nút ở trong panel. Xem ví dụ.
- icon = string, tên icon từ thư mục icons, PNG.
- iconType = string, loại nút: btn (thường), btnBig (có giá trị).
- color = string, màu nền: green, superGreen, lightGreen, darkGreen, red, superRed, darkRed, gray, lightGray, darkGray, lightBlue, blue, darkBlue, darkDarkBlue, grayYellow, yellow, pink, cyan, darkCyan, almostBlack, black, orange, darkOrange, lightViolet, purple, chartreuse, num, gameBack, blank, halfTrans, white, base.
- numText1 = double, giá trị.
- numTextAdd = string, phụ giá trị, ví dụ %.
- numText1Type = string, loại giá trị: level, total, duration.
- numCustom = string, giá trị riêng, ví dụ ∞.
- numIcon = string, icon cạnh giá trị: star, coin.
- hotkey = string, phím tắt.
- hide = bool, ẩn nút.
- hideIfZero = bool, ẩn khi Total.now = 0.
- disabled = bool, tắt/bật.
- interactable = bool, tương tác được (mặc định có). Slot không tương tác.
- cantBeDeselect = bool, không bỏ chọn.
- cantBeSelect = bool, không chọn.
- draggable = bool, kéo thả.
- x = double, tọa độ X, cho nút không panel.
- y = double, tọa độ Y.
- upMiniPred = string, kiểm tra hành động. Nếu có: mini icon Nâng cấp.
- craftMiniPred = string, gợi ý Chế tạo.
- raiseMiniPred = string, gợi ý Triệu hồi.
3.2. Tooltip
Nội dung tooltip.
- text = string, tên hiển thị.
- dontShowDuration = bool, ẩn thời lượng.
- hideSources = bool, ẩn nguồn ảnh hưởng.
- hideAsSubjTT = bool, ẩn làm nguồn cho entity khác.
- desc = string, mô tả đầu tooltip.
- desc2 = string, mô tả cuối tooltip.
- redDesc = string, mô tả đỏ cuối.
- totalTextAs = string, thay chữ Tổng.
- ttPos = string, vị trí tooltip: top, left.
3.3. GameClass
Cơ chế lớp nhân vật.
- text = string, tên lớp.
- portrait_back = string, ảnh nền 391x598.
- portrait_front = string, ảnh lớp 411x620, trong suốt.
- figurine = string, avatar bản đồ 149x243.
- doll = string, ảnh đen trắng inventory 460x784.
- bonusSkill1 = string, kỹ năng thưởng 1.
- bonusSkillVal1 = double, giá trị thưởng 1.
- bonusSkill2 = string, kỹ năng thưởng 2.
- bonusSkillVal2 = double, giá trị 2.
- debuffSkill1 = string, kỹ năng phạt 1.
- debuffSkillVal1 = double, giá trị phạt 1.
- debuffSkill2 = string, kỹ năng phạt 2.
- debuffSkillVal2 = double, giá trị phạt 2.
- gold = double, vàng khởi đầu.
- remains = double, xác khởi đầu.
- equip = List(string), trang bị khởi đầu.
- units = string, sinh vật khởi đầu.
- itemName = string, vật phẩm khởi đầu.
- itemNum = double, số lượng.
- learnList = string, danh sách phép/bản vẽ trong list.json.
- learnNum = double, số học từ danh sách.
- lessTime = double, giảm thời gian giữa đợt Địa ngục.
- manaBonus = double, thưởng mana.
- upgradeDexterityBonusMod = double, thưởng nâng cấp từ Nhanh nhẹn.
- skillPointsPerLevel = double, điểm kỹ năng/cấp.
- upgradeManaCostMod = double, hiệu quả nâng phép.
- freeRegion = bool, vùng miễn phí.
- necroBonus = bool, gameplay Necromancer.
- druidBonus = bool, gameplay Druid.
- stances = bool, có thế/hình/lệnh.
- defStance = string, thế mặc định.
- notDemo = bool, không có trong demo.
- notTutorial = bool, có trong Hướng dẫn.
3.4. GameMode
Cơ chế chế độ game.
- text = string, tên chế độ.
- back = string, ảnh nền 391x598.
- moreTime = double, thêm thời gian giữa đợt.
- lessTime = double, giảm thời gian.
- woundChance = double, tỷ lệ thương.
- notDemo = bool, không có demo.
- scenario = string, bản đồ riêng.
- noHellAttacks = bool, không Địa ngục (sandbox).
- savesOnExitOnly = bool, lưu khi thoát.
3.5. Biome
Cơ chế biôm.
- frequency = double, tần suất. 0 = không tạo. Lava luôn là vùng cuối.
- hexBase = string, tile nền cho khu định cư.
- music = string, nhạc biôm.
- hexPatterns = List(string), mẫu vật. Như bộ bài: trộn, rút, hết thì tạo lại. Dùng # ngăn cách.
- mobLevel1..8 = string, sinh vật theo cấp vùng.
3.6. TileAsset
Hình dạng trên bản đồ.
- tileMap = string, lớp: LandTilemap, ObjectTilemap, RoadTilemap.
- rawSprite = string, hình 256x384.
- icon = string, icon trên tilemap.
- buttonIcon = bool, lấy icon từ Button.
- delLevel = double, độ khó xóa.
3.7. Shop
Cơ chế cửa hàng.
- slots = int, số slot.
- type = string, loại hàng trong list.json.
3.8. Item
Cơ chế vật phẩm.
- slot = string, slot trang bị.
- stackable = bool, chồng được.
- upgradable = bool, nâng được.
- upProgress = double, thời gian nâng.
- order = double, thứ tự trong shop.
3.9. Mob
Cơ chế sinh vật.
- hell = bool, địa ngục. Phạt hối lộ. Tham gia đợt. Thưởng xác.
- undead = bool, vong linh. Không hối lộ. Nâng đặc biệt.
- type = string, loại: Warriors, Defenders, Mages, Gatherers, Crafters. Xác định màu, tấn công, loot.
- upMob = string, nâng thành gì.
- upCostName = string, vật liệu nâng.
- upCostNum = double, số lượng (mặc định 1).
3.10. Dungeon
Cơ chế hầm ngục.
- magic = bool, phép. Ảnh hưởng sát thương, loot, addon.
- boss = bool, hầm cuối.
3.11. Ruins
Cơ chế phế tích - tìm vật phẩm.
3.12. Addon
Addon: vật trong ô hầm/phế tích, thay đổi tham số và thưởng.
- skill = string, kỹ năng nhận khi dọn. Random, Strength v.v.
- unit = string, sinh vật thưởng. Random.
- item = string, vật thưởng. Random.
- phyChanceMulti = double, hệ số sát thương vật lý %.
- magChanceMulti = double, hệ số sát thương phép %.
- progressMulti = double, lâu hơn bao nhiêu %.
- dmgMulti = double, hệ số damage %.
3.13. Build
Vật là công trình.
3.14. Center
Vật là khu định cư.
- captureProgress = double, độ khó chiếm.
- upProgress = double, độ khó nâng.
- upCostName1 = string, vật liệu 1.
- upCostNum1 = double, số lượng 1.
- upCostName2 = string, vật liệu 2.
- upCostNum2 = double, số 2.
- upCostName3 = string, vật liệu 3.
- upCostNum3 = double, số 3.
- upProp = string, nâng thành gì.
3.15. Gatherable
Vật khai thác được.
- gather = string, tài nguyên.
- deposit = bool, mỏ. Xây hầm được.
3.16. AlliedForest
Rừng đồng minh cho Druid.
- allyBonus = double, giá trị.
3.17. Graveyard
Nghĩa trang cho Necromancer. Xác ngẫu nhiên.
- now = double, giá trị hiện tại.
- rndMin = double, tối thiểu.
- rndMax = double, tối đa.
- rndCeil = bool, làm tròn lên.
3.18. Pred
Component hành động. Phần lớn trong code.
- action = string, hành động khi thực hiện.
- local = bool, phải cùng ô.
- attackPred = bool, tấn công, tự kích hoạt với phép chiến.
- gatherPred = bool, khai thác, tự với phép khai thác.
- craftPred = bool, chế tạo, tự với phép craft.
- skill = string, kỹ năng dùng.
- longPred = bool, mất thời gian.
- repeat = bool, lặp đến khi dừng.
- noOwner = bool, không cần chọn.
- skipLongTooltip = bool, tooltip đơn giản.
- onlyClass = string, chỉ cho lớp cụ thể.
3.19. Total
Giá trị số, thường là số lượng.
- now = double, giá trị.
- inc = double, tăng/lượt.
- max = double, tối đa.
- min = double, tối thiểu.
- rndMin = double, ngẫu nhiên min.
- rndMax = double, ngẫu nhiên max, thay now.
- rndCeil = bool, làm tròn lên.
- overMax = bool, cho vượt max.
- delIfZero = bool, xóa khi 0.
- numPercent = bool, giá trị là %.
3.20. Level
Cấp entity.
- now = double.
- max = double.
- min = double.
- localLevelPlus = int, cấp địa phương = cấp vùng + giá trị.
3.21. Duration
Thời lượng.
- now, max, min = double.
- max = double.
- min = double.
- delIfZero = bool.
3.22. Mods
Modifier. Tạo thay đổi cho entity khác.
- radius = int, bán kính bản đồ.
- objType = string: Stat, Skill, Prop, Item, ModableVal, PropMod.
- objName = string, tên entity.
- objComp = string: Total, Level.
- objKey = string: now, inc, max.
- modType = string: add, mult, addPerLevel, multPerLevel.
- now = double, giá trị.
- subjTooltipText = string.
- skipPerTooltip = bool.
- skipSubjTooltip = bool.
3.23. ModableVals
Biến toàn cục.
- now = double.
3.24. Slot
Slot inventory.
- name = string, khớp Item.slot.
3.25. Container
Container.
- cells = int.
- cellsPanel = string.
3.26. Tom
Sách phép.
- cast = string, tên phép.
3.27. Cast
Phép thuật.
- mana = double.
- predSkill = string, kích hành động nào.
- notSkills = string, cần hành động.
- attack = double, damage phép.
- gather = double, tăng khai thác.
- craft = double, tăng craft.
- heal = double, hồi.
- newEvent = string, buff.
- teleport = bool.
- explore = double, trinh sát.
3.28. Blueprint
Bản vẽ.
- item = string, vật tạo.
- build = string, công trình.
- costName1 = string, vật liệu 1.
- costNum1 = double.
- costName2 = string.
- costNum2 = double.
- costName3 = string.
- costNum3 = double.
3.29. Cost
Giá, mua bán.
- raw = double, giá gốc.
3.30. Event
Sự kiện.
- uniq = bool, duy nhất.
- rndEvent = bool, ngẫu nhiên.
- nextEvent1 = string.
- nextEvent2 = string.
- castType = string, loại buff.
3.31. Proc
Proc (tỷ lệ).
- addEvent = string.
3.32. ProcMod
Ảnh hưởng proc.
- proc = string.
- chance = double.
- dependsLevel = bool.
3.33. Usable
Dùng 1 lần (thuốc).
- stat = string.
- skill = string.
- nowBonus = double.
- maxBonus = double.
- cure = bool, chữa bệnh.
3.34. Drankable
Uống (hồ, ốc đảo).
3.35. Sphinx
Quest Sphinx. Tự động theo cấp.
3.36. Living_tree
Quest Cây sống. Tự động.
3.37. Vision
Mở rộng tầm nhìn khi vào ô.
- explore = int, bán kính. 1 = thường, 2 = rộng.
3.38. Remains
Xác. Biến thành vong linh.
3.39. Audio_comp
Âm thanh theo loại.
- click = string, nhấn.
- added = string, tạo.
- ambient1..3 = string, môi trường.
- ambient2 = string.
- ambient3 = string.
- process = List(string), âm khi làm.
- waits = List(double), nghỉ giữa.
- finish = string, xong.
- rndProcess = bool, hiệu ứng ngẫu nhiên.
3.40. Childs
Tạo entity con.
- list = List(Entity), con tự tạo.
3.41. Preds
Tạo hành động cho entity.
- list = List(string).
3.42. Equip
Trang bị cho hero.
3.43. Res
Entity là tài nguyên. Tooltip, animation, tổng kết.
3.44. TurnAct
Kiểm tra mỗi tick: Total và Duration.
4. Danh sách
File list.json chứa các danh sách không phải entity hay component. Dùng để tạo nội dung.
4.1. RndGoodEvents
Sự kiện tốt ngẫu nhiên, tạo lúc đầu.
4.2. RndEvents
Sự kiện tốt và xấu ngẫu nhiên, tạo khi chơi.
4.3. Generator_dungeon_addons_physical
Addon cho hầm vật lý.
4.4. Generator_dungeon_addons_magical
Addon cho hầm phép.
4.5. Generator_ruins_addons
Addon cho phế tích.
4.6. Generator_settlement_levels
Cấp vùng -> khu định cư. Ví dụ lvl1:Village.
4.7. Generator_rar_metals
Cấp vùng -> mỏ. Ví dụ lvl2:Deposit_tin.
4.8. Generator_mages
Cấp vùng -> pháp sư gác tháp. Ví dụ lvl3:Priestesses.
4.9. LevelMobs_
Sinh vật theo cấp, được sau giải phóng tù nhân.
4.10. Crafter_start, Lord_start, Mage_start,
Vật khởi đầu cho các lớp, trong GameClass.learnList. Số từ learnNum.
- obj = string, tên vật.
- min = double.
- max = double.
- chance = double, tỷ lệ.
- Có thể tạo danh sách khác cho lớp khác.
4.11. Gold_
Vàng theo cấp vùng. 50% cơ hội. Xem 4.10.
4.12. Loot_-
Loot theo cấp. Cho sinh vật, hầm, phế tích. 50% loot chung, 50% theo loại (4.13). Xem 4.10.
4.13. Warriors_, Defenders_, Mages_, Gatherers_, Crafters_,
Loot theo cấp và loại sinh vật. 50% cho loot riêng. Ví dụ pháp sư rơi sách và gậy. Xem 4.10.
4.14. Shop_, Books_
Danh sách shop theo cấp, ví dụ Books5, Shop6. Xem 4.10. Tháp từ code.
